【2018-06-29】TCP之Nagle算法延迟ACK [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-06-29 标题TCP之Nagle算法延迟ACK分类编程 标签TCPUDP·delayack·disable-nagleTCP延迟确认和禁用Nagle算法1. Nagle算法2. 延迟ACK3. 当Nagle遇上延迟ACK4. 关闭Nagle算法5. 禁止Nagle和开启Nagle算法发送数据与确认示意图参考链接《 https://www.cnblogs.com/wanpengcoder/p/5366156.html 》《 https://blog.csdn.net/wdscq1234/article/details/52432095 》1. Nagle算法Nagle算法的基本定义是任意时刻最多只能有一个未被确认的小段。 所谓“小段”指的是小于MSS尺寸的数据块所谓“未被确认”是指一个数据块发送出去后没有收到对方发送的ACK确认该数据已收到。Nagle算法的规则可参考tcp_output.c文件里tcp_nagle_check函数注释1如果包长度达到MSS则允许发送2如果该包含有FIN则允许发送3设置了TCP_NODELAY选项则允许发送4未设置TCP_CORK选项时若所有发出去的小数据包包长度小于MSS均被确认则允许发送5上述条件都未满足但发生了超时一般为200ms则立即发送。Nagle算法只允许一个未被ACK的包存在于网络它并不管包的大小因此它事实上就是一个扩展的停-等协议只不过它是基于包停-等的而不是基于字节停-等的。是为了减少广域网的小分组数目从而减小网络拥塞的出现该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组在该分组ack到达之前不能发送其他的小分组tcp需要收集这些少量的分组并在ack到来时以一个分组的方式发送出去其中小分组的定义是小于MSS的任何分组该算法的优越之处在于它是自适应的确认到达的越快数据也就发哦送的越快而在希望减少微小分组数目的低速广域网上则会发送更少的分组2. 延迟ACK如果tcp对每个数据包都发送一个ack确认那么只是一个单独的数据包为了发送一个ack代价比较高所以tcp会延迟一段时间如果这段时间内有数据发送到对端则捎带发送ack如果在延迟ack定时器触发时候发现ack尚未发送则立即单独发送延迟ACK好处(1) 避免糊涂窗口综合症(2) 发送数据的时候将ack捎带发送不必单独发送ack(3) 如果延迟时间内有多个数据段到达那么允许协议栈发送一个ack确认多个报文段3. 当Nagle遇上延迟ACK试想如下典型操作写-写-读即通过多个写小片数据向对端发送单个逻辑的操作两次写数据长度小于MSS当第一次写数据到达对端后对端延迟ack不发送ack而本端因为要发送的数据长度小于MSS所以nagle算法起作用数据并不会立即发送而是等待对端发送的第一次数据确认ack这样的情况下需要等待对端超时发送ack然后本段才能发送第二次写的数据从而造成延迟4. 关闭Nagle算法使用TCP套接字选项TCP_NODELAY可以关闭套接字选项;如下场景考虑关闭Nagle算法(1) 对端不向本端发送数据并且对延时比较敏感的操作这种操作没法捎带ack(2) 如上写-写-读操作对于此种情况优先使用其他方式而不是关闭Nagle算法–使用writev而不是两次调用write单个writev调用会使tcp输出一次而不是两次只产生一个tcp分节这是首选方法–把两次写操作的数据复制到单个缓冲区然后对缓冲区调用一次write–关闭Nagle算法调用write两次有损于网络通常不考虑5. 禁止Nagle和开启Nagle算法发送数据与确认示意图

相关新闻

最新新闻

2026 AI视觉与物联网开发板选购指南:从MCU到Jetson的档位解析

2026 AI视觉与物联网开发板选购指南:从MCU到Jetson的档位解析

2026 年已经过了一大半,如果你现在正准备入手 AI 视觉或物联网开发板,我建议你先别急着下单。市面上从几十块的 ESP32 到几千块的英伟达 Jetson,价格差了近百倍,宣传话术却几乎一样,都告诉你“能跑 AI、能做视觉、能搞…

2026/9/7 0:02:43
基于Vue的企业门户网站管理系统的设计与实现

基于Vue的企业门户网站管理系统的设计与实现

目 录 摘 要 Abstract 目 录 1 引言 1.1 选题背景 1.2 研究现状 1.3 目的和意义 1.4 论文结构安排 1.5本章小结 2 开发环境与技术 2.1 MySQL数据库 2.2 Java语言技术 2.3 Spring Boot框架 2.4 Vue.js 2.5 本章小节 3 系统分析 …

2026/9/7 0:02:43
BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/7 0:02:43
UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:02:43
基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:02:43
基于时频域与CNN的运动想象脑电信号识别方法详解

基于时频域与CNN的运动想象脑电信号识别方法详解

简介:这份PDF文档是一篇关于运动想象脑电信号识别方法的学术论文,核心提出基于时频域的卷积神经网络(CNN)识别方案,面向脑机接口、深度学习与智能信号处理方向的研究者和学习者,针对传统运动想象EEG识别率较…

2026/9/6 23:57:42