TCP之Nagle算法与延迟ACK
(一)Nagle算法
为了减少网络中小分组的数目,减少网络拥塞的情况。Nagle算法要求在一条TCP连接上最多只能有一个未被确认的未完成小分组,在该分组ACK到达之前不能够发送其他的小分组,发送端需要收集需要发送的小分组,在接收端的ACK响应到来的时候将所有收集的小分组以一个大分组的形式发送出去。其中小分组被定义为小于MSS的任何分组。
该算法的优点是自适应的,确认到达的越快,则数据发送的也将会越快。
(二)延迟ACK
如果TCP连接上,接收端对每一个数据包都响应一个ACK确认并发送,而了一个ACK响应则发送一个单独的数据包造成的代价比较高,所以TCP会延迟一段时间(一般为40
ms),如果在延迟的这段时间之内有数据发送给对端(接收端发送给发送端),则会连带着这次的ACK响应将数据包发送。而如果在延迟时间到达的时候,仍然没有数据包要发送,则将ACK单独发送。
延迟ACK的好处:
(1)避免了糊涂窗口综合征;
(2)发送数据的时候将ACK捎带发送,而不用单独发送ACK
(3)如果在延迟时间内有多个数据包到达,那么接收端可以发送最后一个数据包的ACK以确认多个报文段。
(三)发送端采用Nagle算法,接收端采用延迟ACK
一种典型场景:客户端写-写-读。客户端先发送一个数据包(小包),当第一次数据包发送后,对端延迟ACK,不发送ACK应答,而本端由于第一次发送的数据包没有确认,第二次将要发送的数据包(也是小包)会由于Nagle算法,等待第一次的ACK后才能发送。而服务端由于没有数据包发送,只能在延迟ACK的触发器时间到达时(40ms),才会发送第一次数据包的响应,从而造成网络延迟。
(四)关闭Nagle算法
对于上述(三)讨论的情况,使用套接字选项TCP_NODELAY可以关闭套接字选项。或者是将两次写操作的数据复制到单个缓冲区,然后对缓冲区进行一次发送。
TCP之Nagle算法与延迟ACK的更多相关文章
- TCP之Nagle算法&&延迟ACK
1. Nagle算法: 是为了减少广域网的小分组数目,从而减小网络拥塞的出现: 该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组,tcp需要 ...
- TCP Nagle算法以及延迟确认(即延迟回复ACK)的学习
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据. (一个连TCP接会 ...
- tcp|ip nagle算法
在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据). 对于成块数据的报文段,TCP采 ...
- TCP之Nagle算法与TCP_NODELAY
1. Nagle 算法 在一个 Rlogin 连接上客户一般每次发送一个字节到服务器,这就产生了一些 41 字节长的分组:20 字节的 IP 首部.20 字节的 TCP 首部和 1 个字节的数据.在局 ...
- TCP Nagle算法&&延迟确认机制
TCP Nagle算法&&延迟确认机制 收藏 秋风醉了 发表于 3年前 阅读 1367 收藏 0 点赞 0 评论 0 [腾讯云]买域名送云解析+SSL证书+建站!>>> ...
- TCP系列29—窗口管理&流控—3、Nagle算法
一.Nagle算法概述 之前我们介绍过,有一些交互式应用会传递大量的小包(称呼为tinygrams),这些小包的负载可能只有几个bytes,但是TCP和IP的基本头就有40bytes,如果大量传递这种 ...
- Nagle算法&&延时确认
数据流分类 成块数据 交互数据 Rlogin需要远程系统(服务器)回显我们(客户)键入的字符 数据字节和数据字节的回显都需要对方确认 rlogin 每次只发送一个字节到服务器,而Telnet 可以 ...
- linux tcp Nagle算法,TCP_NODELAY和TCP_CORK 转载
转载自: http://www.cnhalo.net/2016/08/13/linux-tcp-nagle-cork/ http://abcdxyzk.github.io/blog/2018/07/0 ...
- TCP的延迟ACK机制
TCP的延迟ACK机制 TCP的延迟ACK机制一说到TCP,人们就喜欢开始扯三步握手之类的,那只是其中的一个环节而已.实际上每一个数据包的正确发送都是一个类似握手的过程,可以简单的把它视为两步握手.一 ...
随机推荐
- Redis 学习之常用命令及安全机制
该文使用centos6.5 64位 redis3.2.8 一.redis常用命令 键值常用命令: 1. keys 返回满足pattern的所有key. 127.0.0.1:6379> ke ...
- Android Camera多屏幕适配解决预览照片拉伸
通常,拍照预览页面的照片拉伸主要与下面两个因素有关: 1. Surfaceview的大小 2. Camera中的Preview的大小 如下图: 图中preview显示的是手机支 ...
- 威锋网(Weiphone) BBS排序插件
body,td,p { // 这对大括号里描述网页的背景 margin-left:40px; margin-right:40px; font-size: 10pt; } div.vim { width ...
- Android UI设计的基本元素有哪些
在android app开发如火如荼的今天,如何让自己的App受人欢迎.如何增加app的下载量和使用量....成为很多android应用开发前,必须讨论的问题.而ui设计则是提升客户视觉体验度.提升下 ...
- POJ2142:The Balance——题解
http://poj.org/problem?id=2142 题目大意:有一天平和两种数量无限的砝码(重为a和b),天平左右都可以放砝码,称质量为c的物品,要求:放置的砝码数量尽量少:当砝码数量相同时 ...
- ZOJ3229:Shoot the Bullet——题解
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3229 题目大意:射命丸文要给幻想乡的居民照相,共照n天m个人,每天射命丸文 ...
- 剑桥offer(31~40)
31.题目描述 统计一个数字在排序数组中出现的次数. 思路:找到最低和最高,相减 class Solution { public: int GetNumberOfK(vector<int> ...
- vue中使用 contenteditable 制作输入框并使用v-model做双向绑定
<template> <div class="div-input" :class="value.length > 0 ? 'placeholder ...
- ACE线程管理机制-并发控制(3)
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/04/581854.html ACE Condition类属 ACE Condition类属(条 ...
- 洛谷P3396 哈希冲突 (分块)
洛谷P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣. ...