Linux-10-带宽、延时、吞吐率、PPS

1.简介

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

2.用什么指标来衡量 Linux 的网络性能和分析网络问题?

主要以下四点: 带宽延时吞吐率PPS(Packet Per Second)

2.1 带宽

表示链路的最大传输速率,单位是 b/s (比特 / 秒),带宽越大,其传输能力就越强。

2.2 延时

表示请求数据包发送后,收到对端响应,所需要的时间延迟。不同的场景有着不同的含义,比如可以表示建立 TCP 连接所需的时间延迟,或一个数据包往返所需的时间延迟。

2.3 吞吐率

表示单位时间内成功传输的数据量,单位是 b/s(比特 / 秒)或者 B/s(字节 / 秒),吞吐受带宽限制,带宽越大,吞吐率的上限才可能越高。

2.4 PPS

全称是 Packet Per Second(包 / 秒),表示以网络包为单位的传输速率,一般用来评估系统对于网络的转发能力。

3.网络配置如何看?

可以使用 ifconfig 或者 ip 命令来查看
这两个命令功能都差不多,不过它们属于不同的软件包
ifconfig 属于 net-tools 软件包,ip 属于 iproute2 软件包

3.1 ifconfig

[root@Centos-root473791 ~]# ifconfig
docker0   Link encap:Ethernet  HWaddr 56:84:7A:FE:97:99  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:A0:43:C8  
          inet addr:192.168.2.133  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fea0:43c8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:74 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7926 (7.7 KiB)  TX bytes:1632 (1.5 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:A0:43:D2  
          inet addr:192.168.72.132  Bcast:192.168.72.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fea0:43d2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1778 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2564 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:139914 (136.6 KiB)  TX bytes:321221 (313.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:103 (103.0 b)  TX bytes:103 (103.0 b)

3.2 ip命令

[root@Centos-root473791 ~]# ip -s addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:43:c8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.133/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea0:43c8/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:43:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.72.132/24 brd 192.168.72.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea0:43d2/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever

虽然这两个命令输出的格式不尽相同,但是输出的内容基本相同,比如都包含了 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 时,则说明网络发送或者接收出问题了,这些出错统计信息的指标意义如下:

errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;

dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer(这个缓冲区是在内核内存中,更具体一点是在网卡驱动程序里),但因为系统内存不足等原因而发生的丢包;

overruns 表示超限数据包数,即网络接收/发送速度过快,导致 Ring Buffer 中的数据包来不及处理,而导致的丢包,因为过多的数据包挤压在 Ring Buffer,这样 Ring Buffer 很容易就溢出了;

carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;

collisions 表示冲突、碰撞数据包数;

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

4.查看协议栈信息—查看Socket信息?

可以使用 netstat 或者 ss查看

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

4.1 netstat命令

# -n 代表不显示名字,而是以数字方式显示 ip 和端口
# -l 代表只显示LISTEN 状态的socket
# -p 代表显示进程信息

[root@Centos-root473791 ~]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp    0      0       0.0.0.0:22                  0.0.0.0:*                 LISTEN      1775/sshd     

4.2 ss命令

# -t 代表只显示tcp连接
# -n 代表不显示名字,而是以数字方式显示 ip 和端口
# -l 代表只显示LISTEN 状态的socket
# -p 代表显示进程信息

[root@Centos-root473791 ~]# ss  -nlpt
State      Recv-Q Send-Q                   Local Address:Port                     Peer Address:Port 
LISTEN     0      128                                 :::22                                 :::*      users:(("sshd",1775,4))
LISTEN     0      128                                  *:22                                  *:*      
  • State: socket 的状态
  • Recv-Q:接收队列
  • Send-Q:发送队列
  • Local Address:本地地址
  • Foreign Address/Peer Address:远端/对方地址
  • PID/Program name:进程 PID 和进程名称

5.查看协议栈信息—统计信息?

对于协议栈的统计信息,还是使用netstat 和 ss查看

5.1 netstat命令

[root@Centos-root473791 ~]# netstat -s 
Tcp:
    0 active connections openings
    1 passive connection openings
    0 failed connection attempts
    0 connection resets received
    1 connections established
    33813 segments received
    52819 segments send out
    3 segments retransmited
    0 bad segments received.
    0 resets sent

  • active connections openings :主动连接
  • passive connection openings:被动连接
  • failed connection attempts: 失败重试
  • segments send out: 发送
  • segments received:接收

5.2 ss命令

[root@Centos-root473791 ~]# ss -s
Total: 481 (kernel 511)
TCP:   10 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*         511       -         -        
RAW       0         0         0        
UDP       10        7         3        
TCP       10        5         5        
INET      20        12        8        
FRAG      0         0         0 
  • estab:已经连接
  • closed:关闭连接
  • orphaned:孤儿连接

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

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

sar -n DEV,显示网口的统计数据;

sar -n EDEV,显示关于网络错误的统计数据;

sar -n TCP,显示 TCP 的统计数据

通过 sar 命令获取了网口的统计信息 sar -n DEV


# 1 代表每隔一秒输出一组数据

[root@Centos-root473791 ~]# sar -n DEV 1
Linux 4.4.241-1.el6.elrepo.x86_64 (Centos-root473791)   03/06/2021      _x86_64_        (4 CPU)

10:58:21 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
10:58:22 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:58:22 AM      eth1     15.00     22.00      1.08      2.14      0.00      0.00      0.00


  • rxpck/s 和 txpck/s 分别是接收和发送的 PPS,单位为包 / 秒。

  • rxkB/s 和 txkB/s 分别是接收和发送的吞吐率,单位是 KB/ 秒。

  • rxcmp/s 和 txcmp/s 分别是接收和发送的压缩数据包数,单位是包 / 秒。

7.带宽如何查看? ethtool eth0 | grep Speed

[root@Centos-root473791 ~]# ethtool eth0 | grep Speed
        Speed: 1000Mb/s

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

8. 连通性和延时如何查看?

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

# -c 代表次数 

[root@Centos-root473791 ~]# ping www.baidu.com -c 5
PING www.a.shifen.com (180.101.49.12) 56(84) bytes of data.
64 bytes from 180.101.49.12: icmp_seq=1 ttl=128 time=17.9 ms
64 bytes from 180.101.49.12: icmp_seq=2 ttl=128 time=11.8 ms
64 bytes from 180.101.49.12: icmp_seq=3 ttl=128 time=12.9 ms
64 bytes from 180.101.49.12: icmp_seq=4 ttl=128 time=21.1 ms
64 bytes from 180.101.49.12: icmp_seq=5 ttl=128 time=21.0 ms

--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4028ms
rtt min/avg/max/mdev = 11.806/16.987/21.146/3.955 ms
[root@Centos-root473791 ~]# 

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

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan0517

感谢您的鼓励与支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值