VLAN和VXLAN协议介绍
时间:2023-06-27 10:15:01 | 来源:网站运营
时间:2023-06-27 10:15:01 来源:网站运营
VLAN和VXLAN协议介绍:本文将介绍名字很接近的两个网络协议vlan和vxlan,后续会补充另外两个叫做MacVlan和IPVlan的协议。
Vlan
Vlan:virtual local area network 虚拟局域网
这个协议可以将一个局域网分成多个虚拟局域网,也可以将不同的局域网组成一个虚拟局域网。我们使用vlan可以做以下的事情:
- 变更网络中的设备时,通过vlan直接配置,可以省去物理线路的重新调整
- 将一个lan下的设备分到不同的虚拟的lan中,虚拟lan之间在链路层相互隔离,每个虚拟lan拥有自己的广播域,解决因为ARP引起的广播风暴问题
- 接上条,vlan可以将使用同一条线路、物理端口的设备隔离开来,使其互不影响,保证安全性
- 跨地域构建vlan
配置vlan有几种方式,有些配置的方式涉及了网络层甚至更高层,这时需要配置vlan的设备同时有相应的支持。配置vlan的方法有以下几种:
- 通过交换机的端口划分vlan:指定交换机的哪个端口属于哪个vlan,这样连接到同一个指定的vlan的端口的设备就位于一个vlan中
- 通过设备的mac地址决定属于哪一个vlan
- 通过IP地址和子网来决定属于哪一个vlan
- 根据数据包信息中的用户决定属于哪个一vlan
vlan中还有一个概念:trunk,即指承载了多个vlan的网络线路。这时为了能确定网络帧属于哪个vlan,会在帧的信息中添加相应的tag,网络中相连的交换机、路由器的端口也必须支持识别、处理这样的帧,在帧中添加或取出相应的tag。添加tag最常用的协议为IEEE 802.1Q。802.1Q在Mac地址段后、以太网类型字段(EtherType)前添加了32bit的802.1Q Header信息,如下:
31~16 | 15~13 | 12 | 11~0 |
---|
TPID | TCI | TCI | TCI |
TPID | PCP | DEI | VID |
- TPID(Tag protocol identifier):值为0x8100,表明此帧为802.1Q-tagged帧。如果不是添加tag的帧,这部分的16bit为以EtherType段,所以通过读取这个位置的16bit是不是0x8100就可以判断是不是添加了标记的帧。
- TCI(Tag control information)
- PCP(Priority code point):设置帧优先级,为IEEE 802.1p协议中指定的Class of Service(CoS)
- DEI(Drop eligible indicator):可以与PCP一起使用或者分开使用表明如果网络阻塞,此帧可以丢弃
- VID(VLAN identifier):12bit,通过ID表明是哪一个vlan的帧。0x000和0xFFF为保留值,不能配置(0x000表示帧中不包含VLAN ID,0xFFF表示某种用途)。0x001为默认值。
Vxlan
Vxlan:Virtual Extensible LAN 虚拟可扩展局域网
目前vxlan一般使用在虚拟机/容器网络中。使用Vxlan,我们可以将多个原本在二层网络上并不相通的局域网构建成一个虚拟的大的二层网络,我们无需关注底层网络的细节,只要设备之间在三层是连通的。相信了解云计算网络的人一定对这个词一定很熟悉,很多云基础设施的虚拟机之间的网络就是使用vxlan来构建,openshift中容器网络也使用了vxlan使容器和节点之间能够相互访问。
使用vlan也可以将多个局域网构建成一个大的二层网络,那么为什么不用vlan而使用vxlan呢?从名字也可以看出vxlan是”扩展“了vlan,自然也解决了vlan无法解决的问题,即:
- vlan的VID段只能表示4094(2^12-2)个虚拟局域网,这个数量限制了云平台上能够使用的租户的数量,我们需要更大的字段来对虚拟网络进行标识。可以通过在vlan的tag外层再套一层tag,即IEEE 802.1ad协议缓解这个问题。与IEEE 802.1ad这种有一定的层级的概念的协议相比,vxlan的灵活性更好。
- 虚拟机在物理机上运行,受限于物理机的网络,如果在同一个局域网下部署虚拟机,就需要在同一个vlan的物理机内部署,会造成资源使用的不均衡。
- 一旦局域网内虚拟机数目达到一定程度,使用vlan协议,每个虚拟机的mac地址都要被记录,交换机记录所有的节点的mac地址就会收到硬件资源的限制。而使用vxlan,只需记录物理机的mac地址即可实现。
- vxlan使用四层协议UDP进行封包,可以利用四层协议来优化数据包在线路中的传递,而vlan不能做到这一点。
vxlan是怎么做到以上这些的呢?下面我们来看一看vxlan协议的原理:
vxlan在原始的二层报文的基础上封装了一个头部信息,然后再通过udp进一步封装,udp的目标地址使用4789端口,如下:
14Byte或更多 | 20Byte | 8Byte | 8Byte | |
---|
外层mac头 | 外层ip头 | 外层udp头 | vxlan头 | 原始二层帧 |
vxlan网络中的对vxlan报文进行封包和解包的设备(例如交换机和物理机)叫做VTEP(vxlan tunnel endpoints),外层的ip、mac头中的源和目标地址为VTEP的地址。VTEP之间会记录VTEP的IP与虚拟机的mac、VNI的映射关系。
其中vxlan头部信息是这样的:
63~56 | 55~32 | 31~8 | 7~0 |
---|
vxlan flags | reserved | VNI | reserved |
- vxlan flags:固定值,0x08
- VNI(vxlan network identifier):24bit,与vlan中的VID用法一致,表示局域网信息
- reserved:固定值,两个reserved段都为0
注意的是,vxlan将原始的包额外的增加了信息,此时要相应的减小MTU。
vxlan协议中,发送端的包封装上述头部信息后,通过udp发送出去,接收端的接收到包后,将包解开,拿到数据进行处理。这也是overlay网络的典型的处理方式。
一个运行流程的例子如下:考虑两台物理机VTEP1和VTEP2上面的同一VNI的VM1和VM2进行通信。VTEP1和VTEP2在同一多播组内
- VM1广播发送ARP请求,给出内层的源mac、源ip、目标ip。
- VTEP1封装这个包,添加VNI,进行多播,VTEP2接收报文并解析,记录VNI、内层mac地址、VTEP1的ip地址,发送给VM2。
- VM2响应arp请求,VTEP2进行封装,向VTEP1发送单播。VTEP1接收解析后记录VNI、内层目标mac地址、外层VTEP2的ip地址,然后发给VM1,VM1拿到了VM2的mac。VTEP1和VTEP2也都保存了对方的信息。
- VM1获得VM2 mac地址后向其发送数据。VTEP1封装数据包,查表,获得外层的目标地址(即VTEP2的地址),然后查arp表,填入外层的ip头信息、mac头信息,与VTEP2进行通信,VTEP2收到包后解包,发送给VM2。类似这样整个通信的流程就完成了。
参考文献:
- 图文并茂讲VLAN,让你看一遍就理解VLAN
- VXLAN vs VLAN