Dragonflow openvswitch流表实现原理

独立唯一的标记

dragonflow 2018 所有的云主机接口会被分配到一个全局独立唯一的id;这个标记可以理解成云主机网络路径的一种抽象,每个云主机的网络路径不同的,二三层通信过程实际是在选择对应通信目标的网络路径,然后进行数据包转发,所以这些id在云主之间通信起到至关重要的作用。

云主机之间的通信

云主机A和云主机B,位于同一个subnet;它们的通信过程是:云主机A发出的数据包会跑到table55,根据目的mac选择网络路径(id设置到reg7);

本机table115会根据选择的网络路径将数据包转发,其它节点,会根据网络路径将数据包发给vxlan隧道

同一个路由,跨子网情况下,table55会根据目的网关的mac匹配,因为是发给网关流量设置reg5=1,交给table60匹配目的ip网段,确定子网信息(设置metadata标识),最后根据目的ip和子网信息,匹配table65找寻最后的网络路径。

网络节点qr和云主机通信

l2 table根据网关mac判断,设置reg5=1 代表三层流量,l3 table根据mac(也有根据网关的ip) 选择网络路径

DNAT

dnat属于三层流量,会经过table55 设置reg5=1交给三层table60处理;table60根据源地址发现该流量需要dnat,交给table77;最新的方案中的目的mac是最后决定的,所以需要将流量

从定向到table55,table55会帮助引导,重新最后设置mac地址后发出的。

回来的流量直接到table55,根据目的 mac判断是fip流量后,外网fip流量交给table75分流后交给table75 nat还原;还原后从新到table55 重新寻找具体网络路径。

SNAT

访问外网地址114.114.114.114,云主机发出的流量经过table55,因为目的mac是子网网关mac,所以标记三层流量交给table60,交给table70区做snat,最后交给table71将流量发出