TCP的延迟ACK机制
TCP的延迟ACK机制
TCP的延迟ACK机制一说到TCP,人们就喜欢开始扯三步握手之类的,那只是其中的一个环节而已。实际上每一个数据包的正确发送都是一个类似握手的过程,可以简单的把它视为两步握手。一个发送,一个反馈。但无论发送还是反馈都是有成本的,所以就有了延迟ACK机制。
TCP虽然是传输层协议的,但它毕竟是一个高级协议,它的数据传输也是基于上一层协议的数据帧的。即使一次发送一个字节的数据,也需要一个几十字节的IP包头来装配,更何况TCP的传输是两步的,是需要反馈确认的,那样的话效率就非常低。所以就像我们合并HTTP请求一样,TCP自身也有一种机制来合并一些ACK反馈消息,这就是延迟ACK机制。
当一个数据发送时,发送放一开始并不知道数据是否发送成功,它只能等对方的ACK反馈。当然,在交互过程中一次也不止处理一个数据包,不需要确认前一个包是否已发送就可以发送后面的数据,因为接收方会负责给这些包排序,不用担心顺序问题。而延迟ACK机制就是让接收方在收到数据后不立即反馈ACK消息,而是等到一小段时间,如果之后还有收到其他包就把这些ACK消息一起放入一个包中反馈给客户端。
这个延迟ACK机制并不会延迟太长时间,因为发送端对ACK反馈消息的等待是有时限的,这就是TCP对数据传输时的超时时间。如果延迟太久可能会导致超时,所以这个延迟ACK的值通常不会超过200ms。
如果我们做一个上传的程序要显示进度条,那就需要知道每个包是否都发送成功。而延迟ACK机制就会让这个成功报告延迟,发送端的统计频率就会变低。当然,很多高级语言自带的Socket封装并没有提供收到ACK反馈消息时的触发事件,所以上传进度条的实现在很多时候是非不容易的。
这个延迟ACK机制还会给计算网络延迟带来影响。因为接收端在收到数据时并不立即反馈,这个等待的时间对于发送端来说会被算入网络延迟中。这就是为什么有时候即便是局域网的TCP测试也会有很大延迟的原因。
当然,延迟ACK只是TCP的一个机制而已,它并不总被启用。TCP是很智能的,它会根据传输的“经验”来自动选择最适用的算法,延迟ACK只是其中的一个选择而已。
TCP的延迟ACK机制的更多相关文章
- Linux下TCP延迟确认(Delayed Ack)机制导致的时延问题分析
版权声明:本文由潘安群原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/105 来源:腾云阁 https://www.qclo ...
- TCP Nagle算法&&延迟确认机制
TCP Nagle算法&&延迟确认机制 收藏 秋风醉了 发表于 3年前 阅读 1367 收藏 0 点赞 0 评论 0 [腾讯云]买域名送云解析+SSL证书+建站!>>> ...
- TCP的ACK原理和延迟确认机制
某天晚上睡觉前突然想到 tcp的ACK确认是单独发的还是和报文一起发的,下面看一下别人的解答 一.ACK定义TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表示已经确认接收到ACK确认号 ...
- TCP系列28—窗口管理&流控—2、延迟ACK(Delayed Acknowledgments)
一.简介 之前的内容中我们多次提到延迟ACK(Delayed Ack),延迟ACK是在RFC1122协议中定义的,协议指出,一个TCP实现应该实现延迟ACK,但是ACK不能被过度延迟,协议给出延迟AC ...
- TCP之Nagle算法与延迟ACK
(一)Nagle算法 为了减少网络中小分组的数目,减少网络拥塞的情况.Nagle算法要求在一条TCP连接上最多只能有一个未被确认的未完成小分组,在该分组ACK到达之前不能够发送其他的小分组,发送端需要 ...
- TCP之Nagle算法&&延迟ACK
1. Nagle算法: 是为了减少广域网的小分组数目,从而减小网络拥塞的出现: 该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组,tcp需要 ...
- TCP定时器 之 重传/延迟ACK/保活 定时器初始化
创建socket时会创建传输控制块,之后调用初始化函数对控制块进行初始化,其中包括对定时器的初始化,tcp会调用tcp_init_xmit_timers函数来初始化这些定时器,本文将详细分析tcp_i ...
- TCP的滑动窗口机制【转】
原文链接:http://www.cnblogs.com/luoquan/p/4886345.html TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的 ...
- ActiveMQ讯息传送机制以及ACK机制
http://blog.csdn.net/lulongzhou_llz/article/details/42270113 ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息 ...
随机推荐
- RecyclerView 实现gallery画廊效果
1.RecyclerView的基本用法 首先主Activity的布局文件: [html] view plaincopy <RelativeLayout xmlns:android="h ...
- How tomcat works 读书笔记十五 Digester库 上
Digester库 在前面的几个章节里,我们对tomcat里各个组件的配置完全是使用写硬编码的形式完成的. 如 Context context = new StandardContext(); Loa ...
- linu下C语言之BMP图片操作编程(上)
BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...
- InvocationTargetException异常解析
InvocationTargetException异常由Method.invoke(obj, args...)方法抛出.) { throw new ZeroException("参数不能小于 ...
- SharePoint 入门级介绍
前言:接触SharePoint两年有余,从一开始的小白,变成现在的菜鸟,一路走来,学到很多,现在,想把自己知道的东西,写给大家,尤其是刚刚接触SharePoint的人们,做一个简单的参考.从一开始接触 ...
- python lock, semaphore, event实现线程同步
lock 机制不管你是java, C#, 还是python都是常用的线程同步机制, 相比较C# 的锁机制, python的加锁显得比较简单, 直接调用threading 标准库的lock 就可以了. ...
- 【模板】最近公共祖先(LCA)
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- storm中的Scheduler
Scheduler是storm的调度器,负责为topology分配当前集群中可用的资源.Storm分别提供了3中调度器: EvenScheduler:会将系统中的可用资源均匀地分配给当前需要任务分配的 ...
- Angular6.0发布
Angular v6 新版本重点关注工具链以及工具链在 Angular 中的运行速度问题. Angular v6 是统一整体框架.Material 和 CLI 三大 Angular 组件的第一个版本, ...
- STL读书笔记
vector - 会自动增长的数组 vector又称为向量数组,他是为了解决程序中定义的数组是不能动态改变大小这个缺点而出现的.一般程序实现是在类创建的时候同时创建一个定长数组,随着数据不断被写入,一 ...