traceroute显示星号,但是wireshark抓包显示返回了icmp type 11
$ traceroute -q1 -m5 -n www.163.com
traceroute to www.163.com (218.213.235.236), 5 hops max, 60 byte packets
1 192.168.1.1 24.030 ms
2 192.168.137.1 23.946 ms
3 *
4 *
5 *
traceroute命令后三跳都显示为星号,但是wireshark抓包显示都返回了icmp type 11。
请教这种情况是什么原因,为什么没有显示10.18.107.1,10.16.0.1和10.16.0.10?
多谢!
Answers
traceroute 的原理是通过发送几个 TTL 不同的 UDP 包,然后期待收到 ICMP type 11 的回应,借此来探测中间节点 IP。UDP/ICMP 包都没有“连接”的概念,traceroute 没法像 TCP 一样方便的判断收到的 ICMP 是谁的 ACK,只能靠 ICMP 里面的数据来猜,如果 ICMP 包含之前发出的 UDP 内容,那么就认为收到了 ACK。
后面三个为 * 的原因就是因为 ICMP 回应里面没有带上任何数据,所以 traceroute 就对应不上了,你从数据包的大小就能很清楚的看到这个差别。