tcp shrinking window 之进退

news2024/11/17 17:36:29

一个有趣的问题: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.coloradmin.cn/o/604721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

apple pencil一代的平替有哪些品牌?平价电容笔推荐

要知道&#xff0c;真正的苹果原装电容笔&#xff0c;价格可不低&#xff0c;仅仅一支就是近千块。实际上&#xff0c;平替电容笔对没有太多预算的用户是个不错的选择。一款苹果的电容笔的售价&#xff0c;相当于平替电容笔的四倍&#xff0c;不过平替电容笔的书写体验&#xf…

pnpm对npm及yarn降维打击详解

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

3.5 凸多边形最优三角部分

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.什么是多边形的三角剖分&#xff1f; 多边形三角剖分是指将多边形分割成互不相交的三角形的弦的集合T。 我的理解&#xff1a; 多边形三角剖分是将给…

uniapp本地存储详解

uniapp本地存储详解 前言 在开发uniapp应用时&#xff0c;我们常常需要使用本地存储来保存一些数据&#xff0c;比如用户登录信息、设置项等&#xff0c;使得应用能够在设备上保存和读取数据&#xff0c;以便提供更好的用户体验和离线功能支持&#xff0c;本文将简单介绍unia…

python编程——编译器与解释器

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 前言 一、编译器与解释器的介绍 二、编译器与解释器…

JDK1.8下载安装(优雅)

bug虐我千百遍&#xff0c;我待bug如初恋。 这里使用的环境是win11 64位系统&#xff0c;应该适配win8-win11 一、下载 这里提供两种下载方式&#xff0c;官网下载和第三方下载&#xff0c;区别就是下载速度不同 1. 官网下载 &#xff08;1&#xff09;官网下载&#xff1a;…

智慧物流货运系统源码 货运平台的功能介绍

网络货运平台源码 网络货运平台的功能 网络货运是指利用互联网平台&#xff0c;通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合&#xff0c;通过网络平台进行交易、物流配送和结算等一系列商业流程&#xff0c;从而…

用户画像如何创新破局数据驱动增长 | 数据增长

用户画像即用户信息标签化&#xff0c;就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后&#xff0c;完美地抽象出一个用户的商业全貌&#xff0c;是企业应用大数据技术的基本方式。例如&#xff1a;通过收集用户的人口属性、行为属性、消费习惯…

面向初学者的数据科学|要学习的内容概述

面向初学者的数据科学|要学习的内容概述 数据科学家是21世纪最性感的工作。每个人都想变得性感。该领域开始变得竞争激烈&#xff0c;提高了就业标准。 因此&#xff0c;仅仅知道如何使用不同的工具是不够的&#xff0c;求职者需要能够抓住基本的概念和技术&#xff0c;然后应用…

VMware Cloud Foundation 5.0 发布 - 领先的多云平台

VMware Cloud Foundation 5.0 发布 - 领先的多云平台 高效管理虚拟机 (VM) 和容器工作负载。为本地部署的全栈超融合基础架构 (HCI) 提供云的优势。 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-cloud-foundation-5/&#xff0c;查看最新版。原创作品&#xff…

DEMO:F4帮助 收藏夹功能

货铺QQ群号&#xff1a;834508274微信群不能扫码进了&#xff0c;可以加我微信SAPliumeng拉进群&#xff0c;申请时请提供您哪个模块顾问&#xff0c;否则是一律不通过的。进群统一修改群名片&#xff0c;例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接&#xff0c;小程…

没有硬件资源?免费使用Colab搭建你自己的Stable Diffiusion在线模型!保姆级教程...

部署 Stable Diffusion 需要一定的硬件资源&#xff0c;具体取决于要处理的图像大小和处理速度等因素。一般来说&#xff0c;至少需要一台具有较高计算能力的服务器&#xff0c;而对 GPU 的高要求就限制了我们学习和使用SD来生成我们想要的图像。 GPU是深度学习开发的重要硬件条…

C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

FastJSON autoType is not support问题解决

概述 产品在使用内部的后台管理系统时反馈的问题。 于是登录平台&#xff0c;发现如下报错详情&#xff1a; 排查 经过分析&#xff0c;不难得知&#xff0c;请求是从gateway网关转发到对应的统计服务 statistics&#xff0c;此服务有个接口/api/statistics/data/overview…

华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】

一、题目描述 实现一个支持优先级的队列&#xff0c;高优先级先出队列&#xff0c;同优先级时先进先出。 如果两个输入数据和优先级都相同&#xff0c;则后一个数据不入队列被丢弃。 队列存储的数据内容是一个整数。 二、输入描述 一组待存入队列的数据&#xff08;包含内…

Java官方笔记4类和对象

创建类 定义类Bicycle&#xff1a; public class Bicycle {// the Bicycle class has// three fieldspublic int cadence;public int gear;public int speed;// the Bicycle class has// one constructorpublic Bicycle(int startCadence, int startSpeed, int startGear) {gea…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载&#xff0c;但是速度较慢&#xff0c;这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

Gradio的web界面演示与交互机器学习模型,Blocks的事件侦听《7》

在第一篇文章我们就熟悉了Blocks的用法&#xff0c;使用Blocks比Interface更加灵活&#xff0c;这节重点关注Blocks里面的相关操作。 1、Blocks标准例子 import gradio as grdef greet(name):return "你好 " name "!"with gr.Blocks() as demo:name g…

简单的汉诺塔,神奇的预言,竟然需要5849亿年???(52)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 汉诺塔 古印度大梵天传说 Python玩转汉诺塔 递归 汉诺塔 汉诺塔(Hanoi)是一个著名的益智游戏&#xff0c;也称…

规则引擎架构-基于aviator

目录 aviator使用场景ASM 字节码操控框架aviator 表达式例子debug表达式类生成过程b-ca生成的class文件 aviator使用场景 github地址&#xff1a;aviator 使用场景&#xff1a; 规则判断及规则引擎公式计算动态脚本控制集合数据 ELT 等 …… ASM 字节码操控框架 asm实现&a…