OVS Group组表

24 篇文章 1 订阅
11 篇文章 7 订阅
group作用

1、存储多个动作:group匹配到一个合适的动作后可以执行多个动作,优化了流表一个匹配+一个动作的工作模式
2、流量复制:group可将流量复制成多份,在广播、组播中广泛使用
3、设置备用路径:group可对一条flow设置备份出接口,当识别主接口down,自动切换到备用出接口
4、负载分流:group可以选择动作中的一个执行

group组成

Group Identifier:uint32,组表在交换机中的身份
Group Type:组的类型
Counters:数据包被组处理时跟新数值
Action Buckets:动作桶的有序列表,每一个桶包含多个动作可以去执行。动作桶中的动作是无重复的结合。

Action Buckets:

动作桶的典型动作是修改数据包并转发到另一个端口。
动作桶里的动作可以调用另一个组的,前提是交换机支持这种组表调用链。
一个组表没有动作桶默认是丢弃数据。一个动作桶没有任何动作,会默认丢弃掉匹配的数据包。

Group Type:

all: 执行组表中所有的动作。这种类型通常被用在组播或者广播转发。数据包非常高效的复制给每一个桶。每一个数据都被组表中的动作桶执行。
如果一个动作是直接将数据包转发到进入的端口,这个包的复制会被放弃。如果控制器中写入了转发到进端口的流表,组表必须包含一个转发动作为OFPT_IN_PORT的保留动作。

select: 执行组表中的一个动作桶。数据包被组表中一个桶处理,具体是哪一个动作通取决于交换机的选择算法。所有关于选择算法的配置和状态都是独立于OpenFlow协议之外的。

indirect: 执行组表中的一个动作桶。这种组表只支持一个动作桶。允许多个流表条目或者组表指向这个id,支持更快,更高校的聚合。这种组类型是所有组类型中最高效的方式。

fast failover: 执行第一个活动的桶。每个动作桶和特殊的端口或组表有关系,可以控制动作桶的存活。
动作桶有序的定义在组表中,第一个和活动的端口有关系的桶会被选择。这种类型可以修改交换机的流表而不需要控制器下发流表。如果没有动作桶是活动的,数据包会被丢弃。

收到未知单播帧泛红

在这里插入图片描述

1、搭建环境
物理机:1台
虚拟机:2台

1:vnet1
2:vnet2
3:vxlan口

2、使用ns代替vm

ovs-vsctl add-br br-int

ip netns add ns1
ip link add veth1 type veth peer name vnet1
ip link set veth1 netns ns1
ovs-vsctl add-port br-int vnet1
ip link set vnet1 up
ip netns exec ns1 ip link set veth1 up
ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth1
ip netns exec ns1 ifconfig veth1 hw ether fe:fe:fe:fe:fe:aa
ip netns exec ns1 arp -s 10.0.0.2 fe:fe:fe:fe:fe:bb
ip netns exec ns1 arp -s 10.0.0.3 fe:fe:fe:fe:fe:cc

ip netns add ns2
ip link add veth2 type veth peer name vnet2
ip link set veth2 netns ns2
ovs-vsctl add-port br-int vnet2
ip link set vnet2 up
ip netns exec ns2 ip link set veth2 up
ip netns exec ns2 ip addr add 10.0.0.2/24 dev veth2
ip netns exec ns2 ifconfig veth2 hw ether fe:fe:fe:fe:fe:bb
ip netns exec ns2 arp -s 10.0.0.1 fe:fe:fe:fe:fe:aa

3、下发流表

ovs-ofctl add-flow br-int -O OpenFlow13 "table=0,priority=100,in_port="vnet1" actions=resubmit(,1)"
ovs-ofctl add-flow br-int -O OpenFlow13 "table=0,priority=100,in_port="vnet2" actions=resubmit(,1)"
ovs-ofctl add-flow br-int -O OpenFlow13 "table=0,priority=0 actions=drop"

# 已知单播帧
ovs-ofctl add-flow br-int -O OpenFlow13 "table=1,priority=100,dl_dst="fe:fe:fe:fe:fe:aa" actions=output:vnet1"
ovs-ofctl add-flow br-int -O OpenFlow13 "table=1,priority=100,dl_dst="fe:fe:fe:fe:fe:bb" actions=output:vnet2"

# 广播
ovs-ofctl add-flow br-int -O OpenFlow13 "table=1,priority=100,dl_dst="ff:ff:ff:ff:ff:ff" actions=resubmit(,2),resubmit(,3)"

# 组播
ovs-ofctl add-flow br-int -O OpenFlow13 "table=1,priority=50,dl_dst="01:00:00:00:00:00/01:00:00:00:00:00" actions=resubmit(,2),resubmit(,3)"

# 未知单播帧
ovs-ofctl add-flow br-int -O OpenFlow13 "table=1,priority=50 actions=resubmit(,2),resubmit(,3)"

# 流量引到group组
ovs-ofctl add-flow br-int -O OpenFlow13 "table=2,priority=100 actions=group:10"
ovs-ofctl add-flow br-int -O OpenFlow13 "table=3,priority=100 actions=group:110"

# 创建ovs group 组
ovs-ofctl add-group br-int -O OpenFlow13 group_id=10,type=all,bucket=output:vnet1,bucket=output:vnet2

# 添加group type和bucket
ovs-ofctl add-group br-int -O OpenFlow13 group_id=110,type=all,bucket=output:1

# 查看group
ovs-ofctl dump-groups br-int -O openflow13

4、查看结果

# ns1 ping 10.0.0.2(已知单播帧)互通
ip netns exec ns1 ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.556 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.065 ms


10:57:43.245125 fe:fe:fe:fe:fe:bb > fe:fe:fe:fe:fe:aa, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 51665, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.0.2 > 10.0.0.1: ICMP echo reply, id 56955, seq 1, length 64
        0x0000:  4500 0054 c9d1 0000 4001 9cd5 0a00 0002  E..T....@.......
        0x0010:  0a00 0001 0000 6701 de7b 0001 a790 cd61  ......g..{.....a
        0x0020:  0000 0000 83bc 0300 0000 0000 1011 1213  ................
        0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
        0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
        0x0050:  3435 3637   

# ns1 ping 10.0.0.3(未知单播帧)没有回包
ip netns exec ns1 ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.

# 在ns2接口抓包可以看到ns2收到了去往10.0.0.3的流量,group复制生效
 tcpdump -i vnet2 -nn -vv -e -X
11:00:37.056462 fe:fe:fe:fe:fe:aa > fe:fe:fe:fe:fe:cc, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 34746, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.0.1 > 10.0.0.3: ICMP echo request, id 57038, seq 1, length 64
        0x0000:  4500 0054 87ba 4000 4001 9eeb 0a00 0001  E..T..@.@.......
        0x0010:  0a00 0003 0800 1b8f dece 0001 5591 cd61  ............U..a
        0x0020:  0000 0000 1bdb 0000 0000 0000 1011 1213  ................
        0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
        0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
        0x0050:  3435 3637     

5、涉及流表

# 删除group组
ovs-ofctl -O OpenFlow13 del-groups br-int group_id=10

# 删除流表时:使用--strict代表精确匹配整条流,可以加上priority
ovs-ofctl --strict del-flows br-int -O OpenFlow13 "table=0,priority=100,arp"

# trace追踪
ovs-appctl ofproto/trace br-int in_port=vnet1,icmp,dl_src=fe:fe:fe:fe:fe:aa,dl_dst=fe:fe:fe:fe:fe:bb,nw_src=10.0.0.1,nw_dst=10.0.0.2,icmp_type=8,icmp_code=0,nw_ttl=64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值