gpt4 book ai didi

c++ - Winsock 200ms 延迟问题

转载 作者:太空狗 更新时间:2023-10-29 19:53:43 24 4
gpt4 key购买 nike

我发现它可以在 WinSock 发送调用上延迟 200 毫秒

来自 MSDN: http://support.microsoft.com/kb/214397/en

Nagle 算法: http://en.wikipedia.org/wiki/Nagle 's_algorithm

问题总结:

如果重复发送带有 SO_SNDBUF "0"选项的小消息(< MTU),发送功能 block 200ms。

我的问题:为什么第一次发送消息延迟200ms?

因为 TCP 在第一次发送调用之前是空闲的,我认为必须立即发送第一条消息。

但测试结果并不理想。

第一条消息也延迟了200ms,为什么?

感谢您的回答。

添加一些细节:

Naggle 算法适用于如下的小消息:

1. if wire is idle, send it immediately.
2. if formal message's ACK is not received, wait until ACK & send
3. Window's TCP ack delay mechanism send ack after 200ms.

所以,我的期望是第一条消息立即发送,第二条消息等待第一条消息的确认 200 毫秒,依此类推。

这是错的吗?

最佳答案

通常 TCP 将数据保存在发送缓冲区中,直到它被对等方确认。在您的情况下,没有发送缓冲区(因为 SO_SNDBUF=0)。因此 TCP 阻止发送方保留数据以备可能的重传。对等方的TCP堆栈使用“延迟确认”例程,并在200毫秒延迟后发送确认(或直到收到2个没有确认的数据包)。

因此发送方将被阻塞,直到所有数据都被对等方确认。如果网络RTT长,或者出现丢包,可能需要200ms以上。

关于c++ - Winsock 200ms 延迟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11447809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com