网络问题排查

4 篇文章 0 订阅
3 篇文章 0 订阅

一、网络测试常用命令和工具 ping   traceroute   mtr   nslookup

网速有问题,一是组网与硬件,二是网络环境,三是系统架构及协议。

、丢包工具哪些,怎么使用及分析过程ethtool ifconfig netstat dropwatch linux perf  wireshark  tcpdump  系统负载过高使用最多也就是三板斧:top+strace+ltrace. 

1.网卡或者驱动丢包... 

2.Linux 系统丢包... 

3.应用丢包...

三、排查和定位tcp问题   netstat -nat  查看TCP各个状态的数量    lsof  -i:port  可以检测到打开套接字的状况

 

一、网络测试常用命令和工具

1ping:检测网络连接的正常与否,主要是测试延时、抖动、丢包率。

           但是很多服务器为了防止攻击,一般会关闭对ping的响应。所以ping一般作为测试连通性使用。ping命令后,会接收到对方发送的回馈信息,其中记录着对方的IP地址和TTLTTL是该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTLIPv4包头的一个8 bit字段。例如IP包在服务器中发送前设置的TTL64,你使用ping命令后,得到服务器反馈的信息,其中的TTL56,说明途中一共经过了8道路由器的转发,每经过一个路由,TTL1

2tracerouteraceroute 跟踪数据包到达网络主机所经过的路由工具

   traceroute hostname

3pathping是一个路由跟踪工具,它将 ping tracert 命令的功能与这两个工具所不提供的其他信息结合起来,综合了二者的功能

   pathping www.baidu.com

4mtr:以结合ping nslookup tracert 来判断网络的相关特性

5) nslookup:用于解析域名,一般用来检测本机的DNS设置是否配置正确。

 

Nagios — 网络/服务器监控

Nagios 是一个领先的开源的强大的监控系统,网络/系统管理员在他们影响主要业务流程之前识别和解决服务器相关的问题。Nagios 可以监控远程 Linux、Windows、开关、单窗口的路由器和打印机。它能显示你的网络和服务器关键的告警,有利于在错误反生之前帮助你解决问题。

Monitorix — 系统和网络监控

Monitorix 是一个尽可能多的在 Linux/Unix 上一个轻量级监控工具,主要设计是监控正在运行的系统和网络资源。它有一个内置的 HTTP web 服务去定期收集系统和网络信息并显示成图片。它可以监视系统的平均负载使用、内存的分配、磁盘驱动器、系统服务、网络端口、邮件统计(Sendmail、Postfix、Dovecot 等等)、MYSQL 数据库等等更多的服务。它的主要目的是监控整个系统的性能,并且有助于监测故障、瓶颈、异常活动等状况

 Arpwatch — 以太网活动监控器

Arpwatch是一种用来监视 Linux 网络的以太网的网络流量的地址解析(网络地址转换)的一个程序。它一直随着网络时间戳的变化监视以太网流量和产生日志的 IP 和 MAC 地址对。当一个 IP 地址或 MAC 地址对发生变化的时候,它会发送电子邮件通知管理员。并且它在检测 ARP 攻击是非常有用的

Suricata — 网络安全监控

Suricata 是一个高性能的开源的网络安全与入侵检测与预防 Linux、FreeBSD、Windows 等操作系统的监控工具。它是一个非营利基金 OISF(Open Information Security Foundation)拥有的。

 NetHogs — 监视每个进程的网络带宽

NetHogs 是一个开源的漂亮的小程序(类似于 Linux 上面的 top 命令),在您的系统上保持每个进程的网络活动状态。它也保持了一个程序或者应用实时的网络流量带宽使用情况。

iftop — 网络带宽监控

iftop 是另一个基于终端的开源的系统监测工具,主要功能是通过你自己系统上的网络接口显示一个经常更新的网络带宽利用率的列表(即源主机和目的主机)iftop 监控的是网络的使用情况,而 top 监控的是 CPU 的使用情况。iftop 监视一个选定的接口并且显示两台主机之间当前宽带的使用情况。

 

IPTraf —实时IP局域网监控

IPTraf 是一个基于开源的 Linux 系统实时网络(IP 网络)监测的工具。它能收集到各种各样的信息,如通过网络对 IP 流量监测,包括 TCP 标志信息、ICMP 详细细节、TCP/UDP 流量故障、TCP 连接的数据包和拜恩计数。并且它还收集 TCP,UDP,ICMP,IP,非 IP,IP 校验错误,界面活性等一般信息和详细信息的接口统计数据。

Psacct 或者 Acct — 监视用户活动

Psacct 或者 Acct 是用于监测每个用户对系统的活跃状态的一个非常有用的工具。在后台有两个守护进程在运行,一个是密切关注系统上每个用户的整体活动,另一个进程关注有哪些资源被它们消耗。

   这个工具对于系统管理员是非常有用的去跟踪每个用户的活动,可以知道用户正在做什么,发出了什么样的命令,占用了多少资源,多长时间活跃在系统上。

Monit — 程序和服务监测

这是一个免费的开源的基于 web 程序的自动监控和管理系统进程、程序、文件、目录、权限、校验文件系统。它监控的服务包括 Apache、MYSQL、Mail、FTP、Nginx 等等。系统状态是可以从命令行或者自己的网络接口来查看。

 Collectl — 一体化性能检测工具

Collectl 是另一个功能强大的基于命令行的监控工具,它可用于收集有关系统资源的信息,包括 CPU 使用率、内存、网络、节点、进程、NFS、TCP 套接等等。

Nmon — 监控Linux系统性能

Nmon(即奈吉尔性能监视器)工具用来监视 Linux 系统的所有资源包括:CPU、内存、磁盘使用率、网络上的进程、NFS、内核等等。这个工具有两个模式:即在线模式和捕捉模式。在线模式适用于实时监控,捕捉模式用于存储输出为 CSV 格式后的处理。

二、丢包工具哪些,怎么使用及分析过程ethtool ifconfig netstat dropwatch linux perf  wireshark  tcpdump  系统负载过高使用最多也就是三板斧:top+strace+ltrace

网络丢包的原因和修复方法

硬件或网络缆线的毛病通过网络评估和彻底的故障排查)更换,修复 --- (路由器/交换机/防火墙/等等)的设备性能(吞吐量) 更换硬件或构建集群-------网络链接阻塞增加阻塞链接的带宽,使用Qos(流量优先级和资源保留控制机制)优先处理实时应用----网络设备上的软件问题(bug)  当你部署的新功能的时候,这些bug可能会导致新功能无法工作,或者你在没发现网络性能问题之前的一段时间,你可能无法察觉这些bug的存在。 ----网卡或者驱动丢包---.Linux 系统丢包(报文错误, socket 参数禁用 UDP checksum 检查;遇到丢包比率非常大的情况,请先检查防火墙规则;linuxbuffer size不足;应用bug发现和修复,发现并扩容)------应用丢包(socket buffer size 大小以及应用程序读取报文的速度)

  丢包可以由内部(企业LAN范围内)或外部(企业WAN或网络提供商的核心网)原因引起。丢包的主要原因包括:网络拥塞、高优先级流量阻塞低优先级流量、网络设备问题(交换机,路由器故障等)、设置/配置问题(10/1 00M不匹配,IP地址重复使用等)、视频设备问题、电缆问题(线路问题,连接问题)等等。

在IP视频通话中丢包造成的影响多种多样。其中对视频质量的影响主要有:马赛克现象、局部变形(图像的某些区域不清晰)、图像模糊、屏幕频繁刷新或闪烁、视音频不同步、帧率下降、图像静止等等。

对音频质量的影响包括:总体音频失真、间断或间歇性噪音、音频中断等。

对内容和演示数据质量的影响则包括:幻灯片模糊变形、翻页速度减慢或屏幕频繁刷新和图像静止等等。另外,丢包还会引起过度延迟,甚至是通话中断。

 丢包率的形成原因主要有两点,一是传统IP传输过程中的误码,这种情况在目前的网络条件下发生的概率极低。另一个是不能保障业务带宽造成的,当网络流量越拥塞,影响就越强烈,丢包发生率也就越大。

1.网卡或者驱动丢包

查看工作模式是否正常 ethtool eth0 | egrep 'Speed|Duplex'   网速有问题,一是组网与硬件,二是网络环境,三是系统架构及协议。

查看检验是否正常 ethtool -S eth0 | grep crc

Speed,Duplex,CRC 之类的都没问题,基本可以排除物理层面的干扰。

ethtool -S eth0 查看网卡查找 bad 或者 drop对应的字段是否有数据,| grep rx_ | grep errors 

ethtool -g  eth0可以查看某个网卡的 ring buffer  

通过ethtool来修改网卡的buffer size ,首先要网卡支持 ethtool -G eth0 rx 2048   ethtool -G eth0 tx 2048

另外一个查看网卡丢包数据的命令是 ifconfig 它的输出中会有 RX (receive 接收报文) TX transmit 发送报文)的统计数据: overruns 是否一直增大(网卡缓存满)

netstat -i 也会提供每个网卡的接发报文以及丢包的情况

2.Linux 系统丢包

各个网络协议的丢包信息以使用 netstat -s 命令查看,加上--udp 可以只看 UDP 相关的报文数据:packet receive errors 不为空,packets to unknown port received ,receive buffer errors

用的udp丢包检测方法,使用netstat命令,加-su参数。netstat –su

包丢在什么地方想要详细了解 linux 系统在执行哪个函数时丢包的话,可以使用 dropwatch 工具,它监听系统丢包信息,并打印出丢包发生的函数地址:

此外,还可以使用 linux perf 工具监听 kfree_skb (把网络报文丢弃时会调用该函数) 事件的发生:

linux 系统丢包的原因很多,常见的有:UDP 报文错误、防火墙、UDP buffer size 不足、系统负载过高

1UDP 报文错误:如果希望 UDP 报文 checksum 及时有错也要发送给应用程序,可以在通过 socket 参数禁用 UDP checksum 检查:

int disable = 1;

setsockopt(sock_fd, SOL_SOCKET, SO_NO_CHECK, (void*)&disable, sizeof(disable)

2)防火墙:如果遇到丢包比率非常大的情况,请先检查防火墙规则,保证防火墙没有主动 drop UDP 报文。

3UDP buffer size 不足linux 系统在接收报文之后,会把报文保存到缓存区中。因为缓存区的大小是有限的,如果出现 UDP 报文过大(超过缓存区大小或者 MTU 大小)、接收到报文的速率太快,都可能导致 linux 因为缓存满而直接丢包的情况在系统层面,linux 设置了 receive buffer 可以配置的最大值,可以在下面的文件中查看,一般是 linux 在启动的时候会根据内存大小设置一个初始值。

/proc/sys/net/core/rmem_max   rmem_default    wmem_max   wmem_dafault  但是这些初始值并不是为了应对大流量的 UDP 报文

在大压力下,rmem_defaultrmem_maxwmem_defaultwmem_max的值,如果服务器的性能压力不大,对处理时延也没有很严格的要求,设置为1M左右即可。如果服务器的性能压力较大,对处理时延有很严格的要求,则须谨慎设rmem_default  4194304  和rmem_max  4194304 ,如果设得过小,会导致丢包,如果设得过大,会出现滚雪球。

可以使用 sysctl 命令让它立即生效sysctl -w net.core.rmem_max=26214400 # 设置为 25M

也可以修改 /etc/sysctl.conf 中对应的参数在下次启动时让参数保持生效

4系统负载过高:系统 CPUmemoryIO 负载过高占用了大量cpu资源,无法及时处理linux内核socket缓冲区中的数据包,可能导致网络丢包,linux 系统本身就是相互关联的系统,任何一个组件出现问题都有可能影响到其他组件的正常运行。对于系统负载过高,要么是应用程序有问题,要么是系统不足。对于前者需要及时发现,debug 和修复;对于后者,也要及时发现并扩容。

4.1)使用最多也就是三板斧:top+strace+ltrace,先使用top查看cpu内核态时间和用户态时间的比例,如果内核态时间占大头,就用strace查看主要的系统调用有哪些;如果如果用户态时间占大头,就用ltrace查看主要的库函数调用有哪些。找到性能瓶颈后,想办法优化系统架构和业务逻辑,减少不必要的系统调用和库函数调用。例如触发大量的memset或memcpy操作,压力测试找性能瓶颈。

4.2)有大量IO操作,会导致进程阻塞,cpu都在等待磁盘IO,不能及时处理内核socket缓冲区中的udp数据包。如果业务本身就是IO密集型的,要考虑在架构上进行优化,合理使用缓存降低磁盘IO。这里有一个容易忽视的问题:很多服务器都有在本地磁盘记录日志的功能,由于运维误操作导致日志记录的级别过高,或者某些错误突然大量出现,使得往磁盘写日志的IO请求量很大,磁盘IO忙,导致udp丢包。对于运维误操作,可以加强运营环境的管理,防止出错。如果业务确实需要记录大量的日志,可以使用内存log或者远程log。

4.3)物理内存不够用,出现swap交换  。规划好物理内存的使用,并且合理设置系统参数,可以避免这个问题。

4.4)  磁盘满导致无法IO  解决的办法是规划好磁盘的使用,防止业务数据或日志文件把磁盘塞满,同时加强监控,使用通用的工具,当磁盘使用率达到80%时就持续告警,留出充足的反应时间。

3.应用丢包

linux 系统会把接受到的报文放到 socket buffer 中,应用程序从 buffer 中不断地读取报文。所以这里有两个和应用有关的因素会影响是否会丢包:socket buffer size 大小以及应用程序读取报文的速度。处理逻辑,系统函数使用不当

 

三、排查和定位tcp问题

我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助

 TCP连接建立过程中要解决以下三个问题:

  (1):要使每一方都能够确认对方的存在。

  (2):要允许双方协商一些参数  

  (3):能够对运输实体资源进行分配

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手

0) netstat -nat  查看TCP各个状态的数量

lsof  -i:port  可以检测到打开套接字的状况

  sar -n SOCK 查看tcp创建的连接数

tcpdump -iany tcp port 9000 对tcp端口为9000的进行抓包

1)linux根据natstat tcp查看所有tcp连接状态信息,根据信息排除连接问题,windows使用netstat。

2)如果客户端连接失败可通过tcp调试助手尝试连接查看获取连接错误码

3)netstat -ano即可查看端口使用情况

例如要查看8080端口号是否已经被占用就使用命令netstat -ano|findstr 8080

例子netstat  ano  | findstr  "6666"查看所有666端口连接状态,如果服务端监听不存在,客户端就无法再连接

4)网速有问题,一是组网与硬件,二是网络环境,三是系统架构及协议。

5)数据包抓包分析wireshake   linux上可使用tcpdump

6) 用实际案例来理解netstat -nao中的Recv-QSend-Q

netstat -ano | head 

对于已经建立的tcp连接establish状态的send_q与recv_q的含义

内核socket关联着两个队列,SEND_Q与RECV_Q,其中SEND_Qtcp连接的发送缓冲区,如果接受端的接受缓存区满啦,则发送端的数据就会积压在SEND_Q中,并且会伴有接收端zero window的通告以及发送端的坚持定时器。

注:listen状态的tcp连接的send_q与recv_q的含义

其中listen tcp的send_q代表listen backlog的长度,涉及到已连接队列与半连接队列等概念。recv_q代表着已完成3次握手establish状态的连接并且没有被accept取走的连接数量。

这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。

netstat -ano | head 

 第二列表内核recv缓冲区中的字节数(接收缓冲区), 第三列表示内核send缓冲区中的字节数(发送缓冲区)。 所以, 对于一个tcp连接的两端而言, 有四个内核缓冲区。

 

  端到端的时延可以分成两个部分,即固定时延和可变时延。固定时延包括编解码器引入的时延和打包时延。固定时延和采用的压缩算法、打包的语音数据量相关。可变时延包括:承载网上的传输、节点中排队、服务处理时延、去抖动时延,这些和设备的端口速率,网络的负载情况,经过的网络路径、设备对QoS的支持方式、实现的QoS算法等密切相关。特别是去抖时延和承载网络的抖动指标密切相关,通过采用合适的网络技术可以显著降低语音通过网络时引入的抖动,减少去抖动时延。

 抖动会引起端到端的时延增加,会引起语音质量的降低。影响抖动的因素一般和网络的拥塞程度相关。

参考:

https://blog.csdn.net/weiqubo/category_1913379_2.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值