网络虚拟化是当前云计算最重要的特点之一,打通租户网络之间互通以及访问控制策略,最重要的是满足租户之间的网络隔离,这才是云计算网络的特点。而SDN的产生则是在网络虚拟化中,将控制面和业务面分离,控制面只负责配置下发,这样实现的通过软件控制管理网络。
OVS分为三个主要的模块:内核转发模块、OVS配置存储持久化模块OVS-DB、以及守护进程VSWITCHD。业务面主要通过内核模块实现转发,少量的数据包会通过netlink到用户进程中实现转发(仅仅是在内核中找不到匹配的流表才会去用户态转发)。而控制流量转发规则,则是通过用户态进程配置加载。比如,通过ovs-ofctl命令增加一条数据流:
ovs-ofctl add-flow dp1 “priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal”
这种控制从端口号为100的port进来的流量,执行的操作是改变源地址为9.181.137.1,然后正常转发。而且这条流表的权重设置为1。(此处端口号其实是OVS自己去给端口编的id而已,用户可以通过ovs-ofctl show DP名字来看这个DP下面的端口)
如果说仅仅是看OVS无法直观的感受到软件定义网络的特点,那么我建议可以自己搭建一个简单的openstack环境,然后看看每次创建网络,计算节点上OVS都做了哪些相关的网络流表配置。其实我也是体验过openstack,再反过来感受SDN的。很多时候,通过软件定义的最大好处是,控制面下发的配置管理可以非常灵活,并且,控制面配置下去的东西不会过多影响全局业务面的东西。
另外,软件定义网络在未来云计算中将会有更加多的发展和应用,当前的云计算瓶颈大多还在存储和网络上,要解决这些瓶颈,路其实还很长,软件定义网络似乎能够给网络上带来一些希望,能够想象未来网络,用户简单操作定义自己想要的网络,并且全方位监控自己的私有网络,实现网络可视化,智能化。