22

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

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

4

2 回答 2

19

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

至于你的问题:

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

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

图表:

在此处输入图像描述

于 2013-03-29T18:01:04.220 回答
0

It depends on the NAT and on the protocol. For instance I'm writing this message behind a full cone NAT and this particular NAT is configured (potentially hard-wired) to always map an UDP private transport address UDP X:x to the public transport address UDP Y:x. It's quite easy to shed some light on this case with with a STUN server (google has some free stun servers), a cheap NAT, 2 laptops, wire shark and a really really light STUN client which uses a hard coded port like 777. Only the first call will get through and it will be mapped on the original port, the second one will be blocked. NAT's are a hack, some of them are so bad that they actually override on return the public transport address not only in the header but even in the transported data which is kinda crazy. ICE protocols has to xor the public address to bypass this issue.

于 2020-08-28T21:32:59.570 回答