+++
title = "家庭组网系列(2):路由器性能测试"
date = 2025-01-22

[taxonomies]
tags = ["Network"]
+++

前言 本文介绍常用的家庭网络测试方法，包括开源固件和闭源商用设备的测试。
<!-- more -->

随着Wi-Fi7设备的逐渐普及和家用路由器的性能提升，百元以内的wifi6路由器性价比变得非常高，可以用非常少的预算搭建高速网络；然而即使是同样的方案，各家路由器的实际体验却不一致，因此这里记载一些测试路由器性能的方法。

开源固件如OpenWrt，无论是软路由还是硬路由都很方便测试。为了方便测试，我们假设你的网络拓扑为简单的光猫+无线路由器；实际使用中自上而下的，运营商的套餐带宽/限速/QOS，设备的转发性能和网线/网卡的质量都会引起整个网络的波动。


## 性能指标

| 指标              | 含义              |
| --------------- | --------------- |
| 吞吐量（Throughput） | 最大数据传输速度        |
| 延迟 / 抖动         | 延迟和波动情况         |
| 转发性能 / pps      | 每秒能转发多少数据包      |
| 并发连接数           | 同时建立多少TCP连接     |
| NAT / 防火墙性能     | 打开转发、NAT、规则后的性能 |

## 带宽

带宽，也叫吞吐量，是我们最为关心的一个性能指标之一。

理论上1000兆宽带的极限下载速度为125MB每秒，实际上日常生活中少有跑满带宽的使用情况，毕竟商用服务器的带宽成本高，比如B站的视频降码率等等。对于极客玩家来说，内网文件共享，游戏串流，NAS服务和外网多线程下载，BT下载等等需要比较高的带宽性能。以下是一些常见的测试方法：

开源固件可以使用[iperf3](https://github.com/esnet/iperf)来测试。

在路由器A上和设备B上安装iperf3,openwrt为``opkg install iperf3``，随后在A上使用命令``iperf3 -s``开启服务端；在B上使用命令``iperf3 -c <A的IP>``,即可测试B到A的TCP单线程上传速率(本地带宽)，应该和A的物理端口速率相近。若要测试下载速率，``iperf3 -c <A的IP> -R``即可。

TCP单线程下载测试示例：
![iperf3.webp](/images/iperf3.webp)

如果你的路由器为闭源固件，也可以到在线测速站进行简单测试：

- [测速网:speedtest.cn](https://www.speedtest.cn/)
- [中国科学技术大学测速网站](https://test.ustc.edu.cn/)
- [Netflix运营的fast.com](fast.com)
- [Openspeedtest](https://openspeedtest.com/)
- [Cloudflare测速](https://speed.cloudflare.com/)

这些网站的测试速度随着节点的不同而有所差异，比如测试节点在北京联通而你是广东电信，会和实际差距较大。当然，还有一个简单权威的方法，就是下载一个Steam上的大型游戏，Steam的节点在任何国家基本都可以跑满。

## 延迟与抖动

简单的ping命令即可测试延迟，对网络排除故障很有帮助。ping命令是一个广泛使用的命令，在各种系统上都有。

使用``ping <目标IP> -c 20``命令进行测试，可以看到min/avg/max三个值，即为最小/平均/最大延迟；

![ping](/images/ping.webp)

也可以使用iperf3来测试UDP抖动：使用命令``iperf3 -c <server_ip> -u -b 100M -t 10``，-u表示使用udp，-100M表示使用100兆带宽，可逐渐调高并接近极限性能。

![iperf3-udp](/images/iperf3-udp.webp)

## 转发

路由器的CPU作为核心，需要处理外网与内网IP的转发，这种转发能力称为包转发率，通常拿小包的转发率来衡量能力的高低。测试“小包转发能力”其实就是测试 PPS（Packets Per Second）能力,在x86软路由上面这个性能尤为重要，因为无线路由器有硬件级别的加速芯片而软路由没有。

> 以单位时间内发送64byte的数据包（最小包）的个数作为计算基准的。对于千兆以太网来说，计算方法如下：1，000，000，000bps/8bit/（64＋8＋12）byte=1,488,095pps,说明：当以太网帧为64byte时，需考虑8byte的帧头和12byte的帧间隙的固定开销。故一个线速的千兆以太网端口在转发64byte包时的包转发率为1.488Mpps

测试转发性能需要发包-转发-收包三台设备，或者使用环回测试仪。由于iperf3 处于 TCP/UDP 层，包也会变大且加了协议头，测试的结果误差很大，因此不建议用其进行测试小包性能。

---
未完待续。


















