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
源IP | ip-vm1 |
目的IP | ip-vm2 |
源mac | mac-vm1 |
目的mac | ff:ff:ff:ff:ff |
②:arp报文到达VTP1,封装vxlan报文,发送给host2和host3
源IP | ip-vm1 |
目的IP | ip-vm2 |
源mac | mac-vm1 |
目的mac | ff:ff:ff:ff:ff |
VNI | 1000 |
UDP协议 | |
外层源IP | ip-host1 |
外层目的IP | ip-host2 |
外层源mac | mac-host1 |
外层目的mac | 下一跳mac |
③:host2和host3都收到vxlan报文,host2拆开发现ip是自己,单播回复arp报文
源IP | ip-vm2 |
目的IP | ip-vm1 |
源mac | mac-vm2 |
目的mac | mac-vm1 |
host3拆开报文发现目的ip不是自己,丢弃 | |
④:同理,回复的报文也要经过vxlan封装 | |
⑤:vm1发送icmp报文到VTP1 | |
源IP | ip-vm1 |
– | – |
目的IP | ip-vm2 |
源mac | mac-vm1 |
目的mac | mac-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