什么是Nagle算法
在网络拥塞控制领域,我们知道有一个非常有名的算法叫做Nagle算法(Nagle algorithm),这是使用它的发明人John Nagle的名字来命名的,John Nagle在1984年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题(RFC 896),该问题的具体描述是:如果我们的应用程序一次产生1个字节的数据,而这个1个字节数据又以网络数据包的形式发送到远端服务器,那么就很容易导致网络由于太多的数据包而过载。比如,当用户使用Telnet连接到远程服务器时,每一次击键操作就会产生1个字节数据,进而发送出去一个数据包,所以,在典型情况下,传送一个只拥有1个字节有效数据的数据包,却要发费40个字节长包头(即ip头20字节+tcp头20字节)的额外开销,这种有效载荷(payload)利用率极其低下的情况被统称之为愚蠢窗口症候群(Silly Window Syndrome)。可以看到,这种情况对于轻负载的网络来说,可能还可以接受,但是对于重负载的网络而言,就极有可能承载不了而轻易的发生拥塞瘫痪。
针对上面提到的这个状况,Nagle算法的改进在于:如果发送端欲多次发送包含少量字符的数据包(一般情况下,后面统一称长度小于MSS的数据包为小包,与此相对,称长度等于MSS的数据包为大包,为了某些对比说明,还有中包,即长度比小包长,但又不足一个MSS的包),则发送端会先将第一个小包发送出去,而将后面到达的少量字符数据都缓存起来而不立即发送,直到收到接收端对前一个数据包报文段的ACK确认、或当前字符属于紧急数据,或者积攒到了一定数量的数据(比如缓存的字符数据已经达到数据包报文段的最大长度)等多种情况才将其组成一个较大的数据包发送出去
什么是Nagle算法相关推荐
- 沾包 nagle算法等
1.根据Nagle算法,什么时候要发送包 内核代码,Nagle算法下,当一个报文能够被发送时,下面这个函数返回0 Filename : \linux-3.4.4\net\ipv4\tcp_output ...
- 【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )
文章目录 I 设置读取超时时间 II Socket 复用绑定端口设置 III 开启 Nagle 算法 ( 沾包 ) IV 心跳包机制 V 连接关闭处理 VI Socket 紧急数据内敛设置 VII S ...
- nagle算法和延迟ACK
nagle算法主要是避免发送小的数据包,要求TCP连接最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组,由于发送小分组时,包头会占很大的比重,所以会使TCP得传输效率降低. ...
- TCP/IP学习笔记(六)Nagle算法
在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据). 对于成块数据的报文段,TCP采 ...
- socket中的nagle算法
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据.(一个连接会设置MS ...
- TCP/IP之(四)Delay ack 和 Nagle算法
Delay ack(延迟确认) 正常情况下服务器收到一个请求时就会立即回复ACK确认给客户端,然后客户端再发送下一个包,服务器再进行回复.有时候服务器回复的ACK包有长度,但实际内容长度为0,这也没关 ...
- 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法
TCP为了防止在网络中过多的小分组会导致阻塞,因此提供了Nagle算法:要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组.相反,TCP收集这些少量 ...
- Nagle算法延时确认
数据流分类 成块数据 交互数据 Rlogin需要远程系统(服务器)回显我们(客户)键入的字符 数据字节和数据字节的回显都需要对方确认 rlogin 每次只发送一个字节到服务器,而Telnet 可以 ...
- 网络协议:TCP保活机制和Nagle算法
一 Nagle算法背景 有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能. ...
- 使用setsockopt TCP_NODELAY禁用 Nagle算法
Nagle算法用于对缓冲区内的一定数量的消息进行自动连接.该处理过程(称为Nagling),通过减少必须发送的封包的数量,提高了网络应用 程序系统的效率.(Nagle虽然解决了小封包问题,但也导致了较 ...
最新文章
- 第十二课.统计推断的基本思想
- java可以编写蠕虫病毒吗,暴力蠕虫来袭!网友们直呼:惊不惊喜,意不意外,怕不怕!...
- LeetCode 2100. 适合种地的日子(计数)
- 程序员面试金典 - 面试题 04.12. 求和路径(二叉树递归)
- Linux: terminal 终端生存指南
- 分布式配置管理平台 - Disconf介绍
- html语言怎么换下一行,表格中打字怎么换到下一行
- 考研路上的那些一战二战三战成功与失败的故事系列之一
- sfc /scannow命令如何能用虚拟光驱完成修复?(xp下的办法)
- 根据ID获取商品详情原数据(拼多多)
- 机关值班php代码,机关事业单位值班制度
- hg8245c backupsettings.html,HG8245C电信定制版转华为官方版,附(官方固件三枚、SU密码计算器、ftp上传工具)...
- 软件开发中的QA主要做什么的
- Windows server 2008 基础知识
- MySQL的简介及MySQL和MySQL-front的下载安装
- 关于pthread_cond_signal与pthread_cond_broadcast的使用说明
- Clist循环链表的实现
- 西云数据运营的AWS 中国(宁夏)区域发布免费套餐服务
- 关于参加需求讨论会议的看法
- Tryparse的用法