SDN First Try

1.环境搭建

之前Linux课程中安装了Ubuntu虚拟机,这里就不赘述。

值得一提的是不能通过在Windows下载拖移到虚拟环境中,因为有些文件在Linux下是无法显示的。

所以就直接在Linux下安装git然后直接在GitHub上克隆过来,这个过程蛮久的。

安装完成后输入 sudo mn,提示有些包欠缺,这个时候再运行 sudo apt-get install mininet。

接着就坐等安装完成。

2.用字符命令搭建如下拓扑,要求写出命令

a.

3. 利用可视化工具搭建如下拓扑,并要求支持OpenFlow 1.0 1.1 1.2 1.3,设置h1(10.0.0.10)、h2(10.0.0.11)、h3(10.0.0.12),拓扑搭建完成后使用命令验证主机ip,查看拓扑端口连接情况。

这个地方需要注意应该用sudo权限来运行miniedit.py

右键主机输入ip

4. 利用Python脚本完成如下图所示的一个Fat-tree型的拓扑(交换机和主机名需与图中一致,即s1~s6,h1~h8,并且链路正确,请给出Mininet相关截图)

代码改动如下:

#!/usr/bin/python
# 创建网络拓扑
"""Custom topology example
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController, CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections


class MyTopo(Topo):
    "Simple topology example."

    def __init__(self):
        "Create custom topo."

        # Initialize topology
        Topo.__init__(self)
        L1 = 2
        L2 = L1 * 2
        c = []
        a = []

        # add core ovs
        for i in range(L1):
            sw = self.addSwitch('s{}'.format(i + 1))
            c.append(sw)

        # add aggregation ovs
        for i in range(L2):
            sw = self.addSwitch('s{}'.format(L1 + i + 1))
            a.append(sw)


        for i in range(L1):
            sw1 = c[i]
            for sw2 in a[i / 2::L1 / 2]:
                # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
                self.addLink(sw2, sw1)


        # add hosts and its links with edge ovs
        count = 1
        for sw1 in a:
            for i in range(2):
                host = self.addHost('h{}'.format(count))
                self.addLink(sw1, host)
                count += 1


topos = {'mytopo': (lambda: MyTopo())}

运行结果:

01-06 15:20