5.1如何排查网络故障
目录介绍
- 01.学会使用Ping工具
- 1.1 Ping工具是什么
- 1.2 Ping工具的用途
- 1.3 Ping工具使用
- 1.4 Ping诊断结果分析
- 1.5 Ping常见案例
- 1.6 Ping基础的原理
- 02.用ifconfig查询网络
- 2.1 ifconfig 是什么
- 03.netstat和lsof
- 3.1 netstat和lsof是什么
- 04.HTTP应用排查工具
- 4.1 应用层排查工具
- 4.2 找到有问题服务端IP
- 4.3 辅助排查网页慢问题
- 4.4 解决失效Cookie
- 4.5 查看证书的信息
- 05.传输层排查工具
- 5.1 路径可达性测试
- 5.2 查看当前连接状况
- 5.3 查看当前连接传输速率
- 5.4 查看丢包和乱序等统计
- 06.网络层排查工具
- 6.1 查看网络路径状况
- 6.2 查看路由
- 07.数据链路层工具
01.学会使用Ping工具
1.1 Ping工具是什么
- Ping工具是一种网络诊断工具,用于测试计算机或设备与目标主机之间的网络连接和延迟。
- 它通过发送ICMP(Internet Control Message Protocol)回显请求消息(ping请求)到目标主机,并等待目标主机返回ICMP回显应答消息(ping应答)来测量往返时间(Round-Trip Time,RTT)和丢包率。
1.2 Ping工具的用途
- 测试网络连接:通过向目标主机发送ping请求,可以确定计算机或设备与目标主机之间是否能够建立网络连接。如果目标主机返回ping应答,表示网络连接正常;如果没有应答,可能存在网络故障或目标主机不可达。
- 测量延迟:通过计算ping请求和应答之间的往返时间(RTT),可以估计计算机或设备与目标主机之间的延迟。较低的延迟通常表示网络连接较好,而较高的延迟可能会影响网络性能和响应时间。
- 检测丢包:通过比较发送的ping请求和接收到的ping应答数量,可以检测网络中的丢包情况。丢包率较高可能表示网络拥堵、连接不稳定或目标主机负载过高。
1.3 Ping工具使用
- 通过输入ping命令加上目标主机的IP地址或域名来执行。
- Ping工具还提供了一些可选参数,如设置ping请求的次数、超时时间、包大小等。
- 按下Ctrl + C键组合。这将发送中断信号给正在运行的Ping进程,使其停止。
PING ww1.sinaimg.cn.w.alikunlun.com (61.184.4.235): 56 data bytes 64 bytes from 61.184.4.235: icmp_seq=0 ttl=64 time=18.723 ms 64 bytes from 61.184.4.235: icmp_seq=1 ttl=64 time=16.442 ms 64 bytes from 61.184.4.235: icmp_seq=2 ttl=64 time=11.551 ms 64 bytes from 61.184.4.235: icmp_seq=3 ttl=64 time=12.709 ms 64 bytes from 61.184.4.235: icmp_seq=4 ttl=64 time=11.804 ms 64 bytes from 61.184.4.235: icmp_seq=5 ttl=64 time=10.068 ms 64 bytes from 61.184.4.235: icmp_seq=6 ttl=64 time=10.179 ms 64 bytes from 61.184.4.235: icmp_seq=7 ttl=64 time=12.532 ms 64 bytes from 61.184.4.235: icmp_seq=8 ttl=64 time=12.161 ms ^C --- ww1.sinaimg.cn.w.alikunlun.com ping statistics --- 9 packets transmitted, 9 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 10.068/12.908/18.723/2.700 ms
- 使用 ping 命令探测了和新浪网的网络连通性。
- 可以看到,每次显示是按照 sequence 序列号排序显示的,一并显示的,也包括 TTL(time to live),反映了两个 IP 地址之间传输的时间。
- 最后还显示了 ping 命令的统计信息,如最小时间、平均时间等。
1.4 Ping诊断结果分析
- 目标主机的IP地址:
- Ping命令的结果通常会显示目标主机的IP地址。这可以帮助您确认您正在与正确的主机进行通信。
- 往返时间(Round-Trip Time,RTT):
- Ping命令会显示每个ping请求的往返时间,即从发送ping请求到接收到ping应答的时间。较低的RTT通常表示网络连接较好,而较高的RTT可能会影响网络性能和响应时间。
- 丢包率:
- Ping命令还会显示每个ping请求的丢包情况,即发送的ping请求中未收到ping应答的比例。较低的丢包率通常表示网络连接较稳定,而较高的丢包率可能表示网络拥堵、连接不稳定或目标主机负载过高。
- 平均往返时间(Average RTT):
- 通过分析多个ping请求的RTT,可以计算出平均往返时间。平均RTT可以提供一个更全面的网络连接质量评估,而不仅仅是单个ping请求的结果。
- 最小和最大往返时间(Minimum和Maximum RTT):
- Ping命令的结果还会显示多个ping请求中的最小和最大RTT值。这可以帮助您了解网络连接的变化范围和稳定性。
1.5 Ping常见案例
- 案例1: 连接超时
- 在这种情况下,Ping命令的结果显示了连续的超时错误。这表示所有的ping请求都未能接收到ping应答。
- 这可能表示与目标主机之间的网络连接中断或目标主机不可达。可能的原因包括网络故障、目标主机关闭或防火墙设置阻止了ping请求。
yangchongdeMBP:~ yangchong$ Ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2
- 案例2: 高延迟和丢包
- 案例1: 低延迟和无丢包
1.6 Ping基础的原理
- ping 命令的原理到底是什么呢?它是基于 TCP 还是 UDP 开发的?
- 都不是。ping 是基于一种叫做 ICMP 的协议开发的,ICMP 又是一种基于 IP 协议的控制协议,翻译为网际控制协议。
- ICMP 在 IP 报文后加入了新的内容,这些内容包括:
- 类型:即 ICMP 的类型, 其中 ping 的请求类型为 8,应答为 0。
- 代码:进一步划分 ICMP 的类型, 用来查找产生错误的原因。
- 校验和:用于检查错误的数据。
- 标识符:通过标识符来确认是谁发送的控制协议,可以是进程 ID。
- 序列号:唯一确定的一个报文,前面 ping 名字执行后显示的 icmp_seq 就是这个值。
- 发起 ping 命令时,ping 程序实际上会组装成如图的一个 IP 报文。
- 报文的目的地址为 ping 的目标地址,源地址就是发送 ping 命令时的主机地址,同时按照 ICMP 报文格式填上数据,在可选数据上可以填上发送时的时间戳。
- IP 报文通过 ARP 协议,源地址和目的地址被翻译成 MAC 地址,经过数据链路层后,报文被传输出去。
- 当报文到达目的地址之后,目的地址所在的主机也按照 ICMP 协议进行应答。
- 之所以叫做协议,是因为双方都会遵守这个报文格式,并且也会按照格式进行发送 - 应答。
- 应答数据到达源地址之后,ping 命令可以通过再次解析 ICMP 报文,对比序列号,计算时间戳等来完成每个发送 - 应答的显示,最终显示的格式就像前面的例子中展示的一样。
02.用ifconfig查询网络
2.1 ifconfig 是什么
- ifconfig是一个用于配置和显示网络接口信息的命令行工具
- ifconfig命令可以用来查看和配置网络接口的IP地址、子网掩码、广播地址、MAC地址等信息。
- 它还可以启用或禁用网络接口,设置MTU(最大传输单元)大小,配置静态路由等。
- 以下是一些常用的ifconfig命令选项和用法:
- ifconfig:显示所有网络接口的信息。
- ifconfig eth0:显示特定网络接口(如eth0)的信息。
- ifconfig eth0 up:启用特定网络接口(如eth0)。
- ifconfig eth0 down:禁用特定网络接口(如eth0)。
- ifconfig eth0 192.168.0.10 netmask 255.255.255.0:为特定网络接口(如eth0)配置静态IP地址和子网掩码。
- ifconfig eth0 hw ether 00:11:22:33:44:55:为特定网络接口(如eth0)配置MAC地址。
- ifconfig eth0 mtu 1500:设置特定网络接口(如eth0)的MTU大小为1500字节。
03.netstat和lsof
3.1 netstat和lsof是什么
- netstat和lsof
- 都是用于查看系统网络连接和打开文件的命令行工具。
- netstat(网络统计):
- netstat命令用于显示网络连接、路由表和网络接口统计信息。它可以提供有关当前活动的网络连接、监听端口、网络接口的详细信息,以及网络连接的状态等。
- netstat命令在不同操作系统上的选项和输出格式可能会有所不同。 一些常见的netstat命令选项和用法包括:
netstat -a:显示所有活动的网络连接和监听端口。 netstat -t:显示TCP协议相关的网络连接。 netstat -u:显示UDP协议相关的网络连接。 netstat -n:以数字形式显示IP地址和端口号,而不进行反向解析。 netstat -p:显示与每个网络连接关联的进程ID(PID)和程序名称。
- lsof(列出打开的文件):
- lsof命令用于列出当前系统中打开的文件和网络连接。它可以显示哪些进程打开了哪些文件、网络连接和UNIX域套接字。lsof命令对于诊断和排查与文件相关的问题非常有用。
- 一些常见的lsof命令选项和用法包括:
lsof:显示所有打开的文件和网络连接。 lsof -i:显示所有打开的网络连接。 lsof -i :80:显示使用端口80的网络连接。 lsof -p <PID>:显示特定进程ID(PID)打开的文件和网络连接。 lsof /path/to/file:显示打开指定文件的进程。
04.HTTP应用排查工具
4.1 应用层排查工具
- 现在主流的浏览器是 Google 的 Chrome,它本身就内置了一个开发者工具。
- 在 Chrome 界面里按下 F12,或者你是苹果系统的话,还可以按下组合键 option + command + I,启动开发者工具。
4.2 找到有问题服务端IP
- 比如有用户报告死活访问不了你的网站,但是你很清楚这个网站的域名对应了很多 IP 地址,你怎么知道用户连的是哪个 IP 呢?
- 你可以这样做:让客户启用开发者工具,在 Network 页找到主页对象,在它的 Headers 部分,就能看到 Remote address,这里的 IP 就是当前连接的 IP,比如下面这样:
- 因为 DNS 解析的关系,你很可能下次重连就不是这个 IP 了,所以每次都应该重新确认一下这个信息。
image
- 这个技巧,在排查公网的访问问题的时候特别有用。
- 要知道,现在流量大一点的网站都已经上了 CDN,那就必然在全国乃至全球各地,有少则数十个、多则数百个 CDN 终端节点,在给访问者提供就近的服务。
- 如果有人说他访问不了某个站点了,那么请一定让他用开发者工具,找到他连的远程 IP,然后你再根据这个信息展开排查工作。
4.3 辅助排查网页慢问题
- 访问页面感觉很慢,那么可以借助开发者工具的时间统计功能,找到耗时较高的 HTTP 资源对象,再针对性排查。
- 比如我觉得访问https://github.com很慢,那么可以先打开开发者工具,然后访问站点,等全部加载完成后,到 Network 页查看这些 HTTP 对象的加载时间。
- 这个办法只能排查到是哪个资源对象耗时比较长,但更进一步的排查,比如“为什么这个对象的加载时间比别的对象长”这个问题,开发者工具就难以回答了。
image
4.4 解决失效Cookie
- 有时候我们的 Cookie 过期了,导致无法正常登录站点
- 那么可以打开开发者工具,到 Application 页,找到 Storage -> Cookie,把对应的条目清除。
- 这样下次你再访问这个站点,就已经“洗心革面”了。对站点来说,你就是一次新的访问,可以生成一次新的 Cookie 了。
- 当然,你通过删除浏览器缓存的方式,也是可以做到这一点的。
- 但开发者工具的优点是,可以细粒度到这个网站级别,而删除缓存的方式,删除的就是所有站点的 Cookie 了,这未必是你想要的。
4.5 查看证书的信息
- 为了对 TLS 的问题进行排查
- 使用开发者工具的 Security 菜单,还可以查看更为详细的 TLS 信息,包括协议版本、密钥交换算法、证书有效期等等。
image
05.传输层排查工具
5.1 路径可达性测试
- 如果我们要测试 TCP 握手,有 telnet、nc 这两个常规工具。比如 telnet:
yangchongdeMBP:~ yangchong$ telnet www.baidu.com 443 Trying 180.101.49.12... Connected to www.a.shifen.com. Escape character is '^]'.
- 用 nc 呢,可以这样:
yangchongdeMBP:~ yangchong$ nc -w 2 -zv www.baidu.com 443 Connection to www.baidu.com port 443 [tcp/https] succeeded!
5.2 查看当前连接状况
- netstat 命令是一个经典命令了,很多同学都会使用它来获取当前的 TCP、UDP 等的连接信息,比如:
yangchongdeMBP:~ yangchong$ netstat -ant Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 192.168.8.134.52678 124.237.176.160.443 ESTABLISHED tcp4 0 0 192.168.255.10.52677 124.237.176.160.443 ESTABLISHED tcp4 0 0 192.168.8.134.52495 183.47.99.119.443 ESTABLISHED tcp4 0 0 192.168.255.10.52494 183.47.99.119.443 ESTABLISHED tcp4 0 0 192.168.8.134.52441 183.47.99.119.443 ESTABLISHED tcp4 0 0 192.168.8.134.52438 183.47.99.119.443 ESTABLISHED tcp4 0 0 192.168.255.10.52437 183.47.99.119.443 ESTABLISHED tcp4 0 0 127.0.0.1.42103 127.0.0.1.52308 ESTABLISHED tcp4 0 0 127.0.0.1.52308 127.0.0.1.42103 ESTABLISHED
5.3 查看当前连接传输速率
5.4 查看丢包和乱序等统计
06.网络层排查工具
6.1 查看网络路径状况
6.2 查看路由
- 01 | 网络模型和工具:网络为什么要分层?
- https://blog.csdn.net/qq_37756660/article/details/133521069
- 03 | 握手:TCP连接都是用TCP协议沟通的吗?
- https://blog.csdn.net/qq_37756660/article/details/133523158
- 05 | 定位防火墙(一):传输层的对比分析
- https://blog.csdn.net/qq_37756660/article/details/133526241
- 08 | 工欲善其事必先利其器:学会使用各种工具
- https://blog.csdn.net/qq_37756660/article/details/133869405