想写个DC系列的文章,站在传统路由交换网络基础上谈谈数据中心网络,一方面是给自己的学习做下总结,另一方面也想分享一些东西。

谈到数据中心网络,能想到的东西无非就VXLAN、SDN、NFV、EVPN这些概念。先从基础协议开始再谈整体架构,才疏学浅,有不对的地方请评论告知。首先针对性地抛出几个问题:

1、为什么用VXLAN?使用场景有哪些?

在传统网络中分二层三层。随着云计算的普及,云主机无缝迁移的需求成了常态。为解决云主机跨三层网络的迁移,并且要满足迁移后云内网络架构包括云主机IP地址不能发生改变的要求孕育了大二层技术。要实现跨三层的二层网络通信实际上就要用到隧道技术。隧道技术的解决方案也有很多,其中包括本文要讲的VXLAN,还有NVGRE、STT、TRILL、VPLS等。NVGRE是由微软提出的,只支持服务器使用。STT是Nicira这家公司提出的,Nicira已经被VMWARE收购,STT也不支持交换机使用。提到Nicira,除了STT最大的成就就是开发了Open vSwitch和Neutron(Openstack的网络组件),而TRILL和VPLS仅仅交换机支持。所以用VXLAN解决大二层问题最为合理,而且还符合IETF标准。

很多人在刚接触云平台架构的时候会有个疑问,拿Openstack举例来说,在Neutron组件中可以启用VXLAN,那这里与交换机的VXLAN有什么关系?前面说到VXLAN是通用协议,可以在网络设备上使用,也可以在服务器上使用。先假设这个世界还没有Openstack等云架构,那么一台虚拟机要实现大二层迁移,怎么办?这个时候VXLAN是做在上层交换设备上。那么Neutron组建的VXLAN功能有什么用?有些云网络中,可以借助Neutron的VXLAN功能实现大二层需求满足云主机迁移和互访,然后用另一张网卡实现互联网的访问,如图1。阿里云飞天架构大二层网络也是用VXLAN实现,封装与解封装均在服务器侧,不同的是出公网的方式采用的是在一台服务器解封装后做了NAT转换的形式。

图1 Openstack VXLAN网络

实际上一般较大型的数据中心架构,云主机依靠VLAN进行隔离,不,准确的来说是租户标识。拿Openstack来说,Neutron使用了VLAN功能,而上千个VLAN号对应租户量已经足够使用。云主机带着VLAN TAG出来后,再由交换机根据不同的VLAN TAG进行VXLAN封装隧道来实现大二层,如图2。这里专门映射VXLAN和VLAN的对应关系称为桥接域。拿国产设备来说,叫bridge-domain。租户的隔离则是通过路由标识来实现。

图2 交换机实现大二层网络    

在谈到什么时候用VXLAN的时候,从云计算角度出发,以上举的例子都是IAAS层面的情景,还有PAAS层面的。例如容器编排调度工具kubernetes,有几套网络模型用来实现容器之间的互相通信,我们称为CNI(container network interface),包括Flannel、Calico、macvlan、OpenvSwitch等,其中Flannel网络模型就是用VXLAN来实现不同容器在宿主机的隧道模式通信的。

2、VXLAN报文格式

VXLAN数据包也可以称为MACINUDP数据包,原本数据链路层允许的最大以太网数据包长度是1500字节,然而数据包经过VTEP(VXLAN的隧道端点)封装后数据包会增加50字节,数据包格式如图3。那么VXLAN报文长度最大达到了1550,现在有些VTEP在处理VXLAN报文的时候并不接受分片,这就需要配置设备MTU1550了。

图3 VXLAN报文

报文的详细分解可以看图4,所以VXLAN是使用UDP封装在了传输层,目标端口是4789,源端口是随机的,根据源MAC地址进行HASH产生。至于为什么源端口随机,有一个很大的好处就是可以实现ECMP,如果源端口一成不变将导致网络只走一条路。而用来封装数据包的三层IP地址一般是设备的环回口地址,至于环回口地址的发布用OSPF、ISIS、BGP都可以,只要满足三层互通就可以。

图4 VXLAN报文分解

3、怎么配?

列举了一个VTEP端的华为配置,基本上看到配置就明白什么意思了,另一端配置同理。

SW1:
interface nve1(NVE是实现网络虚拟化的设备,也就是隧道的端点)
  source 2.2.2.2(vxlan隧道封装的源点,loopback地址,事先得做三层互通)
  vni 5010 head-end peer-list 3.3.3.3(5010是vni号,也就是vxlan隧道编号,3.3.3.3是对端loopback)
 
bridge-domain 10(VLAN和VXLAN之间的联系,用BD来做,也就是称为桥接域,这里的10只是本地有效,并不是VLAN)
  vxlan vni 5010(对应的vxlan隧道是5010)
 
interface 10GE1/0/3
  port link-type trunk
  port trunk allow vlan 1-9,11-100(这里就不能写10了,10要写在单独的子口里,access的就用pvid来做咯)
 
interface 10GE1/0/3.1 mode l2(二层端口vlan10划入DB10里)
  encapsulation dot1q vid 10
  bridge-domain 10

 4、EVPN是什么?和VXLAN是什么关系?

EVPN要讲的东西很多,会专门用一章来讲,至于为什么要用,这里先说下VXLAN的广播泛洪问题。首先介绍下BUM报文,BUM即broadcast unicast multicast,数据包在发送到一个VTEP端的时候会进行头端复制,怎么理解头端复制呢?其实有点类似二层广播泛洪,一个数据包到了VTEP以后,VTEP设备根据VLAN信息找到了对应的二层广播域,前面看配置知道,有了二层广播域以后,对应的VNI编号也知道了,也就是知道了所有隧道列表,然后会把数据包进行报文复制,然后进行VXLAN封装转发到对端的多个VTEP上。对端VTEP收到报文后对VNI等信息核对,核对完后解封装。解封装后进行广播处理。数据中心网络中,特别是云平台网络中,终端数量是成百上千的,每个终端都发起一个ARP请求,每个请求都进行一次头端复制那是很不合理的呀,由此就引入了ARP抑制。

ARP抑制是一种优化机制,由于VXLAN的引入,就有了二层网关的说法,在二层网关上会存在一个IP和MAC对应关系的表,称为ARP抑制表。当二层ARP请求发起的时候,会查找目标MAC地址有没有在这个ARP抑制表里,如果有,目标泛洪广播帧中FFFFFFFF会就改成实际目标MAC地址,变成一个单播帧。而有些网络设备,比如思科的做法是代答的方式,当发现抑制表里有,就直接由二层代答,不进行头端复制泛洪。那么问题来了,ARP抑制表怎么来的?综上所述,VXLAN是没有控制平面的,所有转发都是通过泛洪获得转发信息,那么二层路由信息的获取,用来找到对应的VTEP来避免泛洪,实现VXLAN的控制层面,就要借助EVPN了。EVPN依靠BGP扩展团体属性,用于控制IP地址和MAC的路由信息的发布与接收。EVPN的更多技术细节包括与VXLAN的配合使用在第二章分享。而在第三章中分享的是Data Center Interconnection的实现。

数据中心网络(1)-VXLAN的更多相关文章

  1. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

  2. [转帖]数据中心网络里的Underlay和Overlay

    数据中心网络里的Underlay和Overlay https://blog.csdn.net/zjc801blog/article/details/54289683 2017年01月09日 15:47 ...

  3. 数据中心网络架构的问题与演进 — 云网融合与 SD-WAN

    目录 文章目录 目录 前文列表 云网融合 云网融合的应用场景 SD-WAN SD-WAN 的应用场景 企业组网互联 SD-EN 数据中心互联 SD-DCI 云间互联 SD-CX 企业用户接入云 数据中 ...

  4. 数据中心网络架构的问题与演进 — 混合云与 VPC 专有网络

    目录 文章目录 目录 前文列表 历史背景 混合云 Why hybrid cloud? 混合云市场 混合云的逻辑架构 混合云应用场景 灾难恢复 数据备份 负载扩容 应用部署 开发测试生产部署 混合云产品 ...

  5. 数据中心网络架构的问题与演进 — Overlay 网络

    目录 文章目录 目录 前文列表 数据中心网络架构演进回顾 Overlay 网络 Overlay 网络的优势 基于 VxLAN Overlay 的 Spine-Leaf 网络架构 参考文章 前文列表 & ...

  6. 数据中心网络架构的问题与演进 — CLOS 网络与 Fat-Tree、Spine-Leaf 架构

    目录 文章目录 目录 前文列表 CLOS Networking Switch Fabric 胖树(Fat-Tree)型网络架构 Fat-Tree 拓扑示例 Fat-Tree 的缺陷 叶脊(Spine- ...

  7. [转载] Google数据中心网络技术漫谈

    原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...

  8. 数据中心网络架构的问题与演进 — NFV

    目录 文章目录 目录 前文列表 前言 NFV NFV 的最终目标 NFV 的抽象框架 基础架构层与虚拟基础设施管理层 资源管理与业务流程编排层 OSS 层 SDN 控制层 NFV 的生态合作 NFV ...

  9. 数据中心网络架构的问题与演进 — SDN

    目录 文章目录 目录 前文列表 OpenFlow 源起 从 OpenFlow 衍生 SDN 前文列表 <数据中心网络架构的问题与演进 - 传统路由交换技术与三层网络架构> <数据中心 ...

随机推荐

  1. November 15th, 2017 Week 46th Wednesday

    Of all the tribulations in this world, boredom is the one most hard to bear. 所有的苦难中,无聊是最难以忍受的. When ...

  2. jsencrypt加密

    在登录时,前台页面的用户名.密码都是明文传输到后台的,漏洞扫描认为这样子不安全,就想到了前台js加密,后台解密的方法,要用到jsencrypt.js,具体代码如下: 前台页面: <!DOCTYP ...

  3. Debian apt-get 用法

    (说明:sudo--使用超级管理员权限进行apt-get ; packagename--代表安装的软件包名) sudo apt-get update —— 在修改/etc/apt/sources.li ...

  4. Netty入门(十)解码分隔符和基于长度的协议

    我们需要区分不同帧的首尾,通常需要在结尾设定特定分隔符或者在首部添加长度字段,分别称为分隔符协议和基于长度的协议,本节讲解 Netty 如何解码这些协议. 一.分隔符协议 Netty 附带的解码器可以 ...

  5. Articulate Presenter文字乱码的排除

    Articulate Presenter乱码的问题如何设置? 字体乱码的设置: 1.首先如果ppt中有中文内容,肯定需要将Articulate Presenter的Character Set设置为No ...

  6. Python高级知识点总结

    一.可迭代对象.迭代器对象和生成器 像list, tuple等这些序列是可以使用for...in ...语句来进行遍历输出的.这是为什么呢?这就需要知道可迭代对象(Iterable).迭代器对象(It ...

  7. day4-课堂代码

    # ---------------------------------------------------------------------- # def my_function1(name, ad ...

  8. 青岛大学开源OJ平台搭建

    源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...

  9. Mysql 调优2个语句

    一.explain 语句 查看语句的执行计划 二.查看具体每一步耗时 .; .执行SQL .show profiles; 获取2执行SQL的query_id .show profile for que ...

  10. [转]OpenGL进阶(一) - 多视口

    直接给出原文链接:OpenGL进阶(一) - 多视口