linux系统网络分析
程序员文章站
2024-03-19 21:57:46
...
基本概念
带宽及吞吐量的区别
- 带宽:对应网络类型的最大传输速率;
- 吞吐量:当前两个网络端点之间的数据传输率。
TCP连接延时
连接延时是传输任何数据前建立网络连接所需要的时间,对于TCP连接延时就是TCP握手的时间。
首字节延时
称为第一个字节到达的时间,从连接建立到接收到第一个字节数据所需要的时间。
往返时间
是指网络包往返两个端点所需要的时间。
网络接口使用率和饱和度
网络接口使用率可以通过当前的吞吐量除以最大带宽计算。
饱和度是由于接口满负载,额外的队列、缓冲和阻塞的程度。
TCP监听积压队列使用
过多的TCP连接请求会超过进程当前的处理能力,积压队列会达到极限而丢弃客户机发出的SYN包。监听积压队列导致的丢包是一种衡量网络连接饱和度的方式。
分析方法
性能监控
吞吐量
连接数
错误,包括丢包数
TCP重传输
TCP乱序数据包
TCP分析
TCP发送/接收缓冲的使用
TCP积压队列的使用
积压队列满导致的内核丢包
阻塞窗口大小,包括零长度通知
TCP TIME-WAIT间隔中接收到的SYN
分析工具
netstat
- 默认列出连接的套接字
- -a列出所有套接字信息
- -s网络栈统计信息
- -i网络接口信息
- -r列出路由表
# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 1500 0 0 0 0 0 0 0 0 BMU
eno16777 1500 76 0 0 0 56 0 0 0 BMRU
lo 65536 24 0 0 0 24 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
Iface 网络接口
RX- 接收
TX- 传输
OK传输成功的数据包
ERR错误数据包
DRP丢包
OVR超限
丢包和超限是网络饱和的指标
-c连续模式能和-i一并使用,每秒输出一些累积的计数器
netstat -s网络栈统计信息,但输出缺乏一致性且拼写有错误。
# netstat -s
Ip:
107 total packets received
0 forwarded
0 incoming packets discarded
107 incoming packets delivered
58 requests sent out
3006 dropped because of missing route
Icmp:
6 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
destination unreachable: 6
6 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 6
IcmpMsg:
InType3: 6
OutType3: 6
Tcp:
0 active connections openings
0 passive connection openings
0 failed connection attempts
0 connection resets received
0 connections established
0 segments received
0 segments send out
0 segments retransmited
0 bad segments received.
0 resets sent
Udp:
42 packets received
6 packets to unknown port received.
0 packet receive errors
48 packets sent
0 receive buffer errors
0 send buffer errors
UdpLite:
TcpExt:
0 packet headers predicted
IpExt:
InMcastPkts: 42
OutMcastPkts: 46
InBcastPkts: 53
InOctets: 23908
OutOctets: 6684
InMcastOctets: 5300
OutMcastOctets: 5460
InBcastOctets: 17384
InNoECTPkts: 107
sar
系统活动报告工具sar
- -n DEV:网络接口统计
- -n EDEV:网络接口错误
- -n IP :IP数据报统计
- -n EIP :IP错误统计
- -n TCP :TCP统计
- -n ETCP: TCP错误统计
- -n SOCK :套接字统计
# sar -n DEV 1
Linux 3.10.0-693.21.1.el7.x86_64 (master) 2019年03月03日 _x86_64_ (2 CPU)
07时36分39秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07时36分40秒 eno16777736 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07时36分40秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07时36分40秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07时36分40秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07时36分40秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
统计信息名称,如rx表示接收,tx传输,i输入,seg段。
# sar -n TCP 1
Linux 3.10.0-693.21.1.el7.x86_64 (master) 2019年03月03日 _x86_64_ (2 CPU)
07时31分32秒 active/s passive/s iseg/s oseg/s
07时31分33秒 0.00 0.00 0.00 0.00
07时31分34秒 0.00 0.00 0.00 0.00
07时31分35秒 0.00 0.00 0.00 0.00
07时31分36秒 0.00 0.00 0.00 0.00
07时31分37秒 0.00 0.00 0.00 0.00
07时31分38秒 0.00 0.00 0.00 0.00
- active/s: 新的主动的tcp连接
- passive/s :新的被动的tcp连接
- iseg/s:输入的段
- oseg/s:输出的段
ipconfig
能手动设置网络接口,列出当前所有接口的配置,但centos7默认不再安装ipconfig。
可以尝试该命令安装:# yum -y install net-tools.x86_64
ip
能配置网络接口和路由,观测他们的状态和统计
# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
2808 24 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2808 24 0 0 0 0
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:f2:d6:b6 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
113416 434 0 0 0 0
TX: bytes packets errors dropped carrier collsns
ping
测试网络连通
traceroute
发出一系列数据包探测到一个主机当前的路由。
tcpdump
可以捕捉及检查网络数据包
wireshark
捕捉数据包和检查的图形化接口。可以从tcpdump等工具的转储文件导入数据包来分析。
其它工具
- ss套接字统计信息
- iftop按主机统计网络吞吐量
- iperf是测试tcp和udp最大吞吐量的工具,必须同时在服务器和客户机上运行。