• SDN学习+Mininet+OpenDaylight


    SDN

    SDN介绍

    SDN字面意思是软件定义网络,SDN将在整个网络(不仅仅是网元)的垂直方向变得开放、标准化、可编程,从而让人们更容易、更有效地使用网络资源。

    在传统的架构中,交换机和路由器不得不在操作6000种分布式协议的控制下实施整个网络的智能。这就意味着,即使只有一个网元增加了一种新的协议,也需要所有其他网元做出相应的结构变更。事实上,在网络中增加一种新的协议往往需要数年时间,才能最终完成标准化到实际部署的过程。

    Mininet

    Mininet是什么

    Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。

    Mininet可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用ssh登录,启动应用程序,程序可以向以太网端口发送数 据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。

    Mininet安装与部署

    Mininet虚拟机安装

    1. 下载Mininet镜像:https://github.com/mininet/mininet/releases
    2. 下载虚拟机软件. VirtualBox , VMware Workstation
    3. 安装镜像

    本地安装(推荐)

    通过Git拉取源代码

    git clone git://github.com/mininet/mininet
    

    安装Mininet,根据mininet/util/install.sh -h 查看命令选择

    mininet/util/install.sh -n3V 2.5.0
    

    安装完成后,使用命令测试Mininet安装是否成功

    sudo mn --test pingall
    

    SDN_Command

    安装Mininet文件包(最省事)

    在Ubuntu安装Mininet文件包

    sudo apt install mininet/precise-backports
    

    安装时遇到的问题

    Mininet_Q1.png

    提示6653端口被占用

    sudo service openvswitch-testcontroller stop
    

    内部交互命令

    使用sudo mn 进入交互后创建默认拓扑

    help #查看帮助命令
    net #查看链路信息
    nodes #查看网络里面有多少节点以及有什么节点
    links #查看链路健壮性,看看某条链路是不是在正常工作
    pingall #测试所有主机间通信
    pingpair #只验证前两个主机连通性-
    dump #节点信息
    intfs #网络接口信息
    iperf h1 h2 #测试H1 H2的带宽
    link s1 s2 up#禁用或开始节点间的链路
    iperfudp bw h1 h2 #测试H1 H2 的UDP带宽
    xterm h1 #节点开启可视化操作
    py net.addSwtich("s1") #执行python 表达式
    

    py实验

    添加一个h3 并连接至 s1

    py net.addHost('h3') #添加一个主机h3
    py net.addLink(s1,net.get('h3')) #将s1 和 h3连接起来
    py s1.attach('s1-eth3') #添加接口s1-eth3
    py net.get('h3').cmd('ifconfig h3-eth0 10.3') #给h3设置ip
    py dump #查看设备的信息
    #发现我们的h3并没有显示我们设置的IP 依然为none
    #我们需要h1 ping h3命令,让设备发现他的ip。在dump即可查看正确的设备信息。
    

    OpenDaylight

    1.安装ODL依赖包

      sudo apt-get update
      sudo apt-get install openjdk-8-jdk
    

    2.下载OpenDaylight控制器:http://www.opendaylight.org/software/downloads

     tar zxvf distribution-karaf-0.3.0-Lithium.tar.gz
    

    3.配置Java环境

    打开 vi /etc/profile

    添加以下代码

    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    
    JRE_HOME=$JAVA_HOME/jre
    
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    
    export JAVA_HOME JRE_HOME CLASS_PATH PATH
    

    source 文件

    source /etc/profile
    

    4.测试是否安装成功

    cd distribution-karaf-0.3.0-Lithium

    执行./bin/karaf

    执行成功后

    odl.png

    流表

    当前拓扑图为

    实验目标为:

    h1 无法ping h2

    dpctl del-flows
    #清除所有流表,也可以使用sh ovs-ofctl s1  del-flows 针对S1删除流表
    dpctl add-flow in_port=1,actions=output:2 
    #让1端口添加output 2端口
    dpctl add-flow in_port=2,actions=output:3,output:1 
    #让2端口添加output 3,1端口
    dpctl add-flow in_port=3,actions=output:2
    #让3端口添加output 2端口
    

    输入pingall 结果为

    1   ->  h2 X 
    h2  ->  h1 h3 
    h3  ->  X  h2 
    

    再来一个实验

    任务目标是使得h1 与 h2 通, h3 与 h4通, h1 与 h3 不通。

    根据这个任务目标,也就是只有相同交换机下的主机才可以互通。

    h1 连接了 s2 的 2 端口

    h2 连接了 s2 的 3端口

    h3 连接了 s3 的 2端口

    h4 连接了 s3的 3端口

    只要交换机之间不互通即可。交换机是1,3端口。先删除所有流表,在添加 2 ,3的互通。

    dpctl del-flows 
    dpctl add-flow in_port=2,actions=output:3
    dpctl add-flow in_port=3,actions=output:2
    

    pingall结果:

    h1 -> h2 X X 
    h2 -> h1 X X 
    h3 -> X X h4 
    h4 -> X X h3
    

    用另外一种思路

    将s1路由器来自1端口的全部丢弃,也可以实现。

     sh ovs-ofctl add-flow s1 priority=50,in_port=1,action=drop
    
  • 相关阅读:
    jquery2 数据缓存
    gb2312和utf8 转换
    extlangzh_CN.js错误“未结束的字符串常量”
    easyui datagrid 查询
    jQuery获取Select选择的Text和 Value(转)
    JavaScript无提示关闭窗口(兼容IE/Firefox/Chrome)
    简单介绍一些HTML代码(字幕、音频和视频)
    《JavaScript语言精粹》读书笔记
    在本地安装git的HTML帮助文档
    《卓有成效的程序员》读书笔记
  • 原文地址:https://www.cnblogs.com/skyxmao/p/12653335.html
Copyright © 2020-2023  润新知