为什么tracepath 总是显示第一跳两次,而traceroute 却不显示?

为什么tracepath 总是显示第一跳两次,而traceroute 却不显示?

为什么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的值是从网络的回复中获得的,但有时回复中不包含必要的信息,我们必须猜测它。在这种情况下,数字后面跟着 ?。

相关内容