网络通信 频道

Trace命令:网络故障排除好帮手

  当遇到网络故障时每个网络管理员都会很头疼。因为互联网布局复杂,要进行故障排查的话不是一件轻松的活。笔者这里跟大家分享一下如何通过Trace命令来帮助管理员进行网络故障排查。希望这篇文章能够给网络管理员提供一个解决问题的思路。Trace命令主要用来跟踪数据包的传输过程,可以向网络管理员提供路由器到目的地地址的每一跳信息。主要是通过控制IP报文的生存期字段来实现这个目的。

  一、Trace命令的原理

  Trace命令提供路由器到目的地址的每一跳的信息。他通过控制IP报文的生存期(英文简称为TTL)字段来实现。为了获得往返延迟的时间信息,Trace命令会发送三个报文显示平均延迟时间。然后命令会将报文的TTL字段加1并在此发送这三个报文。这些报文将达到路径的第二个路由器上,并返回超时错误或者端口不可达的信息。反复使用这个方法,不断增加报文的TTL字段的值,直到接收到目的地址的响应消息。

  上面这么说可能有点绕口令。笔者这里举一个简单的例子来说明。如果现在有用户反映他们不能够访问公司的网站,但是可以访问其他网页。此时网络管理员该如何处理呢?网络管理员怀疑是连接那个网站的路由器出现了问题。此时就可以利用 Trace + 被怀疑有故障的路由器IP地址的方式,来跟踪数据包到这个路由器的整个过程。这个Trace命令会列举出从管理员路由器到那个被怀疑出现故障路由器之间所有的路由器连接信息。如此的话,网络管理员就可以发现是中间那个路由器出现了问题。这将帮助管理员迅速定位出问题的路由器。如果最后网络管理员受到了来自那个被怀疑路由器的反应信息,则表明跟那个路由器之间的连接时没有问题的。这就表明问题可能不出在路由器身上,而有可能是那个WEB服务器在搞怪。

  二、如何读懂Trace命令返回的消息

  要利用Trace命令来排查网络故障,则读懂Trace返回报文的含义这是最基础的。还好Trace命令返回的报文并不复杂,比较容易看懂。

  MSEC表示路由器在接收到响应消息之前的往返网络延迟,这是以毫秒为单位。在网络中从发送方和接受方之间交换数据,接受方收到数据和发送方发送数据之间的时间差就是网络延迟。也就是说,从路由器发送消息到下一个路由器接收到消息并做出响应中间会有一个时间的间隔。这个间隔就是网络延迟。造成网络延迟的原因有很多,比如在物理线路上电磁波传播要时间,在网络中间设备转发数据包也要时间,受网络带宽限制,发送数据也要时间,还有其他的排队时延等。从理论上来说,这个时间间隔为零为好,但是实际上做不到。在采用Trace命令时,只有第一跳的MSEC时间可能为0,达到自己路由器接口的时间。为此在网络性能优化时,不能够消除这个网络延迟,而只能够把这个延迟尽量的缩短。若最终能够出现这个信息,至少说明跟对方的连接是通的。此时网络管理员要考虑的是,这个延迟的时间是否在可以容忍的范围之内。如果网络虽然通了,但是延迟时间比较长则管理员仍然需要进行网络调整。要把这个网络延迟的时间控制在可以忍受的范围之内。

  如果执行了这个命令之后,路由器最后没有返回MSEC信息,而是显示了其他的内容,则表示这个连路不通,可能存在网络故障。此时,网络管理员就需要根据其返回的错误信息来排查网络故障。通常情况下,其可能会返回这些错误信息。一是*号,它表示报文超时。二是?号,表示报文类型不能识别。三是U符号,表示端口不可达。四是P字母,表示谢意不可达。五是N字母,表示网络不可达。六是H字母,表示主机不可达。七是Q字母,表示ICMP源抑制。这里笔者要特别强调一下ICMP源抑制的作用。由于TCP是可靠的面向连接的协议,在建立连接的时候会协商窗口大小,当网络拥塞或主机资源缺乏的时候,则会相互通知以减慢数据发送速度;而UDP协议则没有这样的传输机制,当网络拥塞或资源不足的时候,无法通知对方,所以,这时,则会发送ICMP源抑制的报文给发送端,以减慢发送速度。如有时候再网络维护时管理员会发现千兆网的数据传输速度反而比百兆网的速度的慢好几倍。则很有可能使某个关键路由器处理不过来。此时网络管理员就需要利用一定的工具查看网络中是否存在ICMP源抑制信息。如果存在的话,则这个千兆网速度没有百兆网快很可能是因为某个路由器成为了网络中的瓶颈资源。管理员需要升级这个路由器,以改善其处理性能。

  另外,如果在思科路由器的特权模式下,还可以对这个命令进行扩展,以实现更多的功能。如在特权模式下,Port number是一个很有用的扩展属性。网络管理员通过这个命令可以使工程技术人员跟踪特定的传输层端口。因此通过这个命令网络管理员不但可以确认源端与目的地址之间的IP连通性;而且还可以确认高层服务的连通性问题(即可以通过此来判断目的设备是否开启了相关的高层服务)。

  三、Tracle实例解析

  1. 利用Trace命令判断路由器是否存在访问控制列表。

  如现在网络管理员发现可以Ping远程路由器设备,但是却无法Telnet到远程路由器进行远程维护。因为网络管理员在某个设备中可以通过Telnet连接到这个远程路由器。现在更换了一个设备却不行了,那么网络管理员就怀疑是路由器设置了扩展访问控制列表的原因。网络管理员该如何验证自己的判断呢?

  其实很简单哪。网络管理员可以利用Trace命令在源地址上检查目的设备主机上的Telnet端口是否可以访问(采用思科路由器特权模式下的Port number属性)。如果只有管理员以前使用的设备可以Telnet端口,而其他地址都被拒绝访问的话,就就可以百分之百的证明这台路由器设备存在扩展访问控制列表。此时网络管理员若有远程路由器管理权限的话,就需要先用自己的设备修改扩展访问控制列表中的限制。把其他涉别的MAC地址或者IP地址加入进去,允许其进行Telnet访问。然后再通过其他设备进行Telnet访问。

  2. *号并不一定表示网络不通。

  当网络管理员利用Trace测试路由器的连通性时,如果路由器返回*符号,并不一定代表网络不通。因为Trace命令是采用网间控制信息协议(简称ICMP)协议的。网间控制ICMP是用于路由器之间传递控制信息和报错的协议。ICMP使用IP数据包,但是这些数据是由IP软件处理,而不会直接传送给用户。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。

  但是ICMP协议有着先天行的缺陷,如很容易遭受对方的洪水攻击。洪水攻击简单的说就是攻击者通过某种手段同时让多台网络设备向目标设备发送ICMP包从而让目的设备忙不过来而拒绝接受新的数据包。为此为了提高网络设备的安全性,不少网络管理员会关闭掉ICMP响应。此时,当网络管理员Trace远程网络设备时就会出现*符号,表示报文超时。

  另外网络管理员在使用这个Trace命令时需要注意一个问题。如果源地址到目的地址之间存在多条路径,则这个命令返回报文的源地址可能不大相同。如果遇到这种情况,则网络管理员就需要仔细比较不同返回报文显示的延迟时间。通常情况下延迟时间比较少的会优先路径。管理员主要考察延迟时间短的几个路径即可。除非管理员需要考察特殊路径,那么最好能够知道特定路由器的IP地址。

0
相关文章