[root@host33cn ~]# traceroute -M tcp -f 255 -m 255 -q 10 -w 1 -p 9101 10.11.1.6 1400
traceroute to 10.11.1.6 (10.11.1.6), 255 hops max, 60 byte packets
255 host05cn.zen.com (10.11.1.6) 0.112 ms 0.133 ms 0.070 ms 0.156 ms 0.091 ms 0.098 ms 0.072 ms 0.106 ms 0.113 ms 0.075 ms
[root@host33cn ~]#
使用上面的命令尝试发送 1400 字节。接口 MTU 为 1500。但它仍然为 TCP 发送默认的 60 字节数据包。
尝试过 1000 个甚至小于 60 字节的数据包。即使它仍然只占用 60 字节的数据包。
我有什么遗漏的吗?
答案1
当使用 tcp 方法 ( -M tcp
) 时,默认情况下,traceroute 使用 TCP SYN 数据包。从 路由跟踪(8):
tcp -T
众所周知的现代方法,旨在绕过防火墙。使用恒定目标端口(默认为 80,http)。
如果网络路径中存在某些过滤器,那么很可能任何“不太可能”的 udp 端口(对于默认方法)甚至 icmp 回显(对于 icmp)都会被过滤,并且整个跟踪路由将在这样的防火墙处停止。要绕过网络过滤器,我们必须仅使用允许的协议/端口组合。如果我们追踪某些邮件服务器,那么更有可能
-T -p 25
可以达到它,即使-I
不能。此方法使用众所周知的“半开放技术”,这可以防止目标主机上的应用程序看到我们的探测器。通常,会发送 tcp syn。对于非监听端口,我们收到 tcp 重置,一切就完成了。对于活动侦听端口,我们收到 tcp syn+ack,但通过 tcp 重置(而不是预期的 tcp ack)进行应答,这样,即使应用程序没有注意到,远程 tcp 会话也会被丢弃。
可以看出这个帖子,TCP SYN 数据包不应包含有效负载,这可能就是在这种情况下 Traceroute 忽略数据包长度的原因。
Traceroute 可能会更清晰一些,并在这种情况下显示警告(或拒绝运行)以避免用户困惑......
请注意,手册页还提到在某些情况下可以忽略数据包长度:
可选的
packet_len
`gth 是探测数据包的总大小(IPv4 默认为 60 字节,IPv6 默认为 80 字节)。在某些情况下可以忽略指定的大小或增加到最小值。
(上面的“`”出现在手册页中,似乎是一个拼写错误。)