在后台的网络相关问题留言中,比较多的朋友反映的都是某某网站突然变得访问速度慢,或者无法访问。到底是我的问题还是对方问题还是运营商问题?这时候不妨用这个命令排查一下!
01、找到你访问网站的“路线”
跟踪路由(Traceroute)是一种跟踪数据包在互联网上运行路线的方法。现在的主流操作系统都具备跟踪路由的命令或者功能,让用户在网络出问题的时候能够自主排查一下。
启动跟踪路由时,你要告诉它你想跟踪到哪个网站或服务器。通常,这是你要访问的网站网址,但你也可以告诉它一个 IP 地址。一般来说,小A推荐使用网址,因为这不仅可以排除路由问题,还能排查出DNS问题。如果启动跟踪路由功能的时候,被告知域名无法解析,那么就是DNS出了问题,自然可以通过更换DNS来解决故障。
一旦你启动 Traceroute,它就会向你设定的目的地发送数据包。然后,它会记录数据包的传输过程,并将信息发回电脑,向你显示数据包的去向和耗时。
如果你想查找网络故障,特别是在办公局域网环境中,这确实很方便。如果是局域网的服务器或交换机出现故障,Traceroute 就会发现问题,并报告某些设备工作不正常。然后,你就可以利用这些信息更好地诊断出故障所在。
02、Traceroute 如何工作?
Traceroute 是一种诊断网络错误的便捷方法。然而,Traceroute 的发明要归功于利用数据包 "生存时间 "变量的巧妙利用。
理想情况下,当计算机将数据包从一个地方发送到另一个地方时,它能顺利到达目的地。它以最快的速度从 A 点到达 B 点,不会被卡住或耽搁。
但是,大部分民用网络,特别是办公网络或者家庭局域网,可能是个更复杂的东西。如果网管在设置路由器或者服务器时出了差错,数据包就有可能在服务器/路由器之间无限循环发送。
如果这种情况经常发生,网络中就会塞满永远循环往复的数据包,但你却访问不到你要访问的网址。数据包背后的聪明人想出了一个解决方案来解决这个问题,即 "生存时间 "或 "TTL"。每个数据包在发送到未知世界之前,其 TTL 值都会大于 0。如果这个值为 0,数据包就会被视为 "死亡 "并被销毁。
当数据包被发送出去时,它会在不同的服务器上停留多次。每到达一个服务器,它的 TTL 值就会减去一个。通常情况下,这个 TTL 值会被设置为一个数字,在这个数字为 0 之前,数据包有足够的时间到达目的地。然而,如果数据包确实进入了一个循环,TTL 最终会递减,直到数据包过期。
当数据包过期时,它所连接的服务器会发送所谓的 "ICMP 超时 "信息。这主要是通知数据包已过期,并告诉用户数据包在哪里过期,以帮助排除故障。
这条超时信息是让 Traceroute 正常工作的关键。开始时,Traceroute 会发送一个 TTL 设置为 1 的数据包。这意味着它离开你的电脑,到达第一个服务器,从其 TTL 中减去 1,发现它的 TTL 为 0,然后过期。
然后,当时处理数据包的服务器会向电脑发送一条 ICMP 超时信息,并附上它的位置。然后,电脑会记录服务器的位置,作为向目标迈出的第一步。
然后,它会发送一个 TTL 设置为 2、3 的数据包,以此类推,直到数据包到达目的地。每个数据包都会在下一步的传输过程中过期,沿途的每个服务器都会报告过期的数据包,从而为你的电脑提供所需的信息,提示你的数据包的去向。
03、怎么用Traceroute?它和Ping有什么不同?
Traceroute 最基本的功能是让你窥视数据包在网络中的移动情况。无论你是一名网络工程师,需要仔细检查所有数据包是否正常流动,还是你只是对访问百度时数据包的移动情况感兴趣,Traceroute 都是你的不二之选。
不过,它对发现系统错误也很有用。如果 Traceroute 试图联系一个没有响应的服务器,它会发现它发出的数据包有一段时间没有触发回复。一旦时间足够长,Traceroute 就会宣布 "请求超时",这意味着回复未能在规定时间内到达。
当然,请求超时并不总是意味着服务器宕机;有时服务器不喜欢 Traceroute 请求,会在请求通过时阻止它们。但如果你确定链上没有服务器会阻止 Traceroute,那么当你尝试连接网站或服务器时,它就是诊断网站或服务器故障的好方法。即使有阻止的中间服务器,但是数据包只要最终能达到你要求的网址,那也算是排查了一半的问题——至少你的路由“路线”问题不大。
在Windows下使用它很简单,按Win+R键,然后输入cmd后回车,在弹出的命令行窗口中输入“tracert 网址/IP地址”即可:
Traceroute 听起来与另一个方便的网络命令 Ping 非常相似。不过,虽然这两个功能确实有些重叠,但使用它们的原因却不尽相同。
Traceroute 可以帮助你找出数据包离开电脑后的去向。与此同时,Ping 是告诉你电脑是否能到达特定服务器,以及到达服务器所需的时间。
因此,如果你想查看网络链的每个部分,Traceroute 就是你的最佳选择。与此同时,如果你只想看看服务器是否有响应,你可以 Ping 它。当然,你也可以用 Traceroute 来做到这一点,但在得到你想要的答案之前,你得等上一段时间,让它最终到达你想要访问的服务器。