![netcat 吞吐量低但 iperf 高](https://linux22.com/image/557131/netcat%20%E5%90%9E%E5%90%90%E9%87%8F%E4%BD%8E%E4%BD%86%20iperf%20%E9%AB%98.png)
我正在测试连接同一台路由器的两台电脑之间的吞吐量,一台使用 100mbps 局域网,另一台使用 54mbps 无线网络。
以下是有趣的部分:
- 使用
nc
,我得到2.63MB/秒从 A 发送到 B 时(用 测量pv -r|nc ipB
) - 使用
iperf
,我得到23MB/秒这没什么问题。
可能存在什么问题nc
?
两者的操作系统都是 ubuntu 11.04。
答案1
对于不支持 TCP Windowing 的 NetCat 来说,这个比例听起来差不多。如果你在两个基准测试运行时对接口执行 tcpdump,我猜你会看到 NC 的这种模式:
- 数据包 ->
- <- 确认
- 数据包 ->
- <- 确认
- 数据包 ->
- <- 确认
- 数据包 ->
- <- 确认
IPerf 的模式如下:
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- <- 确认
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- <- 确认
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- 数据包 ->
- <- 确认
通过对 TCP 段进行窗口化,您可以获得更高的吞吐量,因为您不必等待每个数据包之后的 Ack,而只需等待每个段之后的 Ack。
答案2
不是netcat
。iperf
我得到
[ 3] local 192.168.1.201 port 55610 connected with 192.168.1.200 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 394 MBytes 39.4 MBytes/sec
使用nc -l -p 1852 > /dev/null
,cat /dev/zero | pv -r | nc 192.168.1.200 1852
我得到
[ 34MB/s]
(在 30 至 60 之间波动。)
您正在输入什么数据netcat
?
答案3
仅仅因为您的无线网卡能够实现 54mbs 的连接速度并不意味着您将获得该吞吐量。特别是,听起来您有 802.11g,它具有跟腱。只要它与之通信的**每个*无线设备也G它会很快,但只要有一个设备b为了能够达到这样的速度,它必须使用最低公分母来与所有设备通信。
您可以尝试在具有无线功能的机器上打开终端并运行iwconfig
。查找比特率=字段并查看您的实际连接速度。
答案4
注意 iperf 单位。这是一个常见的陷阱:iperf 通常以 Mbit/s 而不是 Mbyte/s 显示。