我去了网站http://www.whatismyip.com。它显示的 IP 不是我的系统的 IP,还显示了代理服务器的 IP 地址。所以我假设 nat 路由器为我的系统提供了一个公共 IP。
但是当我从同一局域网中的另一台电脑访问同一站点时。它再次显示了相同的 IP 地址。
所以一定是超载nat 对吧?但是重载 nat 会为您的机器分配一个唯一的端口号(因为该局域网中的所有机器的 IP 地址都是相同的)。但是http://www.whatismyip.com不显示端口号。为什么会这样?
答案1
但是whatismyip.com没有显示端口号。为什么会这样?
为每个唯一连接分配一个唯一端口,而不是为 NAT 后面的每个主机分配一个唯一端口。
NAT 不仅必须能够确定将数据包返回到哪个 IP 地址,还必须能够确定返回到哪个端口。
NAT 表必须包含更多信息才能在两个方向上重写数据包
- 目标 IP
- 目的端口
- 外部源 IP(由 NAT 分配)
- 外部源端口(由 NAT 分配)
- 内部源 IP
- 内部源端口
当回复从外部主机返回时,NAT 将根据分配给连接的外部源 IP 和端口查找正确的内部源 IP 和端口。
NAT 后面的实际主机使用的端口与 NAT 选择和使用的端口无关。
答案2
所以一定是 nat 超载了,对吧?但是 nat 超载会为您的机器分配一个唯一的端口号(因为该局域网中的所有机器的 ip 地址都相同)。但是http://www.whatismyip.com不显示端口号。为什么会这样?
很简单。因为http://www.whatismyip.com不跟踪端口。它会将通信发送回原始通信进入的出站端口,而您的防火墙会管理该 NAT。我相信http://www.whatismyip.com如果开发人员愿意,可以告诉应用程序显示端口,但他们没有将其作为一项功能实现。