netcat 吞吐量低但 iperf 高

geo*_*rge 10 bandwidth

我正在测试连接在同一路由器上的两台电脑之间的吞吐量,一台使用 100mbps lan,另一台使用 54mbps wifi。

这是有趣的部分:

  • 使用nc,从 A 发送到 B 时我得到2.63MB/s(用 测量pv -r|nc ipB
  • 使用iperf,我得到23MB/s,这非常好。

有什么问题nc

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

sys*_*138 6

对于不支持 TCP 窗口的 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,只需在每个段之后。