带宽 ttcp 和 PCTTCP

Bandwidth ttcp and PCTTCP

我有一个关于 Winsock 编程的非常有趣的问题。老实说:我对此并不感到好笑。

我的目标是测试 GBit 网络的带宽。我将带有 GBit 网卡(Windows 7 64 位)的 PC 连接到嵌入式系统(其中还包括一个 GBit 网络芯片)。

嵌入系统作为UDP服务器工作(不要问我细节,它是FPGA编程的东西)。 从网站 http://www.pcausa.com/Utilities/ttcpdown1.htm 我下载了 PCATTCP 工具。

工具 PCATTCP I 运行 它具有以下选项:

 PCATTCP.exe -t -l 1178  -u -p XYZ -f m -s A.B.C.D <MyBinaryFile.bin

(端口号 XYZ 和 ip 地址在这种情况下并不重要) 结果是带宽在150左右Mbit/s.

PC端安装了cygwin(64位)环境,其中包含工具ttcp。 所以我开始了 ttcp:

ttcp -t -l 1178  -u -p XYZ -f m A.B.C.D <MyBinaryFile.bin

这里我们有大约 600 Mbit/s。 这是真的吗? Cygwin 的 ttcp 比来自 PCATTCP 的纯 winsock 调用更快??? 为了确定这一点,我启动了 Wireshark。是的,Wireshark 中的时间栏告诉我,ttcp 工具比 PCATTCP 更快。 此外,我 运行 ttcp 使用此选项:

ttcp -t -l 1178 –b 1178 -u -p XYZ -f m A.B.C.D <MyBinaryFile.bin

那么带宽和PCATTCP差不多(150左右Mbit/s)。 “b”选项用于设置套接字缓冲区大小。但是对PCATTCP工具没有影响。

在这种情况下,我有以下问题: Cygwin 如何沟通?它使用风向袋吗?

为什么我用PCATTCP工具修改socket buffer size不生效?

有人对这个案例有什么建议吗?

你好,

托马斯

所以,

我找到了一些信息,cygwin 如何与套接字一起工作:

https://cygwin.com/cygwin-ug-net/highlights.html

有这段文字:

Cygwin 中与套接字相关的调用基本上调用了 Winsock 中的同名函数,Winsock 是 Microsoft 对 Berkeley 套接字的实现,但有很多调整。所有套接字在后台都是非阻塞的,以允许通过 POSIX 信号中断阻塞调用。额外的簿记对于实现正确的套接字共享 POSIX 语义是必要的,特别是对于 select 调用。

这意味着方法"sendto(...)"在cygwin异步和PCATTCP同步下。

如果你想要网络的最佳性能,你必须实现套接字异步; Boost::Asio (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio.html) 包含这样的异步方法(例如“async_send_to”)。

不幸的是,我无法弄清楚为什么使用 PCATTCP 工具更改缓冲区套接字大小没有效果。

此致,

托马斯