混合IP-SDN环境的仿真实验

简介: 混合IP-SDN环境的仿真实验

混合IP-SDN环境的仿真实验

实验室名称

网络安全与管理实验室

实验名称

混合IP-SDN环境的仿真实验

实验原理

软件定义网络将网络的控制层与数据转发层分离,控制平面在逻辑上集中,能够实现资源的灵活调度,更多的开放接口能够实现网络的可编程控制。标准化的南向接口将底层硬件对网络管理者透明化。作为一种全新的网络架构和管理形式,SDN网络在应用过程中如何与传统网络相结合受到业内的广泛讨论。由于SDN逻辑集中于控制层面,其如何与传统IP网络中的标准路由设备通信进行网络信息的更新、维护以及路由转发信息计算是一个关键问题;对于SDN自身实现方式,处于对整个网络集中式控制健壮性和延时性的风险考虑,一些研究认为网络中大部分流量利用传统控制方式其可满足转发需求,只需对其他少部分流量实现SDN控制即可满足其灵活动态需求


实验目的

从拓扑混合和流量混合两种角度出发,针对混合IP/SDN场景进行仿真, 对每一种混合模式进行了场景描述和路由实现。利用开源控制器POX路由平台,使用WireShark实现对路由协议消息的解析,并针对各拓扑混合和流量混合两种场景分析


实验设备

VMware16 pro + Ubuntu 18.0.2 LTS + Mininet 2.1.7 + WireShark 3.0.1


实验步骤

1.在mininet中搭建如下拓扑图

6d93569165e743869a1d4c1cbf49e6bb.png


终端显示如图:

4e967042749040cdb7ac72372717dfd0.png



2.配置Mininet如下图:


【edit】—>【Preference】,勾选【Start CLI】,【OpenFlow1.3】,【Default Switch 】选【Open vSwitch Kernel Mode】


32ac469678714d1889ffa424a39c1e2e.png


3.配置Controller如图:

【Controller Type】选【Remote Controller】

9bda9bbd050b46c484c5cf6fe5a523e1.png



4.配置交换机如下图:

DPID为0000000000000001


269d14372d4a4a4caf27f5cbb89991aa.png


5.配置主机

host1为10.0.0.1和host2为10.0.0.2

9d56dc4922314993914d5a9cfe78aa1e.png


144fcfa2603c4a8e958697e9e0a085bf.png


6.在新的终端里打开ryu-manager远程控制器

8dc677d17ea24161a562d6a841ccd3c1.png


7.测试链路的连通性pingall

8f27d8d43ff842749340a1c9a2893243.png


8.打开wireshark,能看到对于的openflow协议,如图

701cff131ff9491f8be7bddee1975954.png


协议的具体信息含义如下:

信息 类型 描述
Hello 控制器->开关 在 TCP 握手之后,控制器将其版本号发送到交换机
Hello 开关->控制器 交换机回复其支持的版本号
功能请求 控制器->开关 控制器要求查看哪些端口可用
设置配置 控制器->开关 在这种情况下,控制器要求交换机发送流到期
特色回复 开关->控制器 交换机回复端口列表、端口速度以及支持的表和操作
端口状态 开关->控制器 使交换机能够通知该控制器端口速度或连接的变化

附上代码:

#!/usr/bin/env 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=RemoteController,
                      ip='127.0.0.1',
                      protocol='tcp',
                      port=6633)
    info( '*** Add switches\n')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch, failMode='standalone')
    info( '*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
    info( '*** Add links\n')
    net.addLink(h1, s1)
    net.addLink(s1, s2)
    net.addLink(s2, h2)
    info( '*** Starting network\n')
    net.build()
    info( '*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()
    info( '*** Starting switches\n')
    net.get('s1').start([c0])
    net.get('s2').start([])
    info( '*** Post configure switches and hosts\n')
    CLI(net)
    net.stop()
if __name__ == '__main__':
    setLogLevel( 'info' )
myNetwork()

实验总结

熟练掌握混合SDN网络环境的搭建,为以后从事相关SDN研究以及论文实验的设计打下基础


运行一个简单的 Web 服务器和客户端仿真

Mininet 主机可以运行任何可用于底层 Linux 系统(或 VM)及其文件系统的命令或应用程序。也可以输入任何bash命令,包括作业控制(&,jobs,kill,等。)


启动一个简单的 HTTP 服务器h1,从 发出请求h2,然后关闭 Web 服务器:

h1 python -m http.server 80 &
h2 wget -O - h1

4fde70192eee431fbbe55beebe4e3d3a.png


对于 Python 3,HTTP 服务器被称为http.server; 对于 Python 2,它被称为SimpleHTTPServer. 确保使用的是适合您正在运行的 Mininet 版本的正确版本。要找出 Mininet 使用的 Python 版本,可以输入


py sys.version

ebec4c5c54144f019f7fef6a00554516.png


退出 CLI:exit


3032a4336751432d8ae607344b40745b.png


清理


如果 Mininet 由于某种原因崩溃,请清理它:

sudo mn -c

学习中碰到的小问题

Ubuntu中切换python版本的问题


在使用Ubuntu的过程中,会遇到编译.py文件报错SyntaxError: Missing parentheses in call to 'print'.

6a6e4c8f8a80497d899642969c6a0b40.png



这是因为源码是用python2.X 的版本写的,在用python3.X编译会有语法上的不兼容,因此我们需要手动切换系统的默认python版本


输入:whereis python,会提示你系统里安装的python路径



f88abdb7838b4e5fbeacf0aed948eba9.png

输入:python


是查看当前系统指定的哪一版本


b64ac0c099a94e0684363aa3a7aa79cf.png


输入:update-alternatives --list python


是指定:你当前可以轮流切换的python版本,我这里还没设定,因此也就没有版本可选


f064f168b2dc483e934eb300053d55c8.png


输入:sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1


是指:安装多个版本供切换,最后面的数字1,是指优先级


b4be5dcd02824a69aac4cdf5d1c233c8.png


这里我指定了2个可选的pthon版本,最后面的数字2,是指优先级

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2

输入:


sudo update-alternatives --config python

是指让你选择你当前想要指定的python版本,使用键盘,输入数字:1,按回车确认,即选定成功!


此时你可以输入:python


系统提示为:Python2.7.18


说明更改成功


258b6187dbf740eb91178e56eb52a871.png


–end–


相关文章
|
缓存 监控 负载均衡
基于SDN环境下的DDoS异常攻击的检测与缓解--实验
基于SDN环境下的DDoS异常攻击的检测与缓解--实验
|
缓存 移动开发 网络协议
基于Open vSwitch的传统限速和SDN限速--实验 2
基于Open vSwitch的传统限速和SDN限速--实验
|
Java SDN 数据库
基于Open vSwitch的传统限速和SDN限速--实验 1
基于Open vSwitch的传统限速和SDN限速--实验
|
2月前
|
5G 网络安全 SDN
网络功能虚拟化(NFV)和软件定义网络(SDN):赋能5G网络灵活、智能演进的关键
网络功能虚拟化(NFV)和软件定义网络(SDN):赋能5G网络灵活、智能演进的关键
72 3
|
5月前
|
SDN 网络虚拟化 虚拟化
云数据中心中的SDN/NFV应用
【6月更文挑战第9天】计算和存储虚拟化技术在云计算IDC中已基本满足需求,但网络成为新瓶颈,主要问题包括虚拟化环境下的网络配置复杂度增加、拓扑展现困难和无法动态调整资源。
|
6月前
|
安全 SDN 网络虚拟化
SDN和NFV笔记
SDN和NFV笔记
132 1
|
6月前
|
网络安全 SDN 网络虚拟化
《计算机网络简易速速上手小册》第8章:软件定义网络(SDN)与网络功能虚拟化(NFV)(2024 最新版)
《计算机网络简易速速上手小册》第8章:软件定义网络(SDN)与网络功能虚拟化(NFV)(2024 最新版)
143 2
|
SDN 网络虚拟化 人工智能
带你读《智慧光网络:关键技术、应用实践和未来演进》——2.9.6 光接入网SDN/NFV
带你读《智慧光网络:关键技术、应用实践和未来演进》——2.9.6 光接入网SDN/NFV
|
SDN 网络虚拟化
SDN与NFV分类对照表
SDN与NFV分类对照表
200 0
SDN与NFV分类对照表