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

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

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


    如上图所示,两台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是比较容易使用这种方式的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容