我在同一个子网中拥有多台(虚拟)机器Centos 7
,每台机器上运行着我的应用程序的多个实例。我需要测试应用程序如何通过 UDP 相互访问。
我尝试通过 从一台机器访问另一台机器tracerote
。因此我检查 host1:
# traceroute host2 -U -p 3001
traceroute to host2 (<ip>), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
看起来 UDP 数据包被过滤了。但我又尝试了一下netcat
(再次在主机 1 上):
# nc -u host2 3001
qwerty1
qwerty2
qwerty3
并且它以某种方式起作用了!怎么会这样?
顺便说一下,TCP 的 traceroute 只需一跳就能到达目的地,因为它应该在一个子网中:
# traceroute host2 -T -p 3001
traceroute to host2 (<ip>), 30 hops max, 60 byte packets
1 host2 (<ip>) 0.663 ms 0.707 ms *
问题是 UDP 到底能不能用?或者有没有可靠的方法来测试它?不幸的是,应用程序无法正常工作,我想确定这是不是底层基础设施的问题。
答案1
netcat 的输出仅显示数据包可以发送到此目标,并且没有返回任何错误。如果中间有一个防火墙,它会直接丢弃所有 UDP 数据包,也会发生这种情况。这种防火墙还会产生您使用 traceroute 看到的输出:如果数据包被丢弃,那么它们以后就不会因超出 ICMP TTL 而失败。