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

2. 网卡是否正常启用

一般网络物理连接故障的情况并不多见,当排除物理连接上的问题后,需要进一步查看网卡的工作状态。

例如:使用ifconfig命令检查网卡eth1状态

输出的信息中,第二行显示了对该网卡的配置,包括IP,子网掩码等,这里可以检查是否出现错配,如果这一行显示不正确,那一定是网卡没有正确配置开启。

  • 基于Debian的Linux的(永久)网络配置文件在/etc/network/interfaces,
  • 基于Red Hat的Linux的(永久)网络配置文件在/etc/sysconfig/network_scripts/ifcfg-<interface>

3. 是否正确设置网关

如果网卡已经正常启动,需要确认目标网络接口是否正确配置网关,同时主机和网关之间的连接没有问题,通过route命令和ping命令结合完成这一阶段的排查。

例如使用route命令查看内核路由表。

#route -n

route -n 以IP而不是主机名的形式显示网关等信息,一方面更快,另一方面不涉及DNS,通过route命令查看内核路由,检验具体的网卡是否连接到目标网路的路由,之后就可以尝试ping 网关,排查与网关之间的连接。

如果无法ping通网关,可能是网关限制了ICMP数据包,或者交换机设置的问题。

4. DNS工作状况

有些网络问题是DNS故障或配置不当造成的,nslookup和dig命令能够用来排查DNS问题。如果这里nslookup命令无法解析目标域名,则很有可能是DNS配置不当,到/etc/resolv.conf文件中查看是否存在域名服务器的配置:

及时生效的DNS配置——/etc/resolv.conf文件。

永久生效的DNS配置——/etc/networks/interfaces文件

如果我们的DNS服务器在一个子网内,而无法ping通它,这个DNS服务器很可能已经宕机。


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

# nmap -p 22 220.181.111.188

同样的服务器,使用nmap检测,观察到第7行,说明实际上该服务器是启用了22端口的,但是防火墙过滤了数据包,如果端口真的没有启用,那么第7行的STATE将显示closed,而不是filtered。开放的端口其状态将是open。这时就可以了解,端口无法连接的原因是端口关闭还是防火墙过滤了。

端口开启的命令是:nc -lp 23 &(打开23端口,即telnet)

4. 本机查看监听端口

如果要在本地查看某个端口是否开放,可以使用如下命令:

# netstat -lnp | grep PORT

  其中,参数:

  • -l,显示正在监听的套接字
  • -p,显示套接字所属的进程ID和进程名
  • -n,以数字形式显示地址

其中第一列是套接字通信协议,第2列和第3列显示的是接收和发送队列,第4列是主机监听的本地地址,反映了该套接字监听的网络;第6列显示当前套接字的状态,最后一列显示打开端口的进程。


5. 查看防火墙规则

使用# iptables –L命令查看当前主机的防火墙。

使用# iptables –F命令清理当前主机的防火墙规则。

6. 网络较慢的排查。

网络较慢的排查事实上比网络不通的排查更有挑战,因为很多时候可能是运营商、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 //重播已经保存的数据包记录