我们有时候想查看本地到域名的联通性的时候,就使用ping来操作。
而ping属于icmp协议。
这个协议主要是用来网络诊断和控制。
其中网络联通用的是ping。
而路由诊断就用的traceroute工具。
它会记录从你本地到指定ip之间经过了那些路由节点,以及耗时。
核心目的就是为了定位网络延迟和中断的具体位置。
实现原理就是通过ip数据包的ttl(time to live)来实现。
初始化ttl=1,发现一个路由器的话,ttl减为0。路由器这时候就提示数据包超时,返回。并给本地主机发送icmp超时消息。
然后就是依次对ttl递增.
ttl=2 (经过两个路由)
ttl=3 (经过三个路由)
...
目标主机
当ttl足够大,数据到达目标主机,这时候返回目标不可达消息。此时本地主机确定到达终点,停止追踪。
那traceroute如何判断到达终点?
会向目标ip发送udp,并且可以使用未开放、未使用端口。若到达目标ip,就会提示端口不可达。
在请求过程中,如果路线不固定,ttl如何处理?
ttl处理逻辑其实不改变,还是顺序发送ttl来确定下一个路由器节点。
只不过会多次发送数据包,然后根据稳定性高的节点来跳数。
类似于从家到公司n条路线,如果5天中4天走主干道A,一天走小道B。那么A就是常规路线,B就是临时波动。
评论