系统相关
首页 > 系统相关> > Linux 网络常用性能指标 带宽、延迟、吞吐率、pps的基本概念

Linux 网络常用性能指标 带宽、延迟、吞吐率、pps的基本概念

作者:互联网

Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层、传输层、网络层和网络接口层,共四层组成,每一层都有各自的职责。

 

 

应用程序要发送数据包时,通常是通过 socket 接口,于是就会发生系统调用,把应用层的数据拷贝到内核里的 socket 层,接着由网络协议栈从上到下逐层处理后,最后才会送到网卡发送出去。

而对于接收网络包时,同样也要经过网络协议逐层处理,不过处理的方向与发送数据时是相反的,也就是从下到上的逐层处理,最后才送到应用程序。

网络的速度往往跟用户体验是挂钩的,那我们又该用什么指标来衡量 Linux 的网络性能呢?以及如何分析网络问题呢?

性能指标有哪些?

通常是以 4 个指标来衡量网络的性能,分别是带宽、延时、吞吐率、PPS(Packet Per Second),它们表示的意义如下:

当然,除了以上这四种基本的指标,还有一些其他常用的性能指标,比如:

你可能会问了,如何观测这些性能指标呢?

网络配置如何看?

要想知道网络的配置和状态,我们可以使用 ifconfig 或者 ip 命令来查看。

这两个命令功能都差不多,不过它们属于不同的软件包,ifconfig 属于 net-tools 软件包,ip 属于 iproute2 软件包,我的印象中 net-tools 软件包没有人继续维护了,而 iproute2 软件包是有开发者依然在维护,所以更推荐你使用 ip 工具,推荐使用ip -s add show dev mgmt0;

ifconfig mgmt0

来查看网口 eth0 的配置等信息:

 

 

虽然这两个命令输出的格式不尽相同,但是输出的内容基本相同,比如都包含了 IP 地址、子网掩码、MAC 地址、网关地址、MTU 大小、网口的状态以及网路包收发的统计信息,下面就来说说这些信息,它们都与网络性能有一定的关系。

第一,网口的连接状态标志。其实也就是表示对应的网口是否连接到交换机或路由器等设备,如果 ifconfig 输出中看到有 RUNNING,或者 ip 输出中有 LOWER_UP,则说明物理网路是连通的,如果看不到,则表示网口没有接网线。

第二,MTU 大小。默认值是 1500 字节,其作用主要是限制网络包的大小,如果 IP 层有一个数据报要传,而且数据帧的长度比链路层的 MTU 还大,那么 IP 层就需要进行分片,即把数据报分成干片,这样每一片就都小于 MTU。事实上,每个网络的链路层 MTU 可能会不一样,所以你可能需要调大或者调小 MTU 的数值。

第三,网口的 IP 地址、子网掩码、MAC 地址、网关地址。这些信息必须要配置正确,网络功能才能正常工作。

第四,网路包收发的统计信息。通常有网络收发的字节数、包数、错误数以及丢包情况的信息,如果 TX(发送) 和 RX(接收) 部分中 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,则说明网络发送或者接收出问题了,这些出错统计信息的指标意义如下:

ifconfig 和 ip 命令只显示的是网口的配置以及收发数据包的统计信息,而看不到协议栈里的信息,那接下来就来看看如何查看协议栈里的信息

socket 信息如何查看?

我们可以使用 netstat 或者 ss,这两个命令查看 socket、网络协议栈、网口以及路由表的信息。

虽然 netstat 与 ss 命令查看的信息都差不多,但是如果在生产环境中要查看这类信息的时候,尽量不要使用 netstat 命令,因为它的性能不好,在系统比较繁忙的情况下,如果频繁使用 netstat 命令则会对性能的开销雪上加霜,所以更推荐你使用性能更好的 ss 命令。

从下面这张图,你可以看到这两个命令的输出内容:

 

可以发现,输出的内容都差不多, 比如都包含了 socket 的状态(State)、接收队列(Recv-Q)、发送队列(Send-Q)、本地地址(Local Address)、远端地址(Foreign Address)、进程 PID 和进程名称(PID/Program name)等。

接收队列(Recv-Q)和发送队列(Send-Q)比较特殊,在不同的 socket 状态。它们表示的含义是不同的。

当 socket 状态处于 Established时:

而当 socket 状态处于 Listen 时:

在 TCP 三次握手过程中,当服务器收到客户端的 SYN 包后,内核会把该连接存储到半连接队列,然后再向客户端发送 SYN+ACK 包,接着客户端会返回 ACK,服务端收到第三次握手的 ACK 后,内核会把连接从半连接队列移除,然后创建新的完全的连接,并将其增加到全连接队列 ,等待进程调用 accept() 函数时把连接取出来。

 

 

也就说,全连接队列指的是服务器与客户端完成了 TCP 三次握手后,还没有被 accept() 系统调用取走连接的队列。

那对于协议栈的统计信息,依然还是使用 netstat 或 ss,它们查看统计信息的命令如下:

 

 

 

ss 命令输出的统计信息相比 netsat 比较少,ss 只显示已经连接(estab)、关闭(closed)、孤儿(orphaned) socket 等简要统计。

而 netstat 则有更详细的网络协议栈信息,比如上面显示了 TCP 协议的主动连接(active connections openings)、被动连接(passive connection openings)、失败重试(failed connection attempts)、发送(segments send out)和接收(segments received)的分段数量等各种信息。

网络吞吐率和 PPS 如何查看?

可以使用 sar 命令查看当前网络的吞吐率和 PPS,用法是给 sar 增加 -n 参数就可以查看网络的统计信息,比如

比如,我通过 sar 命令获取了网口的统计信息:

 

 它们的含义:

对于带宽,我们可以使用 ethtool 命令来查询,它的单位通常是 Gb/s 或者 Mb/s,不过注意这里小写字母 b ,表示比特而不是字节。我们通常提到的千兆网卡、万兆网卡等,单位也都是比特(bit)。如下你可以看到, eth0 网卡就是一个千兆网卡:

 

连通性和延时如何查看?

要测试本机与远程主机的连通性和延时,通常是使用 ping 命令,它是基于 ICMP 协议的,工作在网络层。

比如,如果要测试本机到 192.168.12.20 IP 地址的连通性和延时:

 

显示的内容主要包含  icmp_seq(ICMP 序列号)、TTL(生存时间,或者跳数)以及 time (往返延时),而且最后会汇总本次测试的情况,如果网络没有丢包,packet loss 的百分比就是 0。

不过,需要注意的是,ping 不通服务器并不代表 HTTP 请求也不通,因为有的服务器的防火墙是会禁用 ICMP 协议的。

总结

网络的指标:
带宽:使用命令行 ethtool eth0 | grep Speed
延时:使用命令行ping 命令输出结果的time字段的值
吞吐率:使用命令行sar -n命令
pps:使用命令行sar -n命令
网络的可用性:使用命令行ping命令
并发连接数:使用ss -s命令或者netstat -s
丢包率:使用ss -s命令或者netstat -s
重传率:使用ss -s命令或者netstat -s
网口的连接状态:查看ifconfig 输出中看到有 RUNNING,或者 ip 输出中有 LOWER_UP,则说明物理网路是连通的,如果看不到,则表示网口没有接网线。
mtu大小:使用命令行 ip -s add show dev mgmt0或者ifconfig mgmt0

 

文章转载:https://mp.weixin.qq.com/s/uud_LciJ_9MaRTXgryKQ5A

备注:

ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

常用选项

-h, --help 帮助

-V, --version  显示版本号

-t, --tcp 显示 TCP 协议的 sockets

-u, --udp 显示 UDP 协议的 sockets

-x, --unix 显示 unix domain sockets,与 -f 选项相同

-n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh"

-l, --listening 只显示处于监听状态的端口

-p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo)

-a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接

-r, --resolve 把 IP 解释为域名,把端口号解释为协议名称

标签:socket,ss,网络,TCP,pps,命令,Linux,数据包,性能指标
来源: https://www.cnblogs.com/potato-chip/p/14212549.html