TCP延迟确认过长问题

2023-11-18

在并发环境下  tcp 确认时间过长 造成大部分时间在等待状态 造成性能降低:

解决方式:网络传输设置为不需要延迟确认

分析问题

例子: 假如:一次传输时间:延迟确认时间(200ms)+ 数据传输时间(1ms)+查询时间(1ms)  严重超时

              机器 A 输出 “ABCD”  传输给机器 B 假如传输包的大小为1个字符 (实际不是这样)

             “ABCD” 传输分为4次  

            假如socket 设置需要延迟确认情况下 等到收到“abcd”字符串时候发起确认 (网络延迟造) 200ms+1ms+1ms

 

                               不需要延迟确认情况下:1+1ms

                     

http://www.cnblogs.com/ggjucheng/archive/2012/01/15/2323081.html

简介

TCP延迟确认是由一些实现采用的技术,努力提高网络性能的传输控制协议 。从本质上讲,几个应答响应可能结合在一起,成一个响应,减少协议开销 。然而,在某些情况下,该技术可以降低应用程序的性能。

方法和优势

RFC 1122中描述,主机可能延迟发送ACK响应到500毫秒。此外,收到一个完整大小的TCP报文段,就要发送ACK响应 。

延迟ACK可以给应用程序的机会,一起发送更新的TCP接收窗口,ACK和应用程序的即时响应。如某些协议,远程登录,通过合并ACK,tcp窗口更新和应用程序的响应为一个报文段,延迟ACK可以减少服务器发送的响应的数据为3倍

问题

在某些应用程序和配置交互时,延迟ACK引入额外的等待时间可能会导致进一步延误。

如果Nagle算法是由发送方使用,数据将会排队,直到收到一个ACK确认 。如果发件人不发送足够的数据来填充最大的段大小(例如,如果它执行两个小写入一个阻塞读),然后发件人的应用程序将会暂停,直到ACK延迟超时

例如,考虑一个情况,其中鲍勃是将数据发送到卡罗尔,鲍勃的套接字层中,要发送的有效数据不够一个完整的数据包。根据Nagle算法,它不会被发送,直到收到一个ACK确认已发送的数据。同时,卡罗尔的应用层不会发送一个响应,直到它得到的所有数据。如果卡罗尔是使用延迟ACK,她套接字层将不会发送一个ACK,直到最后超时才会发送ACK。

如果应用程序是在较小的块中传输数据,并期望定期确认回复,可能会出现这种负面的效果。为了防止这种延迟,应用层需要不断发送数据,而无需等待确认回复。另外,发送端的应用程序可能会禁用Nagle算法。


“此外,收到一个完整大小的TCP报文段,就要发送ACK响应 ”

UNP中 对ACK延滞算法有一段描述:TCP期待在这一段延滞时间内有自身数据发送给对端,被延滞的ACK就可以由这些数据捎带。(与不使用nagle算法的差别?)

上面这两个描述还是有些不尽相同的。



http://hi.baidu.com/kwokwing0011/item/f946590bd47c9fe3349902fa

延迟ACK和nagle算法

nagle算法

从键盘输入的一个字符,占用一个字节,可能在传输上造成41字节的包,其中包括1字节的有用信息和40字节的标题数据。这种情况转变成了4000%的消耗,这样的情况对于轻负载的网络来说还是可以接受的,但是重负载的福特网络就受不了了,它没有必要在经过节点和网关的时候重发,导致包丢失和妨碍传输速度。吞吐量可能会妨碍甚至在一定程度上会导致连接失败。Nagle的算法通常会在TCP程序里添加两行代码,在未确认数据发送的时候让发送器把数据送到缓存里。任何数

据随后继续直到得到明显的数据确认或者直到攒到了一定数量的数据了再发包。该算法的优越之处在于它是

自适应的:确认数据到达的越快,数据的发送越快。

延迟ACK

通常TCP在连接到数据时并不是立即发送ACK,相反,它推迟发送,以便ACK与需要沿该方向发送的数据一起发送。绝大多数采用的时延为200ms,也就是说,tcp将以最大时延200ms来等待是否有数据一起发送。

tcp需要ack,可是为了效率,并不是每发送一个数据都要等待ack,而是尽可能利用窗口机制,积累发送ack的,当然在某些特殊情况下还是需要马上发送ack的:比如接收到乱序的数据,这种情况下,虽然接收端可以将乱序的数据包暂存,但是接收方必须发送一个ack号为按序的期望的序列号的ack给发送端,另外就是接收窗口需要调整,此时就要立刻发送ack,否则则可以延迟发送ack

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP延迟确认过长问题 的相关文章

  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • 我需要启用哪些权限才能使 Docker 卷正常工作?

    假设我有一个保存一些数据的 Docker 容器 我希望这些数据能够持续存在 如果容器被停止 删除 升级等 我仍然希望数据位于主机操作系统文件系统上的可访问位置 目前 我的解决方案是创建一个目录 srv service name在我的主机上
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 在初始化脚本中切换用户?

    这是我的 Ubuntu 工作站上的初始化脚本 我需要以除 root 之外的其他用户身份运行命令 但我就是不知道应该如何完成它 两者都不sudo u or su newuser似乎有效 剧本 respawn console none star
  • PHPStorm - 无效的后代文件名

    我正在尝试将 Windows 7 PC 上的本地 PHPStorm 项目与 Ubuntu 服务器同步 当我尝试任何类型的连接 例如 测试 SFTP 连接 时 它会失败并显示 Invalid descendent file name C np
  • Tomcat从Eclipse和startup.sh启动

    奇怪的事情发生了 我可以从 Eclipse 和startup sh 启动Tomcat 从 Eclipse 运行我可以访问 localhost 8080 而从startup sh 运行时我不能 可能是什么问题呢 Ubuntu 11 10 在
  • 更改“/usr/bin/”的所有权:不允许操作

    我刚刚改变了我的所有者 犯了一个巨大的错误 usr bin from root对一个普通人user 每当我尝试执行时 sudo chown root usr bin这给了我 chown changing ownership of usr b
  • rustup install stable 下载过程中出现错误

    我使用命令安装 Rust curl sSf https static rust lang org rustup sh sh 当我跑步时 rustc main rs 这出现了 error no default toolchain config
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • Rstudio 更有意义的窗口标题

    我在 Ubuntu 16 04 下使用 R studio 版本 1 0 143 窗口标题仅显示一个非常无信息的 RStudio 我希望至少有当前选项卡的名称 或者最好是与此选项卡对应的文件的完整路径 在 Windows 下 完整路径似乎出现
  • dpkg 错误:pycompile:未找到

    sudo apt get remove purge mysql server mysql client mysql common 当我尝试使用上述命令删除 mysql 时 出现以下错误 Reading package lists Done
  • OpenSSL 未签名证书静默

    遇到了麻烦 还有其他一些相关的帖子 但没有那么具体 我正在尝试为开发机器默默地生成证书 这些是我最初运行的命令 但被要求输入密码 openssl genrsa des3 out server key 1024 openssl req new
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • Nginx 作为负载均衡器,具有 75% 和 25% 加权路由

    我是 Nginx 新手 我有两台服务器 serverA 和 serverB 我希望 75 的请求发送到 serverA 其余 25 的请求发送到 serverB 这可能吗 使用nginx加权路由 stream upstream stream
  • 在 ubuntu 中找不到 .android 文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在哪里可以找到 android在 Ubuntu 中 我想使用debug keystore 转到您的主文件夹并按 ctrl h 瞧
  • 在openCV内部调用Gstreamer

    我需要在 openCV 代码中调用 Gstremaer 本质上是打开摄像机 当我查看源代码时 modules highgui src cap gstreamer cpp似乎是我正在寻找的文件 我用 Gstreamer 标志编译了 OpenC
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too

随机推荐

  • 中山三院挂号服务器维护中,于广州中山三院的一次郁闷就诊

    最近不时地看到关于医院不负责任的报道 感叹的同时总觉得不可思议 那一直以为很神圣的地方现在对待生命的态度真的有这么随便么 没想到 一不小心 自己竟成为了被随便对待的那一个 事情的经过是这样的 这几天妈妈的胃一直很不舒服 于是10月8日早上陪
  • Matlab中readmatrix用法

    目录 语法 说明 示例 从文本文件中读取矩阵 从电子表格文件中读取矩阵 使用导入选项从指定的工作表和范围中读取矩阵 从指定的工作表和范围中读取矩阵 readmatrix是从文件中读取矩阵 语法 A readmatrix filename A
  • Minimal API in .NET 6 Using Dapper and SQL - Minimal API Project

    快捷键 prop public int MyProperty get set property ctor 创建一个构造函数 constructor part1 数据库 存储过程处理 最小的API 这里新建项目的时候没有用控制器 创建数据库文
  • position:absolute详解

    position absolute 日常开发中经常涉及元素的定位 我们都知道 绝对定位相对于最近position不为static的父级元素来定位 但其中定位的位置还是有细微的差别的 绝对定位根据left和top属性来规定绝对定位元素的位置
  • 使用克拉默法则进行三点定圆(三维)

    目录 1 三维圆 2 python代码 3 计算结果 本文由CSDN点云侠原创 爬虫网站请自重 1 三维圆 已知不共线的三个点 设其坐标为 x 1 y 1
  • 斯坦福cs224n教程--- 学习笔记1

    一 前言 自然语言是人类智慧的结晶 自然语言处理是人工智能中最为困难的问题之一 而对自然语言处理的研究也是充满魅力和挑战的 通过经典的斯坦福cs224n教程 让我们一起和自然语言处理共舞 也希望大家能够在NLP领域有所成就 二 先修知识 学
  • Python爬虫市场简单分析

    Python爬虫是目前互联网行业中最重要的组成部分之一 Python作为一门易学易懂的编程语言 不需要过多的软件环境和部署条件 基本覆盖了爬虫开发的大部分需求 是网络数据爬取和处理的首选技术之一 Python通过一系列优秀的爬虫框架和库的支
  • 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种 控制对其他对象的访问 起到中介作用 代理模式核心角色 真实角色 代理角色 按实现方式不同分为静态代理和动态代理两种 意图 控制对其它对象的访问 类图 实现 JDK自带了Proxy的实现 下面我们先使用JD
  • 从零到英雄:Vue CLI 让你成为前端开发高手(一)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 1
  • 学习方法小结:

    好的学习方法 好的算法 高效率学习 gt 努力学习 1 学习要有目标不能太盲目 2 笔记很重要 整理笔记更重要 3 博客 论坛的运用十分关键 从量变到质变的过程需要去坚持 4 不要忘记复习 不能太依赖老师和他人的帮助 5 多提问 善于发现问
  • Pytorch学习笔记(III)——提取特征

    目录 一 引言 二 具体步骤 1 参数模型 2 网络结构 3 参数载入 4 特征提取器 5 读取图片 三 完整代码 一 引言 深度学习在许多任务中主要充当着特征学习的作用 而学习完的特征才是后续应用的一个关键 本文将主要介绍 如何提取任意目
  • SQL查询一对多返回一条数据

    一 查询中product和product img是一对多的关系 数据库是MySQL select p id p product cost price p product trade price p product sale price p
  • Android:基本 UI 组件

    前言 组件是 Android 程序设计的基本组成单元 通过使用组件可以高效地开发 Android 应用程序 文本类组件 Android 中提供了一些与文本显示 输入相关的组件 通过这些组件可以显示或输入文字 TextView 类 用于显示文
  • 已知先序后序遍历找n种二叉树问题

    Description 二叉树是一种特殊而重要的结构 有着广泛的应用 二叉树或者是一个结点 或者有且仅有一个结点为二叉树的根 其余结点被分成两个互不相交的子集 一个作为左子集 另一个作为右子集 每个子集又是一个二叉树 遍历一棵二叉树就是按某
  • IP地址、子网掩码、默认网关和DNS服务器之间的联系与区别

    文章目录 1 IP地址 2 子网掩码 3 默认网关 4 DNS服务器 1 IP地址 IP 是32位二进制数据 通常以十进制表示 并以 分隔 IP 地址是一种逻辑地址 用来标识网络中一个个主机 IP 有唯一性 指的是公网地址 即每台机器的 I
  • 微信小程序图片显示不出来的解决方案

    调试上没有什么问题 真机ios调试也没有什么问题 但是发布体验版后 在Android上图片却不见了 显示不出来 开始以为是兼容性的问题 最后才发现其实事情并没有这么难解决 以下是可能出现的问题 1 注意在微信小程序中的图片标签是
  • Python3,5行代码,制作Gif动图,太简单了。

    gif动图制作 1 引言 2 代码实战 2 1 安装 2 2 代码 3 总结 1 引言 小屌丝 鱼哥 你能不能帮我找一个动图 小鱼 啥动图 你自己百度不就行了 小屌丝 我这不是没找到吗 不然我就自己来找了 小鱼 找不到 你就自己制作一个呗
  • 轻松打造“文生图”神器!10分钟部署Stable Diffusion

    最近一年 扩散模型太火了 已经成为重要的生产力工具 在AI研究领域也不断有新的工作出现 成为产业界和学术界的热点 本文将在趋动云平台部署扩散模型中广受关注的stable diffusion webui项目 手把手教程 创建项目 首先创建项目
  • 【网络安全】Docker部署DVWA靶机环境

    目录 前言 Docker部署 DVWA部署 仓库镜像部署DVWA 手动部署DVWA 前言 Docker很好用 DVWA更是网络安全学习当中必不可少的靶机 但是DVWA的部署实在是太过麻烦了 如果每次不小心删除虚拟机或者更新了VM之后导致虚拟
  • TCP延迟确认过长问题

    在并发环境下 tcp 确认时间过长 造成大部分时间在等待状态 造成性能降低 解决方式 网络传输设置为不需要延迟确认 分析问题 例子 假如 一次传输时间 延迟确认时间 200ms 数据传输时间 1ms 查询时间 1ms 严重超时 机器 A 输