网络简史-基于图论的网络
先看一幅图:

如图,我们对类似 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…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
