nagle算法初识

nagle算法初识问题 TCP IP 协议中 无论发送多少数据 总是要在数据前面加上协议头 同时 对方接收到数据 也需要发送 ACK 表示确认 例如想发送 1 字节数据 加上 20 字节的 TCP 头部 20 字节的 IP 头部 需要发送 41 字节的数据 浪费网络带宽 为了尽可能的利用网络带宽 TCP 总是希望尽可能的发送足够大的数据 一个连接会设置 MSS 参数 因此 TCP IP 希望每次都能够以 MSS 尺寸的数据块来发送数据 N

问题:

TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。例如想发送1字节数据,加上20字节的TCP头部,20字节的IP头部,需要发送41字节的数据,浪费网络带宽,为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。

 

Nagle算法的规则

(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。



被马上发送到server端,接着,client端又调用write操作写入‘\r\n’(简称B块),这个时候,A块的ACK没有返回,所以可以认为已经存在了一个未被确认的小段,所以B块没有

立即被发送,一直等待A块的ACK收到(大概40ms之后),B块才被发送。这里还隐藏了一个问题,就是A块数据的ACK为什么40ms之后才收到?这是因为TCP/IP中不仅仅有nagle算法,还有一个TCP确认延迟机制 。当Server端收到数据之后,它并不会马上向client端发送ACK,而是会将ACK的发送延迟一段时间(假设为t),它希望在t时间内server端会向client端发送应答数据,这样ACK就能够和应答数据一起发送,就像是应答数据捎带着ACK过去。以减少小分组数目,尽可能的利用网络带宽。

 

TCP_NODELAY选项

默认情况下,发送数据采用Nagle 算法。这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagle算法。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222444.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午3:47
下一篇 2026年3月17日 下午3:47


相关推荐

  • android 浏览器问题

    android 浏览器问题android浏览器怎么解决网页美观问题 android浏览器怎么解决网页美观问题 android浏览器怎么解决网页美观问题要求自适应屏幕大小图片分辨率等问题!!!

    2022年5月14日
    43
  • BufferedWriter的用法

    BufferedWriter的用法/** *通过BufferedWriter写入数据到a.txt的文件中 *  *  *输出流,字符流,处理流 */importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;publicclassTest{publicstatic

    2022年6月4日
    55
  • OpenClaw怎么配置?新手入门到进阶优化完整教程

    OpenClaw怎么配置?新手入门到进阶优化完整教程

    2026年3月16日
    2
  • 【Linux】firewall-cmd之防火墙简介及命令详解+实例

    【Linux】firewall-cmd之防火墙简介及命令详解+实例在 CentOS7 中 新引入了 firewalld 防火墙 取代了 CentOS6 之前的 iptables 防火墙 iptables 用于过滤数据包 属于网络层防火墙 iptables 主要是基于接口 来设置规则 从而判断网络的安全性 firewalld 能够允许哪些服务可用 哪些端口可用等等 属于更高一层的防火墙 firewalld 提供了支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具

    2026年3月19日
    2
  • 目标检测—教你利用yolov5训练自己的目标检测模型

    目标检测—教你利用yolov5训练自己的目标检测模型1 项目的克隆和必要的环境依赖 1 1 项目的克隆 YOLOv5 的代码是开源的 因此我们可以从 github 上克隆其源码 不得不说 GitHub 的确是全球最大的男性交友网站 里面的人个个都是人才 yolov5 发布才一年左右的时间 YOLOv5 就已经更新了 5 个分支了 分别是 yolov5 1 yolov5 5 分支 该项目就是利用的 yolov5 5 分支来作为讲解 首先打开 yolov5 的 github 的 https github com ultralytics yolov5 tree

    2026年3月26日
    3
  • Tensorflow.whl文件安装经验

    Tensorflow.whl文件安装经验1 下载 whl 文件从清华源可以下载镜像文件 https pypi tuna tsinghua edu cn simple 找到需要的库 下载需要的版本比较坑的是 tensorflow 的版本必须严格配套自己的电脑版本 经过多次安装卸载的过程 发现本电脑能用上的是 1 14 版本 Python3 7 还有比较坑的地方是 如果下载的轮子后缀不是 cp37 cp37m 的话电脑会报版本出错 所以需要手动修改文件名 2 pipwin r 打开 cmd 跳转到 whl 文件所在地址 然后 pipinstallxx

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号