TCP协议之确认应答

TCP传输数据的过程中,每次接收方收到数据后,都会对传输方进行确认应答,也就是会发送ACK报文。这个ACK报文中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。

序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。

Delayed ACK(延迟确认):

如果只是单纯的发送一个确认,代价会比较高(IP头部20字节+TCP头部20字节)。
TCP Delayed ACK就是为了解决这个问题,进而改善网络性能。它将几个ACK响应组合在一起成为单个响应,或者将ACK响应与响应数据一起发送给对方,从而减少协议开销。
具体如下:

  • 当有响应数据要发送时,ACK会随响应数据立即发送给对方;
  • 如果没有响应数据,ACK将会延迟发送,以等待看是否有响应数据可以一起发送。在linux系统中,默认这个延迟时间是40ms;
  • 如果在等待发送ACK期间,对方的第二个数据包又到达了,这时要立即发送ACK。

Nagle算法

Nagle算法是一种通过减少网络发送数据包来提高TCP/IP网络效率的方法。它使用发明人 John Nagle 的名字来命名的,John Nagle 在 1984 年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题。
试想如果应用程序每次产生1个字节的数据,都以网络数据包的形式发送到远程服务器,那么就很容易导致网络因为太多的数据包而过载。在这种情况下,传送一个只有1个字节有效数据的数据包,却要花费40个字节长包头(即IP头部20字节+TCP头部20字节)的额外开销,这种有效载荷(payload)的利用率是极其低下的。
具体如下:

  • 如果发送内容大于等于1个MSS(MSS为TCP数据包每次能传输的最大数据分段),立即发送;
  • 如果之前有包没有被ACK,则缓存发送内容;
  • 如果收到ACK,立即发送缓存内容。

Delayed ACK和Nagle算法同时使用

Nagle和Delayed ACK都能提高网络传输的效率,Nagle用在发送方,Delayed ACK用在接收方,一起使用就可能会出大问题。例如:
A和B进行数据传输,A运行Nagle算法,B运行Delayed ACK算法;如果A向B发送一个数据包,B由于Delayed ACK不会立即响应;而A使用Nagle算法,就会一直等待B的ACK,ACK不来一直缓存剩下的数据包;如果这两个数据包是应对同一个请求,那这个请求就会被耽误40ms。

参考:

https://mp.weixin.qq.com/s?__biz=MzUyMDE1ODQ3NQ==&mid=2247483877&idx=1&sn=14094b286c3a82818d65b73b085c1e19&chksm=f9efed81ce986497425387cc5a341e36aad6bc0fa1368f4565595fbb914ff48996932148b235&scene=0&xtrack=1&key=67f1291a8f8b0e0caedc032ecf4ea17ccadc06a109cf50bc6c150da5bed72491f2fe6035ec0af2ea118e68db8cbdbfc92d8e646444f379400c50e6252398afffb5b0e4f4ac67aa2261f32ec2646800f6&ascene=1&uin=MTM4NTAxOTAwMA%3D%3D&devicetype=Windows+10&version=62060833&lang=zh_CN&pass_ticket=KCCjrEW7nZtyLfaaJaHQd4lN6EY3WqsDUgOT1lLBtOaVVUytxJEU869XvRI%2FrY09

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

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 10,486评论 0 8
  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 9,982评论 1 46
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    JasonShi6306421阅读 5,002评论 0 1
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 11,177评论 1 13
  • 《一寸河山一寸血》五本已看完三本,常州人关河五十州真是有心了[强][强][抱拳][抱拳] 故事从张大胡子讲起,谈其...
    最爱山抹微云阅读 3,427评论 1 1