如何快速判断ping连接经过的路由器个数和IP?
方法一:
ping命令会返回一个TTL,TTL(Time To Live)存活时间,一般初始值为64,每经过一个路由器就减一,当TTL为0时丢弃网络包,是IP协议一个状态位,用来防止请求在网络中一直流转的方式。
从图中可以看到,TTL为51,64-51=13,所以请求大概经过了13个路由器。
方法二:
tracert
命令会返回经过的每个路由器的IP地址
在Linux系统中是traceroute
命令,在Windows系统中是tracert
命令
通过tracert命令,可以看到经过的每个路由器的IP,一共经过了15个路由器,与ping命令的估算接近。
tracert命令返回的其他数据列都是什么意思呢?这就涉及其工作原理了。
tracert模拟请求进行发送,IP头中的TTL参数从1开始依次增加,直到到达目标主机
例如,一个请求的TTL为1,经过一个路由器后TTL减1,为0,网络包被丢弃,最后一个路由器向源主机发送ICMP差错报告,差错类型是时间超时,并在ICMP协议可选部分记录发送时间,源主机接收到请求后得到路由器的IP和发送时间,就可以计算出耗时(ms)。
所以三个时间分别是,连接的时间、返回的时间、多次连接反馈的平均值
随后发送TTL为2的请求,并返回最后一个路由器的IP,…,直到到达目的IP。
还有一个问题,tracert怎么知道现在已经接收完全部ICMP请求,还是由于网络等原因一直没有收到响应?
tracert模拟的请求会设置端口为一个不存在的端口,请求到达目的主机后端口对应不上,就会发送ICMP差错报告,差错类型是端口不可达,我们就知道请求已经到达目的主机了。