traceroute应该是大家比较熟悉的一个网络诊断工具了(windows下面叫着tracert),通过阅读TCP/IP详解里面的traceroute实现的内容了,下面是我的大白话理解,构造udp的数据包,端口号取一个目标主机应用程序理论上不会用到的(大于30000),然后不断调整发出的ip数据报的ttl的大小(从1、2、3、、、、、30);直到接收到返回的端口不可达的ICMP报文,前面收到的都是超时的ICMP消息;理论学习到此结束,然后我就去通过wireshark抓包看了下过程,分为linux下面的和windows的,然后发现windows下面的tracert程序的实现并不是tcp/IP详解里面说的那样(ps:我用的win10)
LINUX的抓包:
看到这个抓包和tcp/ip里面说的是一样的,发出的是ip数据包,里面携带的是udp报文,上面是第一跳的,会发出三个包,下面是第二跳的
一直到结束;附上我的客户端的log(部分打码)