vxlan:虚拟可拓展局域网

产生条件:局域网3层架构都是有冗余的,但要防止环路又不能使用STP(因为数据中心的每一个链路都是核心带宽,阻塞接口代价太大)3层可以用ospf和isis协议天然防环,因为使用SPF算法

虚拟化技术产生:对于一些低流量网站,没有充分发挥高性能服务器(刀片服务器)的作用,可以将服务器虚拟化成2个供其他网站使用,每一个虚拟机就是一个服务器,共享硬件资源,CPU使用率改变,能源消耗没有改变。

①:早期数据中心:服务器之间不能进行互访,占用带宽资源,使用vlan进行隔离

②:vlan局限:vlan使用0-4096(0和4096保留)2的12次方

③:vxlan应运而生

虚拟机动态迁移:虚拟机在迁移前后的IP和MAC地址不能改变,而且虚拟机的运行状态也必须保持原状(例如TCP会话状态),所以虚拟机的动态迁移只能在同一个二层域中进行,而不能跨二层域迁移。传统网络虚拟机迁移只能在同一vlan下,若想实现跨vlan迁移就需要把这些虚拟机纳入同一个二层网络,在IP网络基础上,当源和目的之间有通信需求时,便在IP网络之上创建一条虚拟的隧道,透明转发用户数据。任意两点之间都能通过VXLAN隧道来通信,忽略底层网络的结构和细节。从服务器的角度看,VXLAN为它们将整个基础网络虚拟成了一台巨大的“二层交换机”,所有服务器都连接在这台虚拟二层交换机上;

vxlan隔离:2的24次方,500w个隔离域

大二层:跨越三层的二层网络,就是在三层网络之上构建了二层网络,1w台设备以上才是大二层

vxlan动态数据迁移
①:在上海和北京之间建立vxlan隧道,相当于在一个局域网下(隧道可以打在接入层交换机身上,也可以打在服务器身上)

②:发送数据,利用UDP,封包时加上VNI,转发时仅根据ip

③:接收数据,建立一台相同的虚机、ip和mac都一样

④:数据迁移后,上海对外发布,删除原来北京的虚机

vxlan也有短暂的服务中断,当北京发送完一次数据到上海,这是又有新数据进入北京,需要不停的发送到上海,注意发送的数据永远比进入的数据多,所以选在半夜

VTEP:隧道端口IP,维护2张表(一个是vlan和vxlan的对应关系表,一个是mac地址表)
NVE:边缘设备
VNI:相当于vlan-id,两个服务器vlan-id相同可以通信

vxlan网关:可以和传统网络兼容,在3层之上建隧道必须通过vxlan网关

NFV:网络功能虚拟化,一台服务器上虚拟出来的虚拟当成网络设备(路由器/交换机)使用

  • 同一network内不同主机vm间通信(vm1去往vm2)

①:vm1发送arp请求报文请求vm2的mac地址,发送给VTP1

源IPip-vm1
目的IPip-vm2
源macmac-vm1
目的macff:ff:ff:ff:ff

②:arp报文到达VTP1,封装vxlan报文,发送给host2和host3

源IPip-vm1
目的IPip-vm2
源macmac-vm1
目的macff:ff:ff:ff:ff
VNI1000
UDP协议
外层源IPip-host1
外层目的IPip-host2
外层源macmac-host1
外层目的mac下一跳mac

③:host2和host3都收到vxlan报文,host2拆开发现ip是自己,单播回复arp报文

源IPip-vm2
目的IPip-vm1
源macmac-vm2
目的macmac-vm1
host3拆开报文发现目的ip不是自己,丢弃
④:同理,回复的报文也要经过vxlan封装
⑤:vm1发送icmp报文到VTP1
源IPip-vm1
目的IPip-vm2
源macmac-vm1
目的macmac-vm2
⑥:VTP1封装vxlan到VTP2和VTP3
  • linux下发流表实现vxlan

1、OVS:虚拟交换机,实现vm和host的数据交换,支持openflow协议,连接controller
2、Bridge:代表一个交换机,一个host可创建多个bridge
3、port:bridge上的接口
4、interface:host上的接口
5、controller:openflow控制器

  • openvswitch常用组件
    1、ovs-dpctl:配置交换机内核模块,控制转发规则
    2、ovs-vsctl:网桥,配置controller
    3、ovs-ofctl:控制ovs流表内容

在linux系统种,VTEP通过br-tun的openflow流实现,br-tun下面连接的是br-int,br-int连接虚拟机,并且给给不同vm打上vlan tag,从而实现一个host里不同vm之间彼此隔离
在这里插入图片描述
关于vxlan和vlan的对应关系是在入方向的table=4表里实现

# ovs-vsctl dump-flows br-tun table=4
table=4,priority=1,tun_id=0x3 actions=mod_vlan_vid:4,resubmit(,9)
table=4,priority=1,tun_id=0x1c actions=mod_vlan_vid:5,resubmit(,9)

可以看出vxlan id=3对应vlan4,vxlan id=28对应vlan5

# ovs-vsctl dump-flows br-tun table=2
table=4,priority=1,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00,resubmit(,20)
table=4,priority=1,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,resubmit(,22)

因为广播的mac地址是FF:FF:FF:FF:FF:FF
组播的mac地址第一个字节的最低bit必然是1
单播的mac地址第一个字节的最低bit必然是0
所以单播被送到table=20,组播/广播送到table=22

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐