![NAT 或代理如何对传入的 TCP SYN 数据包做出反应?](https://linux22.com/image/1358022/NAT%20%E6%88%96%E4%BB%A3%E7%90%86%E5%A6%82%E4%BD%95%E5%AF%B9%E4%BC%A0%E5%85%A5%E7%9A%84%20TCP%20SYN%20%E6%95%B0%E6%8D%AE%E5%8C%85%E5%81%9A%E5%87%BA%E5%8F%8D%E5%BA%94%EF%BC%9F.png)
在某些消息传递系统中,两个消息传递客户端在聊天或语音通话中直接相互发送/接收数据包。我认为基本机制是(例如 TCP):这些客户端程序打开一个侦听 TCP 套接字并告诉消息传递/协调服务器它们的 IP/PORT 对。然后客户端程序从消息传递/协调服务器检索对方的 IP/PORT。然后其中一个(假设 A)使用检索到的 B 的 IP/PORT 对与另一个(假设 B)发起 TCP。
当被动客户端 B(等待 TCP SYN 数据包)不在 NAT 或代理后面时,这没问题。但如果 B 位于 NAT 或代理后面,则 IP/PORT 对实际上是 NAT 或代理的公共网络接口。
所以我的问题是,当 NAT 或代理收到 TCP SYN 时,它的反应是什么?它们如何将 TCP SYN 中继到其后面的相应主机/进程?
答案1
如果收到 TCP Syn,则 NAT 主机将检查转发规则(转换表)。如果有与传入数据包(目标源/地址)的详细信息相匹配的规则并将其映射到内部系统,则数据包将被重写并转发到相应的内部主机。如果转换表中没有该数据包的条目,则它将被丢弃,或者将发送 RST,具体取决于 NAT 配置为如何处理无效传入连接。