飞道的博客

计算机网络——排查网络故障

370人阅读  评论(0)

点赞后看,养成习惯
喜欢的话 可以点个关注哟
你们的点赞支持对博主们来说很重要哦 !!!

我们知道,在复杂的互联网环境下,网络卡顿的问题时有发生,那么在此情况下,如何快速定位网络故障?快速判断是网速问题还是设备问题呢?别着急,今天教你两招,解决以下问题?

如果你发现访问网页的时候有点卡卡的,断断续续很不流畅。你想看看端对端的往返延迟,以及丢包的概率,你可以用什么?Ping

发出几个包之后,却没有回包,那我们接下去该如何排除故障呢?Traceroute






01 初期诊断Ping协议




1、Ping的使用场景

如果你发现 访问网页的时候有点卡卡的,断断续续很不流畅。你想看看端对端的往返延迟,以及丢包的概率,你可以用什么?

回答这个问题之前,我们先来看看IP协议本身存在着弊端。

IP提供了不可靠和无连接的数据报交互,不可靠是说IP协议就是个甩手掌柜,它把IP数据包发送出去之后,根本不管对方收不收得到,要不要回包,总是把包发出去就是它唯一做的事情了


所以,在不进行任何检查的情况下,我们很难排查出到底是哪里出了问题。

而对于我们来说,最开始选择的检查方式就可以是ping,来测试网络连通性。

接下来举个例子,我们可以使用ping这个小程序,比如在小明windows命令行cmd下输入ping 2.2.2.2

2、Ping的实际动作

那Ping命令下究竟发生了什么呢?

2.1、Ping程序组织好自己的ICMP报文,其中:

Identifier用于区分不同的Ping程序
Sequence Number用于区分一个Ping程序消息序列号
Type = 8 ,表示这是一个 Echo Request

然后调用IP进程发出ICMP报文,此时TTL = 64,
路由器A接受到此IP报文,做TTL-1操作得到TTL = 63 ,查询路由表,发给下一跳路由器B。

一句以上同样的过程,经过26跳路由器的中继,最终到达小美的IP报文 TTL = 64 - 26 = 38

2.2、小美电脑把ICMP消息转交给ICMP进程,ICMP进程只是把Type 修改为 0,然后调用IP进程发出,此时 TTL = 64

路由器Z接收到此IP报文,做TTL - 1 操作得到TTL = 63,查询路由表,发给下一跳路由器Y

依据以上同样的过程,经过26跳路由器的中继,最终到达小明的IP报文 TTL =64 -26 =38,转发给小明Ping程序



2.3、依据ID与序列号匹配,比如发出的ID=1,序列号为1234,接受的回应ID =1 ,序列号 = 1234,那么这一对消息完全匹配,匹配成功,关掉定时器,得到往返的延迟RTT值,获得TTL剩余值为38,打印一个消息到屏幕上,告知小明Ping的结果。

一般会发出5个Ping消息,最终会生成一个RTT的平均值、最小值、最大值,丢包个数、丢包的概率,打印在程序的后方

3、 Ping的相关知识

3.1、 TTL是什么?

TTL是 Time To Live 的英文缩写,用于表示IP报文的生存寿命, 类似游戏里的几条命或者几滴血,每经过一台路由器就减去一条命,如果没有命了,就意味着 Game Over,路由器就会丢弃它

那难道路由器就这么丢弃了,当做什么都没有发生吗。这也太不靠谱了吧。当然不是!

至少还要告诉IP报文的主人,TTL Expired这个消息告诉源主机, 你家的那个跑腿的ping协议,因为没有血了,被我扔出窗外了,告诉你一声。小明的Ping程序接收到这个消息,会打印到屏幕上,小明就获知这个不幸的消息。






3,2 、TTL为什么要减一操作?

避免因为环路给路由器造成 无穷负担


真实的网络环境下一班路由器之间都有多条线相连,可能会出现 A ->B -> C -> A ->B -> C,这样子的话三台路由器就形成了一个三角形的环,IP报文会在这里无休止地转圈圈。

为了不给环路中的路由器造成无休止的负担, 每经过一跳路由器,减去一条命,一个IP报文最多有255条命,那么经过255跳之后,命没了扔掉就好, 这可以减轻路由器的负担。你可以无理取闹,但是不能一直无理取闹。



3.3、TTL Expried消息如何通知相关进程?

出错消息到达小明电脑的时候,他该如何通知对应的进程告呢?

要知道,一台电脑上,同时运行的进程或许有成百上千个,这个ICMP出错消息要怎么找呢?

实际上在ICMP消息体里,至少有28个字节的原始IP报文字段,所谓原始IP报文就是小明发出的Ping报文。

而这28个字节里面可以恰恰容纳 IP + ICMP头,而在TCMP头里恰恰有ID字段,比如ID =1 ,小明的电脑就会准确定位这个Ping程序,于是将出错消息果断转交给Ping程序处理。

3.4、超时时间(Timeout)

一旦Ping报文发出之后,总不能一直傻傻地等吧,需要启动一个定时器,默认的超时时间的2s,这个值对绝大多数的场合来说是足够了。如果在2s以内,不能收到回复,则直接超时处理。Ping程序会告诉小明:超时了。


小明也可以修改超时时间短一些,可以更快知道结果

如果你这么久还没有回复我,那我就不等你消息了,傲娇!!!


3.5、探测路径最大传输单元

就像如果你要运输100吨货物,你可能会把100吨的货物分成十份,每十吨放进一个集装箱运输一样。


为了保证可靠传输、传输效率的综合考虑,链路层一般会对发送的帧尺度有一个限制。比如以太网标准最大传输单元位1500字节,在家用的接入网,加入了PPPoE拨号,郑佳乐8个字节的头部,这样势必是的IP报文从1500字节减少到1492字节。

互联网上的物理路径,由于各种原因,加上各种隧道头、协议头、留给IP报文的空间小于1500字节,为了获知个人电脑和服务器之间的最大传输单元(对于IP报文来说),需要使用Ping程序来发现

如 Ping -f -l 1500 8.8.8.8

参数 -f 表示,如果IP报文大小超出路由器的发送接口的最大传输单元,则不允许任何路由器分片

参数 -l 1500,ICMP消息体的长度,不包括IP头、ICMP头的长度

这条命令会产生一个长度大于1500的IP报文,这个值大于一般物理接口的MTU,由于不允许分片,最终会被丢弃。

最终根据二分法,不断尝试,如果最终发现 Ping -f -l 1464 8.8.8.8能够得到服务器的回应,那么就意味着ICMP消息体是1464,加上20字节的IP头,再加上8字节的ICMP头,一共是1492字节。
这意味着小明电脑和服务器的最大传输单元MTU是1492,至于为什么1492而不是1500,是因为有8字节的PPPoE协议头


3.6、Ping不同的情况分析

主机不可达,TTL到0了

网络不可达, 阻塞了,太卡了,堵车了,就丢包了

端口不可达, 你要到达的端口没有开启

协议不可达, ACL,访问控制列表,不允许你这个IP给我发送数据

需要分片

源路由错误

未知的目的网络

未知的目的主机



02 追加诊断Traceroute协议




1、Traceroute的使用场景

当使用Ping命令,发出几个包之后,却没有回包,那我们接下去该如何排除故障呢?

我们可以使用Traceroute工具,这个工具可以追踪网络路径,谁的网络路径呢?是IP包的,追踪的是IP包双向路径,IP包从小明发出到达小美,这是出方向;IP包从小美返回小明,这是入方向的;只要有一个方向的IP包不能通行,用户机会感觉网络出现问题了。

Traceroute会把小明,小美之间所经过的每一跳路由器都打印出来,同时还会打印小明到每一跳路由器的最大、最小、平均延迟,这样就画出了了一张中继设备的连接图,哪有出现问题就一目了然了


2、Traceroute的工作过程

那么Traceroute究竟是如何工作的呢?

1、TTL = 1

Traceroute使用UDP协议来传输探测回声,目的端口号一般位于32768-65535之间,假设这里使用的是65000,IP头里会有一个小技巧,将TTL设置为1,这样子当这个IP包到达第一跳路由器,做TTL - 1 操作,TTL会变为0,路由器就要使用ICMP发出错误消息:TTL Expired,同时还会截取回声IP包至少28个字节放在ICMP消息里。

为什么要截取28个字节,有什么用呢?

其中包含20字节的IP头、8字节的UDP头,这样小明ICMP进程就会根据UDP端口号来定位是哪个进程的报错消息,揉揉眼睛一看,原来是Traceroute的报错消息啊,然后就转交给它来处理

Traceroute将第一跳路由器打印输出,这一步一共发送三个探测包,最终会得到往返延迟的最大、最小、平均延迟,并打印输出

以此类推


N、TTL = N

TTL = 2 ,到达第二跳,TTL 也变为 0 ,也发报错消息,小明就会知道第二跳的IP地址。

依照以上类似方法,TTL一直变化为3、4、5…N,小明就会知道第三跳、第四跳…第N跳的IP地址,并将它们一一打印出来


第N+1步:TTL = N + 1

最终IP报文到达了小美的电脑,IP进程发现这是本地的IP地址,于是依据UDP报文中的目的端口号65000,去尝试发现进程,结果没有发现有进程和端口号65000绑定,于是通知小明一个出错消息,即端口不可达

小明接收到这个消息,则可以放心地认为,回声探测已经达到了终点,把最后一跳路由器的IP打印出来,整个过程结束



03 排查故障简单小结

当我们在网络连接方面出现问题的时候,首先我们用Ping某个IP地址测试网络连通性,如果Ping命令成功返回4次成功的RRT,则大概率网络通信无问题,网络连接可能网速或者网络不稳定。

如果Ping命令发现没有成功ping通,则接着采用Traceroute协议进行查看,精准定位到到底是那一台路由器,那一段的网段出现问题。

这是一个从整体到局部,从一个大范围缩小到某台路由器的排查网络故障过程。




以上文章,作为自己的学习笔记,仅供参考

本文完,感谢你的阅读!!!

最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。


转载:https://blog.csdn.net/qq2539879928/article/details/106867141
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场