当前位置: 首页 > article >正文

HTTP:Nagle算法与TCP_NODELAY

背景:TCP 有一个数据流接口,应用程序可以通过它将任意尺寸的数据放入 TCP 栈中—— 即使一次只放一个字节也可以!但是,每个 TCP 段中都至少装载了 40 个字节的标记和首部,所以如果 TCP 发送了大量包含少量数据的分组,网络的性能就会严重 下降。

Nagle算法

Nagle 算法(根据其发明者 John Nagle 命名)试图在发送一个分组之前,将大量 TCP 数据绑定在一起,以提高网络效率。

Nagle 算法鼓励发送全尺寸(LAN 上最大尺寸的分组大约是 1500 字节,在因特网上是几百字节)的段。只有当所有其他分组都被确认之后,Nagle 算法才允许发送 非全尺寸的分组。如果其他分组仍然在传输过程中,就将那部分数据缓存起来。只 有当挂起分组被确认,或者缓存中积累了足够发送一个全尺寸分组的数据时,才会 将缓存的数据发送出去。

Nagle 算法会引发几种 HTTP 性能问题。首先,小的 HTTP 报文可能无法填满一个 分组,可能会因为等待那些永远不会到来的额外数据而产生时延。其次,Nagle 算 法与延迟确认之间的交互存在问题——Nagle 算法会阻止数据的发送,直到有确认 分组抵达为止,但确认分组自身会被延迟确认算法延迟 100 ~ 200 毫秒。

TCP_NODELAY

HTTP 应用程序常常会在自己的栈中设置参数 TCP_NODELAY,禁用 Nagle 算法,提高性能。如果要这么做的话,一定要确保会向 TCP 写入大块的数据,这样就不会产生一堆小分组了。


http://www.kler.cn/a/507164.html

相关文章:

  • 基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建
  • redis(2:数据结构)
  • BIO、NIO、AIO
  • 传统摄像头普通形态的系统连接方式
  • JAVA:在IDEA引入本地jar包的方法(不读取maven目录jar包)
  • 鸿蒙UI开发——键盘弹出避让模式设置
  • 蛋糕商城 SpringBoot3.4.0,JPA
  • OpenCV机器视觉:主色提取的奇妙之旅
  • Pytorch|YOLO
  • python中元类相关的问答题
  • UML系列之Rational Rose笔记六:部署图
  • 代理模式实现
  • Java爬虫获取淘宝item_search_suggest API接口的搜索词推荐
  • MySQL入门学习四(数据表基本操作)
  • 操作系统 期末重点复习
  • PyTorch DAY1: 基础语法
  • QT开发技术 【基于TinyXml2的对类进行序列化和反序列化】一
  • apidoc thinkphp likeadmin 遇到解析报错
  • element 日期时间组件默认显示当前时间
  • 2023 Google开发者大会:你了解机器学习的新动向吗?
  • Docker--Docker Container(容器) 之容器实战
  • RocketMQ 学习笔记01
  • 从Arrays源码学习定义工具类
  • sqlalchemy The transaction is active - has not been committed or rolled back.
  • leetcode hot100(2)
  • 【CSS】:nth-child和:nth-of-type