作为一个在校的本科生,我们学习的SDN着眼点与已工作的人有所不同。说说我的学习路线吧:去年上半年,我大二,老师科研项目其中一个分支就是有关OpenFlow/SDN的,有幸参与其中,我也由此开始踏上网络学习之路。
刚开始的时候我完全不懂网络相关知识,所以花了两个月恶补网络知识顺便考了CCNA,所以说学习SDN的重要前提是你得熟悉传统网络相关知识。在此推荐谢希仁的《计算机网络》和Todd Lammle的《CCNA学习指南》。后者虽然是一本考试认证教材,但其介绍的网络基础知识由浅入深通俗易懂。
在对网络基础知识有一定了解后,了解了OpenFlow的前世今生和发展路线。认真看了OpenFlow协议1.0版,侯杰老师在其著作《深入浅出MFC》中说“莫在浮沙筑高台”,所以即使现在主流的版本已经是OF1.3了,也建议由浅入深,认真读一下各版本的OF标准,了解其演进路线,及每一次演进背后的驱动力。在此推荐 @李呈大神的博客,其中有一篇博文用图表形式表示了OpenFlow各消息的报文格式,特别赞。
理论知识再扎实,也还是要落实到实践上来验证。下一步就该搭个实验环境玩了。一个SDN环境无非由控制器、OpenFlow交换机和HOST组成,选一个自己看对眼的控制器,一个虚拟机,一个Mininet或几个OpenvSwitch,只需一台电脑,一个实际的SDN环境就已经在运行了。前面学了这么多理论,看到一个环境真切地在你眼前运行,使用着OF协议来通信,你甚至可以抓到每一次交互的报文,和OF标准里说的一模一样,那感觉,amazing!SDN的核心目标是什么?是流表匹配,是为每一条流找到一条似乎就是为它量身定做的转发路径。如何去实现这一目标?靠控制器上层应用。每一个控制器都有北向接口,现在一般的标准是以REST API的方式来提供,这样的好处是你可以用任何一种能解析JSON的语言来编写应用。通过你的应用,每一个数据包都按照你的意志在网络里被传送,amazing++!
网络环境多种多样,控制器不可能能处理所有的需求,这就要求能深入控制器内部,安装你自己编写的模块,处理南向数据,或许还需要向北向提供接口。你可能会担心控制器的代码规模是如此庞大,不知道怎样甚至不敢动其内部的代码。好在面向对象和模块化程序设计的思想已经深入人心并被实实在在的践行在控制器的编写过程中,控制器的每一个构件,像一块块乐高积木,彼此关联累积,再加一块新的积木,相信对你来说也是游刃有余的。完成了这一步,amazing²!
终于,现有的控制器已经不能满足你了,天哪,地球已经阻止不了你了啊少年。于是你开启超级变换形态,去吧皮卡丘,自己编写控制器吧!这应该是学习SDN的***境界了,所谓大音希声,大象无形,眼前有码,心中无码。
总之,SDN发展到现在,各种组织各种项目百家争鸣。找你的key words,google之,先了解,再模仿,然后理解,***创造。能在正年轻的时候参与到SDN这一革命浪潮里来,多么幸运。