网络故障排除步骤

发布时间:2019-10-01 21:03:58

  1. 如果是网络不通,要定位具体的问题,一般是不断尝试排除不可能故障的地方,最终定位问题根源。一般需要查看
        是否接入到链路
        是否启用了相应的网卡
        本地网络是否连接
        DNS故障
        能否路由到目标主机
        远程端口是否开放
      2. 如果是网络速度慢,一般有以下几个方式定位问题源:
        DNS是否是问题的源头
        查看路由过程中哪些节点是瓶颈
        查看带宽的使用情况
    一般来说当存在网络不通的故障时,访问出端和入端的信息是我们都要收集的,目的在于确定问题所在的主机或者区段。假如a不能访问c而b能够访问c,那么很明显问题出在a或a到c的网络上,而通过同一子网中的几台机器a、b可以正常访问网络,却不能访问c,那么可能是这个网络到c存在问题,或c存在问题。
      定位了问题所在的主机,一般有一些步骤来逐渐缩小问题范围,最终定位问题:
    1.物理链路是否连通
    即检查网卡与网络是否物理连通,网线是否插好且连接可用,很多时候不能立刻到机房看一下,可用用命令查看。
    #ethtool eth0
    例如:使用ethtool 查看 eth0 的物理连接
    其中Speed: 1000Mb/s 显示了当前网卡的速度;Duplex: Full显示了当前网络支持全双工;Link detected: yes 显示当前网卡和网络的物理连接正常。通常网速和全/半双工状态是主机和网络协议商自动协商的,例如这里第8行的 auto-negotiation。如果发现Duplex行的双工被设置成了Half,可以手动将其改为全双工网络:

ethtool -s eth0 autoneg off duplex full

  1. 网卡是否正常启用
    一般网络物理连接故障的情况并不多见,当排除物理连接上的问题后,需要进一步查看网卡的工作状态。
    例如:使用ifconfig命令检查网卡eth1状态
    输出的信息中,第二行显示了对该网卡的配置,包括IP,子网掩码等,这里可以检查是否出现错配,如果这一行显示不正确,那一定是网卡没有正确配置开启。
    • 基于Debian的Linux的(永久)网络配置文件在/etc/network/interfaces,
    • 基于Red Hat的Linux的(永久)网络配置文件在/etc/sysconfig/network_scripts/ifcfg-

  2. 是否正确设置网关
    如果网卡已经正常启动,需要确认目标网络接口是否正确配置网关,同时主机和网关之间的连接没有问题,通过route命令和ping命令结合完成这一阶段的排查。
    例如使用route命令查看内核路由表。
    #route -n
    route -n 以IP而不是主机名的形式显示网关等信息,一方面更快,另一方面不涉及DNS,通过route命令查看内核路由,检验具体的网卡是否连接到目标网路的路由,之后就可以尝试ping 网关,排查与网关之间的连接。
    如果无法ping通网关,可能是网关限制了ICMP数据包,或者交换机设置的问题。

  3. DNS工作状况
    有些网络问题是DNS故障或配置不当造成的,nslookup和dig命令能够用来排查DNS问题。如果这里nslookup命令无法解析目标域名,则很有可能是DNS配置不当,到/etc/resolv.conf文件中查看是否存在域名服务器的配置:
    及时生效的DNS配置——/etc/resolv.conf文件。
    永久生效的DNS配置——/etc/networks/interfaces文件
    如果我们的DNS服务器在一个子网内,而无法ping通它,这个DNS服务器很可能已经宕机。

  4. 使用nmap工具检测端口开放情况

nmap -p 22 220.181.111.188

同样的服务器,使用nmap检测,观察到第7行,说明实际上该服务器是启用了22端口的,但是防火墙过滤了数据包,如果端口真的没有启用,那么第7行的STATE将显示closed,而不是filtered。开放的端口其状态将是open。这时就可以了解,端口无法连接的原因是端口关闭还是防火墙过滤了。
端口开启的命令是:nc -lp 23 &(打开23端口,即telnet)
5. 本机查看监听端口
如果要在本地查看某个端口是否开放,可以使用如下命令:

netstat -lnp | grep PORT

其中,参数:
• -l,显示正在监听的套接字
• -p,显示套接字所属的进程ID和进程名
• -n,以数字形式显示地址
其中第一列是套接字通信协议,第2列和第3列显示的是接收和发送队列,第4列是主机监听的本地地址,反映了该套接字监听的网络;第6列显示当前套接字的状态,最后一列显示打开端口的进程。

  1. 查看防火墙规则
    使用# iptables –L命令查看当前主机的防火墙。
    使用# iptables –F命令清理当前主机的防火墙规则。
  2. 网络较慢的排查。
    网络较慢的排查事实上比网络不通的排查更有挑战,因为很多时候可能是运营商、DNS等的原因,这些故障常常不在我们的控制范围之内,只能收集证据向其反馈或对其进行投诉。
      如果不想受到DNS的影响,上面提到的命令可以添加 -n 选项,-n选项可以阻止试图将IP解析为主机名,从而绕过DNS。
    (1.)mtr
    不仅可以查看路由的正确性,还可以查看网络中每一跳的延时,从而定位延时最高的网络区段。
    (2)iftop
    iftop命令类似于top命令,查看哪些网络连接占用的带宽较多。
    该命令按照带宽占用高低排序,可以确定那些占用带宽的网络连接,
      最上方的一行刻度是整个网络的带宽比例,下面第1列是源IP,第2列是目标IP,箭头表示了二者之间是否在传输数据,以及传输的方向。最后三列分别是2s、10s、40s时两个主机之间的数据传输速率。
      最下方的TX、RX分别代表发送、接收数据的统计,TOTAL则是数据传输总量。
    • 使用 -n 选项直接显示连接的IP,例11中看到的则是解析成域名后的结果。
    • -i 选项可以指定要查看的网卡,默认情况下,iftop会显示自己找到的第一个网卡;
    • 在进入iftop的非交互界面后,按 p 键可以打开或关闭显示端口,按 s 键可以显示或隐藏源主机,而按 d 键则可以显示或隐藏目标主机。
    (3)tcpdump
    当一切排查手段都无济于事时仍然不能找到网络速度慢、丢包严重等原因时,往往祭出杀手锏——抓包。抓包的最佳手段是在通信的双方同时抓取,这样可以同时检验发出的数据包和收到的数据包,tcpdump是常用的抓包工具。

tcpdump -n port N //只捕捉特定端口的流量

tcpdump -n port N1 or port N2 //捕获多个端口的流量

tcpdump -w output.pcap //数据包转储,将原始数据包保留到output.pcap

tcpdump -C 10 -w output.pcap //限制每个转储文件的上限,达到上限后将文件分卷(以MB为单位)

tcpdump -C 10 -W 5 -w output.pcap //不仅限制每个卷的上限,而且限制卷的总数

tcpdump -r output.pcap //重播已经保存的数据包记录

Published by

风君子

独自遨游何稽首 揭天掀地慰生平