一转眼从听华为3Com的路由交换课程到如今已经13年有余了,依稀记得第一节课的时候我带着老婆去听的课(老婆是日语系的。那时还是女朋友,并不懂网络,仅仅是跟着我去上课的)。抢了个头排,讲师宋岩老师提问了一个问题:“为什么要学习网络?”然后看没人回答就要点名,可能是宋老师对美丽的女生感兴趣吧。直接点名了我老婆...然后就尴尬了,只是没想到老婆回答的还真不错。自那以后,我也就開始了对网络的兴趣。对网络设备的兴趣,路由和交换这门课整体学的还不错。只是,后来我成了程序猿。也就没有机会去触摸那些设备了,也算是遗憾。
        我深深知道程序猿和网管之间有个鸿沟,但我就是无法填掉它,有时这道鸿沟就在我自己的心里。

如今,我依旧是个程序猿,以往我一向喜欢说自己是比較懂网络可是编程编的不好的程序猿。以此展示一下我心中的那道鸿沟。SDN的时代来临,软件定义网络,那道鸿沟能够填补了。网络不再是网管的专利,而是程序猿编码的一个程序。

在《网络虚拟化(SDN,NFV..)和企业骨干网的演化》一文中,我的观点比較原始且传统,我描写叙述的企业骨干网是一个AS。通过IGP互联,比方OSPF,这显得企业骨干就是一个IP骨干网。

可是。事实上真有这个必要在企业网部署IGP吗?我们看一下企业骨干网的典型结构:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9nMjUw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

企业骨干网特别是互联网公司的骨干网事实上更大意义上是一个数据网而不是一个通信网。

它的目的是数据的调度。而不是让不同的节点互联互通。这是企业骨干网与运营商骨干网的非常重要的差别。

基于这个差别。我们便能够优化企业网的路由系统了。
        细致观察企业网的层级结构。就会发现它是一个基于胖树的典型CLOS交换结构。之所以能够规划成这样的规则的结构,源自于以下的事实:
1.企业网互联的节点一般都是数据中心而不是接入点,而数据本来就是分层的。
2.企业的数据中心能够自己规划的,节点固定,稳定。
所以说。全然不是必需在这些数据中心之间执行OSPF这类路由协议,而应该将企业网做成真正交换型的网络。
        我来给出一个拍脑袋想出来的简单的”交换协议“来替代复杂的IGP路由协议为企业骨干网打通脉络,在给出这个协议之前,我得先来解释一下路由和交换的差别。在我这里。路由指的是须要复杂计算的寻路过程,主要包含双方面的计算开销,一方面是动态路由协议的计算开销(假设你是静态配置的路由。那么这部分开销由你的脑力替代),还有一方面是为数据包查找路由表的开销,这部分计算主要消耗在最长前缀匹配中。如今看看什么是交换,交换在我这里指的是一个转发动作,这个动作的计算开销必须尽可能的小,比方仅仅须要固定几步这样的,像CPU的MMU执行的那种转换操作那样,所以交换应该非常easy用硬件实现,在交换网络中,数据的转发动作开销是极小且固定的,基本不须要进行运算。而这些固定的步骤是怎样做到数据的正确转发的呢?交换机怎么知道数据包该转往那个port呢?转发信息来源于两种机制,一种机制是交换机自己学习,第二种是依靠路由表来生成。

假设转发交换表是路由表生成的,那么这样的设备能够看作是高端路由器。交换表便可视为路由表项的Cache。按照这样的方式设计出来的硬件早就不知道跑了多少年了,无论是路由Cache。还是那种相似Cisco CEF机制,背后的原则都是一次路由,多次转发,仅仅只是CEF的转发表是主动生成的。而不是等到数据包到达的时候才生成的。所以说,这样的方式实乃一种传统的方式。

假设转发交换表是自己学习生成的。那么这样的设备在常识上就是真正的交换机。比方以太网交换机,靠MAC/Port映射表来转发数据。比方MPLS交换机,靠标签/Port映射表来转发数据,无论哪种交换机。其映射表都是学习获得的。比方以太网交换机有从帧头学习MAC/Port映射的能力。而MPLS交换机则能够通过标签交换协议来生成映射。此外还有很多其他的交换机。比方ATM交换机,也是有自己的虚电路协议的。已经快被淘汰了,故不多谈。

我前面说过,要把数据中心连成一个交换网络而不是一个IP路由网络。那么使用那种交换机呢?是以太网交换机,还是MPLS交换机呢?事实上。数据中心全然能够承载在一张MPLS网上,那简直比IP网要好太多。只是要是那样,也就没有本文了。

本文的意思是,自己设计一种交换机,不须要不论什么现有的协议交换机!
        这怎么可能?假设在十几年前,这样的思路也仅仅能停留在大学或者Cisco。华为之类设备商的实验室里,然而在SDN时代,出现了叫做裸交换机和白牌交换机的东西,这些交换机说白了就是能够随意编程。

这样不论什么公司都能够自研定制的交换机了!自研交换机能够更贴合自己的网络,可谓是高端定制。SDN时代是彻底结束了厂商垄断的时代,SDN将网络开放给了程序猿,CCIE将不再牛逼。
        開始我的协议。
        首先介绍一下网络中每一台设备里的转发表是什么样子:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9nMjUw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

这个转发规则非常easy,就是一个位图,按照从上到下,从左到右的顺序去匹配第一个bit为1的索引值,那就是要转发出去的port,这个非常easy用硬件实现。顺便说一下,这个跟Linux 2.6内核的O(1)进程调度器非常像。至于说链路负载均衡,那也不难,直接在位图的同一行选择多个链路就可以。

之所以能够构建这个位图,就是由于全交叉连线的胖树在每个节点都有三个走向:
往树叶方向:假设目标port位于源port的一个方向,那么这就是近期的路径,当然是首选。
往平行方向:不同目标ToR的最优选择或者树叶方向不可达时的次优选择。
往树根方向:树叶方向。平行方向均无路可走时的默认选择。相似默认路由。

那么下一个问题,这个转发交换表是怎么生成的呢?
        首先。我们要定义边缘设备,在这样的设备上,源IP地址和目标IP地址被转换成源port和目标port,这样在数据包进入这个网络后,就能够用port来交换了。这就避开了用最长前缀匹配计算的开销,全然用port这个确定的一维数据来作为交换的根据,这个思路和MPLS是一致的,和MPLS不同的是,我这里的网络拓扑是确定的CLOS结构。这就让内部的交换结构更加简单,每个节点的三个固定走向分属三个不同的优先级意义也正在此。IP地址和port之间的映射方式有非常多种,我首选的是HASH映射,这样比較简单而且高效。
        以下说下节点的port学习,最简单的方法往往是最高效的方法。

在网络初启的时候,从每个边缘设备发起以自己的portID为内容的Flood,每个Flood数据包传遍全网,这样全部的设备就能够学习到特定port的方向信息,这个和以太网交换机是一致的。不同的是,以太网交换机是带内学习的,以太网本身就是一个广播网络,查询映射表项失败的情况下能够用广播来发送数据。而我这里的协议交换机则是带外学习的,由于我的目的是在传输数据之前就构建好每一台设备的交换表。旨在高速转发。

最后一个问题,这个交换网络该怎么维护呢?假设有一条线缆断掉了。或者一台设备宕机了,怎样通知其他设备更新转发交换表呢?这就须要一个新的协议。非常easy。仅仅须要往上游和平行两个方向传播链路状态变更就可以。不须要向叶子节点传播。由于向上游转发总是最后的不得已的选择。为什么能够如此简单?由于这是一棵棵树组合而成的胖树CLOS结构! 认识到这个特征,非常多设计都能够非常easy。
        理解了转发交换表是怎么生成的。终于的效果应该是以下这样:

我这个自研交换协议确实是拍脑袋的产物,由于我个人并不是做这一块业务的。仅仅是兴趣使然,不然也不会占周末的时间去搞这么一个可能永远也用不起来的东西。
        之前像腾讯这样的巨头企业也设计过这样的自研的协议,比方以下连接里介绍的SRP:腾讯-SRP。然后,在弯曲评论上被喷了,在别的地方感兴趣的也不多,仅仅是在某本吹水的SDN书籍上提到过。

事实上,在厂商垄断的时代,再牛逼的互联网企业也仅仅能停留在做业务编程的水准,评论里说腾讯做网络外行,我想在厂商垄断的年代,确实非常外行。真正的内行仅仅有Cisco,华为做核心交换的那帮人,再牛逼的编程者面对真正网络技术而言,都是外行。我自己在2013年的时候,也说过腾讯的网络技术就是堆概念,拿着一大堆新的网络技术胡来。

比方业内推出了SDN。赶紧就部署,Cisco的协议在腾讯的机房都能看到,里面的人也能把这些概念背得滚瓜烂熟,可是做出来的网络真真就是四不像,表面上看牛逼的样子,事实上就是拿名词吓人的。以我如今的观念来看,当时确实苛求腾讯这样的非网络厂商了。仅仅要不是网络厂商的人。谁都做不好。别说腾讯,换家美国的互联网公司也一样。要想做好网络。好办,买Cisco或者华为的方案就可以,然后他们派个project队帮你实现了,全程不用你插手。知道网管多牛逼了吧。我经常搞不懂为什么网吧的小混混网管怎么能够这么牛逼哄哄,难道由于他们是混混吗?后来见了外资银行那些不纹身但穿西装的网管也相同牛逼哄哄的时候,我才明确。原来人家玩的是垄断。我能碰的东西。你们不能碰。
        上学时老师就讲过,网络切分为资源子网和通信子网,互联网公司的技术局限在资源子网,而通信子网差点儿垄断在设备厂商的手中,他们就像网吧纹身的小混混网管一样。屌的非常。在互联网公司看来,所谓的网络技术就是TCP,假设提到路由和交换,他们是不屑的,互联网公司想当然地觉得TCP能解决一切问题,假设说再深入一些。无奈非常吃力地在IP协议上做点文章。搞搞网卡驱动。至于说数据出了网卡,他们真真的没辙...我想我看到了程序猿和网管之间分歧的本质了。
        回到腾讯的SRP。从技术上评价它,其最大的败笔就是明明已经触到了交换核心概念的边缘,却又回到了路由!搞那么复杂但高效的交换矩阵,到头来就是为了设置路由!注意,是路由啊。已经触碰到了成功的边缘却还是没能突破边界,所以遗憾。路由仅仅是概念并不是标准。否则。MPLS就不会被发明出来了。我们在乎的是找一个出口把数据包发出去。而这件事为什么非得靠路由来做呢?更何况。设备的控制权已经不在厂商手里了,已经全然交给了程序猿。人家都是那路由表生成交换表,腾讯的SRP却反其道而行,设计出一个还不错的链路状态更新协议却仅仅是为了生成路由表...
        从弯曲评论里的那个PDF中搞出一个SRP的结构图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9nMjUw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

这实际上并不能算是一个路由协议,而是一种链路负载的协议。我之前设计过一个链路上的VRRP协议。详见《LVrrp的设计过程-基于链路的vrrp》,我觉得SRP和这个LVRRP比較相似,LVRRP依赖底层的VRRP,而SRP依赖底层的静态路由,都是在现有的底层上铺设了一个控制平面而已。当然。以腾讯公司的人力和財力,在细节上肯定会设计的比較缜密,但我的意思是说,从内部看,SRP确实比較精细缜密,从外部往里看,确实做的外行了。
        来看看我本文里设计的协议,姑且叫它DCIP(DCI Protocol)协议吧。其根本意义在又一次映射了数据平面。实际上就是一种Overlay。它的图演示样例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9nMjUw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

这么看来,DCIP本身就是一个数据平面的交换协议,而SRP则仅仅是一个控制平面协议。两者结合会不会更好呢?
        能如此设计DCIP有个前提。那就是交换机是裸交换机或者白牌交换机。顺便说一下,就是由于有了这样的交换机。才会有越来越多的厂商声称自己的交换机是自研交换机,当然,自研的水平參差不齐,毕竟如今网络技术研发才刚刚开放。以后全部公司的自研设备水平都会提高的,就跟业务编程一样简单。

...
以前我们听说过一般企业网会部署OSPF。而ISP会部署IS-IS。以后,在设备的控制权掌握在自己手中之后,越来越多的企业网将会自研交换协议,而不再使用标准的路由协议,迫于这样的客户将脱缰的压力。设备厂商不得已而为之,也陆续将设备的编程接口逐步开放,比方推出I2RS标准。让客户能够折腾自己已经购买的设备,这样鉴于大厂商的口碑,客户依旧会购买大厂的设备而不会流失掉。

以前。网络技术水平取决于你花钱的水平,花钱干什么呢?花钱来培训,考证。学习配置命令,学习Cisco之类公司的私有协议,由于钱是最硬的门槛,所以网络专家一般都是精英。

如今呢,网络技术水平全然取决于你的编程水平,买来裸机。编敲代码,你就有了自研的协议...知道谁是精英了吗?程序猿!

Google公司是SDN持续进化的推动力之中的一个。它本身作为一家互联网公司并不生产网络设备,可是它遍布全球的server却须要强大的网络技术支撑,所以自研肯定是最经济的选择,在SDN还是纸面概念的时候,Google就领先拿B4作为其试验田,让SDN成为了现实,紧随其后,各大互联网公司均開始引入SDN的思想...

... 明天有时间且有新内容的话再继续

声明:本文中的DCIP协议,仅仅是今早跑步时拍脑袋的产物,可是这并最好还是碍我今后会完好它,精细化它。

自研DCI网络路由交换协议DCIP-白牌交换机时代的企业网络的更多相关文章

  1. 路由交换02-----ARP协议

    路由交换协议-----ARP ARP协议 ARP(Address Resolution Protocol),是根据IP地址获取MAC地址的一个TCP/IP协议,即将IP地址对应到物理地址,从而实现数据 ...

  2. 路由交换01-----ICMP协议

    路由交换协议------ICMP ICMP协议 ICMP (InternetControl Message Protocol)协议是TCP/IP协议簇的核心协议之一,用来在网络设备之间传递各种差错和控 ...

  3. RIP、OSPF、BGP、动态路由选路协议、自治域AS

    相关学习资料 tcp-ip详解卷1:协议.pdf http://www.rfc-editor.org/rfc/rfc1058.txt http://www.rfc-editor.org/rfc/rfc ...

  4. 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

    为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...

  5. TCP/IP协议原理与应用笔记01:OSI网络参考模型

    1.OSI参考模型 第7层应用层:直接对应用程序提供服务,应用程序可以变化,但要包括电子消息传输   第6层表示层:格式化数据,以便为应用程序提供通用接口.这可以包括加密服务   第5层会话层:在两个 ...

  6. OSI模型网络七层协议

    物理层 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础.物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境. 1.1媒体和互连设备 物理层的媒体包括架空明线. ...

  7. 路由交换04-----STP

    路由交换-----STP STP协议(生成树协议)逻辑上断开环路,防止二层网络的广播风暴的产生. 为什么需要STP协议? 假设有这样一个拓扑: 现在PC1ping网关192.168.1.3,而这个网关 ...

  8. 华为路由交换综合实验 ---IA阶段

    目录 华为路由交换综合实验 ---IA阶段 实验拓扑 实验需求 华为路由交换综合实验 ---IA阶段 实验拓扑 实验需求 根据拓扑合理规划IP地址以及VLANIf地址(PC1属于运营部,PC2属于市场 ...

  9. H3C路由器配置——动态路由OSPF协议

    一.介绍 1.OSPF协议介绍 (1).OSPF(Open Shortest Path First,开放最短路径优先)路由协议是用于网际协议(IP)网络的链路状态路由协议.是一个被各厂商设备广泛支持的 ...

随机推荐

  1. DevExpress RichEditControl 上下翻页功能 z

    /// <summary> /// 翻页 /// </summary> /// <param name="isPre"></param&g ...

  2. Linux车载系统的开发方向

    眼下Linux基金会推出了基于Tizen 开源的车载系统平台Automotive Grade Linux (AGL), 眼下早期版本号的AGL已提供下载. UI用HTML5和JavaScript编程. ...

  3. Myeclipse设置快捷键

    快捷键中把我们习惯性使用的Alt+/进行代码自动补齐的快捷键改为了ctrl+空格,大家知道这是切换中英文输入法的键,所以需要更改这个快捷键, 1.选择MyEclipse6.0菜单栏中的Window-& ...

  4. java利用poi包 为excel生成超链接

    转载自:http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html   1,一个需求, 要求报表生成的Excel表格支持超链接.例如 ...

  5. Coursera课程《Python数据结构》中课程目录

    Python Data Structures Python Data Structures is the second course in the specialization Python for ...

  6. CVPR14 图像检索papers

    CVPR14年关于图像检索方面的papers,汇总成一个list,方便阅读. 图像检索 Triangulation embedding and democratic aggregation for i ...

  7. std::vector 两种操作的比较

    swap assign 这里只想说明这三种操作的用处和效率.swap和assign都可以用在将一个vector的内容全部复制给另外一个vector,区别是swap会改变源vector,而assign会 ...

  8. mysql搭建及数据迁移教程

    1.如果jumbo不存在,先安装jumbo 参考  http://hetu.baidu.com/api/tool/show?toolId=174: bash -c "$( curl  htt ...

  9. [asp.net入门]利用ADO.NET处理数据的简单之处

    由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸 ...

  10. (转)Unity3D - 性能优化之Draw Call

    Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),索引(顶点如 ...