网络虚拟化专题连载——网络虚拟化概念、模型与设计原则

从今天开始做一个网络虚拟化的专栏,主要就是讲一讲笔者对下面这一张四维图相关技术的理解,欢迎大家多多交流指教。

网络技术,永远是服务于实际需求的。近几年来,IT的架构发生了深刻的变化,尤其是在云计算的IT模型中,要求云中的网络资源能够像CPU/内存和磁盘一样,得到足够的抽象和灵活的调度,者用IT的术语来描述就是虚拟化的能力。尽管传统网络里面也有VLAN、VPN等虚拟化技术,但是它们远远不能满足云的需求。按目前的状况来说,计算和存储的“虚拟化”已经就位,而“网络虚拟化”就是三缺一里面的那个一。

从客观上来讲,是云计算的发展将网络虚拟化推到了技术的前沿。不过,网络虚拟化却不只是云的独家需求。铁塔的挂牌意味着将来三大运营商的设备可能都要收归国有了,“虚拟运营商”可能真的不只是停留在概念上了。那么这些实实在在的国有资产怎么去管理,如何在各大“虚拟运营商”间分配呢,肯定不是这台交换机给A,那台路由器给B吧,应该是怎么个运维方式大家简单想想便知。那么这会是一块多大的蛋糕呢,这是个用脚趾头都能想到的问题。

SDN和NFV在这几年火爆的很。从最开始学术界的牵头喊口号,到现在工业界积极的布局圈地可见SDN和NFV正在软着陆,似乎并没有出现“跳得高,摔得惨”的悲剧。软件定义一切的大潮已成不可逆转之势,而软件提供的灵活性和自动化为网络的革新提供了技术上的便利条件,因此SDN和NFV成为了网络界的新宠,网络虚拟化也将被重新定义。ESTI有一张图说明了SDN、NFV和网络虚拟化三者之间的交叉关系,笔者倒是觉得或许云网络(Cloud Network)也可以加在里面作为第四个交叉的维度,于是就有了开篇的那张图。

作为相关专业的学生,笔者接触云、SDN也有一段时间了,最近也一直在研究网络虚拟化和NFV,推出这个专栏也算是对前段时间所学内容的总结和思考吧,也希望能够启发、激励未来的学习与工作。

对网络虚拟化这个字眼的理解,基本上有两种:网络连接层面的虚拟化,关注的是怎么在一张物理网络中区分开不同的业务,或者使用人群;网络功能层面的虚拟化,主要是由NFV提出来的,关注的是怎么将硬件网络设备软件化(或者说将物理网络设备虚拟化)。后一种理解是新近提出来的,笔者本身研究的也不是很深入,而且目前来看在概念、产品和解决方案上离成熟还差的比较远。相比之下前一种理解是相对成熟的,在这个专题里,提到的网络虚拟化的概念、模型与方案设计原则,都是针对前一种理解来说的。

1)概念
网络虚拟化的概念由来已久,普遍认为最初的网络虚拟化是起源于VLAN。我们知道以太网是通过广播进行自学习的,这在一个相对复杂的环境中会出现一些问题,比如公司的财务部门的数据经过广播可能会传播到外来人员接入的主机上,显然这是不能被接受的。VLAN的出现很大程度上就是为了解决这一问题。VLAN(802.1Q)是一个局域网技术,能够将一个局域网的广播域隔离为多个广播域,常被用来实现一个站点内不同的部门间的隔离。随着互联网的发展,又衍生出了多个站点间跨越Internet进行通信的需求,比如公司总部在北京,另外在上海有一个分部,每天分部的财务部门的数据都需要同步到总部去,显然这些数据是不允许暴露在公网上的。五花八门的VPN类技术就是为了解决这一问题而出现的,极大地推动了网络虚拟化的发展。

简单地介绍了网络虚拟化的历史,笔者是想说,网络虚拟化其实是用户使用网络的需求——用户总是希望能在内部进行任意的通信,而不希望被其他人所知。而随着需求的改变,技术本身是在不断地进化和迭代的。有了VLAN做隔离后,人们还希望能在一个二层内进行隔离,因此就出现了PVLAN;有了VPWS实现两个站点间的点对点互联,人们还希望通过点对多点进行多个站点间的互联,于是就出现了VPLS。诸如此类,不胜枚举。

2)模型
要理解网络虚拟化,最常见的莫过于“封装—寻址”这一技术模型,或者称为“Routed-Routing”技术模型。这部分内容,网上有很多的资料,作者之前看过一个大牛写的一个数据中心网络的技术专栏,其中对这部分内容的概括非常精炼、理解十分深刻,所以这里直接引用相关内容,如果有幸原作者能够看到这个专栏,还望多多指教。

Routed Protocol和Routing Protocol两个词很好的对技术组成部分进行了分类。这里的Route可以进行广义理解,不要只限于IP,作者倾向于将Routed解释成封装,Routing解释成寻址。任何一段数据信息从起点A发送到终点B的过程中,中间网络做的事情就是封装与寻址两件事。

由于中间网络只做传输,是不需要了解数据(载荷)信息的,因此要封装一个可以识别的目的地址Tag,这个Tag可以理解为目的IP/目的MAC/MPLS标签等等,所有中间设备只要能识别这个Tag即可,这就是封装。

再说寻址,网络设备能够识别目的Tag后,还需要知道对应的本地出接口在哪才能将报文转发出去。最傻瓜的处理方式有两种,一个是通过手工配置的方式将Tag静态对应到本地出接口上(如静态路由、静态MAC等),再有就是在所有接口广播了(Ethernet)。高级的方式则是使用一种寻址用的动态协议,自动的进行邻居发现、拓扑计算和Tag传递等动作,如使用RIP/OSPF/BGP/ISIS/LDP/PIM/MSDP等等。这里需要注意的是传统Ethernet是通过广播来寻址的,注定规模不能太大。STP的唯一作用就是防止环路,通过拓扑计算将多余的路径阻塞掉,与寻址无关。而前面提到的那些寻址协议主要任务都是传递Tag计算转发路径,大部分协议会通过计算拓扑来防止环路,但也有如RIP这种不计算拓扑的协议,搞些水平分割、毒性逆转和最大跳数等机制来避免环路。

封装解封装技术是网络入口与出口节点在原始数据信息前将Tag进行加载剥离动作,寻址技术则是在网络节点之间运行的交互动作。在很多协议技术中提到的数据平面其实就是封装转发,而控制平面就是标识寻址。

图是不是很眼熟,大部分的网络协议够可以照着这个模型去套的:

对于IP来说,Sender和Receiver就是TCP协议栈,Edge就是IP协议栈,Core就是Router,Payload就是TCP数据,Tag就是IP头中的目的IP;

对于Ethernet来说,Sender和Receiver就是IP协议栈,Edge就是网卡接口,Core就是Switch,Payload就是IP数据,Tag即使Ethernet头中的目的MAC;

对于MPLS来说,Sender和Receiver就是CE,Edge就是PE,Core就是P;Payload就是Ethernet/IP数据,Tag就是MPLS标签;

甚至对于分布式结构机框交换机来说,Sender和Receiver就是接口板转发芯片,Edge就是接口板上的交换接口芯片,Core就是交换芯片,Payload就是Ethernet数据报文,Tag就是目的Slot ID和Port ID(交换芯片转发时只看Slot ID,目的接口板查看Port ID)。

传统的FC/IP/Ethernet技术体系上面已经玩不出来花了,现在新的技术大都是在FC/IP/Ethernet等数据载荷外面增加个新的Tag并设计一套对应的寻址协议机制,或者干脆就还使用原有的IP/MAC作为外层封装Tag,只对寻址进行变化。对于后者,作者喜欢称呼其为嫁接技术,神马MAC in MAC,IP in IP,MAC in IP等等都属于此列。此类技术的好处是兼容,缺点是继承,缝缝补补肯定没有全新设计来得自由。

封装比较好明白,协议理解的难点其实在于寻址。前面说了,静态寻址要手工一条条配置,规模大了能累死人。动态寻址技术配置工作量小了很多,但复杂度就上升了好几个台阶。不劳力就劳心,目前看来大家还是更喜欢劳心一些。回来说动态寻址,除了RIP这种早期的靠广播来传递路由Tag的寻址协议外,后面出来的都是先建邻接,后画拓扑,再传Tag的三步走了,从OSPF/BGP/ISIS到下面要讲到的TRILL/SPB/OTV皆是如此。对寻址技术主要内容简单归纳如下,细的就要看各协议具体实现了。

建立邻居靠Hello(Advertise),拆除邻接等超时。各自为根绘周边,主根扩散画整网。Tag同步传更新,本地过期发删除。

上述技术模型在数通领域基本上是通用的,因为Packet Domain必须要通过特定的字段来对数据包进行区分。不过在Optical Domain和Circuit Domain这类面向连接的网络中,物理层的波长、时隙等信道特征,天然地提供了对网络虚拟化所要求的各个方面(包括连通性、安全性、服务质量等)进行隔离的手段,那么这种模型也就不是十分合适了。

从虚拟化的结果来看,网络中虚拟化技术也可以分为“一虚多”和“多虚一”两种。“一虚多”就是将一个物理/逻辑网络元素分解成多个逻辑网络元素,这里的网络元素可以是设备级别的,也可以指链路、拓扑等等。对于一台以太网交换机,VLAN的配置就是典型的“一虚多”行为,每台逻辑交换机都有独立的MAC转发表;对于一台PE路由器, VPN配置也属于“一虚多”行为,不同的客户有独立的VRF。“多虚一”则是将多个物理/逻辑网络元素合并为一个逻辑网络元素,同样这里的网络元素可以是设备级别的,也可以指链路、拓扑等等,如LACP协议(802.3ad)就是实现了链路级别的“多虚一”。当然,更灵活的是先“一虚多”再“多虚一”,这些我们后面再慢慢地聊。

另外,笔者对网络虚拟化模型的一种理解是从网络元素的角度来考虑的。网络,无非就是节点和链路,多个节点和多条链路组成了各种各样的拓扑。所以网络的虚拟化,整体上可以看做是拓扑的虚拟化,细节上可以看做是节点的虚拟化、链路的虚拟化。关于这种模型,到了讲SDN中的网络虚拟化时我们会好好地讲一讲。

3)网络虚拟化方案的设计原则
说完了概念和模型,再来谈一谈笔者对网络中虚拟化方案设计原则的理解。首先,前面强调网络虚拟化描述的是用户使用网络的需求,因此网络虚拟化方案的设计原则应该紧密围绕着用户的需求展开。从首要需求来说,用户需要网络提供连通性,其次就是在此基础之上对业务安全和传输质量的要求。依上,总结网络虚拟化方案的基本设计原则如下:

  • 基础的连通性——能够提供二层或者三层数据业务的连通性。
  • 绝对的安全性——不同用户的数据业务必须保证绝对的隔离。
  • 可选的QoS——尽量满足用户对于数据业务传输质量的要求。

另外,由于网络虚拟化是网络管理人员管理网络资源的行为,因此将可扩展性和运维自动化作为网络虚拟化方案的辅助设计原则。

  • 良好的可扩展性——合理分配虚拟化所需资源,保证虚拟网络足够的数量和规模。
  • 一定的运维自动化——物理/逻辑资源状态可视,能够自动地开通业务、定期回收闲置资源,网络发生故障时能够自动告警,提供完善的AAA。

目前关于网络虚拟化,笔者能提炼出来的东西暂时就是这么多了,里面很多都是个人的理解,如果哪里有理解狭隘的地方,欢迎大家多多指教。下面的章节开始进入技术的讲解,分别将从传统网络、(云)数据中心网络、SDN+NFV+云、SDN+其它这几个方面来探讨网络虚拟化技术。

作者简介:
张晨,北京邮电大学未来网络理论与应用实验室研究生
主要研究方向:SDN、虚拟化、数据中心
个人博客:www.sdnv.xyz
个人邮箱:zhangchen9211@126.com


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/15620.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于16-01-15
3