博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络性能排查
阅读量:6428 次
发布时间:2019-06-23

本文共 8734 字,大约阅读时间需要 29 分钟。

 

 

用于排查Linux网络,Client端网络性能

网络排查一般是有一定的思路和顺序的,其实排查的思路就是根据具体的问题逐段排除故障可能发生的地方,最终确定问题。

首要明白什么是网络性能,是网络不通,网络阻塞?

1.如果是网络不通,要定位具体的问题,一般是不断尝试排除不可能故障的地方,最终定位问题根源。一般需要查看

是否接入到链路

是否启用了相应的网卡

本地网络是否连接

DNS故障

能否路由到目标主机

远程端口是否开放

2. 网络阻塞,一般有以下几个方式定位问题源:

DNS是否是问题的源头

查看路由过程中哪些节点是瓶颈

查看带宽的使用情况

 

一,网络不通

一般来说当存在网络不通的故障时,访问出端和入端的信息是我们都要收集的,目的在于确定问题所在的主机或者区段。假如a不能访问c而b能够访问c,那么很明显问题出在a或a到c的网络上,而通过同一子网中的几台机器a、b可以正常访问网络,却不能访问c,那么可能是这个网络到c存在问题,或c存在问题。

  定位了问题所在的主机,一般有一些步骤来逐渐缩小问题范围,最终定位问题:

1. 链路是否连通

  即检查网卡与网络是否物理连通,网线是否插好且连接可用,很多时候不能立刻到机房确定物理连接,可以用命令:

# ethtool ethN

ehtN是连接到故障网络的网卡,

例1:使用ethtool 查看 eth0 的物理连接

[root@weblogic ~]# ethtool eth1Settings for eth1:        Supported ports: [ TP ]        Supported link modes:   10baseT/Half 10baseT/Full                                 100baseT/Half 100baseT/Full                                 1000baseT/Full         Supported pause frame use: No        Supports auto-negotiation: Yes        Advertised link modes:  10baseT/Half 10baseT/Full                                 100baseT/Half 100baseT/Full                                 1000baseT/Full         Advertised pause frame use: No        Advertised auto-negotiation: Yes        Speed: 1000Mb/s        Duplex: Full        Port: Twisted Pair        PHYAD: 0        Transceiver: internal        Auto-negotiation: on        MDI-X: Unknown        Supports Wake-on: d        Wake-on: d        Current message level: 0x00000007 (7)                               drv probe link        Link detected: yes

其中,14行显示了当前网卡的速度,这是一个千兆网卡;15行显示了当前网络支持全双工;23行显示当前网卡和网络的物理连接正常。通常网速和全/半双工状态是主机和网络协议商自动协商的,例如这里第8行的 auto-negotiation。如果发现15行的双工被设置成了Half,可以手动将其改为全双工网络:

# ethtool -s eth0 autoneg off duplex full

  

2. 网卡是否正常启用

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

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

[root@weblogic ~]# ifconfig eth1eth1      Link encap:Ethernet  HWaddr 00:0C:29:3F:03:07            inet addr:172.16.87.101  Bcast:172.16.87.255  Mask:255.255.255.0          inet6 addr: fe80::20c:29ff:fe3f:307/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:12447701 errors:0 dropped:0 overruns:0 frame:0          TX packets:9899754 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:2771497375 (2.5 GiB)  TX bytes:3056145330 (2.8 GiB)

  

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

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

3. 是否正确设置网关

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

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

[root@weblogic ~]# route  -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface172.16.87.0     0.0.0.0         255.255.255.0   U     1      0        0 eth10.0.0.0         172.16.87.1     0.0.0.0         UG    0      0        0 eth1

  

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

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

 

4. DNS工作状况

  通常很多网络问题是DNS故障或配置不当造成的,nslookup和dig命令能够用来排查DNS问题,

例4 使用nslookup命令查看DNS解析

[root@weblogic ~]#  nslookup baidu.comServer:         114.114.114.114Address:        114.114.114.114#53Non-authoritative answer:Name:   baidu.comAddress: 123.125.115.110Name:   baidu.comAddress: 220.181.57.216

  

这里的DNS服务器 114.114.114.114 位于当前局域网内,nslookup的结果显示DNS工作正常。如果这里nslookup命令无法解析目标域名,则很有可能是DNS配置不当,到/etc/resolv.conf文件中查看是否存在域名服务器的配置:

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

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

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTENnameserver  114.114.114.114

  /etc/resolv.conf文件是临时即刻生效的DNS服务器配置,想要永久配置DNS服务器的地址,可以在/etc/networks/interfaces(基于Debian)中通过 “dns-nameservers” 字段来限制:

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

auto loiface lo inet loopbackauto eth0iface eth0 inet static        network ...        netmask 255.255.255.0        broadcast ...        gateway ...        address ...        dns-nameservers 172.16.87.101

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

 

5. 是否可以正常路由到远程主机

  互谅网是通过大量路由器中继连接起来的,网络的访问就是在这些节点间一跳一跳最终到达目的地,想要查看网络连接,最直接最常用的命令是ping,ping得通,说明路由工作正常,但是如果ping不通,traceroute命令可以查看从当前主机到目标主机的全部“跳”的过程。traceroute和ping命令都是使用ICMP协议包。

例7. 使用traceroute追踪路由状况

[root@weblogic ~]# traceroute www.baidu.comtraceroute to www.baidu.com (111.13.100.91), 30 hops max, 60 byte packets 1  * * * 2  1.1.1.5 (1.1.1.5)  0.374 ms  0.498 ms  0.439 ms 3  39.155.134.97 (39.155.134.97)  1.815 ms  1.768 ms  1.816 ms 4  * * * 5  * * * 6  111.13.98.93 (111.13.98.93)  5.107 ms  5.635 ms  5.575 ms 7  111.13.108.5 (111.13.108.5)  4.613 ms 111.13.98.101 (111.13.98.101)  4.524 ms 111.13.108.37 (111.13.108.37)  5.426 ms 8  * 111.13.108.1 (111.13.108.1)  5.430 ms * 9  * * *10  * * *11  * * *12  * * *13  * * *14  * * *15  * * *16  * * *17  * * *18  * * *19  * * *20  * * *21  * * *22  * * *23  * * *24  * * *25  * * *26  * * *27  * * *28  * * *29  * * *30  * * *

  查看第3行,第一跳到达了当前子网的网关,然后跳到了澳大利亚的亚太网络咨询中心(APNIC)等等,traceroute可以查看网络中继在哪里中断或者网络延时情况,“*”是因为网络不通或者某个网关限制了ICMP协议包。

6. 远程主机是否开放端口

  telnet命令是检查端口开放情况的利器,或者nmap工具,

例8. 使用telnet检测远程主机的端口开放情况

[root@localhost~]# telnet 172.16.87.105 7001Trying 172.16.87.105...

elnet ip port,可以查看指定远程主机是否开放目标端口,这里百度的前端服务器开放80端口是网页服务必须的。

   但是telnet 命令的功能非常有限,当防火墙存在时,就不能很好地显示结果,所以telnet无法连接包含两种可能:1是端口确实没有开放,2是防火墙过滤了连接。

例如我们尝试 telnet 连接百度前端服务器的 22 端口

[root@loalhost~]# telnet 172.16.87.105 22Trying 172.16.87.105...

  无法继续进行,但是我们无法判断究竟是端口没有开放,还是被防火墙给拦截了,这时使用nmap工具将更加强大:

 

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

# nmap -p 22 172.16.87.101Starting Nmap 6.40 ( http://nmap.org ) at 2015-08-10 20:45 CSTNmap scan report for 172.16.87.101Host is up (0.040s latency).PORT   STATE    SERVICE22/tcp filtered ssh

  

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

  这时就可以了解,端口无法连接的原因是端口关闭还是防火墙过滤了。

 

7. 本机查看监听端口

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

# netstat -lnp | grep PORT

  

其中,参数:

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

 

例10. 查看本地指定端口的监听情况

[root@weblogic ~]# netstat -lnp | grep :7013tcp        0      0 ::ffff:172.16.87.101:7013   :::*                        LISTEN      3444/java           [root@weblogic ~]#

  

例10以memcached服务为例,查看当前活动端口监听的网络,如果netstat找不到指定的端口,说明没有进程在监听指定端口。

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

8. 查看防火墙规则

  使用

# iptables -L

  命令查看当前主机的防火墙,iptables的功能在这里就不涉及,后续的博文会详细介绍。

 

 

二,网络阻塞排查

    网络较慢的排查事实上比网络不通的排查更有挑战,因为很多时候可能是运营商、DNS等的原因,这些故障常常不在我们的控制范围之内,只能收集证据向其反馈或对其进行投诉。

  如果不想受到DNS的影响,上面提到的命令可以添加 -n 选项,-n选项可以阻止试图将IP解析为主机名,从而绕过DNS。

1. traceroute

  前面提到的traceroute不仅可以查看路由的正确性,还可以查看网络中每一跳的延时,从而定位延时最高的网络区段。

2. iftop

  iftop命令类似于top命令,查看哪些网络连接占用的带宽较多

例11. 使用iftop命令查看连接占用的网络带宽

这里比较全地给出了一个iftop命令的实例,该命令按照带宽占用高低排序,可以确定那些占用带宽的网络连接,

  最上方的一行刻度是整个网络的带宽比例,下面第1列是源IP,第2列是目标IP,箭头表示了二者之间是否在传输数据,以及传输的方向。最后三列分别是2s、10s、40s时两个主机之间的数据传输速率。

  最下方的TX、RX分别代表发送、接收数据的统计,TOTAL则是数据传输总量。

  • 使用 -n 选项直接显示连接的IP,例11中看到的则是解析成域名后的结果。
  • -i 选项可以指定要查看的网卡,默认情况下,iftop会显示自己找到的第一个网卡;
  • 在进入iftop的非交互界面后,按 p 键可以打开或关闭显示端口,按 s 键可以显示或隐藏源主机,而按 d 键则可以显示或隐藏目标主机。

3. tcpdump

  当一切排查手段都无济于事时仍然不能找到网络速度慢、丢包严重等原因时,往往祭出杀手锏——抓包。抓包的最佳手段是在通信的双方同时抓取,这样可以同时检验发出的数据包和收到的数据包,tcpdump是常用的抓包工具。

例12. tcpdump抓包实示例

[root@weblogic ~]# tcpdumptcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes15:38:51.160382 IP weblogic.ssh > 172.16.87.97.54404: Flags [P.], seq 2697338444:2697338640, ack 2683410682, win 148, options [nop,nop,TS val 612000714 ecr 678448757], length 19615:38:51.160803 IP weblogic.56533 > public1.114dns.com.domain: 40075+ PTR? 97.87.16.172.in-addr.arpa. (43)15:38:51.165313 IP 123.207.93.141.microsoft-ds > 172.16.87.124.62080: Flags [P.], seq 231247159:231247198, ack 1300959028, win 516, length 39SMB

  

例12只是截取了抓包结果的两行作为示意,可以通过tcpdump查看通信的时间、双方的地址( -n 选项),端口,通信的目的,数据包的长度等等。

  当想要停止抓包时,使用ctrl-c终止抓包,tcpdump会返回所有抓取到的数据包的个数:

14422 packets captured1127345 packets received by filter1109698 packets dropped by kernel  

 

tcpdump有一些常用选项,便于记录,tcpdump的详细使用,这里就不介绍了,当然,图形界面用户还可以使用更为专业的分析工具WireShark。

# 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    //重播已经保存的数据包记录

  

     此外,

  鸟哥的Linux私房菜中也提供了一些类似的网络排查思路:

  1. 网卡是否工作,包括硬件和驱动:lspci,dmesg

  2. IP参数是否正确设置:ifconfig

  3. 局域网内通信是否正常:ping

  4. 路由信息是否正常:route -n

  5. DNS状态:dig, nslookup

  6. 路由节点状况与延时:traceroute

  7. 服务监听端口:netstat -lnp

  8. 防火墙:iptables, SELinux

  总之与本文的思路是非常一致的。

转载于:https://www.cnblogs.com/Alexr/p/10250353.html

你可能感兴趣的文章
Centos安装KDE或GNOME
查看>>
Eclipse & IDEA 中常用的快捷键
查看>>
javascript ---IPhone滑动解锁
查看>>
table固定行和表头
查看>>
<每天读一点职场心理学>读书笔记
查看>>
android 判断SIM卡是哪个运营商
查看>>
删除N天前的M(天)个目录 、删除N天前最后修改的文件 ForFiles, dos command 批处理命令cmd/bat...
查看>>
[转载]Visual Studio 2010敏捷利剑:详解Scrum
查看>>
Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
查看>>
T-SQL查询进阶--流程控制语句
查看>>
备份Toad中保存的数据库连接用户名和密码
查看>>
ASP.NET中 Repeater 的使用前台绑定
查看>>
微信公众平台模拟群发技术
查看>>
C语言学习之指针详解
查看>>
学习使用Bing Maps Silverlight Control(一):准备和新建
查看>>
什么是Scrum
查看>>
nginx负载均衡的5种策略
查看>>
90%人都不知道:SVN 和 Git 的一些误解和真相
查看>>
防火墙配置十大任务之九,验证防火墙的运行
查看>>
【linux】浅谈Linux下的 find 指令
查看>>