我正在尝试测量tcp连接的rtt,但我遇到了一些问题。通过getsockopt查找服务器套接字的tcp_info来测量rtt。遗憾的是,如果客户端使用delayed acks,则会严重影响此指标,因为这会增加从服务器发送到测量rtt的数据包之间的延迟。
如果我可以确保客户端使用延迟的acks(即标准的Windows TCPAckFrequency为2),我可以通过编程方式找出“真正的”rtt。但这是不现实的,因为应用程序是在Web浏览器(Javascript / WebSocket)中运行的演示(tcp功能),我不想让用户弄乱他们的注册表以使网页正常工作
我能看到获得良好测量的唯一真正可能性是 1:在客户端的套接字上设置tcp ack频率(当前是WebSocket,这不是必需的),或者 2:以某种方式查明客户端是否正在使用延迟确认,并相应地调整测量值。
通过设置TCP_QUICKACK可以实现第一个解决方案,但我没有在任何基于javascript的tcp解决方案(本机WebSocket或Socket.io)中找到这种可能性。同样,我还没有找到任何检查客户端设置的好方法。有什么想法吗?