gpt4 book ai didi

linux - 什么时候应该使用 TCP_NODELAY,什么时候应该使用 TCP_CORK?

转载 作者:IT老高 更新时间:2023-10-28 12:32:27 25 4
gpt4 key购买 nike

我知道他们都禁用了 Nagle 的算法。

什么时候应该/不应该使用它们中的每一个?

最佳答案

首先,并非两者都禁用了 Nagle 算法。

Nagle 的算法用于减少线路中更多的小型网络数据包。该算法是:如果数据小于限制(通常是 MSS),则等待直到收到先前发送的数据包的 ACK,同时累积来自用户的数据。然后发送累积的数据。

if [ data > MSS ]
send(data)
else
wait until ACK for previously sent data and accumulate data in send buffer (data)
And after receiving the ACK send(data)

这将有助于 telnet 等应用程序。但是,在发送流数据时等待 ACK 可能会增加延迟。此外,如果接收方实现“延迟 ACK 策略”,则会导致暂时的死锁情况。在这种情况下,禁用 Nagle 算法是更好的选择。

所以 TCP_NODELAY 用于禁用 Nagle 算法。

TCP_CORK 积极地积累数据。如果在套接字中启用了 TCP_CORK,它将不会发送数据,直到缓冲区填充到固定限制。与 Nagle 的算法类似,它也从用户那里累积数据,但直到缓冲区填充到固定限制,直到收到 ACK。这在发送多个数据 block 时很有用。但是在使用 TCP_CORK 时必须更加小心。

直到 2.6 内核,这两个选项都是互斥的。但是在后来的内核中,它们可以同时存在。在这种情况下,TCP_CORK 将被优先考虑。

引用:

关于linux - 什么时候应该使用 TCP_NODELAY,什么时候应该使用 TCP_CORK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3761276/

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