《深入理解OpenStack Neutron》—3.2.2 VXLAN实现模型
3.2.2 VXLAN实现模型
VXLAN的实现模型与VLAN的实现模型非常相像,如图3-10所示。
从表面上来看,VXLAN与VLAN的实现模型相比,仅仅有一个差别:VLAN中对应的是br-ethx,而VXLAN中对应的是br-tun。(br-tun是一个混合单词的缩写:Bridge-Tunnel。
此时这个Tunnel是VXLANTunnel。)
其实,br-ethx是一个OVS,br-tun也是一个OVS。所以说,两者的差别不是实现组件的差别,而是组件所执行的功能的差别。br-ethx所执行的功能是一个普通二层交换机的功能,br-tun所执行的是VXLAN中VTEP(VXLAN Tunneling End Point,VXLAN隧道终结点)的功能。图3-10为两个br-tun所对应的接口IP分别标识为10.0.100.88和10.0.100.77,这两个IP就是VXLAN的隧道终结点IP。
图3-10 VXLAN实现模型
由于文章主题和篇幅的原因,没法对VXLAN做深入的讲述。感兴趣的读者可以关注微信公众号“标哥说天下”,那里面有比较详细的VXLAN的介绍文章。
VXLAN与VLAN一样也存在内外VID的
转换。通过VXLAN,就可以明白Neutron为什么要做内外VID的转换,如图3-11所示。
图3-11中,把br-tun一分为二,设想为两部分:上层是VTEP,对VXLAN隧道进行了终结;下层是一个普通的VLAN Bridge。所以,对于Host来说,它有两重网络,如图3-11所示,虚线以上是VXLAN网络,虚线以下是VLAN网络。如此一来,VXLAN内外VID的转换则变成了不得不做的工作,因为它不仅仅是表面上看起的那样,仅仅是VID数值的转变,而且背后还蕴含着网络类型的转变。
但是问题是,VLAN类型的网络并不存在VXLAN这样的问题。当Host遇到VLAN时,它并不会变成两重网络,可为什么也要做内外VID的转换呢?这主要是为了避免内部VLAN ID的冲突。通过3.2.1节的描述可以知道,内部VLAN ID是体现在br-int上的,而1个Host内装有1个br-int,也就是说VLAN和VXLAN是共用一个br-int。假设VLAN网络不做内外VID的转换,则很可能引发br-int上的内部VLAN ID冲突,如表3-2所示。
表3-2 VLAN ID的内外之别
VXLAN做内外VID转换时,并不知道VLAN的外部VID是什么,所以它就根据自己的算法将内部VID转换为100,结果很不幸中枪,与VLAN网络的外部VID相等。因为VLAN的内部VID没有做转换,仍然是等于外部VID,所以两者的内部VID在br-int上产生了冲突。正是这个原因,所以VLAN类型的网络,也要做内外VID的转换,而且是所有网络类型都需要做内外VID的转换。这样的话Neutron就能统一掌控,从而避免内部VID的冲突。
VXLAN的内外VID的转换过程与VLAN的内外VID转换过程非常相像,不过在关键步骤上却又有很大的不同。下面就详细描述一下这个转换过程。
1.?出报文的VID转换过程
VXLAN类型网络出报文的内外VID转换过程,如图3-12所示。
图3-12 VXLAN类型网络出报文内外VID的转换
图3-12中,我们以VM1-3为例,讲述内外VID的转换过程。报文从VM1-3发出,从br-tun离开Host,这一路的VID转换如下:
①报文从VM1-3的A端口发出,是Untag报文;
②报文从B端口进入qbr-xxx,再从C端口离开qbr-xxx,也是Untag报文;
③报文从D端口进入br-int,在D端口,报文被打上标签,VLAN ID = 50;
④报文从E端口离开br-int,此时报文VID = 50;
⑤报文从F端口进入br-tun,此时报文VID = 50;
⑥报文从G端口离开Host,在G端口,报文被从VLAN封装为VXLAN,并且VNI = 100。
可以看到,报文在br-int的D端口被打上内部VLAN标签,变成了Tag报文,在br-tun的G端口做了两件事情:报文格式从VLAN封装为VXLAN,VNI赋值为100。
2.?入报文的VID转换过程
VXLAN类型网络入报文的内外VID转换过程,如图3-13所示。
图3-9中,我们以VM1-3为例,讲述内外VID的转换过程。报文从Host进入,从qbr-xxx进入VM1-3,这一路的VID转换如下:
①报文来到Host进到br-tun,是VXLAN
报文,VNI = 100;
②报文在br-tun的G端口,被转换为VLAN报文,VLAN ID = 50;
③报文从br-tun离开,一直到进入br-int,都是VLAN报文,VLAN ID = 50;
④报文从br-int D端口离开br-int,报文被剥去Tag,变成Untag报文;
⑤报文从C端口进入qbr-xxx,然后再从B端口离开,再从A端口进入VM1-3,这一路都是Untag报文。
可以看到,报文在br-tun的G端口做了两件事情:报文格式从VXLAN拆封为VLAN,VLAN ID赋值为50,在br-int的D端口被剥去VLAN标签,变成了Untag报文。
- 点赞
- 收藏
- 关注作者
评论(0)