前面文章中已经介绍了Ping的工作原理,今天我们来讨论一下Tracert的工作原理。
通俗的说:当我们购买了香港主机、或美国主机时,很多用户会担心其在国内访问速度较及不稳定,所以会使用这两款工具进行检测,Ping可以查网速但无法判定出问题的节点,而Tracert可以,但是耗时较长。
Tracert为路由跟踪程序,用于确定本地主机到目标主机经过哪些路由结点。在Linux操作系统中,对应的命令为Traceroute,Tracert为windows系统下的命令。
Tracert是利用ICMP和TTL进行工作的。首先Tracert会发出TTL值为1的ICMP数据报(包含40个字节,包括源地址、目标地址和发出的时间标签,一般会连续发3个路由器包)。当到达路径上的第一个路由器时,路由器会将TTL值减1,此时TTL值变成0,该路由器会将此数据报丢弃,并返回一个超时回应数据报(包括数据报的源地址、内容和路由器的IP地址)。当Tracert收到该数据报时,它便获得了这个路径上的第一个路由器的地址。接着,Tracert再发送另一个TTL为2的数据报,第一个路由器会将此数据报转发给第二个路由器,而第二个路由器收到数据报时,TTL为0。第二个路由器便会返回一个超时回应数据报,从而Tracert便获得了第二个路由器的地址。
Tracert每次发出数据报时便会将TTL加1(一般每次都是发3个数据报)来发现下一个路由器。这个动作一直重复,直到到达目的地或者确定目标主机不可到达为止。当数据报到达目的地后,目标主机并不返回超时回应数据报。Tracert在发送数据报时,会选择一个一般应用程序不会使用的号码(30000以上)来作为接收端口号,所以当到达目的地后,目标主机会返回一个ICMP Port Unreachable(端口不可达)的消息。当Tracert收到这个消息后,就知道目的地已经到达了。
Tracert会提取ICMP的超时回应数据报中的IP地址并作主机名解析(用-d参数表示不解析主机名,解析主机名会耽误一些时间),然后将所经过的路由器的主机名及IP地址、数据报每次往返花费的时间显示出来。Tracert有一个固定的等待响应时间,如果这个时间过了,Tracert就会输出“*”来表示某个设备没有在规定的时间内作出响应,然后Tracert会将TTL值加1,继续进行检测。
通过Tracert命令,我们便知道源地址到目的地址所经过的路径。虽然数据报传输时,经过的路径并不是每次都一样,但是大部分时间是一样的。在目标主机响应时,Tracert会显示完整的经过的路由及到每个路由所花费的时间。如果目标主机没有响应,Tracert仍会尝试寻找所经过的路径。
2.Tracert结果的实际意义
我们从Tracert的结果中可以看出以下几个问题:
《1》网络不稳定时,可以看出具体哪些结点不稳定,以及不稳定的结点的上一个结点和下一个结点分别是在什么位置,由此即可大致判断出不稳定的网络结点在什么位置。我们可以通过查询IP地址的网站如http://www.geoiptool.com/en/(查国外IP比较准)或者ip138.com(查国内IP比较准)查询下相应结点的位置,如果是国内的结点不太稳定,我们也解决不了,可以建议客户再观察一段时间;如果是SoftLayer的路由节点有问题我们可以让SoftLayer协助解决。同时检查下我们服务器是否正常,如有没有被攻击等。
《2》客户域名/独立IP是不是被中国封了。
《3》客户的本地IP是不是被我们服务器的防火墙封了。
希望以上香港主机提供商-Bluehost提供的有关Tracert的工作原理及作用,可以帮助站长们测试网站的速度以及网站出现问题时如何检测其问题所在。