TCP的Nagle算法和delayed ack---延时发送和延时应答与稍带应答选项
本文目录
- 提高TCP的网络利用率的二个思考
- 解决方案:Nagle算法和delayed ack(延时发送和延时应答与稍带应答选项)
- Nagle算法和delayed ack算法同时启动可能会导致的问题
提高TCP的网络利用率的二个思考
我们都知道,TCP是一个基于字节流的可靠传输协议。意思着TCP本身把所有要发送的数据当做一个字节流来处理,而上层应用发送的数据,总是一段段有长有短,有开始有结束的有意义的有限长度数据报。然后TCP只知道这是个字节流,它并不知道哪些字节能组成一个完整的有意义的数据报。然而TCP底下的IP层又是一个基于数据报文的协议,所以TCP根据自己的算法来截断和组合字节流形成一个个IP报文。
- 提高有效数据和TCPIP首部数据长度比:
如果网络上大量的发送小包(比如40个字节的IP+TCP头部+1个字节有有效数据)的情况下,大部分的网络资源都用来传输对应用层没有意义的TCPIP首部了,所以网络的利用率是很低的,要提高利用率,就可以减少小包的比率,尽量让每个TCP报文所携带的用户数据变长,比如,将多个用户数据报文组合成一个TCP报文后再发送。 - 减少ACK的数量:
如果给每一个TCP发送请求都回复一个ACK,而TCP的每个ACK通告发送的端的是在此序列之前的所有TCP数据都已经传送完成,那么如何减少ACK这种不传送有效用户 数据的报文的数量,就成为了提高网络利用率考虑的另外一个方面。
解决方案:Nagle算法和delayed ack(延时发送和延时应答与稍带应答选项)
-
Nagle算法-延时发送
Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。Nagle算法的核心定义是: 任意时刻,最多只能有一个未收对确认报文(发送端没有收到接收端发回的确认本报文的ACK消息)的小于MSS尺寸的报文。
具体如以下规则,以保证发送方不会过于频繁的发送小报文:
(1)如果等待发送的数据的长度达到MSS,则允许发送;
(2)设置了TCP_NODELAY选项(关闭Nagle算法),则允许发送;
(3)如果所有的小于MSS的报文都已经被确认,则允许发送;
(4)如果发生了超时(一般为200ms),则允许发送。
Nagle算法的目标是发送端做控制,以达到避免网络拥塞并提高网络有效利用率的目标。 -
delayed ack-延时应答与稍带应答
我们知道TCP是双向通信的。所以延时应答和稍带应答的逻辑很简单,收到TCP报文后,并不立刻发回应答,而是等待一段时间,等某些条件满足后再发回应答。
这样个延时提供了三个可能性:
(1)多个数据一起收全后合并多个应答成一个应答,从而减少了应答数量
(2)延时这段时间里应用层收走了更多的TCP报文,可以给发送发通告一个更大的发送窗口,从而提高了网络利用率
(3)应答和窗口更新通告以及接收发发送给发送方的反向应用层数据在一个报文里发送,从而减少了报文数量
具体规则如下:
(1)每到达200ms ---------发送应答
(2)每两个数据包----------发送应答
(3)接收方应用层有数据要求发送回发送方,并且有接收方要发送的数据包达到发送条件–由数据发送带回应答。
Nagle算法和delayed ack算法同时启动可能会导致的问题
这在某些应用场景下会导致一个典型的“发-发-收”的场景问题,即:接收方要在收到二个TCP小报文,并在应用层将二个报文合并后再完成应用层处理后,然后再把应用层响应结果发送回发送方的场景。
如下图所示:
1)发送方发送第一个小报文给接收方
2)接收方应用层收到第一个报文,并等待第二个小报文的到来
3)接收方delayed ack,不发回TCP应答
4)发送放Nagle算法,没有等到第一个小报文的TCP应答,则不发送第二个小报文
5) 接收方和发送方相互等待死锁,直到接收方的delayer ack的200ms定时器超时,发送回TCP应答ACK
6)发送方发送第二个小报文给接收方
7)接收方应用层收到第一和第二两个小报文,处理后发回应用层响应(捎带回TCP应答ACK)
则相比于不开启nagle或者不开启delayed ack(二者只要有一个不开启,或者二个都不开启),则我们可以看到第5步这里,我们白白的多等待了200ms。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
TCP的Nagle算法和delayed ack---延时发送和延时应答与稍带应答选项
本文目录提高TCP的网络利用率的二个思考解决方案:Nagle算法和delayed ack(延时发送和延时应答与稍带应答选项)Nagle算法和delayed ack算法同时启动可能会导致的问题提高TCP的网络利用率的二个思考 我们都知道,TCP是一个基于字节流…...
![](https://img-blog.csdnimg.cn/img_convert/8cd380a24d6a2563596f06a47b20de3f.png)
智能拣配单解决方案
电子货架标签系统(ESLs),是一种放置在货架上、可替代传统纸质价格标签的电子显示装置, 每一个电子货架标签通过有线或者无线网络与商场计算机数据库相连, 并将最新的商品价格通过电子货架标签上的屏显示出来。 电子…...
![](https://www.ngui.cc/images/no-images.jpg)
如何防御入侵服务器
根据中华人民共和国刑法: 第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的ÿ…...
![](https://img-blog.csdnimg.cn/37f1c0fcae3c441bba29c077435f1f3c.png)
[软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)
文章目录1. 举例对比形式化方法和欠形式化方法的优缺点。2. 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则?3. 一个浮点二进制数的构成是:一个可选的符号(+或-)&…...
![](https://img-blog.csdnimg.cn/img_convert/379e83ebc3e368fb2022e6e70d11b130.png)
Premiere基础操作
一:设置缓存二:ctrI导入素材三:导入图像序列四:打开吸附。打开吸附后素材会对齐。五:按~键可以全屏窗口。六:向前选择轨道工具。在时间线上点击,向前选中时间线上素材。向后选择轨道工具&#x…...
![](https://img-blog.csdnimg.cn/946bdb3cfae84882b2aaa97deb929012.png)
Prometheus监控案例-tomcat、mysql、redis、haproxy、nginx
监控tomcat tomcat自身并不能提供监控指标数据,需要借助第三方exporter实现:https://github.com/nlighten/tomcat_exporter 构建镜像 基于tomcat官方镜像,重新制作一个镜像,将tomcat-exporter和tomcat整合到一起。Ddockerfile如…...
![](https://img-blog.csdnimg.cn/851ea9485742417b8d469a855d5a784d.png)
如何寻找SAP中的增强
文章目录0 简介1 寻找一代增强2 寻找二代增强2.2 在包里也可以看到2.3 在出口对象里输入包的名字也可以找到2.4 通过以下函数可以发现已有的增强2.5 也可以在cmod里直接找2.6 总结3 寻找第三代增强0 简介 在SAP中,对原代码的修改最不容易的是找增强,以下…...
![](https://www.ngui.cc/images/no-images.jpg)
算法刷题打卡第95天: 最大平均通过率
最大平均通过率 难度:中等 一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali…...
![](https://img-blog.csdnimg.cn/img_convert/540e2d5c57d74c989a02f3a0d4dc8a4f.png)
Springboot扩展点系列之终结篇:Bean的生命周期
前言关于Springboot扩展点系列已经输出了13篇文章,分别梳理出了各个扩展点的功能特性、实现方式和工作原理,为什么要花这么多时间来梳理这些内容?根本原因就是这篇文章:Spring bean的生命周期。你了解Spring bean生命周期…...
![](https://img-blog.csdnimg.cn/img_convert/2988e864ba2a4ca8aed5b9e7c8aeed73.jpeg)
OnGUI Color 控件||Unity 3D GUI 简介||OnGUI TextField 控件
Unity 3D Color 控件与 Background Color 控件类似,都是渲染 GUI 颜色的,但是两者不同的是 Color 不但会渲染 GUI 的背景颜色,同时还会影响 GUI.Text 的颜色。具体使用时,要作如下定义:public static var color:Color;…...
![](https://www.ngui.cc/images/no-images.jpg)
【日刻一诗】
日刻一诗 1)LeetCode总结(线性表)_链表类 2)LeetCode总结(线性表)_栈队列类 3)LeetCode总结(线性表)_滑动窗口 4)LeetCode总结(线性表&#x…...
![](https://img-blog.csdnimg.cn/img_convert/15299bab903e76958cd5840af880d6fa.png)
设计模式 状态机
前言 本文梳理状态机概念,在实操中状态机和状态模式类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。 概念 有限状态机(finite-state machine)又称有限状态自动机(英语:finite-s…...
![](https://img-blog.csdnimg.cn/img_convert/8fb1c0f5fe1ca1a0940a56e76d823fca.webp?x-oss-process=image/format,png)
React源码分析(二)渲染机制
准备工作 为了方便讲解,假设我们有下面这样一段代码: function App(){const [count, setCount] useState(0)useEffect(() > {setCount(1)}, [])const handleClick () > setCount(count > count)return (<div>勇敢牛牛, <sp…...
![](https://www.ngui.cc/images/no-images.jpg)
Object.defineProperty 和 Proxy 的区别
区别:Object.defineProperty是一个用来定义对象的属性或者修改对象现有的属性的函数,,而 Proxy 是一个用来包装普通对象的对象的对象。Object.defineProperty是vue2响应式的原理, Proxy 是vue3响应式的原理1)参数不同Object.defineProperty参数obj: 要定…...
![](https://img-blog.csdnimg.cn/383ce4637d5046929a380586a1b561e3.png)
Python基础4——面向对象
目录 1. 认识对象 2. 成员方法 2.1 成员方法的定义语法 3. 构造方法 4. 其他的一些内置方法 4.1 __str__字符串方法 4.2 __lt__小于符号比较方法 4.3 __le__小于等于符号比较方法 4.4 __eq__等号比较方法 5. 封装特性 6. 继承特性 6.1 单继承 6.2 多继承 6.3 pas…...
![](https://www.ngui.cc/images/no-images.jpg)
Hive 核心知识点灵魂 16 问
本文目录 No1. 请谈一下 Hive 的特点No2. Hive 底层与数据库交互原理?No3. Hive 的 HSQL 转换为 MapReduce 的过程?No4. Hive 的两张表关联,使用 MapReduce 怎么实现?No5. 请说明 hive 中 Sort By,Order By࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
聊聊探索式测试与敏捷实践
这是鼎叔的第五十二篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。探索式测试在敏捷测试象限中处于右上角,即面向业务且评价产品,这篇补充一下探索…...
![](https://img-blog.csdnimg.cn/img_convert/775ddbc23e8c1e532ea78f75fe44a06b.png)
社区宠物诊所管理系统
目录第一章概述 PAGEREF _Toc4474 \h 21.1引言 PAGEREF _Toc29664 \h 31.2开发背景 PAGEREF _Toc3873 \h 3第二章系统总体结构及开发 PAGEREF _Toc19895 \h 32.1系统的总体设计 PAGEREF _Toc6615 \h 32.2开发运行环境 PAGEREF _Toc13054 \h 3第三章数据库设计 PAGEREF _Toc2852…...
![](https://img-blog.csdnimg.cn/490021f352404680a1ffca7984894dcc.png)
Vue项目创建首页发送axios请求
这是个全新的Vue项目,引入了ElementUI 将App.vue里的内容干掉,剩如下 然后下面的三个文件也可以删掉了 在views文件下新建Login.vue组件 到router目录下的index.js 那么现在的流程大概是这样子的 启动 写登陆页面 <template><div><el-form :ref"form"…...
![](https://img-blog.csdnimg.cn/43145ec06b8a47039ee37799718c48c6.png)
Nginx
NginxNginxNginx可以从事的用途Nginx安装Nginx自带常用命令Nginx启动Nginx停止Nginx重启Nginx配置概要第一部分:全局块第二部分:events 块:第三部分:http块:Nginx Nginx是一个高性能的http和反向代理服务器࿰…...
![](https://img-blog.csdnimg.cn/83054d398b6f497ab31c7e732a5b91de.png)
2049. 统计最高分的节点数目
2049. 统计最高分的节点数目题目算法设计:深度优先搜索题目 传送门:https://leetcode.cn/problems/count-nodes-with-the-highest-score/ 算法设计:深度优先搜索 这题的核心是计算分数。 一个节点的分数 左子树节点数 右子树节点数 除自…...
![](https://img-blog.csdnimg.cn/img_convert/308bfcf1a3dafe7752f4669521231e81.png)
Docker 架构简介
Docker 架构 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器&am…...
![](https://img-blog.csdnimg.cn/img_convert/87e6299c55ae0e55951328e2b9a93349.gif)
玄子Share-BCSP助学手册-JAVA开发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2gPyAnt-1676810001349)(./assets/%E7%8E%84%E5%AD%90Share%E4%B8%89%E7%89%88.jpg)] 玄子Share-BCSP助学手册-JAVA开发 前言: 此文为玄子,复习BCSP一二期后整理的文章&#x…...
![](https://img-blog.csdnimg.cn/img_convert/b6233d19165153f29fea398f65215a38.gif)
利用React实现多个场景下的鼠标跟随框提示框
前言 鼠标跟随框的作用如下图所示,可以在前端页面上,为我们后续的鼠标操作进行提示说明,提升用户的体验。本文将通过多种方式去实现,从而满足不同场景下的需求。 实现原理 实现鼠标跟随框的原理很简单,就是监听鼠标在…...
![](https://img-blog.csdnimg.cn/img_convert/14c7d8ce313347ef8c6d0c1dbdfe7b4f.png)
【安全知识】——如何绕过cdn获取真实ip
作者名:白昼安全主页面链接: 主页传送门创作初心: 以后赚大钱座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日鸡汤: 现在的样子是你想要的吗?cdn简单来说就是…...
![](https://img-blog.csdnimg.cn/img_convert/bc5f21378b9b2d1bec48f8cd8ca61f7c.png)
JavaScript内存泄露和垃圾回收机制
1、是什么?内存泄露(Memory leak)是在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存。并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内…...
![](https://img-blog.csdnimg.cn/cf2f72d8e3a4414992c9da01fa9caee9.png)
Kubernetes02:知识图谱
Kubernetes01:知识图谱 MESOS APACHE 分布式资源管理框架 2019-5 Twitter 》 Kubernetes Docker Swarm 2019-07 阿里云宣布 Docker Swarm 剔除 Kubernetes Google 10年容器化基础架构 borg Go语言 Borg 特点 轻量级:消耗资源小 开源 弹性伸缩 负载均…...
![](https://img-blog.csdnimg.cn/56fd09e36ca14130b5965e2c200d978f.png)
nginx-服务器banner泄漏风险
http { server_tokens off; # 隐藏Nginx版本号 .... }...
![](https://img-blog.csdnimg.cn/73575886ff8c430396e3f9a9ddc5324b.png)
GCC 同名符号冲突解决办法
一、绪论 作为 C/C 的开发者,大多数都会清楚课本上动态库以及静态库的优缺点,在教科书上谈及到动态库的一个优点是可以节约磁盘和内存的空间,多个可执行程序通过动态库加载的方式共用一段代码段 ;而时至今日,再看看上…...
![](https://img-blog.csdnimg.cn/564d644db10e438aa24aad0e79d2348d.jpeg#pic_center)
下一代视频编码技术2023
下一代视频编码技术 下面将从这两个角度来介绍华为云视频在下一代视频编码技术上的一些工作。这些技术得益于华为2012 媒体技术院全力支持。 2.1 下一代视频编码标准技术 从上图可以看出,下一代的视频编码标准大概分为三个阵营或者三个类型: 国际标准…...
![](/images/no-images.jpg)
渠道查官网/广东seo推广哪里好
一、this的关系 1)全局代码中的this 2)函数代码中的this在函数代码中使用this时很有趣,这种情况很难且会导致很多问题。这种类型的代码中,this值的首要特点(或许是最主要的)是它不是静态的绑定到一个函数。正如我…...
![](http://d.hiphotos.baidu.com/baike/s%3D220/sign=7e812992d539b60049ce08b5d9513526/8435e5dde71190ef1d89b8aece1b9d16fdfa6054.jpg)
学校网站资源建设方案/一站式软文发布推广平台
肢体语言(body language)又称身体语言,是指通过头、眼、颈、手、肘、臂、身、胯、足等人体部位的协调活动来传达人物的思想,形象地借以表情达意的一种沟通方式。肢体语言也是演员的必修课程,不同角色不同情况下的肢体语…...
![](/images/no-images.jpg)
域名备案要先做网站的吗/企业建站都有什么网站
我对python了解不多,但似乎可以接收JSON格式的数据(参见Python - Parsing JSON Data Set)SAS提供了一个免费的工具,可以轻松地以JSON格式发送数据集(它是为与javascript通信而构建的,但在您的情况下应该也能很好地工作)。.sas文件可以在这里下…...
![](https://images0.cnblogs.com/blog/311888/201302/02104010-f9a59912cc7d47bb9ada1085b3fe9245.jpg)
网站建设的公司上海/搜索引擎营销的简称
MVC4的Controller(控制器)!还是音乐商店的例子! 开始写我们的第一个Contrller! 我们第一个控制器主要负责一下几点: 首页列出了你的商店进行音乐流派点击一个流派,到目标网页浏览,该页列出所有的音乐专辑点…...
![](/images/no-images.jpg)
贵州省城乡和建设厅网站/百度网页搜索
微软手机的信号显示...
![](https://img-blog.csdnimg.cn/20190124092718459.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoYWxlaWxlaQ==,size_16,color_FFFFFF,t_70)
网站如何做熊掌号并绑定/百度推广价格表
我来先说原因: 是你之前写了.bash_profile类似的代码了在终端,我当时是安装yarn,然后最后我用了source .bash_profile最好保存后就出现的问题看了网上的回答说法众说纷纭,但是我自己试了都没用,最好还是觉得找到我当时…...