「NETWORKING」- 网络故障排除的核心思想和方法

  CREATED BY JENKINSBOT

故障处理对排障人员的要求

对协议要求有精深的理解。
能够引导客户详细描述出故障现象和相关信息。
充分了解自己所管理和维护的网络。
及时进行故障处理的文档记录和经验总结。
熟悉网络故障排除的方法,将多种方法结合使用。

方法一、以业务流量路径为核心

通常情况下,网络中业务流量的路径是在网络规划阶段就已经设计好的,只需要知道受到网络故障影响的业务的流量往返路径,跟踪此路径,逐步排除即可。

数据转发或许存在多条路径,需要确认业务流量路径:
1)数据链路层:确认业务流量对应的数据帧在二层网络环境中是如何被交换机转发的。
2)网络层:在数据包转发过程中可能存在多条路径,因此需要根据报文转发过程,确认业务流量的传输路径。

方法二、分层故障处理法

分层法很简单,所有模型都遵循相同的基本前提:当模型的所有低层结构工作正常时,它的高层结构才能正常工作。

一般建议在处理故障时,从参考模型自底向上进行故障排查(即从物理层开始):
7)应用层:
6)表示层:
5)会话层:
4)传输层:TCP连接是否正确建立,TCP、UDP端口是否打开等
3)网络层:有没有路由,路由协议工作是否正常等等
2)链路层:链路层封装是否正确,接口协议是否UP,二层寻址是否正常等
1)物理层:接口的物理状态是否UP、线缆及接头等是否正常等

方法三、对比配置法

对比配置法是指对比正常状态与故障状态下的配置、软件版本、硬件型号等内容,检查两者之间的差异。

经验较少的网络故障排除人员,或无其他排障思路时,可考虑在实践中使用这种方法。

方法四、分块故障处理法

华为的交换机和路由器等网络设备的配置文件具有清晰的组织结构。

当出现一个故障案例现象时,我们可以把它归入以下某一类或某几类中,从而有助于缩减故障定位范围 :
1)管理部分(路由器名称、口令、服务、日志等)
2)端口部分(地址、封装、cost、认证等)
3)路由协议部分(静态路由、RIP、OSPF、BGP、路由引入等)
4)策略部分(路由策略、策略路由、安全配置等)
5)接入部分(Console登录、Telnet登录、拨号等)
6)其他应用部分(DNS、DHCP、VPN配置等)

例如,当使用display ip routing-table命令,结果只显示出了直连路由,可能是什么原因呢?
根据上述的分块,该故障可能由以下三部分导致:路由协议、策略、端口。如果没有配置路由协议或配置不当,路由表就可能为空;如果访问列表配置错误,就可能妨碍路由的更新;如果端口的地址、掩码或认证配置错误,也可能导致路由表错误。此时,在排障时,我们首先对这些部分进行检查;

方法五、分段故障处理法

数据包转发过程中可能经过多台路由器和物理链路,每段物理连接都有可能发生故障,因此分段处理的方法是有效的。

方法六、替换法

替换法是检查硬件问题最常用的方法之一。

例如,当怀疑是网线问题时,更换一根确定是好的网线试一试;当怀疑是接口模块有问题时,更换一个其它接口模块试一试。

常见网络故障排除

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

情景一、无法访问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)条类似,是为了确定是否能正常访问网络,数据包是否能够发送到目标主机。

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?