当前位置: 首页 > news >正文

一个原教旨的多路径 TCP

前面提到过 ECMP 和 TCP 之间的互不友好,pacing 收益和中断开销的互斥,在事实上阻碍了 packet-based LB 的部署,也限制了交换机,服务器的并发性能,同时潜在增加了 bufferbloat 的概率,而适用 packet-based LB 的短突发,老鼠流又无法承受 TCP 的建连开销,向后兼容的普遍刚性意味着几乎所有基础设施若不迁就 TCP,其崭新特性难尽其功。

虽在广域网领域很难改变现状,但在数据中心,仔细读上段文字,理解了掣肘间前因后果之后,在做双边传输优化或自研新协议之时,我们将获得启发。下面以最小修改 TCP 为例描述一个原教旨多路径 TCP 的构建过程。

我们的目标不是多路径,多路径只是手段,我们的目标是充分利用基础设施的并发能力,提高资源利用效率,只不过在数据中心普遍的 CLOS 架构下,多路径的策略非常合理且容易实现,因为 CLOS 在拓扑上本身就是 ECMP 原生的。问题转化为如何让 TCP 支持按 packet 分发,在宏观上充分利用 ECMP 能力,在微观上让转发节点解除流约束,充分利用硬件多处理能力,让硬件变得更简单,自然也就更高效。

若要 TCP 数据分发可按 packet 而不是 5-tuple-flow 执行,如何最小化修改 TCP?这个问题很有趣。

MPTCP 的路子显然把问题复杂化了,因为 MPTCP 是以 TCP 为基准的多路径协议,而不是以底层网络为基准的。交换机和服务器处理 MPTCP 的行为不能有任何不同,每一个 subflow 仍是一个 5-tuple-flow,这在底层的视角看,和标准 TCP 并无不同。TCP 流式约束只约束端,并不约束网络转发节点,TCP 又无法区分乱序和丢包,所以 TCP 在对待乱序需要非常谨慎而严格,避免无效重传。

TCP 的方式是维护一个 reordering 度量,在该度量的约束下,TCP 以重复 ACK 或 SACK 立即回复乱序状态,将处理收敛到 sender 的 update scoreboard 算法。

若以底层资源为基准来分析,自然就会有另一种不同于 reordering 度量但却更自然的方法处理乱序。如果底层网络是严格按照 packet 分发数据包的,那跑在该网络上的传输协议天然就是多路径的,因为乱序几乎是必然的,所以必须对乱序宽容,而宽容的方式自然就是提供一个时间窗口 w,在该时间窗口 w 之后再以重复 ACK 或 SACK 回复乱序状态。

这将是最简单的支持 packet-based 多路径分发的方法,sender 端无需任何改动,这才是真正的多路径 TCP,无论底层网络如何实现,这种 w-based MPTCP 都可兼容,例如,在传统的 5-tuple-flow 分发的网络中,w 将等于 0,相当于标准 TCP 收到乱序报文后立即回复 ACK/SACK。问题转化为 w 的计算问题。

设带宽为 B,已知的或测得的,RTT 为 T,已知的或测得的,若单路径送达,C = (B*T)/MSS 则为单路径报文容量,若 n 路径送达,每条路径承担 C / n 报文,到达时间为 T / n,因此需容忍等待 w = T - T / n 时间,n 可通过测量实际 delivery_rate 和 B 之比获得。

除了在延迟 w 之后按照标准 TCP 的方式发送重复 ACK/SACK 外,还可以直接发 NACK,但这就要修改更多代码了。

如果底层网络是一个不丢包的无损网络,将不再需要区分乱序和丢包,而在现实中,底层网络的误码丢包率本就很低,加之 w-based MPTCP 充分利用 ECMP 路径,反过来极大均匀分发了流量,几乎避免了拥塞,因此这种方式大有可为。

最后,这是一个思想,不针对 TCP,只是用 TCP 最容易讲明白,记住,若不是 TCP,可在双边交互更多信息,这需要设计更好的协议头。

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

相关文章:

一个原教旨的多路径 TCP

前面提到过 ECMP 和 TCP 之间的互不友好,pacing 收益和中断开销的互斥,在事实上阻碍了 packet-based LB 的部署,也限制了交换机,服务器的并发性能,同时潜在增加了 bufferbloat 的概率,而适用 packet-based …...

跟着AI学vue第十三章

第十三章:技术传承与行业影响力塑造 到了这个阶段,你已经在Vue技术领域积累了深厚的经验,拥有了较强的技术实力。此时,你的重点将是把自己的知识和经验传递给更多人,在行业内树立起影响力,推动整个Vue技术…...

labview中VISA串口出现异常的解决方案

前两天在做项目时发现,当用VISA串口读取指令时出现了回复异常的情况,不管发什么东西就一直乱回,针对这个情况,后面在VISA串口中加了一个VISA寄存器清零的函数。加了之后果然好多了,不会出现乱回的情况,但是…...

StableDiffusion本地部署 2

StableDiffusion本地部署 为了做这个事,这是第5篇文章了,可谓是做足了准备。开干! 强烈建议把我之前发的文章看一看,不然你会有点迷迷糊糊的。 整体思路 捋一捋思路: 下载三个东西,webui,py…...

unity学习61:UI布局layout

目录 1 布局 layout 1.1 先准备测试UI,新增这样一组 panel 和 image 1.2 新增 vertical layout 1.3 现在移动任意一个image 都会影响其他 1.3.1 对比 如果没有这个,就会是覆盖效果了 1.3.2 对比 如果没有这个,就会是覆盖效果了 1.4 总结&#xf…...

BRD4缺失通过GRP78灭活内质网应激,延缓脱氢表雄酮诱导的卵巢颗粒细胞凋亡

近日,一项由宁波大学医学院附属妇女儿童医院与同济大学附属东方医院妇产科合作的研究,揭示了BRD4(Bromodomain-containing protein 4)在PCOS中的重要作用,以及其与内质网应激(ERS)的复杂关系。值…...

Jmeter插件下载及安装

1、在Jmeter官网(Install :: JMeter-Plugins.org)下载所需插件 2、将下载的插件复制到jmeter文件下的lib/ext文件里(PS:D:\Jmeter\apache-jmeter-5.6.2\lib\ext) 3、打开Jmeter,选择 选项----Plugins Manag…...

【Swift 算法实战】判断数组中是否存在重复元素

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

Spock框架:让单元测试更优雅的高效武器

📖 前言:为什么选择Spock? 在软件开发领域,单元测试是保证代码质量的基石。但传统的JUnit/TestNG测试框架在面对复杂测试场景时,往往会显得力不从心。Spock框架作为新一代测试框架的佼佼者,以其独特的BDD&…...

【前端基础】Day 4 CSS盒子模型

目录 1. 盒子模型 1.1 盒子模型布局 1.2 盒子模型组成 1.3 边框 1.4 表格细线边框 1.5 边框会影响盒子实际大小 1.6 内边距 1.7 外边距 1.8 外边距合并 1.9 清除内外边距 2. PS基本操作 3. 综合案例 3.1 案例1 3.2 案例2-快报模块 4. 圆角边框 5. 盒子阴影 6…...

补题蓝桥杯14届JavaB组第4题

算法:动态规划 需要两个一维数组来进行dp 一个用来记录到当前位置的最短时间,另一个用来记录到达当前位置传送门的最短时间 到达传送门的时间需要进行判断,如果上一次传送到达传送门,需要判断上一次传送到这的位置在当前传送门…...

kotlin的函数标准库使用

摘要说明 函数标准库常用的有: 1、apply: apply函数作为一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以方便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者 使用介绍&#x…...

Visual Studio Code 跨平台安装与配置指南(附官方下载链接)

一、软件定位与核心功能 Visual Studio Code(简称VS Code)是微软开发的开源跨平台代码编辑器,支持超过50种编程语言的智能补全、调试和版本控制功能。2025版本新增AI辅助编程模块,可自动生成单元测试代码和API文档注释。 二、下载…...

STM32学习【4】ARM汇编(够用)

目录 ARM汇编语言基础写在前面 1. ARM汇编的分类2. 关于指令集指令集切换Thumb2指令集统一汇编语言(UAL)常用汇编指令 3. 汇编格式立即数与伪指令 4. 操作内存的汇编指令LDR:从内存加载数据到CPU寄存器STR:将数据从寄存器存储到内…...

Linux驱动开发实战(一):LED控制驱动详解

Linux驱动开发野火实战(一):LED控制驱动详解 文章目录 Linux驱动开发野火实战(一):LED控制驱动详解引言一、基础知识1.1 什么是字符设备驱动1.2 重要的数据结构read 函数write 函数open 函数release 函数 二…...

windows下安装pyenv+virtualenv+virtualenvwrapper

1、下载pyenv 进入git官网,打包下载zip到本地 2、解压到安装目录 解压下载好的pyenv-win-master.zip到自己的安装目录,如D:\Program Files 3、配置环境变量 右击桌面 此电脑 --> 属性 --> 高端系统设置 --> 环境变量 --> 新建系统变量…...

Cherno 游戏引擎笔记(91~111)

好久不见! 个人库的地址:(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno),可以看到我及时更新的结果。 -------------------------------Saving & Loading scene-----------------------…...

0x02 js、Vue、Ajax

文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript:是一门跨平台、面向对象的脚本语言,用来控制网页行为实现交互效果,由ECMAScript、BOM、DOM…...

Windows 11【1001问】删除Win11左下角小组件的6种方法

在Windows 11中,左下角的小组件功能虽然提供了天气、新闻等实用信息,但对于一些用户来说可能显得多余或干扰视线。因此,微软提供了多种方式让用户能够自定义是否显示这些小组件。以下是 6 种常见的设置方法来隐藏或关闭Windows 11左下角的小组…...

【动手学深度学习】基于Python动手实现线性神经网络

深度学习入门:基于Python动手实现线性回归 1,走进深度学习2,配置说明3,线性神经网络4,线性回归从0开始实现4.1,导入相关库4.2,生成数据4.3,读取数据集4.4,初始化模型参数…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...