从 TCP/IP 演进看按序流与性能

前面谈到互联网从早期对等通信模型转入后来内容分发模型后的一系列问题,诸如拥塞,安全等,本文谈谈关于性能的更普遍方面。

TCP/IP 祖师爷 1974 年的开山论文 A Protocol for Packet Network Intercommunication 以及随后 RFC675,标志着 TCP/IP 的正式诞生,在此之前还有一个里程碑事件,即 RFC33 NCP 标准化。
RFC33 解决了分布式通信问题,而 RFC675 解决了异构联网问题,基本奠定了后来互联网的格调,三岁看老,很多问题都要从幼年寻找答案并启发方案。

引论文 “CONNECTIONS AND ASSOCIATIONS” 小节初段:

Much of the thinking about process-to-process communication in paket switched networks has been influenced by the ubiquitous telephone system. The HOST-HOST protocol for the ARPANET deals explicitly with the opening and closing of simplex connections between processes [9],[10]. Evidence has been presented that message-based “connectionfree” protocols can be constructed [12], and this leads us to carefully examine the notion of a connection.

在这种背景下,虚电路是自然的,NCP 甚至强制约束了 256 个 “链路” 的用法(链路和 RFNM 机制的目的是防止单个用户使 IMP 或主机过载,详见 RFC33),另一方面,1970 年代 TCPIP 沙漏模型尚未形成,端到端观点则刚刚获得认可。IMP 只是一台普通主机,它的主要职责是转发它所携带主机的数据到目的地,它必须能清晰对应每一对源和目标,这一系列约束让 “连接” 和 “流” 自然对应。

由于当时的资源限制和以对等通信(类似电话)为主的网络使用方式,SPF 算法几乎是唯一路由方案,换句话说,当时的分布式网络路径是 Active-Standby 模式,而不是 Active-Active 模式。对等通信模型下的流量分布非常对称且均匀(接近正态分布),最短路径并不会出现后来内容分发模型下的拥塞问题(参考高速公路导航导致的拥堵)。只要路由没有重收敛,早期单核主机路由器基于目标的逐跳转发非常轻松且自然就能完成,这进一步加深了 “同流同路径”(否则,除了唯一的最短路径,没有其它路径) 的观念。

从早期数据包头地址格式以及后期 IP 路由对流的甄别方式可以看出这里面发生事件的前后关联。
RFC33(NCP) 形成了 40bit 地址结构,非常类似电话号码:

          24                    8          8+----------------------+-----------+----------+|  User Number         |           |          |+----------------------+-----------+----------+|          |___AEN||___HOST numberFigure 3 A typical socket

RFC675(TCP) 继承了它(同时继承了 Listen,Accept 原语,但双工语义改变了,不再需要创建两个方向的连接,这反而更像 “打电话” 了,这属于端侧行为,很重要但与本文关系不大,放在括号里),随后 RFC791/793 将该地址最终标准化为 IP 地址和端口号,TCP,UDP 端口号位于同一位置,这方便路由器找到它们却无需关注具体协议。

RFC791 规范的 IP 协议最终确定了网络的行为,网络节点尽力而为无状态转发,数据包携带所有地址,路由器不保存任何关于具体数据包所属数据流的状态信息。这种转发结构具有非常大的扩展弹性,转发方式取决于路由算法,最初只有 Unicast,随后 Anycast,Multicast 非常容易加入。但由于霸王协议 TCP 的强制顺序流约束以及它事实上确实很容易被捕捉到的流特征(五元组非常容易被路由器获取),它竟然自己僵化了。

当路由器以及主机发展到非常善于并行处理时,TCP 无法享受这种高效率,反而拖慢了系统,同样的阻滞因素也限制了多路径,ECMP 路由,负载均衡,数据中心传输等技术的发展。

如果在路由器交换机保留流的语义,AQM,包分类等与拥塞控制有关的算法就不得不加权关于流的一切特征,包括不限于流的长短(大象流,突发流),流目标聚合,流源聚合,虽然路由器仍然不保存状态,但这些与包归属相关的流式计算却持续消耗计算资源(常见的对每一个包做 hash 分类,然后调度)。

省是省不了的,问题是资源消耗在哪里以及拿什么代价来换。按照沙漏模型和端到端的原则,网络不应该对数据包提供不需要的功能和触动,这体现在每个数据包都要经过复杂的包分类方面。

若按照每包分发而不是每流分发,拥塞也同时分发掉了,突发拥塞导致的排队时延抖动被次优路径稍微久但稳定的传输时延平滑掉了。去掉了顺序流约束,多路径,packet spray,概率路由便和 SPF-Unicast 一样自然而然。当我们放宽 SPF 中 Shortest 的定义,只要接近目的地的下一跳,都有机会传输数据包,传输流量的大小取决于路径的长度,当传输协议去除了顺序流约束,这些松散路由造成的乱序全由端主机负责。

交易达成了,路由器上复杂的包分类,流映射造成的计算资源消耗自然而然转移到端主机了。这笔交易是划算的,因为总有端主机不需要进行这些计算,同时拥塞的消除也提升了体验。

还是那个意思,我不打算用一种富含技巧性的方法对网络进行思想重构,而是重新评估,因为背景已经变化了。回到 1970 年代,源自打电话的连接流语义,源自互联异构网络(互联网宗旨之一就是利用已有网络,而已有网络总是异构的)的刚需,人们操心的重心自然不同。这让我回想起 1990 年代关于经理们用鼠标线联网的传说。

只有一条鼠标线,一条串口线时,没人会想到排队调度和拥塞控制,更不会有人设计一个专门进行排序重组的保序软件层,人们甚至会采用丑陋的硬编码,一个字符一个字符停等,只求一个完整的 “hello” 通过鼠标线显示在对方屏幕上这伟大时刻早点到来,等到这个过程变得司空见惯时,等到能买得起双绞线,光纤,交换机的时候,软件早已僵化,模块间千丝万缕的早期关联使其牵一发而动全身。这大概就是协议演化的过程,RFC817 也提到,程序员很难一开始就设计一个完备的适应未来的协议,任何协议都局限在当前它出现的背景之下。

关于 TCP/IP 底层架构的演进到本文为止告一段落,下面准备扯扯伯纳斯李,HTTP 登场,互联网为此而改变。

大卫 D 克拉克 曾经评论 “性能需要不完全的功能来换”,能理解这句话的人并不多,人们更加擅长在黑灯瞎火的半夜排查 TCP 吞吐非常差的这类问题,最终定位为 “路由器并行处理了数据包导致了大量乱序触发了大量快速重传”,然后自我感觉良好。人们厚今薄古,总认为 RFC33,675,817 这种过去的东西非常空洞,人们天然认为只有当代的科学技术才是第一生产力,过去的终成历史,属于没意义的文科范畴,持这些观点的人,有一个是一个,都是 SB。

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

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

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

相关文章

动态规划一> 让字符串成为回文串的最少插入次数

题目: 解析: 状态表示状态转移方程: 初始化填表顺序返回值: 代码: public int minInsertions(String ss) {char[] s ss.toCharArray();int n s.length; int[][] dp new int[n][n]; for(int i n-1; i > 0;…

2025.1.21——八、[HarekazeCTF2019]Avatar Uploader 2(未完成) 代码审计|文件上传

题目来源:buuctf [HarekazeCTF2019]Avatar Uploader 2 一、打开靶机,整理信息 跟Avatar Uploader 1 题目长得一样,先上传相同文件看看情况,另外这道题还有源码,可以看看 二、解题思路 step 1:上传同类…

Elementor Pro 3.27 汉化版 2100套模板 安装教程 wordpress主题中文编辑器插件免费下载

插件下载地址 https://a5.org.cn/a5ziyuan/732506.html 转载请注明出处! Elementor Pro 是流行的 Elementor 的付费扩展 WordPress 页面构建器插件. 它为免费的 Elementor 插件添加了许多附加功能和增强功能,使其成为创建美丽的更强大的工具 WordPress 网站。 如果…

深入理解动态规划(dp)--(提前要对dfs有了解)

前言:对于动态规划:该算法思维是在dfs基础上演化发展来的,所以我不想讲的是看到一个题怎样直接用动态规划来解决,而是说先用dfs搜索,一步步优化,这个过程叫做动态规划。(该文章教你怎样一步步的…

0基础跟德姆(dom)一起学AI 自然语言处理19-输出部分实现

1 输出部分介绍 输出部分包含: 线性层softmax层 2 线性层的作用 通过对上一步的线性变化得到指定维度的输出, 也就是转换维度的作用. 3 softmax层的作用 使最后一维的向量中的数字缩放到0-1的概率值域内, 并满足他们的和为1. 3.1 线性层和softmax层的代码分析 # 解码器类…

uart iic spi三种总线的用法

1、uart串口通信 这种连接方式抗干扰能力弱,旁边有干扰源就会对收发的电平数据造成干扰,进而导致数据失真 这种连接方式一般适用于一块板子上面的两个芯片之间进行数据传输 ,属于异步全双工模式。 1.空闲位:当不进行数据收发时&am…

类与对象(上)

面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 类的…

三元组抽取在实际应用中如何处理语义模糊性?

在实际应用中,三元组抽取面临语义模糊性的问题,这主要体现在输入文本的非规范描述、复杂句式以及多义性等方面。为了有效处理这种模糊性,研究者们提出了多种方法和技术,以下是一些关键策略: 基于深度学习的方法 深度学…

【线性代数】基础版本的高斯消元法

[精确算法] 高斯消元法求线性方程组 线性方程组 考虑线性方程组, 已知 A ∈ R n , n , b ∈ R n A\in \mathbb{R}^{n,n},b\in \mathbb{R}^n A∈Rn,n,b∈Rn, 求未知 x ∈ R n x\in \mathbb{R}^n x∈Rn A 1 , 1 x 1 A 1 , 2 x 2 ⋯ A 1 , n x n b 1…

智慧脚下生根,智能井盖监测终端引领城市安全新革命

在繁忙的都市生活中,我们往往只关注地面的繁华与喧嚣,却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖,实则承担着排水、通讯、电力等重要功能,是城市安全运转的重要一环。然而,传统的井盖管理面临着…

如何快速开发LabVIEW项目,成为LabVIEW开发的高手

发现了一篇多年前写的文章,转发到这里 如何快速开发LabVIEW项目,成为LabVIEW开发的高手。 如果您手里有LabVIEW项目,领导催的又很紧,该怎么办? 如果您公司规模小,就想把LabVIEW项目快速搞定,有什…

Zemax 非序列模式下的颜色检测器和颜色混合

在 Zemax 的非序列模式中,探测器用于捕获系统中射线的信息。可以使用各种类型的探测器来捕获光学系统性能的不同方面,例如矩形探测器,它存储撞击它的 NSC 源射线的能量数据。 另一种经常使用的探测器类型是 Detector Color,它是一…

Redis(5,jedis和spring)

在前面的学习中,只是学习了各种redis的操作,都是在redis命令行客户端操作的,手动执行的,更多的时候就是使用redis的api(),进一步操作redis程序。 在java中实现的redis客户端有很多,…

AAAI2024论文解读|HGPROMPT Bridging Homogeneous and Heterogeneous Graphs

论文标题 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning 跨同构异构图的小样本提示学习 论文链接 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning论文下载 论文作者 Xingtong Yu, Yuan…

闲鱼自动抓取/筛选/发送系统

可监控闲鱼最新发布商品,发送钉钉 1,精准关键词匹配:输入核心关键词,精准定位与之高度契合的信息,确保搜索结果直击要点,满足您对特定内容的急切需求。 2,标题关键词智能筛选:不仅着…

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码 前言一、通义灵码介绍1.1 通义灵码简介1.2 主要功能1.3 版本选择1.4 支持环境 二、Visual Studio Code介绍1.1 VS Code简介1.2 主要特点 三、安装VsCode3.1下载VsCode3.2.安装VsCode3.3 打开VsCod…

【Unity3D】Unity混淆工具Obfuscator使用

目录 一、导入工具 二、各种混淆形式介绍 2.1 程序集混淆 2.2 命名空间混淆 2.3 类混淆 2.4 函数混淆 2.5 参数混淆 2.6 字段混淆 2.7 属性混淆 2.8 事件混淆 三、安全混淆 四、兼容性处理 4.1 动画方法兼容 4.2 GUI方法兼容 4.3 协程方法兼容 五、选项 5.1 调…

2024年终总结:技术成长与突破之路

文章目录 前言一、技术成长:菜鸟成长之路1. 学习与实践的结合2. 技术分享与社区交流 二、生活与事业的平衡:技术之外的思考1. 时间管理与效率提升2. 技术对生活的积极影响 三、突破与展望:未来之路1. 技术领域的突破2. 未来规划与目标 四、结…

计算机网络-运输层

重点内容: 运输层 是整个网络体系结构中的关键层次之一。一定要弄清以下一些重要概念: (1) 运输层为相互通信的应用进程提供逻辑通信。 (2) 端口和套接字的意义。 (3) 无连接的 UDP 的特点。 (4) 面向连接的 TCP 的特点。 (5) 在不可靠的网…

【Elasticsearch】inference ingest pipeline

Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline,你可以执行各种数据转换和富化操作,包括使用机器学习模型进行推理(inference)。这在处理词嵌入、情感分析、图像识别等场景…