网络是云计算最关键的技术,网络系统非常复杂,通常都是通过分层的结构实现。虚拟网络是云计算核心的网络功能,基于基础物理网络构建。软件定义网络,则用于动态网络变更以及网络功能创新。
1 基础网络:分层和拓扑
基础的物理网络有两个核心的概念:
分层的协议栈。在接收协议栈的基础上,通过泛化网络分层,来理解复杂系统的组成——复杂系统必然是分层的。
网络拓扑。代表了数据中心基本的服务器组织方式,从小到大依次为:服务器、机架、POD、数据中心等。
1.1 网络分层协议栈
为了降低网络设计的复杂度,绝大部分网络都是分层的结构,构成一个层次栈。每一层都建立在下面一层的基础之上,层的数量、每一层的名称、功能在不同的网络中不尽相同。每一层的目的都是向上一层提供特定的服务,而把如何实现这些服务的具体细节封装起来,对上一层屏蔽。 分层的概念大家并不陌生,它广泛的应用于计算机科学各个领域,只是在不同的领域有不同的称谓,例如细节屏蔽、抽象数据类型,数据封装以及面向对象的程序设计等。其基本思想是一个特定的软件(或硬件)向其用户提供某种服务,但是把内部状态和算法及实现细节隐藏起来。 如图1,显示了一个5层的网络,不同机器上的同一层相互对应,这样构成相对应的实体一般称为对等体(Peer)。这些对等体可以是软件进程、硬件设备,或者其他交互实体。一台机器上第n层与另一台机器上第n层进行对话,该对话中使用的规则和约定统称为第n层协议。
图1 网络的层级、协议和接口 实际上,数据并不是从一台机器的第n层直接传递到另一台机器的第n层。相反,每一层都将数据和控制信息传递给下一层,一直传递到最底层,然后通过物理传输介质进行实际的通信。图1中的实线表示实际的物理通信,而虚线则表示虚拟通信。 每一对相邻层次间的连线是接口,接口定义了下层往上层提供哪些原语操作和服务。当网络设计者在决定一个网络中应该包括多少层,以及每一层应该提供什么功能时,其中最重要的就是必须定义清楚层与层之间的接口。
1.2 五层参考模型
OSI参考模型具有七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP参考模型精简了OSI模型,只有链路层、网络层、传输层、应用层。OSI参考模型的影响力在于模型本身(去掉会话层和表示层),它已被证明对于讨论计算机网络非常有价值;而TCP/IP参考模型的优势体现在协议,这些协议已经被广泛应用许多年,证明了自身在各种复杂网络条件下的稳定性。 结合二者的特点,现在大家讨论的网络分层模型如图2所示的五层参考模型:
物理层:规定了如何在不同的介质上以电气(或其他模拟)信号传输比特。
链路层:关注的是如何在两台相连的计算机之间发送有限长度的消息,并具有指定级别的可靠性。以太网和802.11就是链路层协议。
网络层:主要处理如何把多条链路结合到网络中,以及如何把网络与网络连接成互联网络,使我们可以在两个相隔遥远的计算机之间发送数据包。网络层的任务包括找到传递数据包所走的路径。IP是网络层主要的协议。
传输层:传输层增强了网络层的传输,通常有更高的可靠性,提供满足不同应用需求的可靠字节流。TCP和UDP是传输层主要的协议。
应用层:应用层包含了使用网络的应用程序。例如HTTP和DNS等。
如图2,一般情况下,网络协议栈各层分别实现在硬件、内核态软件和用户态软件。物理层和网络链路层是由以太网和802.11标准所定义的,比较稳定,因此物理层和网络链路层一般实现在硬件里;网络层和传输层作为系统共用的组件,一般是作为TCP/IP协议栈集成在操作系统内核里;而应用层的任务则一般交给用户态的程序去实现。
图2 TCP/IP网络协议栈
1.3 数据中心网络拓扑
物理网络是一切网络系统的基础,承载着各种网络流量的传输。大型数据中心物理网络,很多采用经典的三层连接,即Cisco定义的分层互连网络模型(Hierarchical Internetworking Model)。如图3(a)所示,分层互连网络模型包含了以下三层:
接入层(Access Layer):接入交换机通常位于机架顶部,所以它们也被称为ToR(Top of Rack)交换机,它们物理连接服务器。
汇聚层(Aggregation Layer):汇聚交换机连接Access交换机,同时提供其他的服务,例如防火墙,SSL offload,入侵检测,网络分析等。
核心层(Core Layer):核心交换机为进出数据中心的包提供高速的转发,为多个汇聚层提供连接性。
(a) 传统的3层结构
(b) Clos Spine/Leaf两层结构 图3 常见的数据中心网络互联结构 2008年,美国加州大学圣迭戈分校的研究学者提出了将Clos架构用于数据中心中。现在流行的Clos网络架构是一个二层的spine/leaf架构,如图3(b)所示。spine交换机之间或者leaf交换机之间不需要链接同步数据。每个leaf交换机的上行链路数等于spine交换机数量,同样的每个spine交换机的下行链路数等于leaf交换机的数量。可以这样说,spine交换机和leaf交换机之间是以full-mesh方式连接。在Clos spine/leaf架构中,每一层的作用分别是:
叶子交换机(leaf switch):相当于传统三层架构中的接入交换机,作为TOR直接连接物理服务器。
主干交换机(spine switch):相当于核心交换机。spine和leaf交换机之间通过ECMP(Equal Cost Multi Path)动态选择多条路径。
对比spine/leaf网络架构和传统三层网络架构,可以看出传统的三层网络架构是垂直的结构,而spine/leaf网络架构是扁平的结构,从结构上看,spine/leaf架构更易于水平扩展。
2 虚拟网络:VLAN和VxLAN
虚拟网络是云计算多租户共存的基础,通过可动态配置的虚拟网络,构建足够多的私有网络域,承载多租户的安全访问隔离。VLAN是一种underlay网络,而VxLAN则是基于underlay网络隧道实现的Overlay网络。
2.1 虚拟局域网VLAN
VLAN(Virtual Local Area Network,虚拟局域网)是同一广播域中设备的逻辑分组。通常,通过在交换机上配置一些VLAN,将某些接口置于一个广播域中,而将某些接口置于另一广播域中。VLAN可以分布在多个交换机上,每个VLAN被当作自己的子网或广播域。这意味着广播到网络上的帧将仅在同一VLAN内的端口之间传递。 VLAN的作用类似于物理LAN,但是即使主机未连接到同一交换机,它也可以将主机在同一广播域中分组在一起。在网络中使用VLAN的主要原因是:
VLAN增加了广播域的数量,同时减小了广播域的大小;
VLAN通过减少接收交换机泛洪帧副本的主机数量来降低安全风险;
可以将保存敏感数据的主机保留在单独的VLAN上,以提高安全性;
可以创建更灵活的网络设计,以便按部门而不是按地理位置将用户分组;
只需将端口配置到适当的VLAN,即可轻松实现网络更改。
如图4(a)所示,拓扑显示了一个网络,其中所有主机都位于同一VLAN中。如果没有VLAN,则从主机A发送的广播将到达网络上的所有设备。如图4(b)所示,通过将两个交换机上的接口Fa0/0和Fa0/1放置在单独的VLAN中,来自主机A的广播将仅到达主机B,因为每个VLAN是一个单独的广播域,并且只有主机B与主机A处于同一VLAN内。VLAN 3和VLAN 5中的主机甚至都不知道发生了通信。
(a) 未设置VLAN的局域网
(b) 设置VLAN的局域网 图4 VLAN示意图 VLAN的帧格式是在802.1Q协议里规定的,如图5所示,相比传统的802.3协议包,增加了4字节的字段。第一个16bits字段是VLAN协议标识符,值为0x8100。第二个字段包括优先级Pri(3bits)、规范格式指示器CFI(1bit)、VLAN ID(12bit)。
图5 传统的802.3和802.1Q帧格式对比
2.2 虚拟扩展局域网VxLAN
VxLAN(Virtual Extensible LAN,虚拟扩展局域网),或许是目前最热门的网络虚拟化技术。VxLAN由RFC7348定义,这是2014年定稿的一个协议,VxLAN协议将Ethernet帧封装在UDP内,再加上8个字节的VxLAN header,用来标识不同的二层网络。 如图6所示,除了常规的各层的包头之外,VxLAN协议还定义了8个字节的VxLAN包头。其中的24bit用来标识不同的二层网络,这样总共可以标识1600多万个不同的二层网络。一般的传输层端口号用来标识进程或者应用,但是在VxLAN协议里面的,以太网帧封装在UDP里面,UDP的源端口被用来在ECMP或者LACP做负载均衡;目的端口被用来标识VxLAN数据,分配给VxLAN的端口号是4789。VxLAN数据是经过VTEP(VxLAN Tunnel EndPoint,VxLAN隧道终端)封装和解封装的,相应的VxLAN数据的外层IP地址就是VTEP的IP地址。最外层的MAC地址用来实现VTEP之间的数据传递
图6 VxLAN包格式 VxLAN与VLAN的最大区别在于,VLAN只是修改了原始的以太网包头,但是整个网络数据包还是原来那个数据包,而VxLAN是将原始的以太网帧隐藏在UDP数据里面。经过VTEP封装之后,在网络线路上看起来只有VTEP之间的UDP数据传递,原始的网络数据包被掩盖了。 相比VLAN,VxLAN要复杂很多。加上VLAN的先发优势,已经在交换机硬件中得到了广泛的支持。那为什么还要VxLAN?原因主要是:
VLAN ID数量限制。首先是VLAN能支持的二层网络数量有限。VLAN有12bit用来标识不同的二层网络,这样总共是4096个。当前大型数据中心数以十万计的节点数量,4096个虚拟网络域捉襟见肘。而VxLAN有24bit用来标识不同的二层网络,这样总共是1600多万个虚拟网络域,完全可以满足大型数据中心的需求。
交换机MAC地址表限制。之前交换机的一个端口连接一个物理主机对应一个MAC地址,但现在交换机的一个端口虽然还是连接一个物理主机但是可能连接几十个虚拟机和相应数量的MAC地址。交换机是根据MAC地址表实现二层转发。交换机的内存比较宝贵,所以MAC地址表的大小通常是有限的。如果使用VxLAN,虚拟机的以太网帧被VTEP封装在UDP里面,一个物理主机对应一个VTEP,所以交换机的MAC地址表,只需要记录与物理主机数量相当条目就可以了,虚拟化带来的MAC地址表暴增的问题也不存在了。
灵活的虚机部署。采用VLAN网络的虚拟环境,不存在overlay网络。虚拟机的网络数据,被打上VLAN Tag之后,直接在物理网络上传输,与物理网络上的VLAN是融合在一起的。这样的好处是虚拟机能直接访问到物理网络的设备,但是坏处是,虚拟网络现在不能打破物理网络的限制。如果使用VxLAN,因为VxLAN通过UDP传输以太网帧,那相应的可以在一个L3网络上,传递L2的数据。物理网络的二层边界还存在,但是现在虚机的网络数据在三层网络传输,可以跨越物理二层网络的限制。不管物理网络的二层还是三层,虚拟机现在已经感知不到了。通过VxLAN的封装,虚拟机现在走的是一套独立于物理网络(underlay network)的overlay网络。这样的话,在物理网络上,就不必把所有的交换机连起来,还是可以保持一个个小的L2 Pod。但是同时,虚拟机的部署和迁移,又不用受物理网络的限制,整个数据中心可以保持一个平均的利用率。这是又一个VxLAN能解决,但是VLAN无法回避的问题。
更好的利用多条网络链路。VLAN协议使用STP(Spanning Tree Protocol)来管理多条线路,STP根据优先级和cost,只会选出一条线路来工作,这样可以避免数据传递的环路。当网络流量较大的时,也不能通过增加线路来提升性能。而VxLAN因为是通过UDP封装,在三层网络上传输。虽然传递的还是二层的以太网帧,但是VxLAN可以利用一些基于三层的协议来实现多条线路共同工作,以实现负载均衡,例如ECMP和LACP等。当网络流量较大时,可以通过增加线路来减轻现有线路的负担。这在提升数据中心网络性能,尤其是东西向流量的性能时,尤其重要。
编辑:黄飞
评论
查看更多