为什么我的 TCP 数据包没有到达目的地?
我从一台 PC 向另一台 PC 发送 http 请求,两台 PC 都位于 NAT 之后:
- NAT1 后面的 PC1 运行 Wireshark。
- PC2 位于 NAT2 后面,该 PC2 发送 http 请求。
为了从外部打开对 NAT1 的访问,我在 PC1 的浏览器地址中输入 IP_of_NAT2。我在 Wireshark 中看到这些请求发往 IP_of_NAT2,并记下了此会话使用的端口号。
然后,我在 PC2 的浏览器地址中输入 IP_of_NAT1:PORT,但没有 TCP 数据包到达 PC1。
答案1
您导致 PC2 发送的数据包具有正确的目标端口,但源端口不正确。要被视为回复数据包,目标端口和源端口都必须匹配。
例如,假设 PC1 的外部地址是 1.1.1.1,PC2 的外部地址是 2.2.2.2。当您从 PC1 向 PC2 发送 HTTP 请求时,源地址将为 1.1.1.1,目标地址将为 2.2.2.2,但源端口将是任意的(例如 12345),目标端口将为 80。
您需要让 PC2 发送一个数据包,其目标 IP 地址为 1.1.1.1(因此它会到达 PC1),目标端口为 12345(或其他),源端口为 80。否则,它们不是回复 PC1 发送的数据包,并且您的 PC1 的 NAT 将不会转发它们。