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

时间:2013-03-29 17:09:38

标签: http protocols router nat

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

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

2 个答案:

答案 0 :(得分:14)

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

关于你的问题:

  

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

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

图:

enter image description here

答案 1 :(得分:0)

这取决于NAT和协议。例如,我将此消息写在全锥NAT后面,并且已配置该特定NAT(可能是硬连线)以始终将UDP专用传输地址UDP X:x映射到公共传输地址UDP Y:x。借助STUN服务器(谷歌有一些免费的电击服务器),便宜的NAT,2台笔记本电脑,鲨鱼和真正轻巧的STUN客户端(使用诸如777的硬编码端口),可以很容易地了解这种情况。第一个呼叫将通过,它将被映射到原始端口,第二个将被阻止。 NAT是一个骇客,其中一些非常糟糕,以至于它们在返回时实际上覆盖了公共传输地址,不仅在标头中,甚至在传输的数据中也很疯狂。 ICE协议必须对公共地址进行异或处理以绕过此问题。