为什么tracepath
总是将第一跳显示两次:
$ tracepath -n X.Y.Z.T
1?: [LOCALHOST] pmtu 1500
1: 172.16.5.2 0.586ms
1: 172.16.5.2 0.420ms
2: no reply
3: X.Y.Z.T 6.199ms reached
Resume: pmtu 1500 hops 3 back 3
而traceroute
没有:
$ traceroute -n X.Y.Z.T
traceroute to X.Y.Z.T (X.Y.Z.T), 30 hops max, 60 byte packets
1 172.16.5.2 0.672 ms 0.705 ms 0.723 ms
2 * * *
3 X.Y.Z.T 1.192 ms 1.220 ms 1.218 ms
顺便说一句,172.16.5.2
是网关组中的两个物理路由器之一,逻辑网关路由器是172.16.5.1
:
$ ip route get X.Y.Z.T
X.Y.Z.T via 172.16.5.1 dev ens160 src 172.16.5.X uid 1000
cache
EDIT0:使用 MTU=1500:
$ tracepath -n X.Y.Z.T -l 1500
1: 172.16.5.2 0.598ms
2: no reply
3: X.Y.Z.T 6.368ms reached
Resume: pmtu 1500 hops 3 back 3
使用 MTU=1501 :
$ tracepath -n X.Y.Z.T -l 1501
1?: [LOCALHOST] pmtu 1500
1: 172.16.5.2 0.600ms
1: 172.16.5.2 0.394ms
2: no reply
3: X.Y.Z.T 6.139ms reached
Resume: pmtu 1500 hops 3 back 3
使用 MTU=3*1500+1 :
$ tracepath -n X.Y.Z.T -l $((3*1500+1))
1?: [LOCALHOST] pmtu 1500
1: 172.16.5.2 0.653ms
1: 172.16.5.2 1.239ms
2: no reply
3: X.Y.Z.T 6.098ms reached
Resume: pmtu 1500 hops 3 back 3
答案1
这是因为初始数据包长度太大。尝试使用选项-l
将数据包大小设置为最大值。您的 MTU。如果mtu是1500-l 1500
就可以了,但是-l 1501
会带来两位数。
编辑:tracepath 与检测 pmtu 不一致。有时这里是 1460,有时是 1500。较低的值在任何情况下都适用,实际上应该小到 100。
答案2
根据man tracepath
,输出部分
第一列显示探针的 TTL,后跟冒号。通常TTL的值是从网络的回复中获得的,但有时回复中不包含必要的信息,我们必须猜测它。在这种情况下,数字后面跟着 ?。