
# 通过iPerf3工具测试物理专线带宽可用性
#### 操作场景
物理专线接入完成后，您需要测试链路的性能，确保物理专线可以满足您的业务需求。
本文介绍通过iPerf3工具测试物理专线带宽的方法。
#### 前提条件
- 已完成本地IDC与华为云之间物理专线的接入和路由配置。
- 准备设备和资源：
  - 1个IDC网络接入设备，作为iPerf3测试中的客户端或服务器端。 IDC网络接入设备的IP地址示例：192.168.0.1。
    
  
  - 6个可访问公网的弹性云服务器ECS实例，作为iPerf3测试中的客户端或服务器端，与IDC网络接入设备之间建立控制连接，传递测试配置相关的信息以及测试结果。 ECS实例配置信息示例：6个规格为c7.large.2，镜像为CentOS 8.2 64bit(40GB)的ECS实例，IP地址为172.16.0.2～172.16.0.7。
    
   
 
#### 搭建测试环境
分别在IDC网络接入设备和6个ECS实例上安装iPerf3，下文以在ECS实例安装iPerf3为例。
1. 登录ECS实例。

2. 安装iPerf3。
   1. 执行以下命令，下载iPerf3。
      ```
      yum install iperf3
      ```
      
   
   2. 执行 iperf3 -v 命令，验证安装是否成功。
      ```
      iperf3 -v
      ```
      系统回显版本信息时，表示安装成功。
      
    
 
#### 使用iPerf3测试物理专线的带宽
#### iPerf3概述
iPerf3是一款开源、轻量、跨平台的网络性能测试工具，专门用于主动测量TCP、UDP协议下网络链路的带宽吞吐量、丢包率、延迟抖动、报文PPS转发速率，是企业物理专线、云专线、骨干网、内网带宽验收的行业标准工具。
运行模式为**C/S客户端/服务端架构**：一端启动服务端监听，另一端客户端主动连接发包测试。
iPerf3的主要参数说明如[表1]所示。
 表1iPerf3参数说明 
| 主要参数 | 参数说明                                                                                                                                                                                                                                                              |
|:---|:---|
| -s   | 服务端专用参数，表示iPerf3以服务端模式运行。                                                                                                                                                                                                                                         |
| -c   | 客户端专用参数，表示iPerf3以客户端模式运行。                                                                                                                                                                                                                                         |
| -i   | 设置每次报告之间的时间间隔，单位为秒。                                                                                                                                                                                                                                               |
| -p   | - 服务端：指定服务端监听的端口，默认为5201，同时监听TCP/UDP。  - 客户端：指定客户端连接服务端的端口，默认为5201。如果同时有-u参数，表示通过UDP发起连接，否则默认使用TCP连接。   |
| -u   | 表示使用UDP协议发送报文。若不指定该参数则表示使用TCP协议。                                                                                                                                                                                                                                  |
| -l   | 设置读写缓冲区的长度。通常测试带宽时建议该值设为1400，测试包转发性能时建议该值设为16。                                                                                                                                                                                                                    |
| -b   | UDP模式使用的带宽，单位bit/s。                                                                                                                                                                                                                                               |
| -t   | 设置传输的总时间。iPerf3在指定时间内，重复发送指定长度数据包的时间，默认值为10秒。                                                                                                                                                                                                                     |
| -A   | 设置CPU亲和性，可以将iPerf3进程绑定对应编号的逻辑CPU，避免iPerf3进程在不同的CPU间被调度。                                                                                                                                                                                                           |
   
#### 测试IDC网络接入设备作为服务端的带宽
1. 在IDC网络接入设备上执行以下命令，以服务端模式启动iPerf3进程，指定不同端口。
   ```
   iperf3 -s -i 1 -p 16001 
    iperf3 -s -i 1 -p 16002 
    iperf3 -s -i 1 -p 16003 
    iperf3 -s -i 1 -p 16004 
    iperf3 -s -i 1 -p 16005  
    iperf3 -s -i 1 -p 16006
   ```
   
2. 分别在6个ECS实例上执行**iperf3 -u -l 1400 -b 100m -t 120 -c server_ip -i 1 -p port** 命令，以客户端模式启动iPerf3进程，并指定到IDC网络接入设备的不同端口。
   执行命令示例如下：
   ```
   iperf3 -u -l 1400 -b 100m -t 120 -c 192.168.0.1 -i 1 -p 16001 #第一个ECS实例
    iperf3 -u -l 1400 -b 100m -t 120 -c 192.168.0.1 -i 1 -p 16002 #第二个ECS实例
    iperf3 -u -l 1400 -b 100m -t 120 -c 192.168.0.1 -i 1 -p 16003 #第三个ECS实例
    iperf3 -u -l 1400 -b 100m -t 120 -c 192.168.0.1 -i 1 -p 16004 #第四个ECS实例
    iperf3 -u -l 1400 -b 100m -t 120 -c 192.168.0.1 -i 1 -p 16005 #第五个ECS实例
    iperf3 -u -l 1400 -b 100m -t 120 -c 192.168.0.1 -i 1 -p 16006 #第六个ECS实例
   ```
   
 
#### 测试IDC网络接入设备作为客户端的带宽
1. 分别在6个ECS实例上执行**iperf3 -s -i 1 -p 16001**命令，以服务端模式启动iPerf3进程并指定端口。
2. 在IDC网络接入设备上执行以下命令，以客户端模式启动6个iPerf3进程。
   ```
   iperf3 -u -l 1400 -b 100m -t 120 -c 172.16.0.2 -i 1 -p 16001
    iperf3 -u -l 1400 -b 100m -t 120 -c 172.16.0.3 -i 1 -p 16001
    iperf3 -u -l 1400 -b 100m -t 120 -c 172.16.0.4 -i 1 -p 16001
    iperf3 -u -l 1400 -b 100m -t 120 -c 172.16.0.5 -i 1 -p 16001
    iperf3 -u -l 1400 -b 100m -t 120 -c 172.16.0.6 -i 1 -p 16001
    iperf3 -u -l 1400 -b 100m -t 120 -c 172.16.0.7 -i 1 -p 16001
   ```
   
 
#### 分析测试结果
客户端的iPerf3进程执行完毕后，会显示以下结果。通过将对端收到的包数除以时间，计算出测试链路的pps，即pps=对端收到的包÷时间。
```
[ ID]  Interval        Transfer    Bandwidth      Jitter    Lost/Total Datagrams 
[  4]  0.00-10.00 sec  237 MBytes  199 Mbits/sec  0.027 ms  500/30352 (1.6%) 
[  4]  Sent 30352  datagrams
```
显示结果中各字段含义如下表所示。
| 字段                   | 含义              |
|:---|:---|
| Transfer             | 传输的总数据量         |
| Bandwidth            | 带宽大小            |
| Jitter               | 抖动              |
| Lost/Total Datagrams | 丢失报文数/总报文数（丢包率） |
   
