元宇宙会成为 IPv6 的拐点吗?

‍‍

c7ded4802c3afa1c7f6b1ec5361e89b5.gif

作者 | 马超,王丽丽,王一凡       

责编 | 张红月

出品 | CSDN(ID:CSDNnews)

“如无必要,勿增实体”的奥卡姆剃刀原则,从IT人士的角度来看就是“只要能运行,就千万不要改”,而且各种“杀个程序员祭天”,“耽误工期遭索赔”等事件依旧层出不穷,IPv4只要还能勉强运行一天,那么IPv6就得晚上位一天。

2ba269ee44056115744c548848e9f67d.png

CSDN付费下载自东方IC

但问题是IPv4的资源真撑不住几天了,截至2021年2月26日,APNIC地址池仅剩余折合0.23个A的IPv4地址,最多再有两年就会盆干碗净一点不剩了。而且IPv6目前发展得也很不错,在基础软件中,Windows、Linux已经支持IPv6近15年了,目前已经非常稳定,Docker容器天然支持IPv6,K8s也已经稳定支持IPv6,但是再好的技术,没有改造动力也出不来,虽然IPv6替换口号喊得震天响,但实际的进展却总不如人意。

e7d51a97f7e3500d79cd8f3f26df92b8.png

IPv6的进度条

IPv6目前在各技术栈当中已经获得了广泛的支持,但是覆盖面还有待提升,比如在基础软硬件平台中的操作系统方面,目前仅有75%左右节点会默认安装IPv6协议栈,有65%左右支持DHCPv6,50%左右支持ND RNDSS;而在网络设备方面,虽然目前绝大多数的设备均已经支持IPv6协议,但在无线WIFI尤其是家庭无线WIFI等实际场景中,默认使用IPV6地址的无线路由器还不足20%;在应用侧对于IPv6的支持度会好一些,如Bing、雅虎、淘宝等众多网站或者APP均已经宣布永久支持IPv6,但由于实际使用IPv6的终端用户数量不足,因此目前的互联网还几乎是IPv4的世界。

但最近元宇宙的突然兴起,让情况突然发生了变化,科技龙头脸书改名Meta,以坚定自身的转型决心,罗永浩老师也宣传在还完债之后要从直播界回归到科技界做元宇宙的创业项目。当然这里不想讨论关于元宇宙的话题,但是元宇宙肯定无从构建在一个只有50亿个地址池的IPv4空间上。

8c5f2f83e4b67c7ba2ec8ae7c30c79b6.png

资源池大就完事了

IPv6全球路由地址有230亿亿(261)个,号称可以给地球上每粒沙子分配一个IP,60亿人口和500亿物联网终端,在IPv6协议看来根本不是什么问题,彻底解除由于IP资源池大小限制网络规模的拓展,这才能和元宇宙的宏大愿景相对应。

f55d34a6478d9e98ff636c06d326f0d5.png

而且IPV6还能带来更好的上网体验,如果有读者经常使用手机银行等金融APP可能会发现这样一个现象,那就是当WIFI与数据连接发生切换时,手机银行的登陆状态往往也会改变,但移动IPv6协议改变了这种情况,IPv6的移动终端在改变地理位置时,即使分配到的IPv6地址发生变化,原有的连接也不会被Terminate。

IPv6报头还新定义了流标签字段,路由器可根据源宿地址+流标签唯一标识一条端到端的IP业务流。实现有序转发,这对于QoE要求高的短视频等赛道来说可以大幅提升用户的使用体验。

5296f70c14e3e8d601fbe1beb72498fb.png

别看报文长,但他效率高

IPv6报文头中目的IP等字段要比IPV6要长,但却是定长的,网络设备的算力载体本质上也是CPU处理器,这就使它也逃不开CPU体系架构的制约,在现代的指令流水线体系中,定长字段就是比变长字段更具效率优势。

我们知道CPU的每个动作都需要用晶体震荡而触发,想执行一条指令需要取指、译码、取操作数、执行以及取操作结果等若干步骤,而每个步骤都需要一次晶体震荡才能推进,因此在流水线技术出现之前执行一条指令至少需要5到6次晶体震荡周期才能完成。

d8839ab4d7ca2db4219985b872dabb9f.png

由于取指、译码这些模块其实在芯片内部都是独立的,那么只要将多条指令的不同步骤放在同一时刻执行,比如指令1取指,指令2译码,指令3取操作数等等,就可以大幅提高CPU执行效率:

b482ac4093444487cd86ab7c17d7867c.png

但是指令流水线也带来了分支预测的问题,一旦一条提令不是后续执行所在的if分支,但处理器却错误的把它放在了流水上,那么这就会造成处理器的空转,带来极强的惩罚效应。

因此这也让那些不涉及if-else分支定长报文解析可以在现代CPU架构下获得更高的效率,因为非定长的报文肯定要做if判断来决定报文的解析方式,而一旦分支预测失败,那就会迎接流水线执行效率下降的惩罚,比如指令5本是不应该执行的分支代码,如果在T7也就是指令3取结果时才发现这一预测错误,那么还很可能会拖累指令6、指令7也全部陷入预测失效。那么,下一时刻T8指令8才刚刚开始译码,这会造成整个流水线的效率大幅下降。基于ARM这种RISC架构的处理器其最大的优势在于可以把指令解码器做到极致,从而平衡功耗与性能之间的关系。

所以我们不能认为IPV6的IP地址长度更长,转发效率就会低,真实的情况恰恰相反,IPV6要比V4路由器转发效率高得多!

567ebd4988ab2a111612ebe53f23e65d.png

神之一笔—路由聚合策略

在Facebook要All In元宇宙改名Meta之前不久,其实他们刚刚遇到了由于广域路由协议BGP造成的全球范围宕机问题。在路由设计方面,IPv6也比IPv4要领先很多,IPv6在设计之初就认为IP体系是聚合的(Aggregation),可自顶向下树状分配,路由器可集合路由条目,瘦身路由表。本质上讲路由算法就是要找到从地点A到地点B最短距离的旅行规划问题。而针对这个问题早就有经典算法dikjstra解决。为了说清这个IPv6路由聚合(Aggregation)的好处,下面我们先把dikjstra旅行算法做一下介绍。

旅行规划的题目可以归结为以下说法,用户有一张自驾旅游路线图显示了城市及公路的数量,高速公路长度、过路费。现在要通过一个算法,找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

实际在网络路由规划中,城市代表着网络上的节点,调整公路代表网络上的通道,公路长度一般代表网络通道的传输性能,过路费用的数据在实际工程中可能代表着线路质量等参数。

示例代码中的变量说明:N、M、S、D分别代表城市个数、调整公路条数、旅行者起始城市编号、旅行者目的地城市编号,其中N(2≤N≤500)是城市的个数,三维数组g存储高速公路的信息,记录起始城市、终点城市、高速公路长度、收费额,如g[i][j][1]代表编号为i的城市到编号为j的城市之间的距离,g[i][j][2]代表编号为i的城市到编号为j的城市过路的费用,哈希表Path记录由旅行者的起始城市S到编号为i的城市之间的最短路径信息,如起始城市S到i之间经过j、k最短,那么Path[i]的值应该是[j,k],注意j、k对于顺序敏感。Dist数据记录旅行者起始市S到编号为i的城市之间的距离数值,cost数据记录旅行者起始市S到编号为i的城市之间的花费,到Known数组记录城市是否被算法遍历确认,

比如经典路由协议OSPF (Open Shortest Path First)中的SPF最短路径优先其实就非常清楚的表达出了dijkstra算法的精髓,实际上这个算法就是不断找到离起点S最近的未确认城市A,并尝试通过A中转能否优化到S的距离,如下图所示:

e7cd2058b758f724f1cebb8cc6592963.png

注:绿色代表起点城市,蓝色代表known状态已经迭代的城市,红色代表unknown状态的城市

dijkstra算法首先要做的就是找到所有未知节点中与起始地S最近的城市A,因为经城市A现在离S最近,那么经城市A中转,就有可能会缩短S到其它目的地城市D的距离。比如上图当中S到A的距离是2,截止目前是S到其它城市中距离最短的一条路径,那么经A跳转则有可能获得一个比从S直接到D更短的路径。在上图例中在使用A行过一轮迭代以后,S到D的距离可以由直接访问的距离6,优化为经A中转的距离5。在完成一轮优化后A节点会被记录为known的状态,接下来会用非known状态的节点中找到离起始点最近的那个做下一轮迭代。直到所有城市全部状态全部都是known为止。

以go语言为例,代码如下:

package mainimport ("fmt""strconv"
)const N int = 4
const INF int = 501var g [N][N][2]int
var dis [N + 1]int
var pay [N]intvar known [N]bool
var n, m, s, d, i, j, t1, t2, v int
var path map[int][]intfunc findMinDistance() {disMin := INFfor i := 0; i < n; i++ {if !known[i] && dis[i] < disMin {v = idisMin = dis[i]}}
}
func dijkstra() {for k := 1; k < n; k++ {findMinDistance() //先把状态为unknown的节点中到起点距离最短的点//接下来按照之前介绍的算法使用距离最短的节点对其它节点进行优化known[v] = truefor i = 0; i < n; i++ {if !known[i] && g[v][i][0] < INF {if dis[v]+g[v][i][0] < dis[i] {dis[i] = dis[v] + g[v][i][0]pay[i] = pay[v] + g[v][i][1]footPrint := path[v]path[i] = append(footPrint, v)} else if !known[i] && dis[v]+g[v][i][0] == dis[i] && pay[v]+g[v][i][1] < pay[i] {pay[i] = pay[v] + g[v][i][1]}}}}
}func main() {//以下是初始化城市个数、高速公路条数、起始城市、终点城市的工作path = make(map[int][]int)n = 4m = 5s = 0d = 3//初始化时先把path对应的路径置为空for i := 0; i < n; i++ {s1 := make([]int, 0)path[i] = s1}//初始化化时先把g数组对应的路径置为空for i = 0; i < n; i++ {for j := 0; j < n; j++ {g[i][j][0] = INFg[i][j][1] = INF}}keyInput := [...][6]int{{0, 1, 1, 20}, {1, 2, 3, 30}, {0, 3, 40, 10}, {0, 2, 10, 20}, {2, 3, 2, 20}, {1, 3, 6, 20}}//把道路信息写入g数组for ; m > 0; m-- {i = keyInput[m-1][0]j = keyInput[m-1][1]t1 = keyInput[m-1][2]t2 = keyInput[m-1][3]g[i][j][0] = t1g[j][i][0] = t1g[i][j][1] = t2g[j][i][1] = t2}//fmt.Println(g)//初始化known数组全部置为false状态for i = 0; i < N; i++ {known[i] = false}//初始化起点到编号为j节点的距离及花费信息for j = 0; j < n; j++ {dis[j] = g[s][j][0]pay[j] = g[s][j][1]}dis[s] = 0pay[s] = 0dis[n] = INFdijkstra() //调用dijkstra算法if dis[d] < INF {fmt.Println("Distance is " + strconv.Itoa(dis[d]) + ",The cost is " + strconv.Itoa(pay[d]))fmt.Println("Path is", path[d])}
}

用动图展示上述代码的运行过程如下:

a08b535d74d15e8be40fb67ab6ebc2b2.gif

fd9932ef1325e51898dc65c6bbef596d.png

复杂度O(n2)-来自于底层算法的制约

Dijkstra本质上是旅行者算法而不是网络路由算法。简单来讲dijkstra是为旅行者而设计的,站在旅行者的角度去考虑问题,但是从网络的实际使用情况上看,算法中的旅行者对应应用层的数据包,按照网络结构层的分工界限,应用层只负责提供目的IP地址,具体如何路由到目的IP,完全不是数据包的发送方需要关心的问题。

而站在网络设备的角度上看,假如上面例程中的城市A是上台路由器,那么它只需要掌握最优路径上下一个城市C的路由信息就可以了,掌握整个路径的全貌,费时费力不说,也没有必要。

更为关键的是Dijkstra算法的时间复杂度接近于O(n2),这也决定了IPv4那种散乱的IP分配方式在互联网终端越来越多的情况完全难以为继。我们刚刚也讲了Dijkstra每步迭代的之间是有前后顺序关系的,很难像搜索那样进行分布式并行计算改造。因此这也就使得路由协议必须要限制管理节点的个数,因为如果要给整个互联网上几十亿节点跑一遍Dijkstra算法,显然不是一种可行的计算方案。

因此这里IPv6把路由聚合的策略其实就是把网络进行分区的方案。也就是说网络数据包要先到达某一区,进区之后再通过内部网关协议IGP只处理区域内部的网络关系。IPv6在路由划分上的清晰策略也是它能够取代IPv6的最重要原因之一。

IPv6包头还有很多非常有意义的扩展,天然支持IPSEC,安全性得以提升,也增强了对组播和QoS的支持。不过目前我们对IPv6的应用还停留在互联网边界层面,对它的这些增强特性使用的还不多,但是元宇宙应该是IPv6普及之路上的一大契机,未来几何让我们拭目以待。

作者:马超,CSDN博客专家,阿里云MVP、华为云MVP,华为2020年技术社区开发者之星。

19e1419479858cd573c513a4c317eede.gif

cb2a4eb270c170f3ec0bad3913cb558e.png

往期推荐

对数据“投入”却没有“产出”?听听Gartner的分析

Github王炸功能!Copilot替代打工人编程?

边缘应用增长800%,听听Akamai边缘部署的经验

Mendix 发布全球低代码报告

a5fe8793cd5bcd9bb8c335f7addfee6c.gif

点分享

91d8a1b111e37fa0afbafe08e6d91f2e.gif

点收藏

187705faa8e9486b1599f652b816e232.gif

点点赞

7ea944752adcf12dff883d7f995859ec.gif

点在看

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

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

相关文章

php网站加广告位,HotNews Pro主题文章内容上面添加广告位

使用的HotNew Pro主题后&#xff0c;文章内容上面没有广告位&#xff0c;但是有时需要在那个位置添加广告&#xff0c;就使用了一款叫Smart Ads广告管理插件&#xff0c;这个插件可以在文章内容上面和下面添加广告&#xff0c;直到昨天我删掉了Smart Ads这款插件&#xff0c;因…

电脑编程教学_东莞沙田mastercam编程学习怎么收费

东莞沙田mastercam编程学习怎么收费深圳卓越培训中心UG综合班主要课程&#xff1a;1&#xff0c;软件介绍&#xff0c;界面熟悉 &#xff0c;快捷键&#xff0c;图层使用。2&#xff0c;草图使用&#xff0c;三维曲线绘制修改&#xff0c;草图线3D线互相转换。3&#xff0c;建模…

arduinowifi.send怎么获取响应_Vue3.0 响应式原理 (一)

前几天&#xff0c;回顾整理下关于vue2.0的响应式原理。温故而知新么&#xff0c;那么今天&#xff0c;整理了一下关于vue3.0的响应式原理&#xff0c;利用 JavaScript 来写的。本着尽可能的清晰易懂的原则&#xff0c;所以&#xff0c;可能会分几篇文章来发布。那现在开始上菜…

OceanBase首次阐述战略:继续坚持自研开放之路 开源300万行核心代码

简介&#xff1a; 在数据库OceanBase3.0峰会上&#xff0c;蚂蚁集团自主研发的分布式数据库OceanBase首次从技术、商业和生态三个维度对未来发展战略进行了系统性阐述。同时&#xff0c;OceanBase宣布正式开源&#xff0c;并成立OceanBase开源社区&#xff0c;社区官网同步上线…

amd核芯显卡控制面板自定义分辨率_主流显卡的一位猛将:蓝宝石Radeon RX 5500XT显卡首测...

一直以来主流级显卡总是处于一个较为尴尬的位置&#xff0c;原因是由于性能的限制&#xff0c;主流显卡经常位于不上不下的局面。上面和电竞级显卡有很大的性能差距&#xff0c;而往下又感受了日新月异的核显的压力。于是很多玩家宁可加钱购买电竞显卡也不愿意购买这些主流显卡…

阿里云研究员叔同:云原生是企业数字创新的最短路径

简介&#xff1a; 今天&#xff0c;数字化成为企业的核心竞争力&#xff0c;千行百业都在拥抱云计算&#xff0c;拥抱云原生。2020年我们认为是云原生的落地元年&#xff0c;那么2021年将是云原生加速推动企业数字创新的关键节点。 作者 | 叔同 来源 | 阿里技术公众号 今天&am…

计算 a+aa+aaa+aaaa+aaaaa+ 的和_海南A级景区,三亚市就有14个,你都去过吗

日前&#xff0c;海南省旅游资源规划开发质量评定委员会发布2020年第2号和2020年第3号公告&#xff0c;海南长影环球100奇幻乐园批准为国家4A级旅游景区&#xff0c;海南霸王岭国家森林公园和桂林洋国家热带农业公园批准为国家3A级旅游景区。具体公告如下&#xff1a;海南省旅游…

如何成为云原生时代的卓越架构师

简介&#xff1a; “软件开发需要面对本质困难和附属困难。云原生、DevOps大幅降低了附属困难&#xff0c;使得架构师可以全力聚焦于业务复杂性&#xff0c;而DDD恰是管理业务复杂性的有效方法。” 本文作者&#xff1a;张刚&#xff0c;阿里云云效资深技术专家&#xff0c;AL…

创业 4 年获近 7000 万美元融资,53 岁老程序员 all in 开源

作者 | 伍杏玲 今年 6 月&#xff0c;《人均估值 5000 万 RMB&#xff0c;53 岁程序员能做到的&#xff0c;你也能&#xff01;》一文刷爆技术人的朋友圈&#xff1a;2017 年成立的涛思数据&#xff0c;四年获近 7000 万美元融资&#xff0c;目前这个 40 人团队估值超 3 亿美元…

.net pdf转图片_PDF转图片怎么做?PDF一键转图片!

在日常工作中&#xff0c;我们经常需要把文件资料传给其他人看。但如果文档是PDF格式的话&#xff0c;很可能他人的设备因缺少相应的阅读工具而无法打开。这时&#xff0c;最好的方法就是将PDF文件转换成图片&#xff01;这样不管是在电脑还是在一些移动设备上都可以查看。接下…

为什么你应该关心领域模型?

简介&#xff1a; 领域模型是DDD的核心&#xff0c;更是业务的深入认知 作者简介&#xff1a;张刚&#xff0c;软件工程博士&#xff0c;阿里云云效资深技术专家&#xff0c;ALPD方法学核心成员。 引言 领域模型是重要的概念。但是&#xff0c;真正了解并能熟练运用它的人并不…

三包围结构的字是什么样的_一年级语文重点(字、字母、字词、词语、句子)知识点汇总!...

一年级语文重点汇总一、字母A B C D E F G H I J K L M N O P Q R S T U V W X Y Za b c d e f g h i j k l m n o p q r s t u v w x y z二、 字1、组词。(形近字和同音字)么(什么) 无(无法) 高(高兴)公(公共) 元(一元…

Java编程技巧之样板代码

简介&#xff1a; 在日常编码的过程中&#xff0c;可以总结出很多“样板代码”&#xff0c;就像”活字印刷术中的“活字”一样。当我们编写新的代码时&#xff0c;需要用到这些“活字”&#xff0c;就把“样板代码”拷贝过来&#xff0c;修改替换一下就可以了&#xff0c;写起代…

CPU 被挖矿,Redis 竟是内鬼!

作者 | 轩辕之风O来源 | 编程技术宇宙却说这一日&#xff0c;Redis正如往常一般工作&#xff0c;不久便收到了一条SAVE命令。虽说这Redis常被用来当做缓存&#xff0c;数据只存在于内存中&#xff0c;却也能通过SAVE命令将内存中的数据保存到磁盘文件中以便持久化存储。只见Red…

vos3000落地网关对接教学_跨国合作:Serverless Components 在腾讯云的落地和实践

导语 | Serverless Components 是 Serverless Framework 推出的最新解决⽅案&#xff0c;具有基础设施编排能⼒&#xff0c;开发者通过使⽤ Serverless Components&#xff0c;可以灵活构建、组合和部署 Serverless 应⽤。本文是对腾讯云云函数团队前端负责人蔡卫峰在云社区沙龙…

Hologres揭秘:深度解析高效率分布式查询引擎

简介&#xff1a; 从阿里集团诞生到云上商业化&#xff0c;随着业务的发展和技术的演进&#xff0c;Hologres也在持续不断优化核心技术竞争力&#xff0c;为了让大家更加了解Hologres&#xff0c;我们计划持续推出Hologers底层技术原理揭秘系列&#xff0c;从高性能存储引擎到高…

电脑两边黑边怎么还原_Mac电脑录制的视频有黑边?如何解决

Mac电脑录制屏幕视频时两边有黑边&#xff0c;无论是将录制格式设置为1080p还是默认分辨率&#xff0c;最终生成的视频两边都有黑边&#xff0c;遇到这种情况如何解决呢&#xff1f;原因是 mac 录制出的视频分辨率比例是 16:10 &#xff0c;比需要的 16:9 高一点。接下来给大家…

程序员有必要参加软考吗?大一可以考的编程证书还有哪些

软考的全称是&#xff1a;计算机技术与软件专业技术资格水平考试。通过考试获得证书的人员&#xff0c;表明其已具备相应等级的水平和能力&#xff0c;用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务。个人认为&#xff0c;程序员有没有必要参与软考最主要…

【知识连载】 如何用钉钉宜搭制定企业疫情防控数字化管理方案

简介&#xff1a; 【零起点入门系列教程】将会带给大家从业务视角出发由浅入深地学习用宜搭实现应用搭建。即便是没有任何代码基础的新手只要跟着系列课程&#xff0c;从0开始慢慢修炼&#xff0c;也能找到成功搭建应用的乐趣。今天第六讲&#xff0c;示例如何用钉钉宜搭搭建企…

mapreduce原理_Hbase Bulkload 原理面试必备

当需要大批量的向Hbase导入数据时&#xff0c;我们可以使用Hbase Bulkload的方式&#xff0c;这种方式是先生成Hbase的底层存储文件 HFile&#xff0c;然后直接将这些 HFile 移动到Hbase的存储目录下。它相比调用Hbase 的 put 接口添加数据&#xff0c;处理效率更快并且对Hbase…