Sor*_*ary 11 networking router nat port
我知道 NAT 表。我只想知道如果私有局域网中的两个客户端想要在同一个端口上下载完全相同的资源会发生什么?换句话说,当一个数据包来自服务器时,路由器如何决定哪个客户端应该得到这个数据包?
如果我没记错的话,来自服务器的传入数据包具有路由器的目标 IP 地址,该地址是公共的并且两者都相同,并且目标的端口号在这种情况下也恰好相同。
路由器或服务器中是否有任何机制可以检测到这一点?或者这种行为一开始是可能的吗?
我搜索这样的问题这样,这是有道理的,错误加薪,因为端口忙,但我问两个独立的系统。
更新:从评论中我意识到我不够清楚,所以让我用一个例子再说一遍:
我只关心设备的“源”端口。假设我有两台笔记本电脑(192.168.2.10
和192.168.2.11
),它们都从互联网上的同一台服务器下载相同的文件。它们每个都有一个操作系统,它生成一个随机端口,因此源 IP 和源端口将类似于:192.168.2.10:6321
和192.168.2.11:7132
。我认为在 NAT 中,路由器会设置它的(公共)IP 地址以及来自笔记本电脑的端口,所以如果家用路由器的公共 IP 地址是65.82.23.32
,这两个包将分别获得这些源 IP 和源端口 :65.82.23.32:6321
和65.82.23.32:7132
。
现在,当响应返回时,路由器可以从端口号中找出哪个数据包用于哪个笔记本电脑,对吗?到目前为止,一切都很好。但是,如果两台笔记本电脑意外或有意地生成完全相同的源端口,会发生什么情况?例如:192.168.2.10:6000
和192.168.2.11:6000
。现在路由器会像以前一样将它的公共 IP 地址设置为源 IP 地址,但是现在如果它尝试使用这些端口号,这些包将具有完全相同的源 IP 和源端口号,例如 :65.82.23.32:6000
和65.82.23.32:6000
。
这就是我感到困惑的地方,当响应回来时,路由器如何决定哪个数据包用于哪个笔记本电脑?
在@mfinni 的回答之后,我注意到这不是 PAT 的工作方式!NAT 设备(此处为路由器)将为每台笔记本电脑分配唯一端口(私有 IP 地址),然后使用这些唯一端口(例如7777
和7778
)发送数据包。因此,当反应回来,很显然,这包是针对笔记本电脑从端口,那么路由器将这些转换65.82.23.32:7777
,65.82.23.32:7778
到- > 192.168.2.10:6000
,192.168.2.11:6000
分别。
jca*_*ron 43
TCP 连接(它是 HTTP 和许多其他协议的基础)由 4 个参数唯一地(在给定的时间点)定义:
即使您从同一台计算机同时发出两次相同的请求,即使两个 IP 地址相同且目标端口相同,源端口也会不同。
同样,如果您有来自两个设备的两个请求通过同一个 NAT 设备,则 NAT 设备将使用不同的源端口。根据设备的不同,它可能会保留原始源端口(如果存在冲突,则仅更改一个),或者始终独立于原始源端口分配一个新源端口。
然后,NAT 设备将为每个连接在其转换表中保留一个映射,该映射表明外部连接(外部 IP、外部源端口、目标 IP、目标端口)映射到内部连接(内部主机 IP、内部主机源端口、目标IP,目的端口)。
mfi*_*nni 11
NAT 表知道每个客户端上的源端口是不同的,所以它不会意外地将错误的数据包发送到错误的内部客户端。NAT 设备也分配不同的出站端口,不同内部客户端之间的出站端口也不相同。
当您提及时,NAT
您可能实际上指的是NAPT
. 这会更改 NAT 设备中的源端口(至少在需要时)。因此,源端口将发生变化。
例如 iptables
MASQUERADE
在这种情况下进行 NAT 时,还需要“连接跟踪”,它只是跟踪哪个“外部端口”与哪个“内部客户端和端口”相关。在 iptables 中你会经常看到RELATED,ESTABLISHED
使用的规则。您还会发现,如果重新启动执行 NAPT 的路由器,它将断开所有连接。而没有任何 NAT 的路由器通常只会恢复任何连接。(假设它在客户端超时之前完成重新启动)
小智 5
路由器不使用与膝上型电脑在其对 WAN 的传出请求中生成的源端口号相同的源端口号,而是生成自己唯一的源端口号。路由器中的 NAT 表将 notebook1:6000 转换为 publicip:N,将 notebook2:6000 转换为 publicip:M。然后,它知道将流量从 Internet 到达的端口路由到何处。