如何确定HTTP的源端口?NAT中是否有碰撞?

Ram*_*hum 15 router protocols http nat

我知道,当发出HTTP请求时,数据包从客户端上看似随机的高编号端口(例如4575)发送到服务器上的端口80.然后服务器将回复发送到相同的高编号端口,路由器知道将其路由到客户端计算机,并且一切都已完成.

我的问题是:如何确定返回端口(本例中为4575)?是随机的吗?如果是这样,在什么范围内?对它有任何限制吗?例如,如果LAN中的两台计算机将具有相同源端口的HTTP请求发送到同一网站,会发生什么?路由器如何知道路由到哪台计算机?或许这种情况很罕见,没有人愿意为此辩护?

Bra*_*rad 14

NAT将通过它自己的内部方式决定/确定NAT连接/会话的出站端口.意思是,它会根据NAT的实现而有所不同.这意味着任何回复都将返回到同一个出站端口.

至于你的问题:

例如,如果LAN中的两台计算机将具有相同源端口的HTTP请求发送到同一网站,会发生什么?

它将为每个端口分配不同的出站端口.因此,它可以区分它收到的两个响应.NAT将创建/维护已转换端口的映射,为新会话创建新的出站端口号.因此,即使有两个不同的"内部"会话,来自两台不同的机器,在同一个端口号上,它也会映射到传出端的两个不同的端口号.因此,当数据包重新进入相​​应的端口时,它将知道如何将它们转换回内部LAN上的正确地址/端口.

图:

在此输入图像描述

  • 是 - 然而,NAT然后在它和外部服务器之间使用*不同的*源端口.关键是原始源使用一个端口,NAT使用不同的端口.NAT在这两个端口号之间进行转换.这是它如何区分两个相同的端口与不同的内部IP地址. (3认同)
  • 在这里,我给你画了一张[蹩脚的]图来说明:http://www.bradgoodman.com/nat.png (2认同)