tcp shrinking window 之进退

news/2024/5/18 18:00:51/文章来源:https://blog.csdn.net/dog250/article/details/131007085

一个有趣的问题:Unbounded memory usage by TCP for receive buffers, and how we fixed it

引出一个 kernel patch:[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits

但这 patch 把一个问题变成了两个问题:关闭 tcp_shrink_window,则未修复内存占满问题,打开 tcp_shrink_window,如下图所示:
在这里插入图片描述

RFC 7323 附录 F 明确了这个问题有两种做法,把两个方法结合最高尚,而不是彻底解决一个引入另一个:只允许 rcvbuff 超额一次,直到 read_nxt 腾出的空间大于 overflow 额度。做法很简单:

  • tcp_select_window 检测到 overflow(即需要 shrink),记录 over_quota = rwin_curr - free_space,anch = read_nxt,返回实际 2^win_scale 下取整后的 rwin,不改变 tcp_sock: rcv_wnd。
  • 当 read_nxt - anch <= over_quota 时,返回减去推进值后的实际剩余 rwin(2^win_scale 下取整),不改变 tcp_sock: rcv_wnd。
  • 当 read_nxt - anch > over_quota 后,恢复正常。

简单总结就是,通告给 sender 的 rwin 按 shrink 方式,receiver 端验证的 rwin 按 overflow 方式。

多说一句,对于 sender,如收到 shrink,就不要重传 rwin 外已发出的数据,因为这是由于 shrink window 丢的,而不是网络拥塞丢的。这件事告诉我们,得到一个明确的信息,对辅助判断决策是多么有意义。

直到 Linux kernel v6.3-rc5,这个问题依然存在,谁来解一下?

下面段落是短评。

So ?都是反馈惹的祸,反馈需要时间,这个时间很久,夜长梦就多,别指望反馈才能彻底解决问题,同时又避免了 burst,用 pacing 替代 rwin,就像用 pacing 替代 cwnd 一样,作为 primary controller,把反馈的时间平滑掉。

反馈慢也是个背锅的。本质原因是 receiver 的 rcvbuff 按 byte 推进,而 rwin 按 2^win_scale 倍数推进,一开始引入 win_scale option 的时候这问题就没有考虑到,以至于事情变得越来越复杂,TCP 几乎所有问题都因此而来,而 QUIC 作为 another TCP,它几乎就是 TCP 的影子,QUIC 的优势在于它比 TCP 更容易快速迭代,它在应用程序尺度更新,而无需照顾泛化。

但这不能否认 TCP 作为一个极简协议开始的功劳,TCP/IP 不完美,永远也不会完美,但这正是它的成功之道,立命之本,TCP/IP 和以太网一样,在完备的标准化前先大量部署,成为既成事实,而不是反过来先追求标准化,反例请参考 OSI 模型。

不多说。

浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_310776.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0基础学习VR全景平台篇第32章:场景功能-嵌入文字

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;场景管理模块-嵌入功能文字模块&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四…

值得收藏 | 脑机交互作用研究

神经损伤和疾病对许多人的生活产生了巨大的影响&#xff0c;导致了许多运动障碍和日常任务无法独立完成。皮质假体系统通过脑机接口&#xff08;BCI&#xff09;接收一个动作命令来执行所需的位置&#xff0c;从而使得经历神经损伤的人能够实现部分功能恢复。BCI技术可以在侵入…

基于深度学习的目标姿态检测方法_kaic

目录 摘要 第1章 引言 1.1 研究背景和意义 1.2 国内外研究现状 1.3 主要内容 第2章 单目相机的目标姿态检测技术 2.1单目相机的工作原理 2.2目标姿态检测 2.3已有的目标姿态检测方法及其局限性 2.4本章总结 第3章 构建数据集 3.1 数据集来源 3.2数据集标注 3.3数据集分析 3.4本…

Docker安装Mysql教程(linux)

本文主要讲解如何使用Docker去安装mysql 一、搜索镜像 docker search mysql二、拉取镜像 不指定版本&#xff0c;默认为最新版&#xff0c;这里用的5.7 docker pull mysql:5.7三、创建容器&#xff08;运行镜像&#xff09; 1、内外都使用3306端口&#xff08;确保你的宿主机3…

这么好看的头像,岂不拿下!

❝ 如此好看的头像&#xff0c;怎么能不喜欢&#xff1f;&#xff1f;&#xff1f; ❞ 代码放在了最后 后续还会出一个工具&#xff0c;以便于随时打开下载。 看上述的头像是不是还是很不错的。看着网站还是✨✨每天都会有更新的✨✨。 所以&#xff0c;我动手了&#xff0c;下…

菱形图案打印、水仙花数、买汽水

目录 菱形图案打印 上三角 下三角 拓展&#xff1a;带空格直角三角形图案 代码一 代码二 水仙花数 拓展&#xff1a;变种水仙花数 买汽水 代码一 代码二 妙用汽水瓶 菱形图案打印 题目要求 其实呢这道题很多人想到直接用printf()进行输出&#xff0c;我想说的是&#…

【企业化架构部署】基于Apache搭建LAMP架构

文章目录 前言一、LMAP架构介绍1.概念2.LAMP构建顺序3.LAMP编译安装4.各组件介绍4.1 Linux4.2 Apache4.3 MySQL4.4 PHP/Perl/Python 二、服务器部署1.Apache部署2.MySQL部署3.PHP部署4.安装论坛 前言 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整…

初识SpringBoot -- SpringBoot入门保姆级教程(一)

文章目录 前言一、初识SpringBoot1.SpringBoot简介2.用编译器IDEA创建SpringBoot项目3.在官网创建SpringBoot项目4.SpringBoot项目快速启动&#xff08;前后端分离基本能力&#xff09;5.了解SpringBoot起步依赖和启动类 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开…

【数据结构6】二叉树的基本操作

文章目录 ⭐️写在前面的话⭐️二叉树的一些基本操作1、结构定义2、先序创建这棵树3、按满二叉树方式创建4、三种递归遍历5、层次遍历6、求二叉树的深度7、求叶子结点数8、三种非递归遍历9、先序线索化二叉树10、先序线索化后遍历11、中序线索化二叉树12、中序线索化后遍历主函…

【笔记】【Javascript】javascript实现继承

前言 之前写过关于面向对象编程的文章&#xff0c;通过阅读别人的博客了解了一下Javascript实现继承的方法&#xff0c;并且使用图画的形式帮助了解&#xff0c;图是自己做的&#xff0c;若有偏差请读者帮忙指出&#xff0c;谢谢。笔记中有些个人理解后整理的笔记&#xff0c;…

【Vue】Vuex,Vue-Router

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 Vuexvue-router Vuex 将公用的数据统一存放在store(全局数据中心)中&#xff0c;实现更方便的跨…

Redis之SDS数据结构的使用

目录 序言字符串 char*字符串数组简单动态字符串SDS 序言 Redis的几种基本数据结构有字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&…

企业级开发1.6 JdbcTemplate操作

JdbcTemplate操作 一、JdbcTemplate案例演示&#xff08;一&#xff09;创建数据库与表1、创建数据库2、创建用户表3、用户表添加记录4、查看用户表内容 &#xff08;二&#xff09;打开Spring项目&#xff08;三&#xff09;添加数据库相关依赖&#xff08;四&#xff09;创建…

PyCharm使用指南 - 如何创建密码短语生成器(上)

PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。 PyCharm 最新下载 本文将展示如何使用免费的 PyCharm Community Edition 开…

chatgpt赋能python:Python创建venv的完全指南

Python创建venv的完全指南 在Python开发中&#xff0c;虚拟环境是一个非常有用的工具。它可以让我们在同一台计算机上拥有多个Python环境&#xff0c;而不会互相干扰。在本文中&#xff0c;我们将介绍如何使用Python创建venv&#xff08;虚拟环境&#xff09;。 什么是venv&a…

Unity制作二次元卡通渲染角色材质——1、资源分析

Unity制作二次元材质角色 回到目录 大家好&#xff0c;我是阿赵。 开始制作二次元角色材质之前&#xff0c;我觉得应该是先分析一下&#xff0c;我手上拿到的这个角色模型资源&#xff0c;总共有哪些信息是我们能用的。 所以这篇文章我不会分享具体的Shader&#xff0c;但我感觉…

pnpm对npm及yarn降维打击详解

目录 正文npm2yarnpnpm总结 正文 大家最近是不是经常听到 pnpm&#xff0c;我也一样。今天研究了一下它的机制&#xff0c;确实厉害&#xff0c;对 yarn 和 npm 可以说是降维打击。 那具体好在哪里呢&#xff1f; 我们一起来看一下。 我们按照包管理工具的发展历史&#xf…

Redis核心数据结构-01

1、String String 数据结构是简单的key-value类型&#xff0c;value其实不仅是String&#xff0c;也可以是数字。 常用命令&#xff1a;get、set、incr、decr、mget等。 应用场景&#xff1a;String是最常用的一种数据类型&#xff0c;普通的key/ value 存储都可以归为此类&…

国产化麒麟系统在window系统上用hyper-v搭建虚拟机环境QT安装文件传输步骤

1 麒麟系统国产化hyper-v虚拟机环境经验 1.1 简介 随着国际环境的变化&#xff0c;软硬件国产化是现在迫切的需求&#xff0c;只有实现了自主研发&#xff0c;才能自立自强&#xff0c;才能实现民族伟大复兴&#xff0c;才能实现祖国的繁荣昌盛。为了实现这一目标&am…

干洗店软件,洗衣洗鞋线上下单小程序开发

干洗店软件洗衣洗鞋线上下单小程序&#xff1b; 可以实现客户自助办理&#xff0c;也可以和公众号、小程序等结合起来。干洗店软件可以实现客户管理&#xff0c;如积分管理&#xff0c;产品设置等功能。 线上下单&#xff0c;上门取货&#xff0c;订单拍照&#xff0c;订阅提示…