因为网络大作业,要使用SDN,而且SDN能让我更加深入理解网络原理。比如ARP协议在SDN中的实现(l2_learning)。但是SDN感觉比较复杂,光看官网就头大了。我就参加了coursera上的SDN课程。有人带,入门还是很快的。
关于SDN的历史也很丰富,可以看N Feamster的介绍,直接跳过,进入学习环节。
实验环境:
SDN说简单了就是Data plane和Controller的分离,进一步说就是switch和控制算法的分离。底层的switch厂商可以不同,但是遵守统一协议,比如openflow。这个目的就是为了控制算法能够不受厂商限制。但是我们没有真实的网络设备和拓扑,这对我们学习和研究有很大阻碍。还好有虚拟技术。Mininet让实验成为现实。SDN的相关内容太多,软件也不少,因此我担心自己的电脑吃不消,就装了个专门的虚拟机。在SDNHUB上下载,是ALL-in-one的,包含各种controller和必要工具。所以实验环境就运行虚拟机就ok了。
网络拓扑:
最新创建的是网络拓扑,就是switch和host的连接结构。真实环境的话是手动连接电缆。这里使用Mininet创建。可以根据Mininet官网教程一步步实验。比如创建一个树形拓扑。
1 | sudo mn --controller remote --topo tree,depth=3,fanout=2 |
完成后就是一个mininet的CLI界面,可以输入help看看支持哪些。重要的有py,link等等。除了mn内置的几个拓扑结构外,还可以使用Python API,这就大大增加了Mininet的可扩展性。最核心的就是加加链路,设置属性。
1 2 3 4 5 6 7 8 9 10 11 | net = Mininet() h1 = net.addHost( 'h1' ) h2 = net.addHost( 'h2' ) s1 = net.addSwitch( 's1' ) c0 = net.addController( 'c0' ) net.addLink( h1, s1 ) net.addLink( h2, s1 ) net.start() print h1.cmd( 'ping -c1', h2.IP() ) CLI( net ) net.stop() |
这还支持可视化,比如poxdesk和miniEdit。不过都还比较粗糙。我试了一下poxdesk,感觉够用。

控制模块:
SDN Controller就有很多了,比如POX,OpenDaylight等等。比较详见此文或这个博客。我选的是POX,容易上手,课程用的也是这个,Python语言。比如上文的l2 learning,可以非常清楚的理解原理。
我觉得SDN Controller才是核心,将来网络的运行全靠这了。POX细节部分我还没有深入。可以参考其wiki。我要实现的就是Fattree的路由算法。还有两天时间,刚八类!
链接: