Nagle算法和延迟确认

Nagle算法和延迟确认TCP IP 协议中 无论发送多少数据 总是要在数据前面加上协议头 同时 对方接收到数据 也需要发送 ACK 表示确认 为了尽可能的利用网络带宽 TCP 总是希望尽可能的发送足够大的数据 一个连接会设置 MSS 参数 因此 TCP IP 希望每次都能够以 MSS 尺寸的数据块来发送数据 Nagle 算法就是为了尽可能发送大块数据 避免网络中充斥着许多小数据块 一 Nagle 算法的基本定义任意时刻 最多只能

TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。

一、Nagle算法的基本定义

任意时刻,最多只能有一个未被确认的小段。

所谓“小段”,指的是小于MSS尺寸的数据块,

所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。

二、Nagle算法的规则

(1)如果包长度达到MSS,则允许发送;

(2)如果该包含有FIN,则允许发送;

(3)设置了TCP_NODELAY选项,则允许发送;

            TCP_NODELAY选项可以禁止Nagle 算法。

(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;

           设置该选项后,内核会尽力把小数据包拼接成一个大的数据包(一个MTU)再发送出去,当然若一定时间后(一般为200ms,该值尚待确认),内核仍然没有组合成一个MTU时也必须发送现有的数据(不可能让数据一直等待吧)。

(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。

三、 Nagle算法与CORK算法区别
  

  Nagle算法主要避免网络因为太多的小包(协议头的比例非常之大)而拥塞,而CORK算法则是为了提高网络的利用率,使得总体上协议头占用的比例尽可能的小。如此看来这二者在避免发送小包上是一致的,

在用户控制的层面上,Nagle算法完全不受用户socket的控制,你只能简单的设置TCP_NODELAY而禁用它,CORK算法同样也是通过设置或者清除TCP_CORK使能或者禁用之,然而Nagle算法关心的是网络拥塞问题,只要所有的ACK回来则发包,而CORK算法却可以关心内容,在前后数据包发送间隔很短的前提下(很重要,否则内核会帮你将分散的包发出),即使你是分散发送多个小数据包,你也可以通过使能CORK算法将这些内容拼接在一个包内,如果此时用Nagle算法的话,则可能做不到这一点。

四、延迟确认

累积确认

有时候,发送方发送速度非常快,接收方一下下接收到了好几个 tcp 段,可以通过累积确认的方式,一次确认好几个 tcp 段,这样减少报文段的传输。

捎带确认

参考博客:https://blog.csdn.net/zxm/article/details/

                   ://blog.csdn.net/asklw/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217874.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午8:34
下一篇 2026年3月18日 上午8:34


相关推荐

  • anycast隧道_IPv6中Anycast通信模型若干问题的分析和研究.pdf

    anycast隧道_IPv6中Anycast通信模型若干问题的分析和研究.pdf您所在位置:网站首页>海量文档&nbsp>&nbsp计算机&nbsp>&nbsp通信/网络IPv6中Anycast通信模型若干问题的分析和研究.pdf109页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受…

    2022年5月23日
    36
  • Postman下载安装

    Postman下载安装一、Postman下载1、Postman64位安装包下载:链接:https://pan.baidu.com/s/1lInTrSfW9PMmYI6OsUS2tg提取码:nvbw2、Postman32位安装包下载:链接:https://pan.baidu.com/s/1S_7K9wqyDwuoe-mjQowpKQ提取码:sw7g3、官网下载:地址:https://www.getpostman.com/downloads/,选择页面中的“Download”,根据自己电脑配置,选择32位下载还是64

    2022年6月16日
    49
  • pycharm能配置c语言程序,pycharm设置pytest运行程序

    pycharm能配置c语言程序,pycharm设置pytest运行程序mysql5 分钟倒计时 select now DATE ADD create time INTERVAL5MIN fromecs sms cachewhereno betweencre TFS2010 迁移 重装 还原步骤 1 签入所有代码 2 停止 TFS 服务 运行命令行 并将路径切换到 TFS 安装路径 C Progr

    2026年3月27日
    2
  • Canny算法解析,opencv源码实现及实例[通俗易懂]

    Canny算法解析,opencv源码实现及实例[通俗易懂]参考:http://baike.baidu.com/link?url=tkyXCTmiihKboar3IQ7yo-ECZK95tq2Bn02H1aKwGdt00xrbfD6Lezzjk5ArZF0lCnx8rOQiq4d7o24bUDN75_1392ZOUPYgdt3PZsmLrFShttp://blog.csdn.net/xiaowei_cqu/article/details/783

    2022年5月30日
    42
  • ThreadX应用开发笔记之一:移植ThreadX到STM32平台

    ThreadX应用开发笔记之一:移植ThreadX到STM32平台现在一些小型系统中也往往有多任务处理的需求 这就为实时操作系统提供了用武之地 事实上国内外各种各样的 RTOS 有很多 而且基本都在走开源的路线 ThreadX 也不例外 在这一篇中我们就来学习 ThreadX 初步应用并将其移植到 STM32 平台中 1 前期准备在开始将 ThreadX 一直到 STM32 平台之间我们需要做一些前期准备 首先我们需要准备一个硬件平台 这次我们采用 STM32F407IG 控制单元来作为目标平台 其次我们需要准备一个该硬件平台下可以正常运行的裸机项目 这两点其实我们都已经具备了 最主要

    2026年3月18日
    3
  • Warmup预热学习率「建议收藏」

    Warmup预热学习率「建议收藏」学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种(一)什么是Warmup?Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习率来进行训练.(二)为什么使用Warmup?由于刚开始…

    2022年6月11日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号