Nodejs - 无状态地区分独特的设备
Nodejs - differentiating unique devices statelessly
你好!假设我们正在尝试区分联系我们的节点 http 服务器的独特设备:
require('http').createServer((req, res) => {
let uniqueDeviceId = getUniqueDeviceId(req);
res.end(`Our unique id for you is "${uniqueDeviceId}"!`);
}).listen(80, '<my public ip>', 511);
我正在研究 getUniqueDeviceId
:
的实现
let getUniqueDeviceId = ({ connection }) => `${connection.remoteAddress}:${connection.remotePort}`;
我了解 HTTP 架构旨在防止未经同意识别特定设备。我知道要正确识别设备,必须使用登录机制。因此我知道我的 getUniqueDeviceId
实现一定有缺点和失败案例(但我不知道它们是什么)。
在什么情况下这个实现会失败?
在充满 IPv4 地址的世界中,它会失败,因为 public IP 地址在本地网络之间共享。查看网络地址转换 (NAT) 的工作原理。例如,如果您家中有一个 WiFi 路由器,并且您有一定数量的设备通过该路由器连接到互联网,它们将具有相同的 public IP。部分这样做是为了减少 IPv4 地址消耗。总共只有 4,294,967,296 台,在那个时代,人们根本想不到世界上会有如此多的 public 互联网设备。那就是我们正在慢慢转向 IPv6,其容量 多 大。
在您的特定情况下,来自相同 IP 地址的不同设备对您的应用来说看起来是一样的。此外,如果设备 A 从网络 N 切换到网络 M,您的应用将无法识别它是同一台设备 A,因为它将具有不同的 public IP。
此外,请记住,当客户端连接到您的网络服务器时,远程端口在 0 到 65535 之间是随机的。服务器侦听的端口是静态的,但客户端将通过其与您建立连接的端口仅在连接初始化期间在底层 OS.
的帮助下建立
你好!假设我们正在尝试区分联系我们的节点 http 服务器的独特设备:
require('http').createServer((req, res) => {
let uniqueDeviceId = getUniqueDeviceId(req);
res.end(`Our unique id for you is "${uniqueDeviceId}"!`);
}).listen(80, '<my public ip>', 511);
我正在研究 getUniqueDeviceId
:
let getUniqueDeviceId = ({ connection }) => `${connection.remoteAddress}:${connection.remotePort}`;
我了解 HTTP 架构旨在防止未经同意识别特定设备。我知道要正确识别设备,必须使用登录机制。因此我知道我的 getUniqueDeviceId
实现一定有缺点和失败案例(但我不知道它们是什么)。
在什么情况下这个实现会失败?
在充满 IPv4 地址的世界中,它会失败,因为 public IP 地址在本地网络之间共享。查看网络地址转换 (NAT) 的工作原理。例如,如果您家中有一个 WiFi 路由器,并且您有一定数量的设备通过该路由器连接到互联网,它们将具有相同的 public IP。部分这样做是为了减少 IPv4 地址消耗。总共只有 4,294,967,296 台,在那个时代,人们根本想不到世界上会有如此多的 public 互联网设备。那就是我们正在慢慢转向 IPv6,其容量 多 大。
在您的特定情况下,来自相同 IP 地址的不同设备对您的应用来说看起来是一样的。此外,如果设备 A 从网络 N 切换到网络 M,您的应用将无法识别它是同一台设备 A,因为它将具有不同的 public IP。
此外,请记住,当客户端连接到您的网络服务器时,远程端口在 0 到 65535 之间是随机的。服务器侦听的端口是静态的,但客户端将通过其与您建立连接的端口仅在连接初始化期间在底层 OS.
的帮助下建立