13-网络排错工具的使用

1. 网络排错工具

  ping命令和tracert命令是网络中经常使用的排错工具,比如:我们在使用网络发送数据时发生了故障的时候,ICMP协议会把产生网络故障的信息发送给源点,通过这些反馈的错误信息来排除网络故障。

2. ping工具的使用

13-网络排错工具的使用_第1张图片

图1

   在图1中,就是通过ping命令向www.hao123.com网站发送了四个数据报,每个数据报32字节,数据报往返时间最短是63毫秒,最长是894毫秒,平均是298毫秒,看到以上这些信息说明网络是通的,另外从TTL值上我们还可以知道对方主机是linux系统。

   在图2中,,通过wireshark抓取到的icmp数据报可以知道,ping命令发送了四个数据报,说明以下抓到的icmp数据报对应有四组才对。
13-网络排错工具的使用_第2张图片

图2

我们在抓到的数据报列表中来分析以下几个字段值:
  TTL = 64:linux操作系统下TTL值默认64,说明这个ICMP数据报是由linux操作系统发送

  TTL = 128:windows操作系统下TTL值默认是56,也就是说这个ICMP数据报是由windows操作系统发送

  seq:表示序列号,同为一组的ICMP数据报seq值是一样的。

  也就是说上面TTL值为56的数据报是linux操作系统所发送的ICMP数据报,所以我们在分析数据报的时候,特别是查看标识符和序列号,一定不能看错,因为不同的操作系统,对这两个字段值的标识是不一样的

Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x4cf6 [correct]
    [Checksum Status: Good]
    Identifier (BE): 1 (0x0001)     //用于标识该数据报是linux操作系统发送的
    Identifier (LE): 256 (0x0100)   //用于标识该数据报是windows操作系统发送的
    Sequence number (BE): 101 (0x0065)     //用于标识该数据报是linux操作系统发送的
    Sequence number (LE): 25856 (0x6500)   //用于标识该数据报是windows操作系统发送的
    [Response frame: 1234]
    Data (32 bytes)

  图3中,这一部分就是刚才ping命令所发送的数据部分,也就是说ICMP请求报文和ICMP应答报文发送的数据是一样的。

13-网络排错工具的使用_第3张图片

图3

从中可以发现ping命令所发送的ICMP数据报也封装成IP数据报文了。
13-网络排错工具的使用_第4张图片


下面我们再来看一下这个数据报:
13-网络排错工具的使用_第5张图片

  从这个数据报中我们发现不管是ICMP的请求报文还是应答报文,它们的TTL值都是64,这说明了什么?其实这意味着对方主机和我们一样,都是windows操作系统。

3. tracerout工具的使用

  如果我们想知道一个数据报从源地址到目标地址中间经过了那些路由器可以使用tracerout工具,而traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的路由器,然后监听一个来自路由器的icmp应答,发送一个udp数据包的大小默认为 38个字节。

  windows下的tracert命令是路由跟踪程序,专门用于确定IP数据报访问目标地址路径,可以让我们看到IP数据报从一台主机传到另一台主机的网络传输过程中所经过的路由,每经过一个路由就会回送一个ICMP的数据报文。通过这种跟踪数据链路路径可以帮助我们发现到达目标网络到底是哪一条链路出现了故障。

  下面来看一下,tracerout到底是怎么跟踪数据在链路传输过程中经过的路由器的,来看图4。
13-网络排错工具的使用_第6张图片

图4-tracert原理

  tracerout的原理如图4所示,pc1想要跟踪pc2的目标地址链路上的所有路由设备的话,pc1第一次发送udp数据报设置目标地址为192.168.3.2,设置TTL值为1,然后该数据报在发送到目标地址192.168.3.2时,会先转发到RA设备且TTL值会减1,RA在转发时由于此时TTL值为0了,所以RA设备会丢弃该数据包并发送一个ICMP差错报文给PC1。

  同理,pc1在第二次发送udp数据报时设置TTL值为2,RB接收到该数据报时TTL值也是为0,RB也会丢弃该数包并发送一个ICMP差错报文给pc1。

  pc1第四次发送udp数据报时,目的主机接收到该数据报会查看数据报的内容,由于该数据报封装的端口目的主机没有开启,目的主机也会发送一个ICMP的一个端口不可达的差错报文给pc1。

注意:如果RA和RB,RC路由设备默认关闭了ICMP回复功能,或者数据报经过防火墙的话,那么pc1在发送时就不会收到ICMP回复数据报。

通过tracert命令跟踪www.baidu.com站点为例:
13-网络排错工具的使用_第7张图片

图5-跃点跟踪

  图5中,tracert命令最多能跟踪30个路由设备,我们发送的ip数据报到目标地址时经过了13个路由设备,每一个路由设备都发送了3次icmp报文,其中第13个是www.baidu.com站点的目标地址183.232.231.173。另外我们还看到3,4,8,11,12这几个路由器都是请求超时,说明这几个路由器是没有返回icmp差错报告报文,因此可能是这些路由器设备被设置为禁止发送icmp差错报告报文


来看tracert命令跟踪的第一个路由器设备的icmp数据包:
13-网络排错工具的使用_第8张图片

  在图中我们知道,icmp差错报告报文是局域网下的路由设备(192.168.0.1)发送给本机(192.168.0.102)的,且在icmp差错报文里封装了一个icmp请求报文,需要注意的是:上面那个ICMP超时差错报文是针对下面那个ICMP请求报文做出的回应。换句话说,路由设备拿到这个icmp请求报文本来应该是要转发给www.baidu.com站点的(183.232.231.173),但是由于TTL值为0,该icmp报文失效,于是就针对这个icmp请求报文发送了一个icmp差错报告报文,也就是在icmp差错报告报文里封装了这个icmp请求报文的信息。

4.linux下mtr工具使用

  linux下mtr工具和前面我们在windows下使用的pathping工具是一样的,不过显然Linux中有一个更好的网络连通性判断工具,就是mtr命令。

  通过mtr -h命令发现,mtr有很多选项,下面我们来一个一个查看这些选项的信息:
13-网络排错工具的使用_第9张图片

图6-mtr的参数选项

mtr主要的参数选项有以下这些

mtr -h:用来查看mtr命令的一些帮助选项
mtr -r:该选项是对报告模式进行排列,让我们更好的查看mtr的相关网络数据信息
mtr -s:用来指定发送的ping数据包的大小
mtr -n:表示no dns,即不对ip地址做域名解析
mtr -a:设置发送ping数据包的源ip地址
mtr -i:设置ICMP返回的时间,默认是1秒。
mtr -c:使用方法跟ping命令一样,-c选项是用于指定发送ping数据包的次数。

  下面来看一个综合的例子:mtr -r -n -i 1 -c 3 -s 100 www.baidu.com

  这条命令的意思是:对mtr报告模式显示,通过mtr工具给www.baidu.com发送ping数据包,且不作域名解析,icmp返回的时间为1秒,发送的ping数据包次数为3次,每个ping数据包的大小为100。

13-网络排错工具的使用_第10张图片

图7-mtr统计数据

我们可以看到mtr工具把这些mtr统计的数据总共分成了八列。
  HOST:可以是IP地址或者本机域名
  Loss%:同一行中的ip地址对应的丢包率
  Snt:发送数据包的次数
  Last:最后一个包的延时,因为我们指定发送了3次,所以这里的时延指的是第三次发送的数据包的时延
  Avg:所有包的平均延时
  Best:这3次中,最小的时延是多少
  Wrst:这3次中,最大的时延是多少

关于时延这些计算机网络中的概念,有不清楚的可以参考:4-计算机网络常用性能指标

你可能感兴趣的:(tcp/ip协议修炼心法)