TCP 协议的低效实现

news2024/9/20 22:47:47

包括 Linux kernel 在内的各种 TCP 实现均使用类似 skb 的对象管理一个个 packet,使 TCP 失去了 “流” 特征。应用通过 syscall 每写入一批数据,协议栈都可能生成一个 skb:
在这里插入图片描述

仅管理这些 skb 就是一笔大开销。除了 skb 数据结构本身的 crud 操作外,在处理 SACK 时还要涉及 split/merge,非常麻烦。为了提高效率,rtx 从链表组织成了红黑树,同时,为了记录 RACK,还有一个 时间序链表,这些链表本身都没有错,问题在于在这个框架中,skb 为主,skb->data 被挟裹在 skb 之中,只是其一个属性,本末倒置。

举一个例子,如果 SACK 携带了 12345~22345 这个 block,如何找到它?显然需要操作 skb 队列,看一下 tcp_sacktag_write_queue 这个函数就知道多复杂了。带宽越大,rtx queue 越大,问题越大越复杂。

这件事的局面如下图所示:
在这里插入图片描述

其实把 skb 和 data 的关系颠倒一下,将 skb 置于更下层,只负责发送之用。以 data 为主,置于一段平坦的内存空间(一般表示为 ringbuffer),用 “页表项” 管理每一个固定的小段(比如 4KB),每段都可以指向一个或几个 skb,而每一个 skb 则反过来指示自己的 data 范围,这就非常简单了。

仍然以 SACK block:12345~22345 为例,连续寻址直接定位到 12345 - una~22345 - una,删除这段区间小段所指向的 skb,对应 skb 收缩或被回收。

这件事的局面如下图所示:
在这里插入图片描述

就像操作系统管理 page 使用的页表一样,内存就是内存,永远在那里,而 page 对象描述其属性,TCP 数据流的平坦空间也用一个 “页表” 管理起来,连续的流永远在那里,而 skb 对象描述其属性。

但这也只是说说,Linux TCP 的实现已经摆在那里 20 年了,作为通用系统不可能改变。如果非要实现高效传输,只能指望专门的协议栈实现。

拉肚子刷头条看到一幅图,觉得不错:
在这里插入图片描述

在下班的路上写下一句感慨:这就是现如今各种在高速网络上运行的传输协议自找的麻烦,明明修座立交就能搞定的事,偏偏都在秀复杂的算法。

我本以为 seastar tcp 会好一些,可是依然很难用加减乘除来进行 crud。

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

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

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

相关文章

Python小姿势 - import requests

import requests Python中使用requests模块发送POST请求 在使用Python进行开发时,经常会遇到需要向某个网址发送POST请求的情况。这时候就需要使用到requests模块了。 requests模块是Python的一个标准模块,可以直接使用pip安装。 安装完成后,…

Java每日一练(20230425)

目录 1. 乘积最大子数组 🌟🌟 2. 插入区间 🌟🌟 3. 删除有序数组中的重复项 II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏…

CesiumForUnreal之3DTileset点选拾取属性与单体高亮

文章目录 1.实现目标2.实现过程2.1 3DTiles数据准备2.2 属性拾取2.3 单体高亮3.参考资料1.实现目标 在UE5中使用CesiumForUnreal插件加载本地的3dTiles建筑白模数据,实现点击拾取3DTileset单体要素的属性数据,并对高亮单体进行展示,GIF动图如下: 2.实现过程 总体的实现过程…

模型剪枝网络 Learning Efficient Network throung Network Slimming 简述

1. 概述 训练得到的特征图,并不是所有特征图都重要,另一方面,希望对权重执行策略,体现出权重之间的差异性,最终目的就是获得不同特征图中的channel sacling factors,表征了不同特征图的重要性 2. BN 采…

老码农眼中的大模型(LLM)

即便全力奔跑,也不一定能跟上时代的步伐。但如果失去了学习的动力,很可能会被时代淘汰。而且,当时代淘汰我们的时候,往往不会有任何预警。基于大模型的 ChatGPT 给我们带来了极大的震撼,那么什么是大模型呢&#xff1f…

【网络进阶】五种IO网络模型(一)

文章目录 1. 阻塞IO2. 非阻塞IO 1. 阻塞IO 在Linux中,默认情况下,所有的套接字(socket)都是阻塞的。典型的读取操作流程如下: 当用户进程调用read系统调用时,内核开始执行I/O的第一个阶段,即…

智慧医院智能化系统设计与能耗管理产品选型

摘要:结合某知名大型三甲综合医院项目的智能化系统设计,提出智慧医院智能化系统的技术解决方案,阐述智慧医院智能化系统方案的总体架构、建设目标、设计宗旨、典型应用及各智能化子系统的设计方案。 关键词:智慧医院;智…

mybatis3源码篇(2)——执行流程

mybatis 版本:v3.3.0 文章目录 执行流程MapperProxyFactoryMapperProxyMapperMethodexecuteconvertArgsToSqlCommandParamResultHandler SqlSessionExecutor(执行器)StatementHandler(声明处理器)ParameterHandler&…

【设计模式】我对设计模式的C语言解读(下)

书接上回 由于内容太多,编辑器太卡了,所以分P了 上P在这里 目录 书接上回备忘录模式观察者模式 备忘录模式 备忘录模式的介绍: https://refactoringguru.cn/design-patterns/memento 备忘录模式的C实现: https://refactoringguru.cn/design-patterns/m…

【数据挖掘与商务智能决策】第十三章 数据降维之PCA 主成分分析

13.1.2 PCA主成分分析代码实现 1.二维空间降维Python代码实现 import numpy as np X np.array([[1, 1], [2, 2], [3, 3]]) Xarray([[1, 1],[2, 2],[3, 3]])# 也可以通过pandas库来构造数据,效果一样 import pandas as pd X pd.DataFrame([[1, 1], [2, 2], [3, 3…

二分查找【数组】

⭐前言⭐ ※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入复习模式。若有错误,请多多指教。更多有趣的代码请移步Gitee 👍 点赞 ⭐ 收藏 📝留言 都是我创作的最大的动力! 题目 70…

接口测试用例设计思路

(我的公众号“墨石测试攻略”,关注获取软件测试相关知识及整套接口测试实战项目!) 接口测试用例的设计,从功能测试角度来说:首先需要分析接口文档。 现在很多公司都使用swagger来管理接口。swagger中可以…

fMRI时间序列振幅和相位对功能连接分析的影响

导读 目的:fMRI领域的一些研究使用瞬时相位(IP)表征(源自BOLD时间序列的解析表征)考察了脑区之间的同步性。本研究假设来自不同脑区的瞬时振幅(IA)表征可以为脑功能网络提供额外的信息。为此,本研究探索了静息态BOLD fMRI信号的这种表征,用于…

SpringBoot AnnotationFormatterFactory接口+自定义注解实现类型转换

参考资料 自定义AnnotationFormatterFactory实现注解方式类型转换Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则 目录 一. 前期准备1.1. 自定义转换标记注解1.2 入参form 二. 实现AnnotationFormatterFactory接口,构建格式化Factory2.1 code补全…

【7】一篇文章学习 Linux 中一些硬核的常用知识

目录 一、systemctl二、软链接三、日期(date 命令)四、Linux 的时区(1) 修改时区(2) ntp 五、IP 地址六、主机名七、域名解析八、配置 Linux 的固定 IP 地址(1) 在 VMwareWorkstation 中配置 IP 地址网关和网段(IP 地址的范围)(2)…

[陇剑杯 2021]之Misc篇(NSSCTF)刷题记录④

NSSCTF-Misc篇-[陇剑杯 2021] jwt:[陇剑杯 2021]jwt(问1)[陇剑杯 2021]jwt(问2)[陇剑杯 2021]jwt(问3)[陇剑杯 2021]jwt(问4)[陇剑杯 2021]jwt(问5&#xff0…

洗地性价比高的是哪款?性价比高的洗地机推荐

在如今人工智能随处可见的时代,洗地机已经成为了我们家庭清洁的得力助手,它用高效便捷的清洁方式,对于地面的灰尘或者地板之间的缝隙里的细小垃圾,能够快速清理,省时省力。然而,对于很多消费者来说&#xf…

一文带你学会如何写一份糟糕透顶的简历

我们每个人几乎都会面对找工作这件事,而找工作或者说求职首先就是要写一份简历。今天狗哥将以一个不同的视角带你写一份无与伦比,糟糕透顶的求职简历,说实话,其实几年前,我就是这么写的。 目录 1. 文件名 2. 基本信…

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

基于蛋白-配体复合物药效团药物设计(Pharmacophore)

基于蛋白-配体复合物药效团药物设计(Pharmacophore) step 1.蛋白-配体复合物准备 点击File-->Import Structures导入之前已经下载好的1IEP.pdb(Abl蛋白和Imatinib的晶体复合物) 蛋白准备:点击Tasks--->Protei…