软件定义网络(SDN)基础教程课后习题答案(AI精简版)

Author Avatar
Aurora
发表:2024-12-31 10:22:35
修改:2024-12-31 10:47:49

读前必看:题目答案经AI精简,欢迎勘误!!

第一章 SDN基础知识

1.SDN相比于传统网络的优势在哪里?会带来哪些问题?

参考答案:

SDN的特点与挑战

主要特点

1. 控制与转发分离:控制平面集中化实现,功能部署只需更新控制节点软件,灵活高效。

2. 开放与可编程性:通过编程接口,支持按需定制网络资源。

3. 去垄断化:开放性打破厂商垄断,促进技术创新。

面临的挑战

1. 可扩展性:集中化控制可能导致性能瓶颈,需优化控制架构以应对大规模网络。

2. 一致性:集中控制器需维护网络状态一致性,快速检测并解决问题成为关键。

3. 可用性:控制平面的延迟可能影响数据平面稳定性,需提升系统响应能力。

2.SDN架构包含哪些模块?

参考答案:

ONF定义的SDN架构:四个平面及其功能

1. 数据平面

- 由多个网元组成,负责数据的转发和处理,无控制能力。

- 关键组成:控制-数据平面接口代理、转发引擎表、处理功能模块。

2. 控制平面

- 包括SDN控制器,负责实现网络的逻辑控制功能。

- 关键组成:北向接口代理、控制逻辑、控制-数据平面接口驱动。

- 可由多个控制器协同或形成层级集群。

3. 应用平面

- 包括用户所需的SDN应用,通过北向接口与控制器交互,实现可编程网络行为。

- 可封装自身功能为更高级的北向接口,提供外部服务。

4. 管理平面

- 负责静态管理任务,如网元设置、控制器指定、控制范围设定等,与其他平面相对独立。

3.SDN是如何实现控制平面与数据平面分离的?

参考答案:

SDN数据平面与控制平面的分离

1. 分工明确

- 数据平面:仅保留FIB表和高速转发能力,功能简单、轻量化。

- 控制平面:由远端统一控制器完成所有控制决策,具备全局网络视图和优化能力。

2. 连接方式

- 数据平面与控制平面通过SDN南向接口协议连接,实现数据平面的可编程性。

4.SDN是如何实现网络可编程的?

参考答案:

对上层应用的开发者来说,SDN的编程接口主要体现在北向接口上,北向接口提供了一系列丰富的API,开发者可以在此基础上设计自己的应用而不必关心底层的硬件细节,就像目前在x86体系的计算机上编程一样,不用关心底层寄存器、驱动等具体的细节。北向接口的设计是否完善会直接影响整个SDN的可编程能力。

第二章 SDN仿真环境

1.简单举例说明Mininet在SDN仿真中的作用。

参考答案:

Mininet是一个可以在有限资源的普通计算机上快速建立大规模SDN原型系统的网络仿真工具。该系统由虚拟的终端节点(End-Host)、OpenFlow交换机、控制器(也支持远程控制器)组成,这使得它可以模拟真实网络,可对各种想法或网络协议等进行开发验证。目前Mininet已经作为官方的演示平台对各个版本的OpenFlow协议进行演示和测试。

2.不使用Mininet的可视化应用,写一份拓扑文件,并且在Mininet中使用这份拓扑文件来生成对应的拓扑。

参考答案:

拓扑文件内容如下:

#!/usr/bin/python

from mininet.net import Mininet

from mininet.node import Controller, RemoteController, OVSController

from mininet.node import CPULimitedHost, Host, Node

from mininet.node import OVSKernelSwitch, UserSwitch

from mininet.node import IVSSwitch

from mininet.cli import CLI

from mininet.log import setLogLevel, info

from mininet.link import TCLink, Intf

from subprocess import call

def myNetwork():

    net = Mininet( topo=None,

                   build=False,

                   ipBase='10.0.0.0/8')

    info( '*** Adding controller\n' )

    c0=net.addController(name='c0',

                      controller=Controller,

                      protocol='tcp',

                      port=6633)

    info( '*** Add switches\n')

    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)

    info( '*** Add hosts\n')

    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)

    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)

    h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)

    info( '*** Add links\n')

    net.addLink(h1, s1)

    net.addLink(s1, s2)

    net.addLink(s2, h2)

    net.addLink(s2, h3)

    info( '*** Starting network\n')

    net.build()

    info( '*** Starting controllers\n')

    for controller in net.controllers:

        controller.start()

    info( '*** Starting switches\n')

    net.get('s2').start([c0])

    net.get('s1').start([c0])

    info( '*** Post configure switches and hosts\n')

    CLI(net)

    net.stop()

if name == '__main__':

    setLogLevel( 'info' )

    myNetwork()

步骤① 启动Mininet可视化界面

步骤② 添加并连接网络组件

步骤③ 设置控制器、主机和交换机的属性

步骤④ 单击“File”→“Export Level 2 Script”,将其保存为Python脚本,命名topo.py

步骤⑤ 执行命令sudo python topo.py运行脚本生成对应的拓扑

3.创建拓扑,画出端口转发表来说明MAC地址学习的过程。

参考答案:

(1)创建拓扑命令:mn --topo linear,2,2 --mac --switch ovsk --controller=none

(2)MAC地址学习的过程:

步骤① 如图所示,假设交换机A和B的MAC地址表是空的,主机11向主机33发送数据帧。

图 主机11向主机33发送数据帧

步骤② 交换机A接收到数据帧后,执行以下操作。

• 交换机A学习主机11的MAC地址和端口号,用“11”代表主机11的MAC地址,此时交换机A的MAC地址表如图2-30所示。

图 交换机A的MAC地址表

• 交换机A查看自己的MAC地址表。

• 如果MAC地址表中有目的主机MAC地址,则直接进行数据转发;如果没有,则继续执行以下步骤。

• 交换机A向除源数据发送端口外的其他所有端口发送广播(这里交换机A从端口2和端口3向外发送广播)。

步骤③ 交换机B在接收到数据帧后,执行以下操作。

• 交换机B学习源MAC地址和端口号,此时交换机B的MAC地址表如下图所示。

图 交换机B的MAC地址表

• 交换机B查看自己的MAC地址表。

• 交换机B向除源数据发送端口外的其他所有端口发送广播(这里交换机B从端口1和端口2向外发送广播)。

步骤④ 主机22查看接收到的数据帧,发现目标MAC地址不是自己,丢弃数据帧。

步骤⑤ 主机33接收数据帧,主机44丢弃数据帧。

步骤⑥ 假设这时主机44要给主机11发送数据帧。

步骤⑦ 交换机B接收到数据帧后,执行以下操作。

• 交换机B学习主机44的MAC地址和端口号,此时交换机B的MAC地址表如下图所示。

图 交换机B的MAC地址表

• 交换机B查看自己的MAC地址表,根据MAC地址表中的条目,单播转发数据到端口3。

步骤⑧ 交换机A在接收到数据帧后,执行以下操作。

• 交换机A学习源MAC地址和端口号,此时交换机A的MAC地址表如下图所示。

图 交换机A的MAC地址表

• 交换机A查看自己的MAC地址表,根据MAC地址表中的条目,单播转发数据到端口1。

• 主机11接收到数据帧。

至此,MAC地址学习过程结束。

4.谈谈Mininet下MAC地址学习的作用。

参考答案:

MAC地址是识别LAN节点的标识,MAC对设备(通常是网卡)接口是全球唯一的。对于网卡来说,MAC地址是它的物理地址,是不可变的,而IP地址是它对应的逻辑地址,是可以更改的。在交换机中有MAC地址表,交换机可根据这张表将数据帧传输到指定的主机上。交换机在接收到数据帧以后,首先将数据帧中的源MAC地址和对应的接口记录到MAC表中,接着检查自己的MAC表中是否有数据帧中的目标MAC地址的信息。如果有,则根据MAC表中记录的对应接口将数据帧发送出去(也就是单播);如果没有,则将该数据帧从非接收接口发送出去(也就是广播)。

5.说明SDN仿真环境和传统网络仿真环境的异同。

参考答案:

传统网络仿真平台(如NS2、OPNET)难以准确模拟实际网络,且缺乏交互性,开发代码无法直接部署到真实网络。斯坦福大学Nick McKeown团队开发了基于Linux Container的轻量级仿真工具Mininet,其代码可无缝迁移到硬件环境,便于添加新功能和测试。

第三章 SDN数据平面

1.数据平面有哪几个方面的功能?请简要说明。

参考答案:

数据平面通过硬件转发芯片对数据分组进行高速转发,主要包括以下功能:

1. 转发决策:交换设备根据目的地址与MAC地址表或路由表匹配,决定数据分组的转发端口,由交换芯片执行匹配。

2. 背板转发:数据分组经过转发决策后,通过交换机背板从入端口转发到目标端口,背板可采用共享总线、共享内存或CrossBar结构。

3. 输出链路调度:数据分组先存储在接收队列中,待处理后进入发送队列,再送至目标端口。如果终端忙,数据将继续存储在发送队列中。

2.SDN交换机和传统交换机有什么区别?

参考答案:

SDN交换设备的基本功能包括转发决策、背板转发和输出链路调度,但与传统交换设备有所不同:

1. 转发决策:SDN交换设备使用流表代替传统的二层和三层转发表,数据分组与流表匹配,若匹配成功则执行相应处理,若无匹配则交给控制器处理。此过程依赖交换芯片。

2. 背板转发:数据中心的SDN应用要求较高的交换速率,当前速率瓶颈主要在交换芯片,背板速率满足需求不成问题。

3. 输出链路调度:数据分组进入端口队列等待处理,支持QoS的交换机可基于字段分类、优先级调度等。SDN交换机通过流表、Meter、Counter和Group等功能支持QoS管理。

尽管背板转发和输出链路调度对SDN交换机挑战不大,转发决策却是技术上的难题,特别是流表的高逻辑粒度要求交换芯片在性能设计上进行创新,提升其多功能支持能力。

3.什么是白盒交换机?它的特点是什么?

参考答案:

白盒交换机(也称白牌交换机或裸机交换机)最初指无品牌的计算机,现由ODM厂商(如Accton、Celestica、Quanta)生产,用户可根据需求选择硬件和软件。白盒交换机的软硬件接口标准化后,用户可安装自定义操作系统和应用程序,实现灵活的业务创新和快速部署。

白盒交换机需独立的网络操作系统才能工作,Linux操作系统因其开源、免费和丰富的工具,成为理想选择。为支持SDN,白盒交换机操作系统必须能够与SDN控制器(如Ryu、Floodlight)交互。

4.Open vSwitch由哪几个基本部件组成?各有什么功能?

参考答案:

Open vSwitch由三个主要部件组成:

1. ovs-vswitchd守护进程:位于用户空间,处理基本转发逻辑,如地址学习、VLAN、LACP、负载均衡等,支持OpenFlow协议,并通过sFlow、NetFlow或SPAN进行网络可视性管理,配置后由ovsdb-server存储和管理数据。

2. 核心数据转发平面:由openvswitch_mod.ko模块组成,位于内核空间,负责数据分组查询、转发、隧道封装及维护底层转发表。

3. 控制平面:通过OpenFlow控制集群组成分布式虚拟交换机,支持租户虚拟机隔离。首次数据流由OpenFlow控制器处理,之后直接由核心转发模块处理,提高数据处理效率。

5.尝试结合现有网络场景,说明Open vSwitch在该场景下的优势和应用方法。

参考答案:

(1)应用场景:数据中心。

(2)优势:能同时支持多种标准的管理接口和协议(如NetFlow、sFlow、SPAN、RSPAN、CLI、LACP、802.1ag等),支持跨物理服务器分布式管理、扩展编程、大规模网络自动化。Open vSwitch具备很强的灵活性,可以在管理程序中作为软件交换机运行,也可以直接部署到硬件设备上作为控制层。利用其作为SDN的基础设施层转发设备,可以大幅降低部署成本,还可以提高网络的灵活性以及扩展性。节省硬件成本、部署灵活。

(3)应用方法:Open vSwitch主要用于转发数据,常见的操作有网桥和端口的添加、删除、查看等;流表的添加、查看等;QoS设置及端口映射等。

6.如果不删除eth0直接删除br0,br0及挂接到br0上的端口会被一并删除吗?

参考答案:

直接删除br0,此时br0会被删除,而br0上的端口从br0上删除,但eth0实际网卡依旧存在。

7.根据流表操作表格,尝试按照如下要求添加流表项:假设存在端口2流入的源IP地址为10.0.0.1的IPv4数据包,将该流的目的IP地址修改为10.0.0.2。

(ovs-ofctl add-flow br0 idle_timeout=1000,priority=1,in_port=2,

dl_type=0x0800,nw_src=10.0.0.1,actions=mod_nw_dst:10.0.0.2)

参考答案:

8.假设某网吧使用OVS进行总机数据交换,该OVS现有网桥及端口如图3-56所示,假设端口eth1和eth4的速率需求为1000 kbit/s。现要求用eth8对上述两端口进行监控,同时为3个端口提供QoS保障。试根据实验所学内容,写出OVS的关键配置步骤。

图3-56 现有网桥和端口

参考答案:

监控配置如下:

# ovs-vsctl -- set bridge br-sw mirrors=@m -- --id=@m create mirror name=mymirror select-dst-port=eth1 uuid

select-src-port=eth4 uuid

output-port=eth8 uuid

QoS配置如下:

# ovs-vsctl set interface eth1 ingress_policing_rate=100000

# ovs-vsctl set interface eth1 ingress_policing_burst=50000

# ovs-vsctl set interface eth4 ingress_policing_rate=100000

# ovs-vsctl set interface eth4 ingress_policing_burst=50000

# ovs-vsctl set interface eth8 ingress_policing_rate=100000

# ovs-vsctl set interface eth8 ingress_policing_burst=50000

第四章 SDN控制平面

1.请写出SDN控制平面层次化架构的两个主要层面及其功能。

参考答案:

控制器分为两个层次:

1. 基本功能层:提供控制器的基本功能,主要包括协议适配(南向接口与东西向接口协议)和支撑上层应用的功能(如模块管理、事件机制、任务日志和资源数据库)。

2. 网络基础服务层:提供基础的网络功能,通过调用基本功能层的接口实现设备管理、状态监测等,涵盖模块包括交换机管理、主机管理、拓扑管理、路由、转发策略和虚拟网管理等。

2.SDN控制器的评估要素都有什么?

参考答案:

SDN控制器的十大评估要素包括:对OpenFlow的支持、网络虚拟化、网络功能、可扩展性、性能、网络可编程性、可靠性、网络安全性、集中管理和可视化、控制器供应商。

3.当登录OpenDaylight主界面时,有时会出现无法登录(提示:Unable to Login)的问题,请问这有可能是什么原因导致的?并说出解决办法。

参考答案:

一种原因可能是控制器所在机器的内存不足,需要扩大机器的内存。此原因排除后,出现问题的解决方法是通过logout退出Karaf控制台,进入上级目录,删除data目录(rm-rf data),进入bin目录(cd bin)执行./karaf clean,再次按照顺序安装组件。

4.从Helium版本开始的OpenDaylight默认Web端口是多少?这个端口能否手动修改?如果能,如何手动修改?

参考答案:

从Helium版本开始的OpenDaylight默认Web端口是8181,这个端口也可以手动修改,只需要修改distribution-karaf-0.6.0-Carbon/etc目录下的jetty.xml文件,如将端口修改为8080,可修改配置:<Property name="jetty.port" default="8080"/>

5.根据使用OpenDaylight界面下发流表这个实验,请叙述出数据包处理的流程及单级流表和多级流表的处理过程。

参考答案:

1. 数据包处理流程:

① 当交换机收到未知数据包时,发送Packet_in消息到控制器。

② 控制器根据Packet_in消息判断处理方式,并通过Packet_out消息告知交换机处理方法。

③ 控制器根据需要通过Flow_mod消息向交换机添加流表(可选)。

④ 控制器和交换机互发Echo心跳消息以确认工作状态(可随机出现)。

2. 单级流表处理过程:

① 交换机接收数据包并开始处理。

② 可选的生成树处理。

③ 解析数据包头部。

④ 按流表项优先级匹配流表项,执行相应动作;若无匹配,继续匹配下一项。

⑤ 若无匹配项,封装数据包通过安全通道发送给控制器。

3. 多级流表处理过程:

① 数据包从流表0开始,逐个流表匹配。

② 匹配成功时,流表项可以指定跳转到更高编号的流表(GOTO指令)。

③ 若无GOTO指令,数据包停止在当前流表并执行转发等处理。

第五章 SDN协议接口

1.简述OpenFlow协议中流表的结构和功能,比较流表与传统网络中交换机、路由器中转发表的相似点和不同点。

参考答案:

OpenFlow的流表项包括三部分:

1. 分组头域:用于数据包匹配流表项,类似于传统交换机的MAC地址或路由器的IP地址。

2. 计数器:用于统计流的信息,如查找次数、分组数和生存时间。

3. 动作表:指定OF交换机如何处理流的动作,包含一个或多个动作,按顺序执行。

流表功能类似传统交换机的MAC地址表和路由器的IP路由表,但它可以包含更多层次的网络特征,并由网络管理员通过控制器编程定义,从而增强网络部署的灵活性,支持交换、路由、防火墙等多种功能。

2.简述OpenFlow协议中安全通道的建立过程。

参考答案:

OpenFlow控制器通过TCP端口6633等待交换机连接。交换机连接时,双方交换证书进行身份认证,每个交换机需配置两个证书,分别用于认证控制器和向控制器发起认证。认证通过后,双方发送握手消息,携带支持的最高协议版本,接收方采用较低版本协议。如果有共同支持的协议版本,建立安全通道;否则,发送错误消息并终止连接。

3.创建一个小型拓扑,抓包分析OpenFlow交换机和控制器的交互过程。

参考答案:

OpenFlow交换机与控制器的交互过程如下:

1. 通过TCP“三次握手”建立连接,控制器端口为6633。

2. 双方交换Hello消息,协商OpenFlow版本,若不一致则发送错误消息。

3. 控制器发送功能请求消息,交换机反馈其参数(如缓存、流表数目、动作等)。

4. 控制器下发配置参数,询问交换机当前配置,交换机反馈配置信息。状态修改通过Modify State Messages进行。

5. 控制器与交换机发送Packet_out、Packet_in消息,通过LLDP包探测网络拓扑。

6. 双方通过Multipart请求和反馈获取交换机状态信息(如流、端口等)。

7. 通过Echo请求和回复确保连接有效,避免失联。

4.NETCONF协议作为一个网络管理协议,与之前的SNMP以及CLI的管理方式相比有什么优点?

参考答案:

随着网络规模和复杂度的增加,传统的CLI和SNMP已无法满足复杂的网络管理需求,尤其是配置管理方面。NETCONF协议提供了一种简便的管理机制,允许设备检索配置数据并上传新的配置。通过NETCONF,应用程序可以通过标准API发送和接收配置数据,支持RPC通信方式。NETCONF还允许客户端发现服务器的协议扩展,并可与XML转换技术如XSLT结合,构建自动化配置系统。

5.NETCONF协议分成了几层,每层对应实现了什么功能?

参考答案:

NETCONF协议分为四层:传输层、消息层、操作层和内容层。

1. 传输层:要求面向连接,提供可靠、有序的数据传输,并支持身份认证、数据完整性和机密性保护。必须使用SSH或TLS协议加密连接。

2. 消息层:采用基于RPC的通信模式,使用<rpc>和<rpc-reply>元素进行请求和响应,完成网络设备的配置管理。

3. 操作层:提供低级别操作来管理设备配置和检索设备状态,包括检索、配置、复制和删除配置数据。

4. 内容层:由配置数据和通知数据组成,使用YANG建模语言定义数据模型,并支持扩展和用户自定义操作。

6.查阅资料,思考NETCONF主要有哪些应用场景?

参考答案:

通过NETCONF,用户可以增加、修改、删除网络设备的配置,并获取设备的配置和状态信息。NETCONF支持以下操作和能力:

1. 基本操作:提供修改数据库配置、获取信息等基本功能。

2. 标准能力集:定义了一系列标准操作,增强了NETCONF的功能,提升了容错性和可扩展性,推动开放式网络管理架构的实现。

3. 扩展能力集:设备厂商可定义自有能力集,实现NETCONF之外的特色功能。

7.登录控制器,打开Postman,在URL地址栏中输入如下内容,提交方式为GET,来获取交换机ID信息。

http://127.0.0.1:8080/restconf/operational/opendaylight-inventory:nodes

参考答案:

第六章 SDN基础应用开发

1.请简要谈谈使用SDN的仿真工具进行实验的优点与不足。

参考答案:

优点:

(1)节省资源,便于在有限的资源上进行复杂拓扑的实验。

(2)操作简单,通过简单的脚本就可以完成一个拓扑的创建。

(3)速度快,实验拓扑秒级启动。

缺点:

(1)仿真工具UI易用性较差。

(2)仿真终端不支持复杂应用的部署。

2.请尝试对实验内容进行修改并增添自己的想法,定制一个自己的实验。

第七章 SDN综合应用开发

1.请简要谈谈SDN北向API的作用。

参考答案:

控制器北向API由控制器提供,可通过调用所述接口对控制器连接的交换机进行管理,管理操作包括流表的增、删、改、查,拓扑获取,交换机配置更改等。

2.请回答SDN防火墙的特点。

参考答案:

SDN作为新型网络架构,具有转控分离、控制平面可编程和集中控制的特性。通过SDN的中心化控制,用户可采集全局流量信息,建立实时和历史信息库,精准识别并阻断异常流量,提供类防火墙功能。利用开放的北向接口,用户可定制应用并快速部署安全策略,及时响应安全事件。SDN架构为网络安全创新提供了广阔空间。

3.请结合实际生活中的例子,谈一谈SDN的网络安全的需求和挑战。

参考答案:

为了满足日益增长的业务需求,金融机构正在推动数据中心云化建设。基于SDN的金融云平台需求包括:

1. 随着互联网业务的增加,云网自动化协同变得迫切,SDN开放的数据平面接口和自动化可编程性支持快速组网需求,基于流的转发控制使网络行为更加多样化和精细化。

2. 面向外部金融机构提供云托管服务,SDN的中心化控制平面提升了网络效率与灵活性,并在安全方面实现细粒度管控,增强了安全可控性和隔离粒度。

尽管SDN提高了数据层面的安全性,但在策略转换和指令下发过程中可能引入新的管理风险,特别是在控制平面和南北向链路上,控制器需要更高的保护措施。

评论