netcat 吞吐量低但 iperf 高

netcat 吞吐量低但 iperf 高

我正在测试连接同一台路由器的两台电脑之间的吞吐量,一台使用 100mbps 局域网,另一台使用 54mbps 无线网络。

以下是有趣的部分:

  • 使用nc,我得到2.63MB/秒从 A 发送到 B 时(用 测量pv -r|nc ipB
  • 使用iperf,我得到23MB/秒这没什么问题。

可能存在什么问题nc

两者的操作系统都是 ubuntu 11.04。

答案1

对于不支持 TCP Windowing 的 NetCat 来说,这个比例听起来差不多。如果你在两个基准测试运行时对接口执行 tcpdump,我猜你会看到 NC 的这种模式:

  1. 数据包 ->
  2. <- 确认
  3. 数据包 ->
  4. <- 确认
  5. 数据包 ->
  6. <- 确认
  7. 数据包 ->
  8. <- 确认

IPerf 的模式如下:

  1. 数据包 ->
  2. 数据包 ->
  3. 数据包 ->
  4. 数据包 ->
  5. 数据包 ->
  6. 数据包 ->
  7. <- 确认
  8. 数据包 ->
  9. 数据包 ->
  10. 数据包 ->
  11. 数据包 ->
  12. 数据包 ->
  13. 数据包 ->
  14. <- 确认
  15. 数据包 ->
  16. 数据包 ->
  17. 数据包 ->
  18. 数据包 ->
  19. 数据包 ->
  20. 数据包 ->
  21. <- 确认

通过对 TCP 段进行窗口化,您可以获得更高的吞吐量,因为您不必等待每个数据包之后的 Ack,而只需等待每个段之后的 Ack。

答案2

不是netcatiperf我得到

[  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/nullcat /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 显示。

相关内容