TCP速度测试算法问题

new*_*esh 7 c# tcp

我在一家ISP公司工作.我们正在为客户开发速度测试仪,但遇到了TCP速度测试的一些问题.

一个客户端的总持续时间为102秒,传输100 MB,数据包大小为8192. 100.000.000/8192 = 12.202数据包.如果客户端每隔一个数据包发送一个ACK,这个数据似乎很多时候只是发送ACK.假设客户端发送6000个ACK并且RTT是15ms - 那就是6000*7.5 = 45.000ms = 45秒仅用于ACK?

如果我将此计算用于Mbit/s:

(((sizeof_download_in_bytes / durationinseconds) /1000) /1000) * 8 = Mbp/s
Run Code Online (Sandbox Code Playgroud)

我将得到Mbp/s的结果,但随后发送者和客户端之间的TTL越高,Mbp/s的速度就越低.

为了模拟用户离服务器更近,在Mbp/s的最终结果中删除ACK响应时间是否"合法"?这就像模拟终端用户是否靠近服务器?

所以我会向最终用户显示这个计算:

(((sizeof_download_in_bytes / (durationinseconds - 45sec)) /1000)/1000) * 8 = Mbp/s 
Run Code Online (Sandbox Code Playgroud)

这有效吗?

Sim*_*ter 4

这里的问题是 RTT 太大,以至于没有使用整个带宽。您可能想要增加 TCP 窗口大小,这可以在每个套接字的基础上进行测试以达到测试目的,也可以在系统范围内进行。

作为客户,如果速度测试程序能够通知我次优的系统设置并为我提供纠正它们的选项,我会认为这是一项很棒的服务。

如果 TCP 窗口设置正确,RTT 在 TCP 速度测试中应该无关紧要,除非您丢失了大量数据包(但毕竟这是您首先想要检测的)。