网络简史-基于图论的网络
先看一幅图:
如图,我们对类似 crossbar,banyan tree,b-tree,10-tree,256-tree,甚至 dcn fat-tree 等 “规则拓扑” 网络相当熟悉。规则拓扑网络中,地址信息被编码到拓扑本身,寻址简单直接,像路由表,MMU 页表,也都是规则拓扑结构。
但这种规则拓扑结构只适合中心化控制,比如一个物理盒子里,一个自封闭的系统中。先看 crossbar,它提到它的缺点,可扩展性属其一,它的交叉点是接入节点平方增长的,但一般对一个端口固定的盒子而言,这倒不是问题,再如 banyan 网络就是用阻塞时间换空间,而空间换时间的方案就是规则树了,要么占地方,要么阻塞。
把这些规则结构拆开,每一级结构分离开几十上百公里后,“规则拓扑” 就不再适用,我们可从以太网交换机返祖到 csma/cd 看到这一点。
地理距离意味着控制信号传播时延与数据传输时延处在完全一致的量级上,控制方式必然趋向去中心化,而统计复用几乎是唯一选择。反之,一枚交换芯片不过几厘米,控制系统将在低于数据传输时延至少 3 个数量级完成路由与交换。
在分时系统统计复用的计算机方式和程控中心交换的电信方式融合过程中,中心控制和统计复用之争一直存在,这也是 ATM 出现并失败的理由。
盒子里约束大,拆开盒子把零件散落在外,约束降低,就不能有太多假设,编址寻址从控制拓扑解耦的结果只能是 “逐跳路由”,因为你若想分布式控制下下一跳乃至更远,复杂度将是指数级,由此可见,“best effort” 就是 “逐跳路由” 自然而然的推论。
举个例子,一个公司十个人挤在一间办公室(盒子)工作,彼此靠走动和喊就能协同,瞅一眼就能看出谁在忙而解决同步问题,倘若这十个人分布在全国十个省的分公司,就要更多自我决策而定期同步了,因为出差和电话开销太大,即使当代顶流互联网公司,也要不断面对经理 “我在另一个会上” 这种真实的谎言。
解耦后的网络就是一张拓扑和一套控制该拓扑的算法,便是 “基于图论的网络”,而图论则是一个完整的数学分支,整张网络的行为和特征用它建模。
图论有两大类问题,其一是 “最短路径问题”,考虑 cost,其二是 “最大流最小割问题”。考虑 gain,它们一起构建了高效率的现代数据传输网络的理论基石。
和 E_best = max(gain / cost) 一致,高尚的做法是关注 “最大流 / 最短路径”,而不是其中一个。然而网络性能的研究领域似乎一直要么只关注最短路径,要么只关注最大流。我们的 tcp/ip 路由从一开始就构建在 “最短路径优先” 之上,最多加和权重,而构建在此原则之上的 tcp/ip 协议族显然天生就与 “多路径最大流” 相违背。
先看最短路径,以 Dijkstra 算法为例,它是一个贪心策略,2010 年写过一篇 Dijkstra算法的思想,“一直最努力,结局就不会差”,这就是贪心的动机,如果有一些更加松弛的贪心策略,配合更加松弛的最大流算法,互联网传输效率将彻底改观。在早期那篇文章中,正确性归纳没说清,这里补充:
而最大流的简易理解如下图,来自 Frank R Giordano 的《数学建模》第八章:
结合最短路径和最大流,每条路径都可以是靠割掉瓶颈后的下一条 Dijkstra 路径,于是就形成了上图的多路径,结合 multipath 协议,就构成了一个高效的传输网络。
在互联网技术演化过程中,最开始基于最短路径构建网络是历史使然。
最短路径适用于单路径简单场景,可让网络设备如路由器快速做出决策,选择最佳路径来转发数据包。这种方法简化了路由表维护,使路由过程更加高效和快速,尤其是在早期网络或大规模网络中,寻找延迟最小,跳数最小的路径有效地降低了传输能耗,数据报文待在网络的每一单位时间都意味着能耗。
最大流算法虽然也是本着高效为出发点,但它是正向反馈,最大流算法不适合直接用于互联网的实时路由选择,特别在早期网络算力不足时,大规模网络实时收敛要消耗大量资源,大大增加路由实现的复杂性,而我们知道,best effort 首要关注廉价的可用性,而不是奢侈的精益求精。
但上面两段的分析对数据中心可是要反过来的。
数据中心善部 sdn,而中心控制的 sdn 配合丰富的算力,小规模且规则拓扑(fat tree,spine-leaf )网络最大流实时收敛可在 ms,甚至 100us 级完成。在数据中心,和广域网常相反,甚至时空因素都相反,此前我说数据中心网络更像主机主板组件的扩展,而不是广域网的微缩,大概就是从规则拓扑和中心控制的角度提出的,
呼应文初的历史观,在规则拓扑,中心控制,百米尺度的共同作用下,最大流路由为主,最短路径为辅助为最大流迭代路径,才能为 multipath 协议铺路背书吧。
ecmp 则永远都在单路径最短路径的阴影下。
浙江温州皮鞋湿,下雨进水不会胖。
相关文章:

网络简史-基于图论的网络
先看一幅图: 如图,我们对类似 crossbar,banyan tree,b-tree,10-tree,256-tree,甚至 dcn fat-tree 等 “规则拓扑” 网络相当熟悉。规则拓扑网络中,地址信息被编码到拓扑本身&#…...

Git工作机制,暂存区,本地库,远程库管理,常用命令
文章目录 工作机制1. 本地库,暂存区管理2. 分支管理3. 远程库管理 工作机制 工作区(写代码) ----> 暂存区(临时存储) ----> 本地库(历史版本) ----> 远程库(GitLab、GitHub…...

找不到steam_api64.dll,无法继续执行的原因及解决方法
电脑已经成为我们生活中不可或缺的一部分。然而,在使用电脑的过程中,我们经常会遇到一些常见的问题,其中之一就是找不到某个特定的动态链接库文件,比如steamapi64.dll。这个问题可能会导致某些应用程序无法正常运行,给…...
鸿蒙开发接口定制管理:【@ohos.enterpriseDeviceManager (企业设备管理)】
企业设备管理 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import enterpriseDeviceManager from ohos.enterpriseDeviceManager;enterpriseDeviceManager.activateAdmin activate…...
Pytorch实用教程:多分类任务中使用的交叉熵损失函数nn.CrossEntropyLoss
nn.CrossEntropyLoss 在 PyTorch 中是处理多分类问题的常用损失函数,它是两个函数 nn.LogSoftmax 和 nn.NLLLoss(Negative Log Likelihood Loss)的组合。使用这个损失函数可以直接从模型得到原始的输出分数(logits),而不需要单独对输出进行 Softmax 处理。下面详细介绍这…...

智慧冶金:TSINGSEE青犀AI+视频技术助力打造高效、安全的生产环境
一、建设背景 冶金行业因其特殊的生产环境和工艺要求,对安全生产、环境保护以及质量监控等方面有着极高的要求。因此,将视频智能监控技术引入冶金行业,不仅有助于提升生产效率,更能有效保障生产安全,降低事故风险。 …...

【ARM+Codesys案例】基于全志T3+Codesys软PLC的3C点胶边缘控制解决方案:整合了运动控制、视觉、激光测高等技术
视觉精密点胶控制方案 针对直交型机构的平面点涂胶应用,基于CODESYS软件平台开发的一站式PC型控制器解决方案,包含运动控制器硬件和点胶应用软件。方案整合了运动控制、视觉、激光测高等技术,高效精密的控制胶水点涂于产品表面或内部&#x…...
描述JSP的内置对象
JSP(JavaServer Pages)内置对象(也称为隐式对象或预定义对象)是JSP容器为每个页面提供的Java对象,开发者可以直接在JSP页面中使用它们,而无需显式声明。这些内置对象提供了对JSP页面运行环境信息的快速访问…...

MongoDB CRUD操作:可重试写入
MongoDB CRUD操作:可重试写入 文章目录 MongoDB CRUD操作:可重试写入使用的先决条件部署的限制支持的存储引擎3.6 MongoDB 驱动程序MongoDB 版本写确认 可重试写入和多文档事务启用可重试写入MongoDB驱动mongosh 可重试的写操作行为持续的网络错误故障切…...

Microsoft Outlook Lite 引入短信功能
随着科技的不断进步,我们的沟通方式也在不断演变。微软最新推出的 Outlook Lite 应用,不仅为我们提供了一个轻量级的电子邮件管理工具,现在更是带来了一项令人兴奋的新功能——短信服务。 Outlook Lite:轻量级,功能全…...
Redis的数据结构以及对应的使用场景
Redis支持的数据结构包括字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)等。这些数据结构在应用开发中扮演着重要的角色,它们各自适用于不同的使用场景和需求。以下是对Redis各数据结构的详细分析及它们的使用场景: 字符串(S…...
Vue中如何获取dom元素?
在Vue中,通常我们不直接操作DOM元素,因为Vue是一个声明式渲染的框架,它鼓励我们使用数据驱动视图的方式来更新UI。然而,在某些情况下,你可能需要直接访问DOM元素。在这种情况下,你可以使用Vue的ref属性和$r…...

前端最新面试题(基础模块HTML/CSS/JS篇)
目录 一、HTML、HTTP、WEB综合问题 1 前端需要注意哪些SEO 2 img的title和alt有什么区别 3 HTTP的几种请求方法用途 4 从浏览器地址栏输入url到显示页面的步骤 5 如何进行网站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍一下你对浏览器内核的理解? 9 html…...

matlab模拟太阳耀斑喷发
代码 function simulate_solar_flare% 参数设置gridSize 100; % 网格大小timeSteps 200; % 时间步数dt 0.1; % 时间步长% 初始化网格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 设置耀斑初始位置和强度flareCenter [0, 0]; % 耀斑中心位置flareRad…...

WebStorm 2024.1.1 Mac激活码 前端开发工具集成开发环境(IDE)
WebStorm 2024 Mac激活码 搜索Mac软件之家下载WebStorm 2024 Mac激活版 WebStorm 2024 功能介绍 WebStorm 2024是由JetBrains公司开发的一款专为前端开发设计的集成开发环境(IDE)。它提供了一整套功能,旨在提高Web开发者的工作效率和代码质…...
多项目的.net core解决方案(项目间引用)如何使用Docker部署
解决方案内部项目之间引用很正常,但我docker不是很熟,对一些基础命令含义还理解不深入,部署引用其他项目的项目总不成功。搜到了一篇非常适合初学者,从dockerfile命令讲解,到解决引用其他项目时如何docker部署的文章。…...

使用raise语句抛出异常
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在函数或方法中抛出异常。rai…...
vue组件中data为什么必须是一个函数?
在 Vue 中,组件的 data 必须是一个函数,而不是一个对象,这是为了保证每个组件实例都可以维护一份被返回对象的独立的拷贝。如果 data 是一个对象,那么所有的组件实例将共享同一个引用,导致一个组件实例的数据变化会影响…...

10-Django项目--Ajax请求
目录 Ajax请求 简单示范 html 数据添加 py文件 html文件 demo_list.html Ajax_data.py 图例 Ajax请求 简单示范 html <input type"button" id"button-one" class"btn btn-success" value"点我"> <script>/…...

二进制安装Prometheus
从 https://prometheus.io/download/ 下载相应版本,安装到服务器上官网提供的是二进制版,解压就 能用,不需要编译 1、下载软件 [rootlocalhost ~]# wget -c https://github.com/prometheus/prometheus/releases/download/v2.45.5/prometheus…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...