nagle算法

什么是nagle算法,用来干什么的

是为了减少广域网的小分组数目,从而减小网络拥塞的出现;
该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组,tcp需要收集这些少量的分组,并在ack到来时以一个分组的方式发送出去;其中小分组的定义是小于MSS的任何分组;

Nagle算法只允许一个未被ACK的包存在于网络,它并不管包的大小,因此它事实上就是一个扩展的停-等协议,只不过它是基于包停-等的,而不是基于字节停-等的。Nagle算法完全由TCP协议的ACK机制决定,这会带来一些问题,比如如果对端ACK回复很快的话,Nagle事实上不会拼接太多的数据包,虽然避免了网络拥塞,网络总体的利用率依然很低。

延迟ACK

如果对每个包返回一个ACK确认包的话,代价过高,所以设置一个ACK确认定时器,在这段时间内,若有数据需要发送到对等方,则捎带ACK过去;若发现ACK在定时的这段时间内尚未发送,则单独发出一个ACK包

  • 避免糊涂窗口综合症;

  • 发送数据的时候将ack捎带发送,不必单独发送ack;

  • 如果延迟时间内有多个数据段到达,那么允许协议栈发送一个ack确认多个报文段;

不好的情况

"写-写-读",两次发送的数据包均小于MSS,对等方延迟ACK,又由于nagle的限制,所以只能等到超时后,收到对等方单独的ACK包,有时需要关掉nagle算法。

如何关闭

使用TCP套接字选项TCP_NODELAY可以关闭套接字选项;

对比

对比

实现

//TODO

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,855评论 0 2
  • TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。...
    Fern16阅读 837评论 0 0
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,437评论 6 174
  • 六、TCP可靠传输的实现 首先介绍以字节为单位的滑动窗口。为了讲述可靠传输原理的方便,假定数据传输只在一个方向进行...
    dmmy大印阅读 2,259评论 0 1
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,251评论 0 8

友情链接更多精彩内容