「网络」- 问题排查系列

  CREATED BY JENKINSBOT

每次网络问题,都要按照这个流程进行排查,然后完善这个流程。

情景一、无法访问HTTP网站

类似于“360断网急救箱”的排查流程…………在通常情况下,相同问题的解决思路是类似的。

(0)、测试其他网站能否正常访问
这一步就是先确定网络问题是发生在HTTP站点,还是我们自己的网络中。通常都发生在我们自己的网络中。

(1)、物理网线是否正常
使用ethtool工具检查网线是否正常。执行ethtool eth0命令,如果包含了Link detected: yes在输出中,则表示链路正常;如果是Link detected: no则表示链路异常。

(2)、网卡是否启动
使用ip命令检查网卡是否已经启动。执行ip link show wlan0命令,网卡的state必须是UP的。如果是DOWN则表示网卡没有正常启动。

(3)、是否分配IP地址
使用ip address命令检查网卡是否正确配置IP地址。执行ip link show wlan0命令,网卡的state必须是UP的。如果是DOWN则表示网卡没有正常启动。

(4)、是否正确配置路由
使用ip route命令查看主机的路由是否正确配置。执行ip route list命令查看路由,检查路由表是否正确配置。

(5)、能否ping通目标主机
这与第(0)条类似,是为了确定是否能正常访问网络,数据包是否能够发送到目标主机。

#!/bin/sh

ping -O -D example.com # 配合-O -D选项,可以明显看到回应的PING包

(6)、域名解析是否正常
使用dig命令测试域名解析是否正常。执行dig www.baidu.com命令检查域名能否正常解析。

(7)、其他可能原因:代理,防火墙,VPN,认证。
代理和防火墙的设置都会导致网络无法正常访问。

情景二、同一网段内的两台主机无法访问

例如,HostA无法访问HostB

(1)先确定是「服务无法访问」,还是「主机无法访问」
可以使用tcpdump命令在HostB上抓包,看看HostB是否收到了来自于HostA的数据包。防火墙工作与tcpdump之后,也就是说tcpdump是在防火墙之前先看到的数据包,因此可以抓包进行测试。

如果收到了数据包,那通常就是防火墙的配置问题了(极有可能),或者应用程序的问题(服务异常)。这个不再展开,这个比较容易排查。

如果没有收到数据包,那就是网络问题了,可以断定HostA的数据包没有到达HostB上。

(2)确定出现问题的主机
使用其他主机访问HostB,如果在HostB上发现了数据包,则是HostA的问题,否则为HostB的问题。

(3)如果是HostA的问题
与”情景一“检查主机的网络配置。

(4)如果是HostB的问题。
与”情景一“检查主机的配置。

通用的办法

从Linux的网络栈中跟踪数据包的发送,以检测数据包是否发送成功。

网络问题排查收集

TCP dies on a Linux laptop

参考文献

Linux系统排查4——网络篇
Linux network troubleshooting and debugging
How to show failed ping?