看完之后这问题,我仍然不明白在无连接协议的情况下,数据包是如何映射到 NAT 后面的相应主机(接收器)的。
可接受的答案表明,NAT 会记录主机的端口号、SYN 和 ACK 值,以便将传入流正确映射到它。但是,在无连接协议的情况下,SYN 和 ACK 值不被使用,因此只有端口号仍然是识别数据包的手段。这样就足够了吗?如果该 NAT 后面的更多主机使用相同的源端口(大型子网(即 192.xx.xx.xx)可能出现这种情况),传入数据包是否会广播到在其数据包中使用相应端口的所有主机?
答案1
来自接受的答案对于您链接的问题-
防火墙接收该数据包并将其发送到远程服务器,但只有在将 IP 地址更改为本地网络的公共 IP 后才会这样做,并且也可能将源端口更改为防火墙选择的其他端口。
如果 NAT 后面的两台机器向同一台服务器发送无连接 (UDP) 数据包,NAT 将从 NAT 上的不同端口转发它们。然后来自服务器的数据包上的“to”端口将让 NAT 确定将这些数据包转发到哪台机器。
编辑:例如,客户端 A 和 B 位于 NAT 后面,服务器 S 位于 Internet 上,UDP 传输可能如下所示(机器:端口):
A:31337 -> NAT:7 (ECHO) // NAT:31338 -> S:7
B:31337 -> NAT:7 (ECHO) // NAT:**31339** -> S:7
S:7 -> NAT:31338 // NAT:7 -> A:31337
S:7 -> NAT:**31339** // NAT:7 -> B:31337
A 和 B 都使用源端口 31337,但 NAT 将它们映射到从 NAT 到服务器 S 的不同端口(分别为 31338 和 31339)。
答案2
我不是专家,但是
如果您有 2 台机器位于 NAT 后面,还有两台机器具有 NAT 之外的公共 IP。那么 NAT 后面的机器可以知道一台远程机器与另一台远程机器的区别,因为远程机器具有不同的 IP 地址。而远程机器知道一台位于 NAT 后面的主机与另一台位于 NAT 后面的主机的区别,因为它们访问它们想要发送到的主机的目标端口。如果两台远程机器也位于 NAT 后面,并且想要发送到另一侧也位于 NAT 后面的机器,那么 IP 和端口不会泄露发送者是谁。