本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 网络 的性能指标
日常最常见的问题就是 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协议中用于保证数据可靠传输的一种重要机制。
当发送方发送数据包给接收方后,如果在一定时间内没有收到接收方的确认(ACK),发送方会重新发送相应的数据包。这种机制有助于确保数据的可靠传输,但同时也带来一些影响。
注意:超时重传对网络性能影响极大,与拥塞控制有关,于是就有了快速重传和SACK等减少影响的重传和确认机制出现。
简单了解了一些性能指标以后,需要了解如何看这些指标
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
指标异常描述:
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表示溢出
指标异常描述:
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 - 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 - 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 - query or control network driver and hardware settings?
查询和控制网络驱动程序以及硬件配置
ethtool 能查询到网口的驱动以及硬件信息,比如MAC,驱动、速率等,简单列几个不多赘述
ethtool
-P interface # 打印MAC地址
-S interface # 打印统计接收和发送的网络信息
-i --driver interface # 打印网口的驱动和总线位置信息
ethtool interface # 打印设备当前的配置,比如网速,链路状态等等
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
是netstat升级版,就照着netstat用就行
非常强大的软件,扫描简单列一下,感兴趣的可以单独研究一下
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
至此,大概也知道了一些网络的指标以及查看的方式,看着到处都正常的时候,究极办法就是tcpdump 抓包分析了。?