博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP的ACK原理和延迟确认机制
阅读量:6325 次
发布时间:2019-06-22

本文共 884 字,大约阅读时间需要 2 分钟。

某天晚上睡觉前突然想到 tcp的ACK确认是单独发的还是和报文一起发的,下面看一下别人的解答

一、ACK定义

TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表示已经确认接收到ACK确认号前面的所有数据。
ACK字段长度为32位,能表示0~2^32-1之间的值。

二、ACK作用

发送方在一定时间内没有收到服务端的ACK确认包后,就会重新发送TCP数据包。发送方收到了ACK,表明接收方已经接收到数据,保证了数据的可靠达到。

三、ACK机制

接收方在接收到数据后,不是立即会给发送方发送ACK的。这可能由以下原因导致:
1、收到数据包的序号前面还有需要接收的数据包。因为发送方发送数据时,并不是需要等上次发送数据被Ack就可以继续发送TCP包,而这些TCP数据包达到的顺序是不保证的,这样接收方可能先接收到后发送的TCP包(注意提交给应用层时是保证顺序的)。
2、为了降低网络流量,ACK有延迟确认机制。
3、ACK的值到达最大值后,又会从0开始。

四、ACK延迟确认机制

接收方在收到数据后,并不会立即回复ACK,而是延迟一定时间。一般ACK延迟发送的时间为200ms,但这个200ms并非收到数据后需要延迟的时间。系统有一个固定的定时器每隔200ms会来检查是否需要发送ACK包。这样做有两个目的。
1、这样做的目的是ACK是可以合并的,也就是指如果连续收到两个TCP包,并不一定需要ACK两次,只要回复最终的ACK就可以了,可以降低网络流量。
2、如果接收方有数据要发送,那么就会在发送数据的TCP数据包里,带上ACK信息。这样做,可以避免大量的ACK以一个单独的TCP包发送,减少了网络流量。
---------------------
作者:游戏猫
来源:CSDN
原文:https://blog.csdn.net/gamekit/article/details/53898802
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/wangshaowei/p/11063101.html

你可能感兴趣的文章
laravel 心得
查看>>
[LeetCode] Permutation Sequence
查看>>
Solr索引数据库数据
查看>>
关于学习编程和做好DBA的关系
查看>>
Linux编程基础——Makefile
查看>>
timus_1003_floyd_warshall
查看>>
[转]MySQL基本操作
查看>>
搜索、博客-csdn博客搜索-by小雨
查看>>
如何将图片保存至自定义分组
查看>>
[每日一题] OCP1z0-047 :2013-07-29 视图――别名
查看>>
DAO,Service接口与实现类设计
查看>>
(十七)迭代器模式详解(foreach的精髓)
查看>>
ASP.NET MVC的过滤器
查看>>
URL地址传值型多条件搜索JS
查看>>
[翻译]CURAND Libaray--Host API--(2)
查看>>
Delphi xe5 编译报environment.proj错误的解决
查看>>
PHP变量作用域
查看>>
力挺8天入门wpf【转载】
查看>>
Linux模块
查看>>
kendo grid输入框验证方法
查看>>