网络问题非常复杂,我的思路也只有一个大概,先挖个坑,想写多少就写多少,看我心情了。学习一定要归纳总结,分析网络问题就像解数学题,一定要有方向和思路,不要一上来就各种乱套公式,乱用命令。其实可以从以下几点出发,也是衡量网络的指标,基本上问题也都在这些范围内。 带宽,链路最大传输速率,单位b/s,所以我们常用的宽带速度都要除以8才是实际的速率。 吞吐量,实际的速率,单位b/s,就是我们明明是100M的宽带,但下载速度可能只有1M/s,这个就吞吐量。 延时,这个不同场景有不同的具体定义,简单理解,就是建立连接响应所需要的时间。比如常见的RTT(一个数据包的往返时间)。 PPS,以网络包为单位的传输速率,通常表示网络转发能力。 网络连通性,丢包率,并发连接数等等其他指标。 网络连通性 网络有问题第一个想到的一定是ping,看网络是否连通,是否存在延时,丢包等。当然这个命令主要用来判断是否连通的,但是ping不通也不代表网络不通,因为绝大多数服务器都是禁ping的。这里可以使用telnet,nc,hping3等测试端口是否连通来判断当前网络是否连通。 [root@aikeke ~]# nc -zv www.baidu.com 80 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 39.156.66.14:80. Ncat: 0 bytes sent, 0 bytes received in 0.09 seconds. 套接字信息可以使用ss命令查看网络协议栈的信息,基本上都是用来排查万恶的tcp问题的,比如常见的time_wait问题等等。#!/bin/bash #tcp套接字监控脚本 #Usage:LISTEN,SYN-SENT,SYN-RECV,ESTAB,FIN-WAIT-1,FIN-WAIT-2,TIME-WAIT,CLOSE-WAIT,LAST-ACK,CLOSED,CLOSING tcp_status(){ ss -ant|awk 'NR>1{++b[$1]} END {for (a in b) print a,b[a]}' } main() { num=`tcp_status|grep "$1"|awk '{print $2}'` [ -z "$num" ] && echo 0 || echo$num } main $1 ss命令有个Q要提一下,之前我一直简单的认为是接收发送的队列长度,没有深入去看。其实没有那么简单。[aikeke@keke2 ~]$ ss -lnt State Recv-Q Send-Q Peer Address:Port LISTEN 0128 *:* Send-Q表示listen端口上的全连接队列最大为多少,Recv-Q为全连接队列当前使用了多少。tcp三次握手过程中,有两个队列,syns queue(半连接),accept queue(全连接)。server收到syn的时候会先放入半连接队列然后回复一个syn+ack,当收到ack的时候,如果全连接队列没满,才会从半连接中拿出放入全连接。如果满了会按照tcp_abort_on_overflow处理,0直接丢掉,1是reset。半连接取决于tcp_max_syn_backlog,全连接取决于net.core.somaxconn,所以可以按照实际需求修改这两个参数提高队列数,优化tcp。多说一句,可以使用netstat -s | egrep "listen" 去看队列的溢出统计数据,如果一直在增加,说明全队列一定满了。(可以看tcp_ipv4.c)网络吞吐和PPS可以使用sar命令,如下图,可以看到当前接收发送的pps。[aikeke@keke2 ~]$ sar -n DEV 1 Linux 3.10.0-327.36.1.el7.x86_64 (keke2) 09/13/2019 _x86_64_ (4 CPU) 01:37:03 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 01:37:04 PM eth0 341.00 231.00 81.89 101.78 0.00 0.00 0.00 01:37:04 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 rxcmp/s 和 txcmp/s 分别是接收和发送的压缩数据包数,包/s。 看流量常用的工具还有iftop和nethogs。 先写这么多了,更多的网络问题和工具下次在具体分析。 部分内容来自网络,如有侵权请联系作者删除。 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:爱可可的运维笔记,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |