您现在的位置: > 电脑硬件 > 其他 >

初学者的SDN学习之路 .

时间:2019-05-11 01:04 点击:

  核心提示:Software Defined Network顾名思义软件定义网络,可以简单地分为网络和软件两个部分:软件和网络。 初学者的SDN学习之路 ....

  Software Defined Network顾名思义软件定义网络,可以简单地分为网络和软件两个部分:软件和网络。此外,通过使用OpenFlow协议来实现SDN是一种较为普遍的方式,所以本篇将从软件和网络以及OpenFlow三个方面进行介绍。在研究SDN的研究者之中,有相当大比例的网络工程师,他们了解网络,精通网络,然而却并不了解软件开发。除此之外,还有很大比例的研究者是软件工程师,他们软件开发能力出色,然而并不了解网络运作的机制,在接触SDN之前,他们的范围仅仅只是应用层,底层的东西交给全交给主机的协议栈了。还有一部分同学是像我这样,通信工程出身,学的是物理层的编码解码,误码率,电磁波。不像计算机专业那些学生一样,学习各种语言,操弄各种编译器,混迹于github这种全球最大的男性交友网站。剩下最后一种就是又懂网络,又懂编程。这种人,我一般称之为老师,是用来请教问题的,比如地球-某某老师。一般的,他们不屑于看到这种文章,太low。

  本篇主要的目标用户是对网络和软件开发都不太了解,或者网络和编程开发只擅长一种的研究者。由于我也是一个初学者,所以仅当做经验分享吧。如有表达不对的地方,敬请指出,万分感谢。

  网络

  软件定义网络,如果不了解网络,那如何去定义一个你不了解的东西?如果不知道网络中存在的问题,如何使用SDN来改善?所以网络知识至关重要。然而作为一个初学者,并不需要网络各个方面都精通,也做不到,仅需学习基础知识,并选择一个研究场景即可。

  计算机网络

  学习网络的必修课是计算机网络。计算机网络讲述的是计算机网络的运作机制,都是极其基础重要的知识。谢希仁前辈的《计算机网络》是从底层往上层介绍,从物理层的hub到数据层的网桥和交换机,到网络层的路由器,最后讲到TCP/UDP的传输层,止于应用层,适合有通信背景的学习者。《计算机网络:自顶向下方法》则是从另一个角度出发,从应用层向下介绍,摆脱了物理层的枯燥,这样的思路更适合学习计算机出门的学习者。《CCNA学习指南》也是推荐的书籍之一,前部分内容讲解计算机网络非常简单明了,更贴近于真实网络规划,可以当做计算机网络的进阶书籍阅读。

  学习完计算机网络之后,学习者应该懂得二层交换、三层路由,了解到OSI七层协议栈,也了解了TCP/IP,ARP,ICMP,DNS, DHCP。作为检验标准,读者可以尝试介绍一个客户端主机和跨网段的服务器进行通信的流程。

  关于网络协议,只需了解主要的一两种,其他了解其作用即可,因为协议实在太多了,没有必要学完。RIP、BGP、OSPF和IS-IS需要了解。如果研究的课题与路由协议相关,则可详细学习,初期不建议深入学习。学习成果检验是对比路由协议的差异,如RIP的广播路由信息和OSPF的告知邻居。

  ARP,ICMP,DNS,DHCP这几种功能型报文非常重要,均需了解其工作流程,具体的报文格式,可适当了解关键字段。项目需要时再深入研究。

  TCP/UDP的差别需要牢记,适合的应用场景也许了解。关于TCP的状态机,建议尝试记忆,TCP的三次握手建立连接,四次握手释放连接是面试高频题。

  应用层的仅需了解若干常用协议如SMTP,POP3,HTTP及其对应的传输层的端口号即可。

  网络场景

  当学习了基础的网络知识,学习者已经具备了一定知识储备,对网络也有了基础的了解。然而现网之复杂,并不是看了一本《计算机网络》就可以了解的。网路可以按照规模分为局域网,城域网,广域网,也可以按照功能划分成接入网,传输网和核心网。当然按照场景划分就更多了。云计算网络的典型场景数据中心网络是目前研究的热门领域。以校园网为代表的园区网也是较为常见的SDN应用部署场景。跨数据中心的互连互通、WAN的研究则是研究的另一个大方向。

  选择一个自己喜欢的应用场景,进行深入研究,并根据需求学习相关知识,会大大提高学习的效率。比如我选择学习数据中心网络,所以我需要学习一些云计算的知识,需要了解数据中心中的网络架构。我推荐《腾云:云计算和大数据时代的网络技术揭秘》作为云计算网络知识的科普书籍。书中介绍了很多有用的知识,包括云计算的起源,云计算和网络的关系,网络安全,以及数据中心网络中的一些关键网络技术。读完你应该了解到什么是TOR和EOR,知道了刀片服务器,了解到VN-TAG是用来标识虚拟机到TOR的流量的,了解到VXLAN和NVGRE的作用,了解到交换机还可以组装的,除了OVS之外还有NEXUS 1000v等产品。读完这本书,能对现网的一些技术,以及产品有一些科普性质的了解,对后续深入学习研究有很大帮助。

  相信有了前面计算机网络知识作为铺垫,再选定一个特定的研究场景,网络方面的学习已经不成问题。

  软件开发

  软件开发是SDN学习中另一个重要方面,这方面我同样不是行家,我也是新手,所以以下言论仅当做自己的经验介绍。

  选择一门语言,选择一个控制器

  根据自己的喜好,选择一门语言,然后根据语言,选择一个对应的控制器,这是开发的第一步。如我自己,在折腾了C/C++,Java,Python之后,最终还是皈依到了Python大法的旗下。根据Python语言,我选择了由Python语言写的POX。POX无需安装,直接可以运行。同时,POX代码简单,初学者只需阅读pox/forwarding文件夹下的代码即可。

  根据我们已有的网络知识,我们基本可以看懂pox/forwarding文件夹下的程序逻辑。以l2_learning.py为例,该文件完成了一个简单的二层交换的应用,其逻辑为:记录MAC地址和Port的对应关系,转发时,查询MactoPort表,若查询成功,则转发,若失败则泛洪。后来RYU出现了,封装更好的,性能更好的RYU成为了我的首选。

  在编程的过程中,需要进行程序设计,其中设计的算法以及数据结构的知识在这里不多介绍,有兴趣的读者可以自行学习。

  以项目为导向,先写起来

  阅读源码需要有明确的目的性。最开始可以先尝试读一些简单的如Simple switch之类的代码,掌握一些简单的API的使用,理解基础的内容,然后再进行深入的源码阅读。

  在进一步学习SDN开发时,建议以项目为导向,先写起来,在尝试中去解决问题。在写的过程中遇到问题再去查看源码找关键点,如此一来学习非常有效率,且学到的东西很快就可以用上,学习效果好。特别是在OpenFlow协议已经经过多个版本的扩张,目前内容已经非常多的情况下,选择性学习能帮助你降低学习的压力,提高学习的效率。

作者:采集侠  来源:网络整理
  • 电脑维修知识网(xxxxxx.com) © 2014 版权所有 All Rights Reserved.
  • Email:pcweixiu@tom.com 站长QQ:20567788
  • 技术支持与报障: 电脑维修知识网