基于DPDK 的OVS 数据包处理流程
(1)OVS 的内核态空间接收到网卡的中断通知后,通过用户空间的I /O( userspace I /O,UIO) 驱动轮询模块接收到网卡发来的数据包,用户态空间通过DPDK 的PMD 收端口驱动直接接收来自网卡的报文。
(2)用户态空间收取到报文之后,从数据包中提取由流表需要匹配的有效信息( 源/目的IP、MAC、端口等) ,通过这些信息查看控制器下发的流表信息来进行匹配,通过流表下发的匹配规则来进行报文的转发操作,首先需要根据是否有缓存信息的流表来进行模糊匹配,如果匹配存在,将数据报文直接从内核态空间的桥接口发送,转发至下一个指定的桥接口,进行快速转发。
(3)如果模糊匹配没有命中,在用户态再进行一次流表结构精确匹配,如果精确匹配存在,将报文通过流表指定出接口转发。
(4)如果精确匹配没有命中,那么将数据报文在有控制器接收的情况下,通过openflow 协议,通知控制器,用户态空间将该报文转交给控制器处理,通过控制器识别该报文,并对该类报文进行统一的管理,学习转发规则,生成新的流表下发给用户态空间。
(5)控制器通过上报的报文下发新的流表给用户态空间,用户态空间根据接收的新流表进行更新并且再次匹配,根据新匹配的流表进行相应的报文处理操作,即转发或丢弃。
传统OVS 数据包处理流程
(1)OVS 的内核态空间数据通道模块接收某个网卡中断驱动发送的数据包,从数据包中提取源/目的IP、MAC 地址、端口等信息,在内核态空间缓存中去进行匹配数据通道上的流表结构,如果匹配命中,则进行快速转发,即模糊匹配。
(2)如果模糊匹配没有命中,则通过netlink upcall 机制通知用户态空间。用户态空间复制报文到内核态空间之后,通过数据报文的匹配原则,查询用户态精确流表,如果精确匹配命中,将报文通过流表指定出接口转发。
(3)如果精确匹配没有命中,在控制器接入的情况下,通过openflow 协议,通知控制器,将报文由用户态空间复制到控制器进行处理。控制器接收到报文之后对报文进行识别和下发指定流表操作,告知用户态空间如何处理这个报文。
(4)控制器根据上报的报文重新下发流表,用户态空间会根据接收的流表将内核态空间的流表进行更新,更新后,重新把数据发送给数据通道模块,数据通道模块重新匹配,然后做相应的报文处理操作转发或丢弃。
参考文献:[1]胡卫文,陈俊强.基于DPDK技术实现OVS[J].网络新媒体技术,2018,7(01):47-53.