您的当前位置:首页正文

2023年7月生产实习报告 篇5

2024-07-18 来源:星星旅游

  一、 概述

  20xx年10月份我偶然参加了在南京江宁无线谷举办的一次SDN交流研讨会,使我对软件定义网络(SDN) 这种新型网络架构有了初步了解,它有望提高网络性能、灵活性和可管理性,实现网络革命并带来新一波应用服务创新,尤其是在网络安全方面,SDN也有新的尝试,例如在对抗DDoS攻击上已经有了实际的案例。浙江大学新一代网络技术实验室,主要研究方向是下一代网络体系架构,可重构网络,拟态计算与网络安全,网络主动防御技术,其中就有关于SDN的项目在进行,我参加过他们的夏令营,于是决定申请为期3周的实习,进一步学习SDN的应用和开发,这将对我的专业技能有所帮助,使我对网络和安全的了解突破现有观念的限制。

  传统网络效率低,难以扩展,耗费大量时间和资源并且不能支持灵活的运营。在多数情况下,所有网络情报遍布在采用标准化协议的物理交换机和路由器上。网络设备的配置主要是对每个交换机进行独立的配置,结果造成网络架构极其复杂。为了实施某个变化,网络操作员必须对每个交换机或路由器重新配置路由协议,需要耗费大量时间,特别是对于大型网络和数据中心来说,这个过程非常类似于利用凿子在石板上写书,如果出现任何错误,就必须在另外一个石板上重新开始写,非常繁琐。

  SDN 能够高效地把网络数据流处理从控制数据流的逻辑和规则中分离出来。这让运营商和企业能够控制管理自己的数据,从而实现能够实施不同规则和路由的能力,包括决定哪些类型的数据在本地而哪些类型的数据在远程处理。通过集中地查看整个网络架构,客户能够相应地调整网络以满足业务需求。更重要的是,它让网络运营商和厂商能够在实际网络环境中对网络优化的想法和战略进行实验,而不影响当前的数据流。

  二、 实习内容及过程

  1. 软件定义网络(SDN)的初步学习

  SDN核心思想是通过管控软件化、集中化,使网络变得更加开放、灵活、高效。具体表现为将网络的控制平面与转发平面(即数据平面)相分离:在控制平面为用户提供标准的编程接口,便于集中部署网络管控应用;转发平面仍保留在硬件中,通过标准协议接口(如OpenFlow)接收并执行转发策略。如果将网络中所有的网络设备视为被管理的资源,那么参考操作系统的原理,可以抽象出一个网络操作系统的概念,这个网络操作系统(即控制层)一方面抽象了底层网络设备(即数据层)的具体细节,同时还为上层应用(应用层)提供了统一的管理视图和编程接口,如图1所示。这样,基于网络操作系统这个平台,用户可以开发各种应用程序,通过软件来定义逻辑上的网络拓扑,以满足对网络资源的不同需求,而无需关心底层网络的物理拓扑结构。

  转发层:底层网络设备的工作就是单纯的数据、业务物理转发,以及与控制层的安全通信。

  控制层:控制器(即Controller),旨在集中管理网络中所有设备,虚拟整个网络为资源池,并根据用户不同的需求以及全局网络拓扑,灵活动态的分配资源。

  应用层:通过控制器提供的编程接口对底层设备进行编程,把网络的控制权开放给用户,开发各种业务应用,实现丰富多彩的业务创新。

  控制层和转发层之间的接口界面被称为“南向接口”,网络设备状态、数据流表项和控制指令都需要经由通信协议传达,实现控制器对对网络设备的管控;而目前业界比较看好的是ONF主张的Openflow协议。应用层和控制层之间的接口协议称作北向接口北向接口的目标是使应用层的网络应用具备顺利调用技术设施层的网络视图抽象和网络技术能力。当前北向接口还处于百家争鸣的阶段,不同厂商和科研机构设计提供的北向接口都不尽相同,没有一个业界公认的统一标准。

  2. 实验平台搭建

  对应SDN的三层架构,实验平台也主要包括三部分:控制器(opendaylight,以下简称odl),数据转发层(mininet),应用开发(eclipse)。

  (1)odl controller

  环境需求:Ubuntu 14.04虚拟机, JVM 1.7+ ,Maven 3.04+ 具体步骤:

  安装Java环境:

  sudo apt-get install openjdk-7-jre

  sudo apt-get install openjdk-7-jdk

  安装maven:sudo apt-get install maven

  用mvn -version查看版本信息:

  运行controller:

  下载opendaylight helium版本的源码,进入opendaylight文件夹,修改run.sh权限:chmod 777 ./run.sh

  执行./run.sh

  直到出现initialized successfully才算运行成功,结果应该出现osgi命令:

  每次开机都要执行./run.sh启动控制器。

  打开浏览器,输入: ip:8080,进入opendaylight 的登陆页面,用户名和密码都是 admin。

  (2)mininet

  环境要求:ubuntu14.04虚拟机

  具体步骤:

  下载源码:git clone git:///mininet/mininet

  进入mininet文件夹,安装mininet:./util/install.sh [options] 这里典型的[options]主要有下面几种:

   “-a”:完整安装包括Mininet VM,还包括如Open vSwitch的

  依赖关系,以及像的OpenFlow Wireshark分离器和POX。默认情况下,这些工具将被安装在你的home目录中。

   “-nfv”:安装Mininet、基于OpenFlow的交换机和Open

  “-s mydir” :在其他选项使用前使用此选项可将源代码建立vSwitch。 

  在一个指定的目录中,而不是在你的home目录。

  这里选择完全安装:./util/install.sh -a

  安装完成后进行简单的测试:sudo mn

  成功的结果应该是这样的界面:

  (3)Eclipse配置

  ODL不能使用默认jre(eclipse/jre),应该手动添加JDK-7:

  主菜单 Window——Preferences: Java——Installed JREs——Search Standard VM——JRE name: JavaSE-1.7 (搜索到后手动双击修改名称,以便适配)。JRE home必须要在jdk子目录下,如 E:\Tools\jdk7u25\jre,最后添加这个jre.

  还要导入opendaylight源码中主要的模块:file——imporrt——existing maven projects,需要导入的主要模块有:forwarding,hosttracker,switchmanager,topologymanager等,根据你编写的程序功能而定。

  3. SDN控制器OpenDaylight的开发学习

  总体来说,OpenDaylight的二次开发可以分为以下三个层面:

  基于OpenDaylight REST APIs的上层网络应用开发 基于SAL内核相关服务的控制器组件与上层网络应用开发 基于SAL内核相关服务的南向协议插件开发与上层服务接口开发

  当然,如果进行更具体的划分,每个层面还可以划分出更多的开发方向,但是就大的开发方向来说,主要使用以上三种开发模式。

  我主要学习了第2种方式,基于SAL内核相关服务的控制器组件与上层网络应用开发方式一般的应用场景是上层网络应用程序需要借助已有的SAL相关服务及南向插件/协议实现某些特定的功能,而该功能并未由OpenDaylight控制器给出REST API。这种方式相对来说更可以称的上是OpenDaylight的二次开发。在介绍具体内容之前,首先需要了解以下储备知识:

  OSGi与OSGi组件:OpenDaylight平台的后台。为整个工程项目提供了模块化管理的方式,即OSGi组件。每个组件可以实现某些特定的功能,并加载到工程的运行环境中。

  Maven工具:Maven工具是用来实现对于OpenDaylight整个工程项目进行管理控制的工具。可以用Maven生成不同的项目,不同的组件。每一个Maven项目包含一个项目控制文件pom.xml,一个src文件夹,一个test文件夹。通常pom.xml文件使用结构化的文档来对整个项目的属性配置、外部依赖、编译进程与外部输出等进行设置,实现了工程的自动化管理。在src文件夹内包含项目或组件相关的源程序,test文件夹中包含相关测试程序。Maven是该小节所述的开发方式的基础,读者可以参考官方网站的文档进行学习。

  Apache Karaf:Karaf工具是基于OSGi的OpenDaylight特性容器,用于实现OpenDaylight各功能组件的热插拔。

  基于SAL内核相关服务的控制器组件与上层网络应用开发需要借助于OpenDaylight开发平台已经实现的模块与组件,调用其Java APIs以帮助实现我们所需要的功能。

  4. 基于OpenDaylight进行模块开发

  这部分我做了很多分析和实验,例如使用odl horizon运行云主机,mininet创建自定义拓扑、wireshark抓包实验分析openflow协议中控制器与交换机的通信过程等等,对网络架构、数据结构、开发方法流程有较为全面的掌握之后,我和小组其他成员合作,编写了一个控制器组件(bundle),主要是完成SDN中IP地址跳变和路径跳变的功能。

  传统网络中设备的IP地址都是固定的,路由选择策略也大多是静态的,例如OSPF等路由协议的算法都是基于最短路径优先的,如果攻击者通过截获数据包和嗅探等技术知道了源主机、目的主机的IP地址以及转发的路径,就很容易实施DDoS、端口扫描等攻击。如果能够将实际IP映射到一系列虚拟IP,并随机变化,对于多条转发路径在满足带宽、时延的条件下也能够随机选择,那么攻击者就很难破解数据包了。这就是基于软件定义网络的动态防御技术。

  这里主要展示一下实验结果:

  我们建立了一个简单的拓扑,主机h1(10.0.0.1)到h5(10.0.0.5)之间有两条路径,第一条:h1-s5-s2-s1-h5,第二条:h1-s5-s4-s3-s1-h5.

  在mininet中使h5 ping h1,可以连通。说明我们实现的跳变算法已经能够实现基本的通信。

  某次在交换机s1中获得的流表如下:

  可以看到源地址和目的地址分别为10.0.0.1和10.0.0.5.再看OUTPUT=OF|4,说明s1将数据包从端口4发出,因此选择的是第二条转发路径:h1-s5-s4-s3-s1-h5.

  再次使h1 ping h5,获得s5的流表如下:

  可以看到源地址和目的地址分别为214.0.0.1和214.0.0.5,而不是10.0.0.1和10.0.0.5,说明IP地址发生了变化。再看OUTPUT=OF|2,说明s5将数据包总端口2发出,因此选择的是第一条转发路径:h1-s5-s2-s1-h5.

  由此可见,IP地址和转发路径都发生了变化,实验成功了。

  三、 实习总结

  本次实习,我接触了一个以前自己从来没有接触过的领域,几乎是从零开始学习它的思想理念、源码实现、开发流程等等,实习过程中涉及到方方面面的知识和技能,比如说ubuntu(linux)操作系统指令,java编程,数据结构,计算机网络、病毒方面的知识,还需要阅读很多英文的官方文档。把这些零碎的知识应用到整个项目中来,还要能解决实践过程中的各种小问题,这些不仅仅是对专业技能的挑战,也是对协调创新能力和耐心毅力的锻炼。本次实习的还有一个额外的收获,通过熟悉项目开发流程,进一步明确了自己毕业设计的具体思路,对于撰写开题报告和指定实施计划,也是很有帮助的。