ISPSrv之SDN
2026/8/30 7:26:05 网站建设 项目流程

SDN

题目详细

在 IspSrv 上导入 OpenDayLight 软件包;
启动 OpenDayLight 的 karaf 程序,并安装如下组件:
feature:install odl-restconf
feature:install odl-l2switch-switch-ui
feature:install odl-mdsal-apidocs
feature:install odl-dluxapps-applications
使用 Mininet 和 OpenVswitch 构建拓扑,连接 ODL 的 6653 端口如下 拓扑结构:

在浏览器上可以访问 ODL 管理页面查看网元拓扑结构;
通过 OVS 给 S2 下发流表,使得 H2 与 H1、H3 无法互通;
H1 启动 HTTP-Server 功能,WEB 端口为 8080,H3 作为 HTTP-Client, 获取 H1 的 html 网页配置文件。

系统环境

主机ip地址作用说明
ISPSrv81.6.63.100/24SDN服务器

做题步骤

​ 上传软件包:

root@ispsrv:~# apt -y install lrzszroot@ispsrv:~# rzrz waiting to receive. zmodem trl+C ȡ 正在传输 distribution-karaf-0.6.0-Carbon.zip...100%425034KB10898KB/ 00:00:390正在传输 mininet_2.2.2-4_amd64.deb...100%121KB121KB/ 00:00:010

​ 安装jdk、openvswitch和解压opendaylight:

root@ispsrv:~# apt-get -y install openjdk-8-jdk openvswitch-switchroot@ispsrv:~# unzip distribution-karaf-0.6.0-Carbon.zip

​ 启动 OpenDayLight 的 karaf 程序:

root@ispsrv:~# ./distribution-karaf-0.6.0-Carbon/bin/karaf

​ 安装组件:

feature:install odl-restconf
feature:install odl-l2switch-switch-ui
feature:install odl-mdsal-apidocs
feature:install odl-dluxapps-applications

opendaylight-user@root>feature:install odl-restconf opendaylight-user@root>feature:install odl-l2switch-switch-ui opendaylight-user@root>feature:install odl-mdsal-apidocs opendaylight-user@root>feature:install odl-dluxapps-applications

​ 安装Mininet:

root@ispsrv:~# dpkg -i mininet_2.2.2-4_amd64.debroot@ispsrv:~# apt-get --fix-broken install -y //修复依赖包之间的关系root@ispsrv:~# dpkg -i mininet_2.2.2-4_amd64.deb

​ 创建拓扑:

root@IspSrv:~# mn --controller=remote,ip=81.6.63.100,port=6653 --topo=linear,3,1 --switch=ovs,protocols=OpenFlow10mininet>pingall *** Ping: testingpingreachability h1 ->h2 h3 h2 ->h1 h3 h3 ->h1 h2 *** Results:0% dropped(6/6 received)mininet>
  • mn:调用 Mininet 的可执行程序。
  • --controller=remote,ip=81.6.63.100,port=6653:指定控制器的类型为远程控制器,并设置其 IP 地址为81.6.63.100,端口号为6653。这意味着 Mininet 启动后,交换机会主动连接到此 IP 和端口上的 OpenFlow 控制器(例如 Floodlight、OpenDaylight 或 Ryu 等)。
  • --topo=linear,3,1:定义网络拓扑为线性拓扑。参数3,1表示创建 3 个交换机,每个交换机下连接 1 台主机。因此最终拓扑是 3 台交换机串联成一条链,每台交换机各挂载一台主机。
  • --switch=ovs,protocols=OpenFlow10:指定交换机的类型为 Open vSwitch(OVS),并设置其使用的 OpenFlow 协议版本为 OpenFlow 1.0。protocols=OpenFlow10强制交换机仅支持 OpenFlow 1.0,这对于与仅兼容 1.0 版本的控制器通信是必要的。

​ 验证:

opendaylight-user@root>feature:list|grepodl-mdsal-apidocs odl-mdsal-apidocs|1.5.0-Carbon|x|odl-controller-1.5.0-Carbon|OpenDaylight :: MDSAL :: APIDOCS opendaylight-user@root>feature:list|grepodl-l2switch-switch-ui odl-l2switch-switch-ui|0.5.0-Carbon|x|l2switch-0.5.0-Carbon|OpenDaylight :: L2Switch :: Switch

​ 浏览器访问81.6.63.100:8181/index.html。用户名和密码都是admin


配置下发流表,开启HTTP-Server功能:

h2与h1、h3无法互通

mininet>shovs-ofctl add-flow s2in_port=1,actions=drop mininet>pingall
  • sh:Mininet 的内部命令,用于执行后续的 shell 命令(即 Linux 系统命令)。它允许在 Mininet 提示符下直接运行外部程序。
  • ovs-ofctl:Open vSwitch 的命令行工具,用于管理和查看 OpenFlow 流表。
  • add-flow s2:向名为s2的交换机添加一条流表项。
  • in_port=1,actions=drop:流表项的匹配条件和动作。
    • in_port=1:匹配条件,表示数据包的入端口是交换机的端口 1。
    • actions=drop:动作,表示丢弃匹配到的数据包。

作用:在交换机s2上添加一条 OpenFlow 规则,所有从端口 1 进入的数据包都将被直接丢弃,不再进行后续处理(如转发到其他端口或控制器)。

​ h1开启http服务:

mininet>h1 python-mSimpleHTTPServer8080&
  • h1:指定命令在 Mininet 中的虚拟主机h1上执行。Mininet 允许直接对特定主机运行命令。
  • python -m SimpleHTTPServer 8080
    • python:调用 Python 解释器。
    • -m SimpleHTTPServer:以模块方式运行 Python 的SimpleHTTPServer模块。该模块是 Python 2 内置的一个简单 HTTP 服务器,它会将当前工作目录下的文件通过 HTTP 协议共享出来,默认端口为 8000,此处指定端口为8080
    • 注意:Python 3 中对应的模块为http.server,命令应为python3 -m http.server 8080。此处使用的是 Python 2 语法,说明当前环境可能默认 Python 版本为 2.x。
  • &:将命令放入后台执行。这样不会占用当前终端,服务器将持续运行直到被手动终止(如使用kill命令)。

​ 安装测试工具:

mininet>shaptinstall-ywgetmininet>shaptinstall-ycurl

​ 测试:

mininet>h3wget-Oh1 http://10.0.0.1:8080

装测试工具:

mininet>shaptinstall-ywgetmininet>shaptinstall-ycurl

​ 测试:

mininet>h3wget-Oh1 http://10.0.0.1:8080

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询