网络性能指标以及ping测试(Linux)

1、网络可用性

  • 测试方式:ping命令验证网络连通。
命令参数:
-d 使用Socket的SO_DEBUG功能。
-f  极限检测。大量且快速地送网络封包给一台机器,看它的回应。压它!
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

通常ping命令的返回结果常见有以下几种

PING 10.7.5.88 (10.7.5.88) 56(84) bytes of data.
64 bytes from 10.7.5.88: icmp_seq=2 ttl=64 time=0.777 ms

该结果表示收到10.48.128.1的reply包,说明目的网络可达。

  • bytes值:数据包大小,也就是字节。
  • time值:响应时间,这个时间越小,说明你连接这个地址速度越快。
  • TTL值:Time To Live,表示DNS记录在DNS服务器上存在的时间,它是IP协议包的一个值,告诉路由器该数据包何时需要被丢弃。可以通过Ping返回的TTL值大小,粗略地判断目标系统类型是Windows系列还是UNIX/Linux系列。

默认情况下,Linux系统的TTL值为64或255,WindowsNT/2000/XP系统的TTL值为128,Windows98系统的TTL值为32,UNIX主机的TTL值为255。

因此一般TTL值:
100~130ms之间,Windows系统 ;
240~255ms之间,UNIX/Linux系统。

Request timed out
请求超时,该结果表示没有收到reply包,说明存在目的网络的路由,但网络不通。
Destination host Unreachable
目的主机不可达,该结果表示没有到目的主机的路由。
Unknown host
不可知的主机,该结果表示无法解析域名为IP地址。
Hardware error
硬件错误,该结果表示硬件故障。

2、网络响应时间

网络响应时间是指终端发起到远端的连接请求,到收到远端的回复所需要的时间,也可以用ping命令来测试网络的响应时间,Ping 命令的 echo request/reply 一次往返所花费时间就是响应时间。有很多因素会影响到响应时间,如网络的负荷,网络主机的负荷,网络的带宽,网络设备的负荷等等。

网络的可用性良好的时候,使用ping命令测试时,返回结果:
64 bytes from 10.7.5.88: icmp_seq=2 ttl=64 time=0.777 ms
结果说明该终端到远端 10.7.5.88 的响应时间为0.777ms

3、网络抖动

网络抖动是指分组延迟的变化程度。如果网络发生拥塞,排队延迟将影响端到端的延迟,并导致通过同一连接传输的分组延迟各不相同,而抖动,就是用来描述这样一延迟变化的程度。

利用ping命令可以观察出网络抖动的情况:

PING 10.7.5.88 (10.7.5.88) 100(128) bytes of data.
108 bytes from 10.7.5.88: icmp_seq=5 ttl=64 time=0.650 ms
108 bytes from 10.7.5.88: icmp_seq=6 ttl=64 time=0.736 ms
108 bytes from 10.7.5.88: icmp_seq=7 ttl=64 time=0.633 ms
108 bytes from 10.7.5.88: icmp_seq=8 ttl=64 time=0.916 ms
108 bytes from 10.7.5.88: icmp_seq=9 ttl=64 time=0.683 ms
108 bytes from 10.7.5.88: icmp_seq=13 ttl=64 time=1.38 ms
108 bytes from 10.7.5.88: icmp_seq=14 ttl=64 time=0.819 ms
108 bytes from 10.7.5.88: icmp_seq=15 ttl=64 time=0.984 ms
108 bytes from 10.7.5.88: icmp_seq=16 ttl=64 time=0.756 ms
108 bytes from 10.7.5.88: icmp_seq=17 ttl=64 time=0.751 ms
108 bytes from 10.7.5.88: icmp_seq=18 ttl=64 time=0.770 ms
^C
--- 10.7.5.88 ping statistics ---
18 packets transmitted, 11 received, 38% packet loss, time 17013ms
rtt min/avg/max/mdev = 0.633/0.825/1.385/0.206 ms

通过结果可以看出终端到10.7.5.88这个目的主机的网络响应时间统计
min/avg/max/mdev = 0.633/0.825/1.385/0.206 ms
最小值、平均、最大值
mdev,即RTT 偏离平均值的程度,也是个评判标准。越小证明越稳
若是过程中出现大延迟的数据包,甚至偶尔的丢包现象,则说明该网络抖动程度较大,网络的性能不佳。

极限检测:ping -f 10.7.5.88
大量且快速地送网络封包给一台机器,看它的回应。
结果:

...........................^C.
--- 10.7.5.88 ping statistics ---
102098 packets transmitted, 96511 received, 5% packet loss, time 182293ms
rtt min/avg/max/mdev = 0.262/0.647/23.419/0.354 ms, pipe 3, ipg/ewma 1.785/0.526 ms

可以在短时间发大量的包

4、网络吞吐量

吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量受网络的带宽或网络的额定速率的限制。

1. 可以在交换机上通过show interfacesummary命令查看该交换机端口的数据流量。
ZHL_6509A#sh intsummary
 *: interface is up
 IHQ: pkts in input hold queue     IQD: pkts dropped from input queue
 OHQ: pkts in output hold queue    OQD: pkts dropped from output queue
 RXBS: rx rate (bits/sec)          RXPS: rx rate (pkts/sec)
 TXBS: tx rate (bits/sec)          TXPS: tx rate (pkts/sec)
 TRTL: throttle count
  Interface               IHQ   IQD OHQ   OQD  RXBS RXPS TXBS TXPS TRTL
-------------------------------------------------------------------------
*GigabitEthernet2/1       0     0   0     0 171848000  30276 152596000  32948   0
*GigabitEthernet2/2       0     0   0     0 1469000  648    0    0    0
*GigabitEthernet2/3       0     0   0     0 275000  221 1666000 758    0
*GigabitEthernet2/4       0     0   0 10830     0    0 449000 485    0
*GigabitEthernet2/5       0     0   0 10348     0    0 448000  485    0
*GigabitEthernet2/6       0     0   0 11061     0    0 470000 490    0
*GigabitEthernet2/7       0     0   0 10833     0    0 470000 490    0

通过该命令,可以看出当前端口每秒钟通过的数据量,例如GigabitEthernet2/1接收数据量为171848000bits/S,换算后为171.8Mbits/S,发送的数据量为152596000bits/S,换算后为152.6Mbits/S,该数据反映了当前网络的使用和负载情况,当网络中的吞吐量非常大的时候,可能会引起交换机压力大、CPU占用率高,及网络阻塞的现象。因此,需要对平时正常状态下的网络吞吐量的大概范围有一个了解,当出现网络缓慢、阻塞时,通过对比能及时发现那些接口的吞吐量过大,从而判断解决问题。

2. 假设ping 100字节平均耗费2ms而ping 5100字节平均耗费7ms,因此,往返额外花费5ms单程额外花费2.5ms,多发送5000字节即8000比特。吞吐量近似计算为(5100-100)*8 bit / 0.0025s = 16Mbps。当然这一估算是非常粗略的,假设路径上其他数据流基本不变的情况,也没有考虑路径上所有链路的异常情况。
3. 通过iperf去测试

5、网络带宽容量

与网络吞吐量不同,网络带宽容量指的是在网络的两个节点之间的最大可用带宽。这是由组成网络的网络设备和网络通道的能力所决定的。

网络性能评估工具Iperf

监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础。
对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Iperf就是这样一款网络带宽测试工具。
Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。

下载安装

下载地址: https://iperf.fr/iperf-download.php#uwp-iperf3

Windows 图形界面软件:jperf 下载地址: http://www.pc0359.cn/downinfo/59375.html(iperf 2)

推荐使用 iperf 3
windows:

android:

Linux:
用git下载,git clone https://github.com/esnet/iperf.git
可以在windows下下载好文件然后copy过去。
安装命令:
编译安装iperf

$ cd iperf
$ sudo ./configure
$ sudo make
$ sudo make install

但是需要注意,这样copy之后会出现权限变化问题,在安装的时候,出现如下问题:

$ sudo ./configure
sudo: unable to execute ./configure: No such file or directory

这个时候需要用 “git reset --hard” 命令重置一下。

:~/iperf$ git branch
* master
:~/iperf$ git reset --hard
HEAD is now at d2a2252 Add note for stream ids for multi-stream tests (#1285)

执行iperf3 -v查看是否已经可以使用iperf,如果没有报错,进入到源码路径src,src目录已经编译了iperf,在源码路径直接执行iper3即可,如下所示:

:~/iperf/src$ ./iperf3 -v
iperf 3.11 (cJSON 1.7.13)
Linux bionic 4.4.194 #14 SMP Thu Mar 3 09:47:01 CST 2022 aarch64
Optional features available: CPU affinity setting, IPv6 flow label, SCTP, TCP conge

Iperf的主要功能:

(1)TCP方面

测试网络带宽。
支持多线程,在客户端与服务端支持多重连接。
报告MSS/MTU值的大小。
支持TCP窗口值自定义并可通过套接字缓冲。

(2)UDP方面

可以设置指定带宽的UDP数据流
可以测试网络抖动值、丢包数
支持多播测试
支持多线程,在客户端与服务端支持多重连接。

常用公共参数(仅常用的,需要特殊参数的时候可以-h去查)

    -i     #表示每2秒显示一次报告
    
    -w 80k    #对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值
 
    -B 192.168.122.1
        #绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。
        #在Iperf的UDP模式下,此参数用于绑 定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址
        
#常用客户端参数
    -b 100m    #用于udp测试时,设置测试发送的带宽,单位:bit/秒,不设置时默认为:1Mbit/秒
    
    -c     #指定服务端ip地址
    
    -d     #同时测试上行和下行
    
    -t     #设置传输时间,为10秒
    
    -P     #指定发起5个线程

例子说明:

在这里插入图片描述
在这里插入图片描述

  • 从左至右依次为: 线程id 时间 接收数据大小 每秒大小 延时 丢包/总包 丢包率
  • 重点关注虚线下的一段内容,在这段输出中,

Bandwidth Mbits/sec 说的就是百兆网络 /8 MBytes/sec
Transfer MBytes 传输多少M
Jitter 列表示抖动时间,或者称为传输延迟,
Lost/Total 列表示丢失的数据报和总的数据报数量,后面的0.%是平均丢包的比率,
Datagrams 列显示的是总共传输数据报的数量

注:如果单线程测出来的带宽比预期的要偏低,可以试试多线程去打流。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐