在网络拥塞控制领域,我们知道有一个非常有名的算法叫做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算法相关推荐

  1. 沾包 nagle算法等

    1.根据Nagle算法,什么时候要发送包 内核代码,Nagle算法下,当一个报文能够被发送时,下面这个函数返回0 Filename : \linux-3.4.4\net\ipv4\tcp_output ...

  2. 【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )

    文章目录 I 设置读取超时时间 II Socket 复用绑定端口设置 III 开启 Nagle 算法 ( 沾包 ) IV 心跳包机制 V 连接关闭处理 VI Socket 紧急数据内敛设置 VII S ...

  3. nagle算法和延迟ACK

    nagle算法主要是避免发送小的数据包,要求TCP连接最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组,由于发送小分组时,包头会占很大的比重,所以会使TCP得传输效率降低. ...

  4. TCP/IP学习笔记(六)Nagle算法

    在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据). 对于成块数据的报文段,TCP采 ...

  5. socket中的nagle算法

    TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据.(一个连接会设置MS ...

  6. TCP/IP之(四)Delay ack 和 Nagle算法

    Delay ack(延迟确认) 正常情况下服务器收到一个请求时就会立即回复ACK确认给客户端,然后客户端再发送下一个包,服务器再进行回复.有时候服务器回复的ACK包有长度,但实际内容长度为0,这也没关 ...

  7. 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法

    TCP为了防止在网络中过多的小分组会导致阻塞,因此提供了Nagle算法:要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组.相反,TCP收集这些少量 ...

  8. Nagle算法延时确认

    数据流分类 成块数据 交互数据 Rlogin需要远程系统(服务器)回显我们(客户)键入的字符 数据字节和数据字节的回显都需要对方确认   rlogin 每次只发送一个字节到服务器,而Telnet 可以 ...

  9. 网络协议:TCP保活机制和Nagle算法

    一 Nagle算法背景 有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能. ...

  10. 使用setsockopt TCP_NODELAY禁用 Nagle算法

    Nagle算法用于对缓冲区内的一定数量的消息进行自动连接.该处理过程(称为Nagling),通过减少必须发送的封包的数量,提高了网络应用 程序系统的效率.(Nagle虽然解决了小封包问题,但也导致了较 ...

最新文章

  1. 第十二课.统计推断的基本思想
  2. java可以编写蠕虫病毒吗,暴力蠕虫来袭!网友们直呼:惊不惊喜,意不意外,怕不怕!...
  3. LeetCode 2100. 适合种地的日子(计数)
  4. 程序员面试金典 - 面试题 04.12. 求和路径(二叉树递归)
  5. Linux: terminal 终端生存指南
  6. 分布式配置管理平台 - Disconf介绍
  7. html语言怎么换下一行,表格中打字怎么换到下一行
  8. 考研路上的那些一战二战三战成功与失败的故事系列之一
  9. sfc /scannow命令如何能用虚拟光驱完成修复?(xp下的办法)
  10. 根据ID获取商品详情原数据(拼多多)
  11. 机关值班php代码,机关事业单位值班制度
  12. hg8245c backupsettings.html,HG8245C电信定制版转华为官方版,附(官方固件三枚、SU密码计算器、ftp上传工具)...
  13. 软件开发中的QA主要做什么的
  14. Windows server 2008 基础知识
  15. MySQL的简介及MySQL和MySQL-front的下载安装
  16. 关于pthread_cond_signal与pthread_cond_broadcast的使用说明
  17. Clist循环链表的实现
  18. 西云数据运营的AWS 中国(宁夏)区域发布免费套餐服务
  19. 关于参加需求讨论会议的看法
  20. Tryparse的用法

热门文章

  1. 我的2013梦想清单
  2. Emscripten教程之emcc编译命令
  3. 【机器学习】模型选择(交叉验证)原理及实战
  4. Python中的numpy.reshape用法
  5. 菲菲更名宝贝 得意非凡版 v1.9 免费绿色版
  6. ElementUI NavMenu导航菜单,跳转到包含子路由的路由时,导航菜单项不高亮显示
  7. Android 热修复之nuwa使用简略
  8. ps 抠图 选择并遮住
  9. Qt网络编程——QtNetwork模块
  10. Android 夜间模式主题风格切换