使用ovs模拟二层mac网段转发

        偶然发现openflow流表的mac地址match项支持对mac地址做掩码,如同ip地址的掩码一般,就想着既然ip路由可以只使用一条路由表转发到网段内所有主机的报文,那么利用这个特性,二层也可以做到相同的效果,正好工作中也在用ovs做骨干测的转发,同时也存在流表的性能问题,就想着使用这种方法优化一下。

       工作业务上的细节不便描述,这里只简单描述一下思路,总体思路就是模仿ip网段和ip三层路由,将同一ovs设备背后的设备的mac地址配置为同一mac地址网段内且全网唯一的地址,从而利用ovs流表mac地址match项支持对mac地址做掩码,将到达同一目的ovs设备背后设备的转发流表聚合为一条基于mac网段的流表,达到大幅缩小流表条目的目的。


使用ovs模拟二层mac网段转发_第1张图片

    如上图所示,两台ovs 可能是物理位置不同的两台虚拟 或物理设备,其中ovs1背后连接着mac网段为 00:00:01:00:00:00/ff:ff:ff:00:00:00 的一群虚拟或物理转发设备,ovs2后面连接着mac网段为 00:00:02:00:00:00/ff:ff:ff:00:00:00 和00:00:03:00:00:00/ff:ff:ff:00:00:00  的一群虚拟或物理转发设备。

        这样ovs1 上到ovs2的流表只需要配置两条(ovs之间走的overlay的vxlan):

dl_dst=00:00:02:00:00:00/ff:ff:ff:00:00:00,actions=output:"vxlan-1"

dl_dst=00:00:03:00:00:00/ff:ff:ff:00:00:00,actions=output:"vxlan-1"

        这样ovs2 上到ovs1的流表只需要配置一条:

dl_dst=00:00:01:00:00:00/ff:ff:ff:00:00:00,actions=output:"vxlan-1"

         ovs1 和 ovs2 上去往本端具体三层设备的流表下发精确的主机mac流表:

dl_dst=00:00:01:00:00:01,actions=output:"veth1"

dl_dst=00:00:01:00:00:02,actions=output:"veth2"

dl_dst=00:00:01:00:00:03,actions=output:"veth3"


        这样,将来随着系统规模的扩大,每台ovs设备的流表条目数是可控的,首先一台ovs设备受限于自己的转发性能,所连接的三层虚拟或物理设备是有限的,所以到本端的流表是有限的。而到达对端的流表,也只会随着ovs设备的增长而线性的增长,总体是可控的。

        这个思路的前提是:

        1. 三层设备是系统管控的,非用户私有设备,便于三层口mac地址和arp表项的统一管理。

        2. 二层转发设备要支持基于mac网段的转发,除了ofs(如ovs),还可以是一些自研的白牌盒子。

        虚拟机或者容器组网如果使用ovs是比较容易使用这种方式的。

你可能感兴趣的:(使用ovs模拟二层mac网段转发)