前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netvirt之流表分析(一):Netvirt介绍

Netvirt之流表分析(一):Netvirt介绍

作者头像
SDNLAB
发布2018-03-30 17:45:56
1K0
发布2018-03-30 17:45:56
举报
文章被收录于专栏:SDNLABSDNLAB

1. 架构

最近在看ODL的netvirt项目,netvirt是一个完整的网络虚拟机化解决方案,几乎可以实现neutron的所有功能,包括FWaaS,V**aaS,LBaaS,控制面有ODL实现,转发面由OVS实现。

netvirt由netvirtneutronnorthbound plugin,OVSDBSouthbound Plugin,OpenFlowSouthbound Plugin与HWVTEP Southbound Plugin(需要OVS2.6支持)组成。netvirt可以通过ovsdb管理协议控制虚拟设备与硬件设备,HEVTEP通过ovs的hardwarevtepschema配置硬件TEP。

图1 netvirt实现框架

今天我们分析netvirt是怎么通过ovs 来实现L2/L3 Forwarding, Floatingip, Security Group, LBaaS。

2. Pipeline

图 2 pipeline

1.Table 0: Classifier

包首先会进入这个table做classifier,将包区分为3种类型:本地发出的包,其他节点发来的包和上送controller的包

1)匹配本地发出的包

根据包的in_port与虚拟机mac或是dhcp mac来识别包是否来自于本地,并添加tunnel id,注意这里只匹配mac地址与入端口,没有ip地址。如果发送不期望source_mac那么将被丢弃,实现类似ARP Snooping的功能。

对于来自于本地的包,除了添加tunnel外,还需要配置reg0,这是一个metadata一直存直到离开bridge,对于来自于本地的包reg0=1,来自于其他host的包reg0=2。

注意:当前netvirt仅支持tunnel,不支持vlan type。

2)匹配来自其他node的包

根据包中携带的tunnel id与in_port(tunnel port)识别来自于其他node的包,配置reg0=2。

3)packetin:

当前仅将lldp报文上送到controller,由topology manager plugin处理,对于arp与dhcp不做特殊处理。

2.Table 20: DistributedARPResponde

这张表处理ARP request,利用ovs的arp responser回复arp replay。下图为实现原理:

图 3 arpresponser

这里会对以下几种类型的包回复ARP Reply

● 本节点的VM和DHCP 发送的arp 请求

● 远端节点VM和DHCP 发送的arp请求

● router interface

● floatingip

对于floatingip因为请求来自于外网,所以没有tunnel id,只能根据patch-ext来代替tunnel id来匹配外部流量。

3. Table 30 : inbound NAT

外部网络通过floatingip访问内部VM,当报文到达此table后,rewrite报文的floatingip为VM的internalip,同时将segmentation id写入reg3,在table60中,根据reg3与dst进行路由,并rewrite srcmac。

4. Table 40: Egress ACL

Egress Security Group Implementation

5. Table 50: LBaaS

利用ovs的mutipath action功能实现LBaaS。

6. Table 60: Distributed Virtual Routing

首先根据segmentation_id与destinationL3network来决定报文是否需要进行L3处理,路由时,根据目的子网,修改tunnel id和srcmac(mac of router inteface), decrease TTL。

这张表里保存本地VM到达租户内所有网络的路由表项,组成一个full mesh架构,租户每创建一个子网,那么需要在租户vm所在的所有host上添加n*(n-1)条rule。不像neutron用户可以创建多个router,netvirt中一个租户只有一个vrouter。

此实现的优点是,对于东西向流量,只需查询一次即可到达目的,二是不需要经过controller性能也可以保证,但是对于复杂拓扑会带来流表的暴涨,管理,维护比较困难,如下图分别有2个子网,3个子网时,ovs流表配置如下:

2 Subnets: A, B

- A->B MATCH: from tun_id of subnet A, packet with dest network B

- B->A MATCH: from tun_id of subnet B, packet with dest network A

3 Subnets: A, B, C

- A->B MATCH: from tun_id of subnet A, packet with dest network B

- A->C MATCH: from tun_id of subnet A, packet with dest network C

- B->A MATCH: from tun_id of subnet B, packet with dest network A

- B->C MATCH: from tun_id of subnet B, packet with dest network C

- C->A MATCH: from tun_id of subnet C, packet with dest network A

- C->B MATCH: from tun_id of subnet C, packet with dest network B

7. Table 70: L3_Fwd

路由完成之后,下一步进行报文的封装,根据tunnel与dest ip配置destmac。

8. Table 80: Layer2 rewrite service

Layer2 rewrite service

9. Table 90: Ingress ACL

Ingress Security Group Implementation

10. Table 100 : outbound NAT

在这张表中需要处理两种类型的报文,一种是同子网的报文,一种是发送到external network的报文。

1)同子网报文

通过匹配dest network与segmention id,判断报文是发向同一个子网的报文,这时不做任何处理,直接转发到110号表

2)对于到external network的报文

需要根据segmention id,destination mac与source ip address识别出时发送外网的报文,然后将报文的src mac重写为floatingip的端口mac,destmac重写为external routergateway的端口mac,src ip重写为floatingip,然后从patch端口发送到br-ex。

这里我们用到了external routergateway的mac,但是这个mac,controller是不知道的,为了解决这问题,引入了Gateway ARP Resolver,controller会周期性的向external router gateway发送一个arp request,gateway会回复arg replay,controller根据arp replay解析出gateway 的mac,如果mac发生了变化,那么重新刷新相关流表。

在这里需要注意的是发送外网的flow的优先级为512,其比内网转发的flow优先级低,所以匹配时先match内网报文,如果不能match才进行nat处理。

11. Table 110: L2_fwd

L2_fwd为pipeline的最后一个table,负责处理L2报文,包括BUM与目的可知的单播报文。

1)BUM报文

根据{tunnel_id, reg0} 来识别报文方向,根据dl_dst识别是BUM报文,如果是reg0=1表明报文是从本地发送出去的,那么向所有端口(包括发送报文的本地端口)发送一份复制的报文,这样本地端口也会收到一份报文,这里有些疑惑。

2)目的可知的单播报文

根据{tunnel_id, reg0}查询vxlan table转发。

3 小结

我们看到所有报文(除了lldp)都直接通过ovs静态流表来处理的,并没有上送的controller。dhcp也是沿用了neutron的dhcp agent来实现的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档