![NAT 如何跟踪连接](https://linux22.com/image/534258/NAT%20%E5%A6%82%E4%BD%95%E8%B7%9F%E8%B8%AA%E8%BF%9E%E6%8E%A5.png)
假设有多个 PC 共享一个 IP 地址的 NAT,NAT 如何知道将传入数据发送到哪里。它会转换 SYN-ACK ID 吗?
答案1
当设备连接到路由器另一端的服务器时,它会使用其临时端口范围内的源端口。这通常是 49152 到 65535 之间的端口,并且是随机分配的。NAT 路由器会将此端口号以及目标 IP 地址记录在 NAT 转换表中。当数据开始从服务器返回时,它会从此表中查找数据的去向。
答案2
假设在 NAT 中多台 PC 共享一个 IP 地址,NAT 如何知道将传入数据发送到何处。
通过不以 alheimer 为模型进行编程。基本上它有一个记忆 - 关于哪些内部端口/ip 地址映射到哪个外部目标端口/ip,因此它可以进行转换。对于 TCP 来说这很简单,对于 UDP,内部程序最好定期将数据包发送到外部(以便 NAT 刷新路由表)。
它是否翻译 SYN-ACK id?
不,正确的 NAT 不遵循 TCP 协议。这是为了确保 TCP 不起作用。
玩笑归玩笑——自然,在需要时它必须进行翻译,否则会破坏实施。NAT 必须是透明的,因此它必须进行所有必要的翻译。