Linux 常见性能指标 -- 网络

本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 网络 的性能指标

日常最常见的问题就是 ping 能不能通,telnet 端口通不通,来判断网络是否正常。但是有些时候会发现访问变慢了,操作响应慢了,是网络卡了?所以需要一些其他的性能指标来衡量网络状态

性能指标

这里主要介绍网卡速率、带宽、吞吐量、延迟、丢包和TCP重传的概念

网卡速率

网卡速率指的是网卡的物理传输能力,通常以 Mbps(兆比特每秒)为单位。

它表示网卡在理想情况下的最大数据传输速度。网卡速率受硬件和驱动程序的限制,可以在网卡的规格中找到。平时常见的千兆网卡,万兆网卡说的网卡速率。

带宽

带宽(Bandwidth)指的是网络的通信线路在单位时间内能传输的最大数据量,通常也以 Mbps为单位。

带宽可以看作是网络的"容量",它取决于网络的物理特性(如光纤、铜线等)和网络设备(如路由器、交换机等)的性能。常说的专线带宽,网络多少兆带宽。

吞吐量

吞吐量(Throughput)指的是实际数据传输速率,即在单位时间内实际传输的数据量。

吞吐量受网络负载、路由器性能、带宽限制等因素的影响。吞吐量通常小于或等于带宽,因为网络中的数据传输并非总是连续的。

BPS(比特每秒,Bit Per Second):表示每秒传输的比特数,是衡量网络带宽的单位。BPS用于描述网络传输速度。

QPS(查询每秒,Query Per Second):表示每秒能够处理的查询请求次数。QPS主要用于衡量服务器在每秒能够处理的查询请求的数量,如DNS服务器性能经常用QPS来衡量。

TPS(事务每秒,Transaction Per Second):表示每秒能够处理的事务数量。事务是指一个完整的操作,如一个用户登录、下单、支付等操作。TPS主要用于衡量服务器在每秒能够处理的事务数量,如电子商务网站的性能经常用TPS来衡量。

PPS(包每秒,Packet Per Second):表示每秒能够处理的网络数据包数量。PPS主要用于衡量网络设备的性能,如路由器、交换机等。

延迟

延迟(Delay)指的是数据从发送端到接收端所需的时间。

  • 发送延迟是指数据从发送端到离开网络所需的时间;
  • 传输延迟是指数据在网络中传输所需的时间;
  • 接收延迟是指数据从进入网络到被接收端接收所需的时间。

延迟以毫秒(ms)为单位,它受网络设备和链路质量的影响。

丢包

丢包(Packet Loss)指的是在网络传输过程中,由于各种原因造成的数据包丢失。

丢包可能是由网络拥堵、链路质量差、设备故障等因素引起的。丢包会导致数据传输的不稳定和不可靠,影响网络性能。

TCP重传

TCP重传是TCP协议中用于保证数据可靠传输的一种重要机制。

当发送方发送数据包给接收方后,如果在一定时间内没有收到接收方的确认(ACK),发送方会重新发送相应的数据包。这种机制有助于确保数据的可靠传输,但同时也带来一些影响。

注意:超时重传对网络性能影响极大,与拥塞控制有关,于是就有了快速重传和SACK等减少影响的重传和确认机制出现。


查看指标

简单了解了一些性能指标以后,需要了解如何看这些指标

sar 归档和实时数据

sar - Collect, report, or save system activity information. 收集、展示或保存系统活动信息

sar 可以查看CPU、内存、IO 和网络,这里主要关注网络

sar -n DEV         # 打印实时的网络数据
sar -n DEV -f /var/log/sa/sa16  # 打印sysstat 保存的数据中的网络数据

由于数据会归档,需要看看文件是否存在 /var/log/sa/saDD
  • IFACE:网络接口名称
  • rxpck/s:每秒接收的数据包数量。这个指标可以用来衡量网络接口的接收性能。
  • txpck/s:每秒发送的数据包数量。这个指标可以用来衡量网络接口的发送性能。
  • rxkB/s:每秒接收的字节数量。这个指标可以用来衡量网络接口的接收带宽。
  • txkB/s:每秒发送的字节数量。这个指标可以用来衡量网络接口的发送带宽。
  • rxcmp/s:每秒接收的压缩数据包数量。这个指标可以用来衡量网络接口接收的压缩数据包的流量。
  • txcmp/s:每秒发送的压缩数据包数量。这个指标可以用来衡量网络接口发送的压缩数据包的流量。
  • rxmcst/s:每秒接收的多播数据包数量。这个指标可以用来衡量网络接口接收的多播数据包的流量。
  • %ifutil:网络接口的利用率。这个指标可以用来衡量网络接口的繁忙程度。

指标异常描述:

  1. 如果rxpck/s和txpck/s的值都很高,可能表示网络接口的处理能力已经接近饱和;
  2. 如果rxkB/s和txkB/s的值都很高,可能表示网络带宽已经接近饱和。

netstat 详细数据

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

打印网络连接、路由表、接口统计信息、伪装连接和多播成员身份

This program is mostly obsolete. Replacement for netstat is ss. Replacement for netstat -r is ip route. Replacement for netstat -i is ip -s link. Replacement for netstat -g is ip maddr.

说这个程序大部分过时了,有替代方案

一般 netstat 最常用的还是 netstat -anlp 查找进程以及对应端口,实际上还支持很多网络信息的统计

按收发包统计

netstat -i    # 查看网口的收发信息

RX和TX分别表示接收和发送,OK表示成功,ERR表示错误,DRP表示丢弃,OVR表示溢出

  • MTU:最大传输单元,指网络接口能够接收和发送的最大数据包大小。如果数据包大小超过MTU,网络接口就会将其丢弃。
  • RX-OK:每秒接收到的正确数据包数量。这个指标可以用来衡量网络接口的接收性能。
  • RX-ERR:每秒接收到的错误数据包数量。这个指标可以用来衡量网络接口的接收错误情况。
  • RX-DRP:每秒接收到的丢弃数据包数量。这个指标可以用来衡量网络接口接收到的丢弃数据包的流量。
  • RX-OVR:每秒接收到的溢出数据包数量。这个指标可以用来衡量网络接口接收到的溢出数据包的流量。
  • TX-OK:每秒发送的正确的数据包数量。这个指标可以用来衡量网络接口的发送性能。
  • TX-ERR:每秒发送的错误数据包数量。这个指标可以用来衡量网络接口的发送错误情况。
  • TX-DRP:每秒发送的丢弃数据包数量。这个指标可以用来衡量网络接口发送的丢弃数据包的流量。
  • TX-OVR:每秒发送的溢出数据包数量。这个指标可以用来衡量网络接口发送的溢出数据包的流量。
  • Flg:标志,表示网络接口的状态和类型。

指标异常描述:

  1. 如果RX-ERR和TX-ERR的值都很高,可能表示网络接口存在故障;
  2. 如果RX-DRP和TX-DRP的值都很高,可能表示网络接口接收和发送的数据包被大量丢弃,需要检查网络配置和连接。
  3. 发现TX-OVR(发送溢出)和RX-OVR(接收溢出)的值很高,这通常表明网络接口正在处理比它能够处理的数据量更多的数据

flg 标志:

BMRU(Broadcast & Multicast & Running):表示接口正在运行,并且支持广播和组播功能
LRU(Loopback & Running):表示接口正在运行,并且是回环接口(Loopback Interface)
MSLU(Multicast & Running):表示接口正在运行,并且支持组播功能
RRU(Running):表示接口正在运行
SLU(Stopped):表示接口已停止运行
3DU(3D Acceleration & Running):表示接口正在运行,并且支持3D加速功能
DRA(Down & Running):表示接口正在运行,但是处于降级模式
DU(Down):表示接口已关闭或无法使用
MSH(Mesh & Running):表示接口正在运行,并且处于Mesh网络模式
NHR(Nehalem & Running):表示接口正在运行,并且支持Nehalem技术

按收发协议统计

netstat -s

全量解释:

IP层 统计信息
    Forwarding: 2                       表示IP层转发数据包的数量
    13501 total packets received        表示接收到的IP数据包总数
    0 forwarded                         表示转发的IP数据包数量
    0 incoming packets discarded        表示丢弃的传入IP数据包数量
    13501 incoming packets delivered    表示成功传递的传入IP数据包数量

ICMP 统计信息
    20 ICMP messages received           表示接收到的ICMP消息数量
    0 input ICMP message failed         表示输入ICMP消息失败的数量

    ICMP input histogram: 
        echo replies: 20                表示输入ICMP消息的直方图,此例中所有20个消息都是回显回复(echo replies)
    
    70 ICMP messages sent               表示发送的ICMP消息数量
    0 ICMP messages failed              表示发送失败的ICMP消息数量

    ICMP output histogram:              表示输出ICMP消息的直方图
        destination unreachable: 16     此例中有16个目的地不可达(destination unreachable)消息
        echo requests: 54               54个回显请求(echo requests)消息

TCP 统计信息
    748 active connection openings      表示主动打开的TCP连接数量
    3 passive connection openings       表示被动打开的TCP连接数量
    699 failed connection attempts      表示失败的TCP连接尝试数量
    21 connection resets received       表示接收到的TCP连接重置数量
    2 connections established           表示建立的TCP连接数量
    12096 segments received             表示接收到的TCP段数量
    13017 segments sent out             表示发送的TCP段数量
    1 segments retransmitted            表示重传的TCP段数量
    0 bad segments received             表示接收到的错误TCP段数量
    8 resets sent                       表示发送的TCP连接重置数量

UDP 统计信息
    1373 packets received               表示接收到的UDP数据包数量
    16 packets to unknown port received 表示接收到的未知端口UDP数据包数量
    0 packet receive errors             表示接收UDP数据包错误数量
    1411 packets sent                   表示发送的UDP数据包数量
    0 receive buffer errors             表示接收缓冲区错误数量
    0 send buffer errors                表示发送缓冲区错误数量

UDP Lite    统计信息此例中没有UDP Lite相关的数据

TCP 扩展统计信息
    19 TCP sockets finished time wait in fast timer     表示快速计时器中完成的TCP套接字数量
    69 delayed acks sent                                表示发送的延迟确认数量
    1236 packet headers predicted                       表示预测的分组头数量
    7654 acknowledgments not containing data payload received 表示不包含数据有效载荷的确认数量
    1678 predicted acknowledgments                      表示预测的确认数量
    Detected reordering 8 times using SACK              表示使用SACK检测到重排序的次数
    TCPTimeouts: 1                                      表示TCP超时数量
    TCPBacklogCoalesce: 3                               表示TCP连接队列合并的数量
    TCPSackShiftFallback: 3                             表示TCP SACK位移回退的数量
    TCPRcvCoalesce: 1                                   表示TCP接收合并的数量
    TCPAutoCorking: 260                                 表示TCP自动停止的数量
    TCPSynRetrans: 1                                    表示TCP SYN重传的数量
    TCPOrigDataSent: 5468                               表示发送的原始数据量
    TCPHystartTrainDetect: 2                            表示TCP Hystart训练检测的次数
    TCPHystartTrainCwnd: 42                             表示TCP Hystart训练中使用的拥塞窗口大小
    TCPKeepAlive: 6405                                  表示TCP保活探测的数量
    TCPDelivered: 5515                                  表示TCP成功交付的数据量
    TcpTimeoutRehash: 1                                 表示TCP超时重哈希的数量

IP扩展 统计信息
    InOctets: 859748                     表示接收的字节数
    OutOctets: 3324137                   表示发送的字节数
    InNoECTPkts: 13501                   表示接收的未使用拥塞暴露标记(ECT)的数据包数量

MPTcpExt    表示多路径TCP扩展统计信息,此例中没有相关数据

需要关注:

IP层统计信息:
    Forwarding:表示IP层转发数据包的数量
        如果这个值很高,可能意味着网络拓扑复杂,或者存在异常的网络通信
    Received:表示接收到的IP数据包总数
        如果这个值很高,可能意味着网络通信繁忙
    Errors:表示接收到的错误IP数据包数量
        如果这个值较高,可能意味着网络接口或链路存在问题  **
    Dropped:表示丢弃的IP数据包数量
        如果这个值较高,可能意味着网络接口或链路存在问题,或者网络带宽不足 **

ICMP统计信息:
    Received:表示接收到的ICMP消息数量
        如果这个值较高,可能意味着存在网络问题,例如路由问题或连接问题
    Errors:表示输入ICMP消息失败的数量
        如果这个值较高,可能意味着存在网络问题,例如路由问题或连接问题  **
    Sent:表示发送的ICMP消息数量
        如果这个值较高,可能意味着存在网络问题,例如路由问题或连接问题

TCP统计信息:
    Connections:表示TCP连接的打开、被动打开和失败尝试的数量
        如果这些值较高,可能意味着网络通信繁忙,或者存在连接问题
    Segments:表示接收和发送的TCP段数量
        如果这些值较高,可能意味着网络通信繁忙
    Retransmitted:表示重传的TCP段数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题 **
    Errors:表示接收到的错误TCP段数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题 **

UDP统计信息:
    Received:表示接收到的UDP数据包数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题
    Errors:表示接收UDP数据包错误数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题

TCP扩展统计信息:
    Time Wait:表示快速计时器中完成的TCP套接字数量
        如果这个值较高,可能意味着存在连接问题
    Delayed Acks:表示发送的延迟确认数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题
    Predicted:表示预测的分组头和确认数量
        如果这些值较高,可能意味着网络通信繁忙
    Retrans:表示TCP重传的数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题

IP扩展统计信息:
    InOctets:表示接收的字节数
        如果这个值较高,可能意味着存在网络问题,例如带宽不足
    OutOctets:表示发送的字节数
        如果这个值较高,可能意味着存在网络问题,例如带宽不足

ip 统计数据

ip - show / manipulate routing, network devices, interfaces and tunnels

显示/操作路由、网络设备、接口和隧道

ip 集成了ipconfig、route、netstat 的功能,目前工作中最常用的命令之一,参数还能简写挺好

ip -s link            # 查看网口的网络包收发情况

RX和TX分别表示网络接口的接收和发送统计信息
    bytes       表示接收或发送的字节数
    packets     表示接收或发送的数据包数量
    errors      表示接收或发送的错误数据包数量
        如果这个值较高,可能意味着存在网络问题,例如丢包或连接问题
    dropped     表示由于缓冲区溢出等原因而丢弃的数据包数量
        如果这个值较高,可能意味着存在网络问题,例如带宽不足或连接问题

    missed      表示由于缓冲区溢出等原因而丢失的数据包数量这个值通常与dropped类似,但在某些情况下可能会有所不同
    mcast       表示接收到的多播数据包数量
    carrier     表示发送时由于载波信号问题而丢弃的数据包数量
        如果这个值较高,可能意味着存在网络问题,例如链路问题或硬件问题
    collsns     表示发送时由于冲突而丢弃的数据包数量
        如果这个值较高,可能意味着存在网络问题,例如冲突或带宽不足

iftop 实时监测

iftop - display bandwidth usage on an interface by host 显示主机上网口的带宽使用情况

iftop 可以动态的检测网口的流量,捕获近期的网络连接流量,排查哪些主机流量比较多

iftop 
    -i interface     # 监听指定的网口,不加会默认选一个
    -P               # 显示端口信息
    -t               # 用文本输出代替动态显示
    -s num           # 统计num秒内的数据,进行一次打印

iftop -i interface -P -t

这些比较好理解,看字面意思就是了,Peak 峰值,Cumulative 累计值,rate 速率,其他单词应该没问题吧,大致可以监测出流量比较大的主机和端口是哪些。

ethtool 查看网卡信息

ethtool - query or control network driver and hardware settings

查询和控制网络驱动程序以及硬件配置

ethtool 能查询到网口的驱动以及硬件信息,比如MAC,驱动、速率等,简单列几个不多赘述

ethtool
    -P interface           # 打印MAC地址
    -S interface           # 打印统计接收和发送的网络信息
    -i --driver interface  # 打印网口的驱动和总线位置信息

ethtool interface          # 打印设备当前的配置,比如网速,链路状态等等 

tcpdump 抓包软件

tcpdump - dump traffic on a network 网络流量打包

最有效的网络数据包分析方式,当然是有难度的,命令自身就支持很多功能,也可以配合Wireshark 使用效率更高,非常建议看看《Wireshark网络分析就这么简单》--林沛满 入门抓包和分析,另外一本升级版《Wireshark网络分析的艺术》有兴趣也建议看看。

tcpdump 参数
    -c count         Exit after receiving count packets.
    -C file_size     这个需要配合-w 使用,当输出文件到指定大小时结束抓包
    -i interface     监听指定的网口,-D 可以指定监听多个网口
    -n     Don't convert host addresses to names.  This can be used to avoid DNS lookups.
    -w file          将抓取的网络包写入到文件,之后可以用-r 打印出来,建议使用pcap后缀

常用的方式:

# 抓取所有包
tcpdump -i any -n -vvv

# 抓取eth0 网口上的 tcp 协议 80 端口的网络包,写入到test.pcap中
tcpdump -i eth0 -n tcp port 80 -w test.pcap

# 打印抓取到文件的包
tcpdump -r test.pcap

# 抓取eth0 网口100个的网络包写入到文件
tcpdump -i eth0 -w test.pcap -c 100

# 抓取eth0 网口上的22和25口的包
tcpdump -i eth0 port {22,25} -n -vvv

# 抓取指定网络接口上的指定IP地址的数据包
tcpdump -i eth0 host 192.168.1.1 -n -vvv

# 抓取指定网络接口上的指定IP地址和端口的TCP数据包
tcpdump -i eth0 host 192.168.1.1 and port 80 -n -vvv

其他命令

ss 套接字分析

是netstat升级版,就照着netstat用就行

nmap 网络连接端扫描软件

非常强大的软件,扫描简单列一下,感兴趣的可以单独研究一下

1)主机发现
    nmap IP                       默认扫描1000口以内
    nmap IP1 IP2 IP3
    nmap 111.111.123.220-240
    nmap 111.111.123.1-255
    nmap -sP 111.111.123.1-255    ping检测
    nmap -PN IP 跳过ping检测

    Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254

2)端口扫描
    nmap -sT IP       全开扫描,完成三次握手
    nmap -sS IP       半开扫描,最后ACK报文不回复,不容易被记录
    nmap -p 80 IP     指定端口扫描
    nmap -p 80 IP1 IP2     指定端口扫描

3)版本检测
    nmap -sV IP  开放端口的软件版本

4)操作系统版本检测
    nmap -O IP   操作系统版本

5)部分参数
    -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
    -sU: UDP Scan
    -sO: IP protocol scan
    -p <port ranges>: Only scan specified ports
        Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9

curl 请求url

发起网络请求,可以是请求API,URL还支持一些特殊的写法,可以观察很多网络参数

curl -vk https://baidu.com  查看请求连接详情
curl -w '\n time_namelookup=%{time_namelookup}\n time_connect=%{time_connect}\n time_appconnect=%{time_appconnect}\n time_redirect=%{time_redirect}\n time_pretransfer=%{time_pretransfer}\n time_starttransfer=%{time_starttransfer}\n time_total=%{time_total}\n' https://baidu.com

time_namelookup=0.000035          从请求开始到域名解析完成的耗时
time_connect=0.000144             从请求开始到 TCP 三次握手完成耗时 
time_appconnect=0.000000          从请求开始到 TLS 握手完成的耗时 
time_redirect=0.000000            从请求开始到向服务器发送第一个 GET/POST 请求开始之前的耗时 
time_pretransfer=0.000168         重定向时间,包括到内容传输前的重定向的 DNS 解析、TCP 连接、内容传输等时间 
time_starttransfer=0.037825       从请求开始到内容传输前的时间 
time_total=0.037843               从请求开始到完成的总耗时 

curl https://baidu.com -X POST -d '{"name":"foo"}'    # 发送带参数的POST请求

至此,大概也知道了一些网络的指标以及查看的方式,看着到处都正常的时候,究极办法就是tcpdump 抓包分析了。

相关推荐
WTT001116 分钟前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋325 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
了一li1 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
日记跟新中1 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭1 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
码农君莫笑1 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
明 庭1 小时前
Ubuntu下通过Docker部署NGINX服务器
服务器·ubuntu·docker
BUG 4041 小时前
Linux——Shell
linux·运维·服务器
007php0071 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程