【HBZ分享】TCP可靠性传输如何保证的?以及传输优化之Nagle算法

2023-11-08

ACK机制

  1. ACK机制是发送方与接收方的一个相互确认
  2. 客户端向服务端发送连接请求,此时服务端要回馈给客户端ACK,以表示服务端接到了客户端请求,这是第一和的第二次握手
  3. 客户端接收到服务端响应后,同样也要回馈服务端的响应,告知服务端我收到了你的回馈,我们可以进行传输数据了,此时客户端就会带着数据发送给服务端。、
  4. 以上就是ACK机制,只有当双方都确认了,才会进行数据发送

流量控制

  1. 流量控制是接收方发起的,即服务器端
  2. 服务器端通过win来告知客户端自己还剩多少流量来接受数据
  3. 比如服务端告知客户端我只有200个字段的流量了,则此时服务端会携带一个rwnd = 200的报文给客户端,这是客户端就知道了服务端能接收的流量,那么客户端发送的数据包就不会超过200字节

拥塞控制

  1. 拥塞控制是发送方发起的,即客户端,是一种自适应算法,利用多种机制,根据网络状况自动调整发送频率,以避免网络拥堵
  2. 慢启动:发送端会以一个较小的窗口值开始发送,每收到一个ACK后,下一次窗口值就会翻倍增加,知道窗口值达到最大值位置。如果过程中没有丢包,那就会加快发送的速度频率,如果丢包,就会降低发送速度
  3. 快速重传:当发送端发送的数据报文没有在规定时间内收到ACK回复,发送端会认为该数据报文丢失了,那客户端就会立刻重传
  4. 拥塞避免:当收到3个重复ACK,注意,这里是收到。发送端会认为网络拥塞,他会减少发送速率。并降低发送端发送的数据量,从而减少网络拥塞现象

重传机制

  1. 触发重传也有很多种方式
  2. 超时重传:超过等待时间依然没有收到ACK响应,则会重传, 一般来说超时时间(RTO) > 往返时间(RTT), 往返时间就是发送到服务端,再由服务端返回的两段时间相加
  3. 快速重传(数据驱动): TCP会给每个包编号seq, 第一个包编号就是随机数,接收方收到多个包后,方便组装还原,如果发生丢包,可以知道是哪一个包丢了。
  4. 比如服务端收到6号包,但没有收到14号包,ACK就会记录,期待收到14号包。过了一段时间,14号包还是没收到,但是收到了24号包,ACK里面编号不会变化,会一直期待收到14号包。所以就会不断的重试。当客户端收到了3个连续的ACK回复 或 超时了还没收到ACK,会认为14号包丢失,会重新发14号包,因为14号包已经记录在ACK编号里面了,所以客户端收到的ACK就会有期待14号包的信息,重传成功后,双方才会进行正常通信。
  5. 缺点:快速重传解决了时间超时问题,但存在重传的时候,究竟是重传丢失的那一个包,还是重传丢失包之后的所有包。因为丢失的包会导致后面的包不会记录在ACK中,所以此时客户端时不知道后面的包是否已经收到

TCP传输优化-Nagle算法,即流量控制算法

  1. TCP协议中,无论发送多少大小的数据,每次都会带上协议头
  2. 如果数据量太小,甚至小于协议头的数据量,并且请求频率极高,那么就会浪费资源,协议头的内容就会占很大资源,并且频率高,数据小,也会造成拥塞,并占用资源
  3. TCP默认开启了Nagle算法
  4. Nagle算法会将多个小包囤积 并 合并,然后一起发送,类似于kafka的buffer机制。
  5. Nagle算法只有当收到服务器响应的时候,才会发送第二个包,否则不会发送。当然也不会一直等,当长时间没收到服务器响应,超过了超时时间,则会立即发送,即使每收到服务器响应也会发送。或者数据长度达到了MSS大小时,即使没收到服务端响应,也会立即发送第二个数据包
  6. 缺点:实时性差,延迟很大,因为正常情况下只有收到服务器响应,才会发送第二个数据包,所以当实时性是强需求时,需要关闭Nagle算法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【HBZ分享】TCP可靠性传输如何保证的?以及传输优化之Nagle算法 的相关文章

  • Kali Linux 安全渗透核心总结,444页核心知识点

    就像IT人离不开Linux系统一样 网安人也离不开Kali Linux 作为攻击性防御和渗透测试的代名词 越来越多的人开始学习Kali 如果你也对kali感兴趣 又想深入了解这方面内容 不妨收藏一下这份Kali Linux安全渗透教程 共4
  • 6类典型场景的无线AP选型和部署方案

    你们好 我的网工朋友 前段时间刚给你们来了篇解决无线频繁断网的技术文 解决无线频繁断网 这个办法值得收藏 不少朋友私聊 说想再聊聊无线AP的选型和部署方案 这不就安排上了 无线网络覆盖项目中 无线AP的合理选型和部署非常重要 在设计施工中
  • CMAKE_MAKE_PROGRAM is not set 解读

    目录 CMAKE MAKE PROGRAM 未设置 错误原因 解决方案 示例1 GNU Make 示例2 Ninja CMakeLists txt 的结构 示例 CMakeLists txt 文件 总结 CMAKE MAKE PROGRAM
  • 内网穿透的应用-使用Net2FTP轻松部署本地Web网站并公网访问管理内网资源

    文章目录 1 前言 2 Net2FTP网站搭建 2 1 Net2FTP下载和安装 2 2 Net2FTP网页测试 3 cpolar内网穿透 3 1 Cpolar云端设置 3 2 Cpolar本地设置
  • CTF之逆向入门

    逆向工程 Reverse Engineering 又称反向工程 是一种技术过程 即对一项目标产品进行逆向分析及研究 从而演绎并得出该产品的处理流程 组织结构 功能性能规格等设计要素 以制作出功能相近 但又不完全一样的产品 逆向工程源于商业及
  • Linux 软件安装以及管理

    本篇主要记录常用的软件安装和管理方式 主要是 yum rpm dnf apt pip 大致都是一样的 主要是部分软件提供了解决依赖的功能 内容不包括源码安装 源码安装情况相对比较复杂 后续有时间再补充 约定 案例所用模板软件均为 pytho
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写 测试用例 时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计 测试数据 通
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 【信道估计】【MIMO】【FBMC】未来移动通信的滤波器组多载波调制方案(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • 国外拨号VPS指南:开启你的全球网络之旅

    在当今数字化时代 互联网已经成为了我们生活的一部分 而要在全球范围内畅通无阻地访问互联网 拥有一个可靠的国外拨号VPS是非常重要的 无论您是为了工作 学习还是娱乐 国外拨号VPS都可以为您提供更广泛的网络体验 本文将为您提供国外拨号VPS的
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 服务器中E5和I9的区别是什么,如何选择合适的配置

    随着科技的进步 服务器处理器的性能在不断攀升 其中 Intel的E5和I9系列处理器在业界具有广泛的影响力 而当我们在选择服务器的时候会有各种各样的配置让我们眼花缭乱不知道该怎么去选择 下面我跟大家分享一下E5跟I9有什么区别 方便我们在选
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告

随机推荐

  • JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) 解决

    重启tomcat 后台出现JDWP Transport dt socket failed to initialize TRANSPORT INIT 510 错误 因为tomca开启了debug 而debug端口占用导致的问题 1 ERROR
  • 湖南文旅数据中心:湖南文旅数据早知道(9月10日)

    湖南文旅数据早知道 9月10日 星期四 省内文旅要闻 昆明文旅推介会在长沙举行 坚持公交优先 湖南122个县市区全面实现交通一卡通互联互通 湖南雪峰启动消费扶贫 文旅产品引领乡村振兴 国内文旅要闻 国内旅游宣传推广典型案例名单发布 中秋国庆
  • Python3中 pyecharts.charts库可视化词云图--《你的答案》的歌词!

    Python3中 pyecharts charts库可视化词云图 你的答案 的歌词 可视化歌曲 你的答案 的歌词 词频自己设计 Project filename PythonDemo WordCount IDE PyCharm Author
  • js判断数组中是否存在某个属性或者对象

    骑士李四记录 场景一 对数组去重 1 判断是否存在字段 可以对数组去重 var arr 1 2 3 4 arr indexOf 3 2 arr indexOf 5 1 应用 去重 var list for let str of arr if
  • 算法岗面试题.收集

    收集一下算法岗面试题 后续将对问题进行自己的解答 蔚来感知算法岗面试题 1 用C 手写NMS 2 从模型和数据的角度分别说明如何解决梯度爆炸的问题 3 Faster R CNN的流程 两阶段主要解决了什么问题 4 YOLO中是怎么解决正负样
  • 解决:在自动化测试中定位到新打开的窗口的元素问题

    原始代码 time sleep 3 self driver find element by id TANGRAM PSP 10 footerULoginBtn click time sleep 2 log info 点击qq账号登陆 sel
  • 数组实现顺序二叉树的前序遍历,中序遍历,后序遍历

    顺序二叉树的满足条件 1 一般指完全二叉树 2 第n个元素的左子树为2 n 1 3 第n个元素的右子树为2 n 2 4 第n个子树的父节点为 n 1 2 注意 n为数组下标所以是从0开始 代码实现 package com yg tree a
  • js的内容

    1 JS的背景 W3C将网页的标准分成了三部分 HTML 页面的结构 CSS 页面的样式 JavaScript 页面的行为 JavaScript JS 发展背景 创建JavaScript的初衷 JavaScript最开始由网景公司创建的 参
  • 基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 无线传感器网络 Wireless Sens
  • 最详细的ECLIPSE Android SDK下载安装及配置教程

    最近Neo突发神经 想要将学过的一些计算机视觉 机器学习中的算法都放到移动设备上去跑跑 因为移动开发是大势所趋嘛 希望能够通过这样一个实践的过程 找到一些新的灵感 该不会是为了赚钱吧 我自己目前也有一些idea 然后也希望以后能够进行计算机
  • linux看剩余电量命令,Linux终端如何检查笔记本电脑电池的状态和电量

    在Linux的终端检查笔记本电脑电池的状态和电量 通过三种方法从命令行找到笔记本电脑的电池状态 方法1 使用 Upower 命令 大多数Linux发行版中都预装了Upower命令 要使用Upower显示电池状态 请打开终端并运行 upowe
  • vue中使用bus来实现不同组件的传值(更推荐vuex)

    前言 在vue中实现用公共bus来实现不同组件直接的传值 实现方法 1 main js中在window上挂载一个变量EventBus window EventBus new Vue 2 传方法页面 必须在页面的销毁阶段传方法 至于原因 请看
  • Linux中处置挖矿病毒样本演示

    一 病毒特征 1 top 查看cup使用率 CUP使用率极高 也可以看到它的PID 2 查看网络连接数 netstat anpt grep tcp 连接数较高 二 处置 1 kill pid 尝试删除可疑进程 可以删除 但是他还是会自动启动
  • 亲测!推荐一款k8s前端操作界面 Kuboard for K8S

    文章目录 一 前提 二 安装Kuboard for K8S 2 1 安装 2 2 加载Kuboard镜像 2 3 准备kuboard yaml文件 2 4 执行安装命令 三 启动观察 3 1 获取token 3 2 打开浏览器 享受飞一般的
  • Redis集群配置

    目录 1 创建两个桥接虚拟机实例 1 1 修改桥接网络 1 2 修改本地网络配置文件 1 3 测试 2 配置redis集群 2 1 安装redis 2 1 1 安装依赖 2 1 2 下载redis安装包上传服务器并解压 2 1 3 解压文件
  • 搜索二叉树

    全文目录 概念 实现二叉搜索树 查找 插入 删除 性能分析 概念 二叉搜索树 它或者是一棵空树 或者是具有以下性质的二叉树 若它的左子树不为空 则左子树上所有节点的值都小于根节点的值 若它的右子树不为空 则右子树上所有节点的值都大于根节点的
  • Matlab/Simulink仿真问题及技巧汇总【持续更新】

    本文章会汇总Matlab Simulink仿真问题和相关技巧汇总 如果有问题可以查询本文 有相关问题可以私信我 给你把你们的问题同步更新 wx shadowknight007 本文章会持续更新 设置问题 仿真参数设置和示波器的使用 http
  • 矩阵列主元三角分解

    一 列主元三角分解定理 如果A为非奇异矩阵 则存在排列矩阵P使 PA LU 其中L为下三角矩阵 U为上三角矩阵 即A P 1LU 二 列主元三角分解Python代码 自己原创 def pivot lu decomposition coeff
  • ​stp文件转wrl

    什么是一 stp 文件 STP 文件是用于在 CAD 和 CAM 应用程序之间交换产品数据的 3D CAD 文件 它包含有关 3D 对象的信息 并以类似于STEP文件格式的方式保存 STP 文件根据STEP应用程序协议 ISO 10303
  • 【HBZ分享】TCP可靠性传输如何保证的?以及传输优化之Nagle算法

    ACK机制 ACK机制是发送方与接收方的一个相互确认 客户端向服务端发送连接请求 此时服务端要回馈给客户端ACK 以表示服务端接到了客户端请求 这是第一和的第二次握手 客户端接收到服务端响应后 同样也要回馈服务端的响应 告知服务端我收到了你