gpt4 book ai didi

c - 下列哪项对 Nagle 算法的描述是正确的?

转载 作者:可可西里 更新时间:2023-11-01 02:43:03 31 4
gpt4 key购买 nike

下面是对Nagle算法的两个简单描述。

Version 1: Wait for the peer to acknowledge the previously sent packets before sending any partial packets

Version 2: Wait for the peer to acknowledge the previously sent partial packets before sending any partial packets

版本 1 是我从 google 信息中了解到的结果,例如 Wiki(Nagle's algorithm)TCP_CORK: More than you ever wanted to know

版本 2 是我从 Nagle 算法的 Linux 内核实现中了解到的结果

static inline int tcp_nagle_check(const struct tcp_sock *tp,
const struct sk_buff *skb,
unsigned mss_now, int nonagle)
{
return (skb->len < mss_now &&
((nonagle & TCP_NAGLE_CORK) ||
(!nonagle && tp->packets_out && tcp_minshall_check(tp))));
}

tcp_minshall_check() 函数检查所有发送的小数据包是否被确认。

所以我的问题是:

  1. 以下哪项描述是正确的?
  2. 如果两者都正确,Linux 修改后的优势是什么?

最佳答案

这两者之间的唯一区别,如您所写,是 (2) 将毫不延迟地发送一个部分段,即使有未确认的段,如果这些段是全尺寸的话。 IE。如果它最近只发送完整尺寸的片段,并且其中一些片段仍然“悬而未决”。

这是一件好事,因为这种情况并不表示使用小数据包的聊天连接。这种情况经常发生在批量传输数据结束时。除非文件传输的大小可以被 TCP 段的大小整除,以便最后一 block 填满一个段(这种情况不太可能发生),否则数据突发的最后一 block 将是不完整的段。

仅仅因为批量传输的最后一 block 较小而延迟发送是没有意义的。

规则 1 会导致发送方在发送最后一 block 之前实现无意义的延迟,从而减慢几乎每次 HTTP 传输。

(你确定那是真正的规则吗?注意 Nikolai N Fetissov 的评论一定要阅读真正的 RFC 而不是二手资源。)

关于c - 下列哪项对 Nagle 算法的描述是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686480/

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