我发现我无法理解我的测试。设置两台 Linux PC,即 moon 和 sun。moon 有两个网络接口,eth0=192.168.0.20,eth1=192.168.1.20。sun 有一个网络接口,eth0=192.168.0.10。在 sun 中设置一条路由,使其能够到达 moon 中的 192.168.1.20。Ping 测试通过。
现在在 moon 上运行“nc -l -p 1234 -u”,然后在 sun 上运行“nc 192.168.1.20 1234 -u”。sun 发送的第一条消息总是会出现在 moon 中。但是同一个 nc 会话中 sun 发送的下一条消息将失败。tcpdump 显示第二条消息到达了 moon,但是 moon 向 sun 发送了一个“ICMP 不可达”错误,这导致 sun 关闭了套接字。在对 socat 进行同样的测试时,我发现了相同的结果。
这对我来说很奇怪。我从 tcpdump 检查发现 sun 发送的两条消息具有相同的源/目标 ip 和源/目标端口号。为什么来自 sun 的第二条消息无法被 moon 的 nc 或 socat 识别?
有人可以给我提示吗?谢谢。
-木质