在工做生活中,若是干点跟网络沾边的活,可能都会用到tracert,tracert是windows操做系统上用于追踪到达目标地址路由的一个小工具,一样的软件在linux上也有,只不过是traceroute,原理类似,可能tracert就是根据traceroute开发的,细节上有些不一样而已。linux
Tracert属于icmp协议,经过使用它能够垂手可得的找出ip地址在网路上的路径,判断IP地址通过了哪些设备,找出哪些设备延迟太高,从而发现网络中存在的问题。好比,咱们常常接到反馈说,访问某个网站特别慢,那究竟是什么慢呢,其实就是咱们到达服务器的延时较高,从而致使数据传输过慢,网页加载也就更慢了。windows
1、Tracert原理服务器
要弄清tracert的原理什么,就得首先简单了解下ICMP和IP包头字段中的TTL。网络
ICMP全称Internet控制报文协议,做为TCP/IP的一个子协议,经常使用来在IP传输中用来指出网络不通、主机是否可达、路由是否可用等。例如常见的ping应用,当主机A测试可否到达主机B时,由主机A发送imcp request(type:8,code0),当主机B收到这个数据包时,主机B发送给主机A一个icmp replay(type:0,code0)。这时,主机A将收到的信息回显传输给上层应用。ide
TTL是IP包头的一个字段,用于表示该数据包在网络里存活了多久,通常根据系统不一样,初始的TTL值也不尽相同。例如在windows 10里,TTL通常设置为64。IP采用这个机制主要是为了防环,数据包每通过一个设备,TTL都会减一,也就是说,该数据包在网络里最多能有64跳,固然已经这足够用了。当TTL被最终减到1或0时,接收设备就不会再次转发该数据包,而是丢弃,而后给发送该数据包的源主机发送一个icmp Time-to-live exceeded(type:11,code:0)报文,也就是告诉源主机:“你的数据包死掉啦,重传仍是改变ttl你本身看着办吧!”工具
Tracert就巧妙的运用了以上两种技术,实现了对路径的识别。Tracert选取icmp协议(linux下traceroute使用udp协议,高端口号),当个人PC Tracert一个IP地址时,pc向目的ip发送一份icmp request(type:8,code0)报文,可是tracert程序会把该数据报的ttl设置1。什么,那不就发送不出去了吗?是的,tracert原本也没想直接就能送达到目的主机,他要的是什么?他要的是差错报文消息!性能
这样一来,第一跳设备就会给源主机回复一个icmp Time-to-liveexceeded(type:11,code:0)告诉源主机,你的ttl超时啦!tracert记录下时间,再重复两次该过程,如此以来,tracert就完成了第一跳信息的收集。接下来,tracert会把第二个数据报ttl设置为2,第三个数据报ttl设置为3,依次类推,直到某个数据报收到icmp replay(type:0,code0),连续收到3次后,最终认为tracert已经完成。测试
2、tracert抓包分析网站
接下来咱们看看数据包收发过程是否像我说的那样。spa
ttl=1,ttl=2,ttl=3……咱们能够看到每一个数据包都发送了3次,而每次都收到了icmp Time-to-live exceeded 消息。
可是也有没有收到icmp Time-to-liveexceeded 消息的,这将被tracert认为是未收到回应,将显示*号,请求超时。
当成功收到来自119.75.217.109的icmp replay时,则认为追踪完成。
3、Tracert排障应用
原理咱们懂了,如何排除故障就简单了。根据案例分析,咱们到达目的地址119.75.217.109总共经历了8跳,可是有人要问了,为何8跳延迟没什么规律呢?其实,延迟除了由线路转发设备决定,也受回包设备的性能影响。如今的网络设备都是控制层面和转发层面分离,控制层面能够理解为一个小电脑,转发层面由控制层面进行控制,可是控制层面出问题短期不必定会影响转发层面转发。有点绕对不?
通常设备上的cpu主频比较低,再加上还要处理一些路由协议之类的信息,因此有可能回复的就慢一些,由于icmp协议处理的优先级比较低。因此通常而已,负载高的设备回复ping延迟高一些,负载低的设备回复ping延迟低一些。
因此,但只是根据延迟判断网络问题是不靠谱的。
如图所示,延迟到了16跳的时候,直接增长了200ms左右,并且后面的设备回应都大于200ms了,也就是说这一跳的设备要不是带宽负载太高,要不就是有限制。固然根据ip地址分析了下,15-16跳估计到国际出口了,带宽不足正常现象。可是若是假设这些延迟增高现象是发生在你本身的网络里的话,那你可就得当心了。