openvswitch流表转发vxlan报文

vxlan:虚拟可拓展局域网

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

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

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

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

③:vxlan应运而生

两地三中心:在北京有2个数据中心,一主一辅对外提供服务,在上海还有一个数据中心,作为备份在运行,但不提供服务,主要是容灾,如果北京服务器挂了,用户无法感知仍访问原IP通过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

发布了173 篇原创文章 · 获赞 77 · 访问量 9939

猜你喜欢

转载自blog.csdn.net/ambzheng/article/details/103390802