用Wireshark抓取一个ping包,(最高层是ICMP协议,也是属于网络层,在IP协议之上)查看IP协议层
protocal字段表示IP协议上层协议,此为ICMP。
此外,设计TTL可以有效地防止数据包环路,有时候,拓扑过于复杂,处于疏忽,路由器Bug之类的,会不知道怎么转发数据包。会出现下面的情况
图片来自拼客学院院长手绘:http://www.pinginglab.net/open/course/explore
所以TTL很有效解决了这个问题。
另外,Linux下的traceroute hostname 和 Windows下的tracert hostname 也是发送一个ICMP 数据包来测试的,原理就是Ping。使用的就是TTL字段。
Windows的更清楚。
原理:
对于第一个路由,IP协议的TTL字段属性设置为1,到第一个路由-1=0就回来了,因此获取到了第一跳路由信息。
对于第二个路由,TTL = 2,到第二个路由器TTL减到0,转发信息会主机,也获取了。
对于第三个路由,TTL = 3,以此类推
。。。。