网络基本概念和测试

一 网络概念:1.带宽: 标识网卡的最大传输速率,单位为 b/s,比如 1Gbps,10Gbps,相当于马路多宽
2.吞吐量: 单位时间内传输数据量大小单位为 b/s 或 B/s ,吞吐量/带宽,就是网络的使用率,相当于单位时间内马路上路过有多少人吧(包括车里的等)
3.延时: 发送网络请求,到收到远端响应,需要的时间延迟,比如 TCP 握手延迟,或者数据包往返时间,相当于一去一回时间 。
4.PPS : 每秒转发包数量,如果吞吐量是以字节为单位,pps 是以包为单位,可以理解成路上车的数量,以车位单位 。
5.并发连接数: TCP 连接数量 。6.丢包率: 丢包的百分比 。7.重传率: 重传的包的比例 。
二 网卡有用命令2.1 监控是否丢包 watchwatch -d ifconfig ens33errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;
dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包,主要应用层或系统内核处理慢;
overruns 表示超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理(队列满)而导致的丢包(网卡收包队列已满);
carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;
collisions 表示碰撞数据包数 。
2.2 查看系统中连接信息netstat -lnp
其中: -l 表示只显示监听套接字 ;
-n 表示显示数字地址和端口(而不是名字)
-p 表示显示进程信息
[root@iZbp10p2g1civrw4ggigvfZ ~]# netstat -lnpActive Internet connections (only servers)Proto Recv-Q Send-Q Local AddressForeign AddressStatePID/Program nametcp00 0.0.0.0:250.0.0.0:*LISTEN1444/mastertcp00 0.0.0.0:4430.0.0.0:*LISTEN20330/Nginx: mastertcp00 0.0.0.0:23320.0.0.0:*LISTEN1712/nginx: mastertcp00 0.0.0.0:52780.0.0.0:*LISTEN27975/JAVAtcp00 127.0.0.1:90000.0.0.0:*LISTEN1840/php-fpm: mastetcp00 0.0.0.0:33060.0.0.0:*LISTEN1937/MySQLdtcp00 0.0.0.0:63790.0.0.0:*LISTEN1684/redis-server 0tcp00 0.0.0.0:800.0.0.0:*LISTEN20330/nginx: mastertcp00 0.0.0.0:23530.0.0.0:*LISTEN24490/sshd: /usr/sbtcp00 0.0.0.0:230.0.0.0:*LISTEN1/systemdtcp600 :::25:::*LISTEN1444/mastertcp600 :::33060:::*LISTEN1937/mysqldtcp600 :::2353:::*LISTEN24490/sshd: /usr/sbudp00 0.0.0.0:680.0.0.0:*1026/dhclientudp00 127.0.0.1:3230.0.0.0:*749/chronydudp600 ::1:323:::*749/chronydActive UNIX domain sockets (only servers)Proto RefCnt FlagsTypeStateI-NodePID/Program namePath....ss -ltnp
-l 表示只显示监听套接字
-t 表示只显示 TCP 套接字
-n 表示显示数字地址和端口(而不是名字) -p 表示显示进程信息
注意:下面是 ss 命令下的解释:
Established 状态时,Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数( ,而 Send-Q 表示还没有被远端主机确认的字节数 LISTEN 状态时候 Recv-Q 表示使用的全连接队列的长度 Send-Q 表示全连接队列的最大长度 。
ss 只显示已经连接、关闭、孤儿套接字等简要统计,而 netstat 则提供的是更详细的网络协议栈信息 。
netstat -sroot@iZbp10p2g1civrw4ggigvfZ ~]# netstat -sIp:368894134 total packets received0 forwarded0 incoming packets discarded368894127 incoming packets delivered204418238 requests sent out133 dropped because of missing route7 reassemblies required1 packets reassembled okIcmp:91913511 ICMP messages received90910972 input ICMP message failed.InCsumErrors: 2ICMP input histogram:destination unreachable: 4391....netstat 在排查 tcp 连接时候还是非常有用的,比如我们可以通过:
netstat -s | egrep "listen"79019 times the listen queue of a socket overflowed多次观察是否会增加,如果会增加,说明有监听队列满了,导致的连接拒绝问题 。如果队列满了,可以通过查看:
cat /proc/sys/net/ipv4/tcp_abort_on_overflow值为 0 表示连接队列如果满了,系统会直接扔掉客户端的 ack 报文,将这个值改成 1,会在队列满的情况下直接发 reset 包给客户端 。
ss -s命令统计信息:
[root@iZbp10p2g1civrw4ggigvfZ ~]# ss -sTotal: 210 (kernel 276)TCP:22 (estab 7, closed 2, orphaned 0, synrecv 0, timewait 1/0), ports 0Transport TotalIPIPv6*276--RAW000UDP321TCP20173INET23194FRAG0002.3 网络统计指标统计信息sar -n DEV 1[root@iZbp10p2g1civrw4ggigvfZ ~]# sar -n DEV 1linux 3.10.0-1062.4.3.el7.x86_64 (iZbp10p2g1civrw4ggigvfZ)12/25/2021_x86_64_ (2 CPU)02:16:52 PMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s02:16:53 PMeth00.990.990.060.090.000.000.0002:16:53 PMlo11.8811.881.951.950.000.000.0002:16:53 PMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s02:16:54 PMeth00.990.990.060.170.000.000.0002:16:54 PMlo0.000.000.000.000.000.000.00