首页 -> 行业 > 正文

Linux环境中常用的VXLAN实现实例

    来源: just4coding  2023-06-30 10:20:01

云计算环境的一个典型属性是多租户共享物理资源。其中每个租户可以构建自己专属的虚拟逻辑网络,而每个逻辑网络都需要由唯一的标识符来标识。不同的逻辑网络默认情况下相互隔离。传统上,网络工程师一般使用VLAN来隔离不同二层网络,但VLAN的标识符命名空间只有12位,只能提供4096个标识符,这无法满足大型云计算环境的需求。

另外,使用VLAN隔离虚拟逻辑网络,往往需要对底层物理网络设备进行手动配置,这无法满足云计算环境的自动化需求。为了解决VLAN在网络虚拟化环境中应用存在的种种问题,Cisco,VMware等厂商提出了新的网络协议VXLAN来隔离虚拟逻辑网络。

VxLAN基本原理


【资料图】

VXLAN的全称为Virtual eXtensible LAN,从名称看,它的目标就是扩展VLAN协议。802.1Q的VLAN TAG只占12位,只能提供4096个网络标识符。而在VXLAN中,标识符扩展到24位,能提供16777216个逻辑网络标识符,VXLAN的标识符称为VNI(VXLAN Network Identifier)。另外,VLAN只能应用在一个二层网络中,而VXLAN通过将原始二层以太网帧封装在IP协议包中,在IP基础网络之上构建overlay的逻辑大二层网络。

我们来看具体协议包结构。VXLAN将二层数据帧封装在UDP数据包中,构建隧道在不同节点间通信。包结构如图:

从包结构上可以看到,VXLAN会额外消耗50字节的空间。为了防止因数据包大小超过网络设备的MTU值而被丢弃,需要将VM的MTU减少50甚至更多,或者调整中间网络设备的MTU。

VXLAN协议中将对原始数据包进行封装和解封装的设备称为VTEP(VXLAN Tunnel End Point),它可以由硬件设备实现,也可以由软件实现。

VXLAN的整体应用示意拓朴结构如图:

我们来看VXLAN的通信过程。在上图的虚拟机VM1和VM2处于逻辑二层网络中。VM1发出的二层以太网帧由VTEP封装进IP数据包,之后发送到VM2所在主机。VM2所在主机接收到IP报文后,解封装出原始的以太网帧再转发给VM2。

然而,VM1所在主机的VTEP做完数据封装后,如何知道要将封装后的数据包发到哪个VTEP呢?实际上,VTEP通过查询转发表来确定目标VTEP地址,而转发表通过泛洪和学习机制来构建。目标MAC地址在转发表中不存在的流量称为未知单播(Unknown unicast)。广播(broadcast)、未知单播(unknown unicast)和组播(multicast)一般统称为BUM流量。VXLAN规范要求BUM流量使用IP组播进行洪泛,将数据包发送到除源VTEP外的所有VTEP。目标VTEP发送回响应数据包时,源VTEP从中学习MAC地址、VNI和VTEP的映射关系,并添加到转发表中。后续VTEP再次发送数据包给该MAC地址时,VTEP会从转发表中直接确定目标VTEP,从而只发送单播数据到目标VTEP。

OpenvSwitch没有实现IP组播,而是使用多个单播来实现洪泛。洪泛流量本身对性能有一定影响,可以通过由controller收集相应信息来填充转发表而避免洪泛。

Linux环境中常用的VXLAN实现有两种:

Linux内核实现

OpenvSwitch实现接下来分别以实例来说明。

Linux 的实现

首先看Linux内核实现实例。我们的测试环境有三台主机,物理网卡IP分别为192.168.33.12/24, 192.168.33.13/24和192.168.33.14/24。我们在每台机器上创建一个Linux Bridge, 三台主机上的Linux Bridge默认接口的IP分别设置为10.1.1.2/24, 10.1.1.3/24和10.1.1.4/24。此时三台主机的Linux网桥处于同一虚拟二层网络,但由于没有相互连接,所以无法互相访问。我们通过建立VXLAN隧道使其可互相访问实现虚拟二层网络10.1.1.0/24。网络结构如图:

首先在主机1上创建Linux网桥:

brctladdbrbr0

给网桥接口设置IP并启动:

ipaddradd10.1.1.2/24devbr0iplinksetupbr0

我们从主机1访问主机2上的虚拟二层网络IP, 访问失败:

[root@localhostvagrant]#ping10.1.1.3PING10.1.1.3(10.1.1.3):56databytes^C---10.1.1.3pingstatistics---1packetstransmitted,0packetsreceived,100.0%packetloss

接下来,我们添加VTEP虚拟接口vxlan0, 并加入组播IP:239.1.1.1, 后续发送到该组播IP的数据包,该VTEP都可以接收到:

iplinkaddvxlan0typevxlanid1group239.1.1.1deveth1dstport4789

将虚拟接口vxlan0连接到网桥:

brctladdifbr0vxlan0

在另外两台主机上也完成相似配置后,我们开始测试。

首先在主机1查看VTEP的转发表,可以看到此时只有一条组播条目,所有发出流量都将发送给该组播IP:

[root@localhostvagrant]#bridgefdbshowdevvxlan0000000:00dst239.1.1.1viaeth1selfpermanent

我们再次从主机1上访问主机2上的网桥IP, 此时访问成功:

[root@localhostvagrant]#ping10.1.1.3PING10.1.1.3(10.1.1.3)56(84)bytesofdata.64bytesfrom10.1.1.3:icmp_seq=1ttl=64time=1.58ms64bytesfrom10.1.1.3:icmp_seq=2ttl=64time=0.610ms^C---10.1.1.3pingstatistics---2packetstransmitted,2received,0%packetloss,time1001msrttmin/avg/max/mdev=0.610/1.096/1.582/0.486ms

此时再次在主机1上查看VTEP转发表,可以看到转发表中已经学习到10.1.1.3所在主机的VTEP地址:192.168.33.13,下次再发送数据给10.1.13所对应的MAC该直接发送到192.168.33.13:

[root@localhostvagrant]#bridgefdbshowdevvxlan0000000:00dst239.1.1.1viaeth1selfpermanent2ea27b:31dst192.168.33.13self

我们根据主机2上tcpdump的抓包结果来分析具体过程:

1454.330846IP192.168.33.12.38538>239.1.1.1.4789:VXLAN,flags[I](0x08),vni1ARP,Requestwho-has10.1.1.3tell10.1.1.2,length28

10.1.1.2所在主机不知道10.1.1.3对应的MAC地址,因而发送ARP广播,ARP数据包发送至VTEP,VTEP进行封装并洪泛给组播IP:239.1.1.1。

1454.330975IP192.168.33.13.58823>192.168.33.12.4789:VXLAN,flags[I](0x08),vni1ARP,Reply10.1.1.3is-at2ea27b:31,length28

主机2收到数据包之后解封装,VTEP会学习数据包的MAC及VTEP地址,将其添加到转发表,并将解封后的数据帧发送到网桥接口10.1.1.3。10.1.1.3的接口发送ARP响应。

1454.332055IP192.168.33.12.48980>192.168.33.13.4789:VXLAN,flags[I](0x08),vni1IP10.1.1.2>10.1.1.3:ICMPechorequest,id4478,seq1,length64

主机1之后开始发送ICMP数据包,从这里可以看出外层IP地址不再为组播IP,而是学习到的192.168.33.13。

1454.332225IP192.168.33.13.55921>192.168.33.12.4789:VXLAN,flags[I](0x08),vni1IP10.1.1.3>10.1.1.2:ICMPechoreply,id4478,seq1,length64

接着,10.1.1.3发送回ICMP响应包。

OvS 的实现

下面再来说明OpenvSwitch实现实例。

OVS不支持组播,需要为任意两个主机之间建立VXLAN单播隧道。与上边示例的拓朴结构相比,我们使用了两个OVS网桥,将虚拟逻辑网络的接口接入网桥br-int,将所有VXLAN接口接入br-tun。两个网桥使用PATCH类型接口进行连接。由于网桥br-tun上有多个VTEP,当BUM数据包从其中某个VTEP流入时,数据包会从其他VTEP接口再流出,这会导致数据包在主机之间无限循环。因而我们需要添加流表使VTEP流入的数据包不再转发至其他VTEP。若逻辑网络接口与VTEP连接同一网桥,配置流表将比较繁琐。单独将逻辑网络接口放到独立的网桥上,可以使流表配置非常简单,只需要设置VTEP流入的数据包从PATCH接口流出。

拓朴结构如图:

首先在主机1上创建网桥br-int和br-tun:

ovs-vsctladd-brbr-intovs-vsctladd-brbr-tun

创建PATCH接口连接br-int和br-tun:

ovs-vsctladd-portbr-intpatch-int--setinterfacepatch-inttype=patchoptions:peer=patch-tunovs-vsctladd-portbr-tunpatch-tun--setinterfacepatch-tuntype=patchoptions:peer=patch-int

创建单播VTEP连接主机2:

ovs-vsctladd-portbr-tunvxlan0--setinterfacevxlan0type=vxlanoptions:remote_ip=192.168.33.13

创建单播VTEP连接主机3:

ovs-vsctladd-portbr-tunvxlan1--setinterfacevxlan1type=vxlanoptions:remote_ip=192.168.33.14

接下来,我们给br-tun添加流表来处理流量。

首先查看br-tun上各接口的PORT ID,从结果看到Patch Port为1,VTEP分别为5和6:

[root@localhostvagrant]#ovs-ofctlshowbr-tunOFPT_FEATURES_REPLY(xid=0x2):dpid:00006e12f4fd6949n_tables:254,n_buffers:256capabilities:FLOW_STATSTABLE_STATSPORT_STATSQUEUE_STATSARP_MATCH_IPactions:outputenqueueset_vlan_vidset_vlan_pcpstrip_vlanmod_dl_srcmod_dl_dstmod_nw_srcmod_nw_dstmod_nw_tosmod_tp_srcmod_tp_dst1(patch-tun):addrfafbbfconfig:0state:0speed:0Mbpsnow,0Mbpsmax5(vxlan0):addr6585eaconfig:0state:0speed:0Mbpsnow,0Mbpsmax6(vxlan1):addr38fa98config:0state:0speed:0Mbpsnow,0MbpsmaxLOCAL(br-tun):addr12fd49config:PORT_DOWNstate:LINK_DOWNspeed:0Mbpsnow,0MbpsmaxOFPT_GET_CONFIG_REPLY(xid=0x4):frags=normalmiss_send_len=0

清空br-tun流表:

ovs-ofctldel-flowsbr-tun

数据包进入br-tun后开始匹配table 0的流。我们使用table 0区分流量来源。来源于br-int的数据包由table 1处理,VTEP流入的数据交由table 2处理, 并丢弃其他PORT进入的数据包:

ovs-ofctladd-flowbr-tun"table=0,priority=1,in_port=1actions=resubmit(,1)”ovs-ofctladd-flowbr-tun"table=0,priority=1,in_port=5actions=resubmit(,2)"ovs-ofctladd-flowbr-tun"table=0,priority=1,in_port=6actions=resubmit(,2)”ovs-ofctladd-flowbr-tun"table=0,priority=0,actions=drop”

接着添加table 1的流, table 1用于处理来自br-int的流量,单播数据包交由table 20处理,多播或广播数据包交由table 21处理:

ovs-ofctladd-flowbr-tun"table=1,priority=0,dl_dst=000000:00/010000:00,actions=resubmit(,20)”ovs-ofctladd-flowbr-tun"table=1,priority=0,dl_dst=010000:00/010000:00,actions=resubmit(,21)”

table 21处理广播流量,将数据包从所有VTEP的PORT口发出:

ovs-ofctladd-flowbr-tun"table=21,priority=0,actions=output:5,output:6”

table 2处理VTEP流入的数据包,在这里我们实现学习机制。来自VTEP的数据包到达后,table 2从中学习MAC地址,VNI、PORT信息,并将学习到的流写入table 20中,并将流量由PATCH口发送到br-int上, 并将学习到的流优先级设为1:

ovs-ofctladd-flowbr-tun"table=2,priority=0,actions=learn(table=20,hard_timeout=300,priority=1,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1”

table 20处理单播流量,我们将默认流优先级设置为0。因为学习到的流优先级设置为1,因而只有匹配不到目标MAC的未知单播交由table 21处理,table 21将流量广播到所有VTEP:

ovs-ofctladd-flowbr-tun"table=20,priority=0,actions=resubmit(,21)"

整体处理逻辑如图:

我们查看流表, 发现table 20中只有一条默认添加的流:

[root@localhostvagrant]#ovs-ofctldump-flowsbr-tuntable=20NXST_FLOWreply(xid=0x4):cookie=0x0,duration=1.832s,table=20,n_packets=0,n_bytes=0,idle_age=1,priority=0actions=resubmit(,21)

我们从主机1访问主机3上的虚拟网络IP,访问成功:

[root@localhostvagrant]#ping10.1.1.4-c2PING10.1.1.4(10.1.1.4)56(84)bytesofdata.64bytesfrom10.1.1.4:icmp_seq=1ttl=64time=1.45ms64bytesfrom10.1.1.4:icmp_seq=2ttl=64time=0.538ms---10.1.1.4pingstatistics---2packetstransmitted,2received,0%packetloss,time1002msrttmin/avg/max/mdev=0.538/0.994/1.451/0.457ms

我们再次查看流表, 发现table 20中已经多了一条学习到的流,下次再向该MAC发送数据包,数据将直接从PORT 6中发出:

[root@localhostvagrant]#ovs-ofctldump-flowsbr-tuntable=20NXST_FLOWreply(xid=0x4):cookie=0x0,duration=164.902s,table=20,n_packets=36,n_bytes=3360,hard_timeout=300,idle_age=19,hard_age=19,priority=1,dl_dst=ee090e:46actions=load:0->NXM_NX_TUN_ID[],output:6cookie=0x0,duration=223.811s,table=20,n_packets=1,n_bytes=98,idle_age=164,priority=0actions=resubmit(,21)

本文简要介绍了VXLAN的原理和实例。

编辑:黄飞

标签:

【免责声明】

1、凡本网注明出处非(巨潮财经网)的作品,均转载于自其它媒体,并不代表本网赞同其观点和对其真实性负责,目的在于信息的传递,本网不承担稿件侵权行为的连带责任,如对稿件有质疑请与本网客服联系。

2、刊发此文目的在于传递更多信息,文章内容仅供参考,不构成投资建议,投资者据此操作,风险自担。

3、如涉及作品内容、版权等其它问题,请在15日内联系本网客服。

阅读延展

Linux环境中常用的VXLAN实现实例

Linux环境中常用的VXLAN实现实例

Linux环境中常用的VXLAN实现实例-VXLAN的全称为VirtualeXtensibleLAN,

2023-06-30 10:20:01

每日热门:山西:“晋碳行”碳普惠平台正式上线

每日热门:山西:“晋碳行”碳普惠平台正式上线

原标题:“晋碳行”碳普惠平台正式上线获得“碳积分”参与碳减排6月28

2023-06-30 09:41:34

中汽协:5月汽车商品进出口总额为244.4亿美元 环比增长3%

中汽协:5月汽车商品进出口总额为244.4亿美元 环比增长3%

财经网汽车6月30日讯,据中国汽车工业协会整理的海关总署数据显示,202

2023-06-30 09:40:33

全球快播:也门政府军基地遭无人机袭击造成至少4人死亡

全球快播:也门政府军基地遭无人机袭击造成至少4人死亡

亚丁消息:也门政府一名官员29日说,胡塞武装当天对该国南部达利阿省的

2023-06-30 09:04:46

如何让电脑假装蓝屏_怎么让电脑蓝屏 全球即时

如何让电脑假装蓝屏_怎么让电脑蓝屏 全球即时

1、下面这是蓝屏最常见的原因和解决方法:一硬件:1:蓝屏最常见就是内

2023-06-30 08:43:56

最近更新

Linux环境中常用的VXLAN实现实例

Linux环境中常用的VXLAN实现实例

Linux环境中常用的VXLAN实现实例-VXLAN的全称为VirtualeXtensibleLAN,

2023-06-30 10:20:01

股票选购技巧有哪些?股票入门如何选股

股票选购技巧有哪些?股票入门如何选股

股票选购技巧有哪些?1、研究公司的基本面。在选择股票时,了解所投资公司的基本面非常重要,这包括公司的财务状况、盈利能力...

2023-06-30 10:31:04

送股与转股的区别?债转股后股价会上涨吗?

送股与转股的区别?债转股后股价会上涨吗?

送股与转股的区别?送股是上市公司用年终收益盈余的一部分以送股的形式给你分红,只有公司在有利润可以分配时,才能送股。送股...

2023-06-30 10:26:47

10转10送10股有多少股?股票分红前卖出好还是持有好

10转10送10股有多少股?股票分红前卖出好还是持有好

10转10送10股有多少股?10转10送10股是投资者每10股转10股并送10股,即每10股增加20股,变为30股。例如,某投资者有1000股,上市公司10转10

2023-06-30 09:55:15

双对数坐标图怎么画_双对数坐标

双对数坐标图怎么画_双对数坐标

1、打开一个excel表格:2、在表格内输入需要插入的数据,这里模拟了一

2023-06-30 09:51:49

每日热门:山西:“晋碳行”碳普惠平台正式上线

每日热门:山西:“晋碳行”碳普惠平台正式上线

原标题:“晋碳行”碳普惠平台正式上线获得“碳积分”参与碳减排6月28

2023-06-30 09:41:34

热资讯!双星新材(002585):签订PET复合铜箔首张订单 新能源材料业务突破

热资讯!双星新材(002585):签订PET复合铜箔首张订单 新能源材料业务突破

双星新材(002585):签订PET复合铜箔首张订单新能源材料业务突破

2023-06-30 09:50:03

4GB未拆封初代iPhone拍卖,预估成交价10万美元-天天快资讯

4GB未拆封初代iPhone拍卖,预估成交价10万美元-天天快资讯

财经网科技6月30日讯,一台工厂密封、来自2007年的初代iPhone将于明天

2023-06-30 09:49:03

大众任命格诺特·多尔纳为奥迪新首席执行官 9月1日起生效-热头条

大众任命格诺特·多尔纳为奥迪新首席执行官 9月1日起生效-热头条

财经网汽车6月30日讯,大众任命格诺特·多尔纳(GernotDöllner)

2023-06-30 09:41:07

快讯 | 维密发布多项领导层任命

快讯 | 维密发布多项领导层任命

财经网生活讯近日,维多利亚的秘密(Victoria’sSecret&Co)宣布

2023-06-30 09:33:06

快讯|财信吉祥人寿注册资本由42.31亿元增至50亿元获批

快讯|财信吉祥人寿注册资本由42.31亿元增至50亿元获批

财经网金融讯6月29日,国家金融监督管理总局网站显示,湖南银保监局发

2023-06-30 09:49:27

环球关注:大众集团正商谈接入特斯拉超级充电网络

环球关注:大众集团正商谈接入特斯拉超级充电网络

财经网汽车6月30日讯,大众汽车集团表示正与特斯拉方面谈判,或将接入

2023-06-30 09:36:16

港股汽车延续近日涨势

港股汽车延续近日涨势

财经网汽车6月30日讯,截至发稿,小鹏汽车涨超10%、蔚来涨3%、长城汽车

2023-06-30 09:55:09

中汽协:5月汽车商品进出口总额为244.4亿美元 环比增长3%

中汽协:5月汽车商品进出口总额为244.4亿美元 环比增长3%

财经网汽车6月30日讯,据中国汽车工业协会整理的海关总署数据显示,202

2023-06-30 09:40:33

视角|优时比中国总裁莫安岑:发挥桥梁作用,因地制宜发展本地市场

视角|优时比中国总裁莫安岑:发挥桥梁作用,因地制宜发展本地市场

段静远 文到今年4月,莫安岑接任优时比中国总裁恰满一年时间,这是莫安

2023-06-30 09:39:40

快讯|青海银行行长应海峰任职资格获批

快讯|青海银行行长应海峰任职资格获批

财经网金融讯6月29日,国家金融监督管理总局网站显示,青海银保监局发

2023-06-30 09:46:17

分拆上市是好事还是坏事?股票拆分对股民是亏还是赚

分拆上市是好事还是坏事?股票拆分对股民是亏还是赚

分拆上市是好事还是坏事?分拆上市对于公司和投资者来说,既有利也有弊,并没有一个绝对的好坏。投资者可以参考以下方面进行分...

2023-06-30 09:52:31

万洲金业:服务品质是根本,做大做强只是水到渠成

万洲金业:服务品质是根本,做大做强只是水到渠成

纵观市场,不管是什么品牌,也不管它们分属哪个领域,都有着一个共

2023-06-30 09:25:24

全球快播:也门政府军基地遭无人机袭击造成至少4人死亡

全球快播:也门政府军基地遭无人机袭击造成至少4人死亡

亚丁消息:也门政府一名官员29日说,胡塞武装当天对该国南部达利阿省的

2023-06-30 09:04:46

【新要闻】衡山县:勠力同心筑牢青少年禁毒防线

【新要闻】衡山县:勠力同心筑牢青少年禁毒防线

近日,衡山县隆重举办“全民禁毒你我他,禁毒宣传进万家”青少年禁毒预

2023-06-30 09:03:18

如何让电脑假装蓝屏_怎么让电脑蓝屏 全球即时

如何让电脑假装蓝屏_怎么让电脑蓝屏 全球即时

1、下面这是蓝屏最常见的原因和解决方法:一硬件:1:蓝屏最常见就是内

2023-06-30 08:43:56

传信生物“委身”百克生物,融资寒冬下Biotech并购大幕开启

传信生物“委身”百克生物,融资寒冬下Biotech并购大幕开启

靠融资烧钱活下去的模式走不通了,Biotech开始并购模式。6月27日晚间,

2023-06-30 08:36:04

深挖销售渠道 银行理财积极拓展同业“朋友圈”|实时

深挖销售渠道 银行理财积极拓展同业“朋友圈”|实时

本报记者彭妍今年以来,各银行机构、银行理财公司间的代销合作愈发密切

2023-06-30 08:31:25

66亿定增引市场沸腾:“不差钱”的凯赛生物缺客户_世界观察

66亿定增引市场沸腾:“不差钱”的凯赛生物缺客户_世界观察

尽管6月26日A股市场多只个股集体下跌,但仍有公司股价逆风而上。当日收

2023-06-30 08:45:52

“破净潮”又来了?并没有,银行理财今年以来平均年化收益4.07%|看热讯

“破净潮”又来了?并没有,银行理财今年以来平均年化收益4.07%|看热讯

南方财经全媒体记者吴霜上海报道 "狼来了 "的故事最近在银行理财上演。

2023-06-30 08:36:39

又一家银行大额存单利率跟降,“一单难求”的火热还能维持多久?

又一家银行大额存单利率跟降,“一单难求”的火热还能维持多久?

北京商报讯(记者孟凡霞实习记者周斌)在新一轮的 "降息潮 "下,各家银

2023-06-30 08:39:38

环球视点!掮客涌动 贴息存款卷土再来

环球视点!掮客涌动 贴息存款卷土再来

"月末要做存款冲量的客户,可以赶快把理财赎回了 " "本月末的银行冲量

2023-06-30 08:52:57

全球关注:险资:权益市场在底部区域 下半年看好科技和消费的投资价值

全球关注:险资:权益市场在底部区域 下半年看好科技和消费的投资价值

本报记者冷翠华上半年即将结束,险资机构如何看待下半年的投资机会与风

2023-06-30 08:50:27

全球讯息:年内46家险企高管变阵!“换血”潮再现,释放哪些信号?

全球讯息:年内46家险企高管变阵!“换血”潮再现,释放哪些信号?

上半年接近尾声,险企将帅腾挪图谱愈发清晰。6月29日,北京商报记者统

2023-06-30 08:41:10