实验1: SDN拓扑实践


实验1: SDN拓扑实践

1.使用Mininet可视化工具,生成下图所示的拓扑,并保存拓扑文件名为学号.py。

实验1: SDN拓扑实践

2.使用 Mininet的命令行 生成如下拓扑:

a) 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线。

即线性拓扑(Linear):

sudo mn --topo=linear,3 # 主机数=交换机数=3

实验1: SDN拓扑实践

b) 3台主机,每个主机都连接到同1台交换机上。

即简单拓扑 :

 sudo mn --topo=single,3

实验1: SDN拓扑实践

3. 在2 b)的基础上,在Mininet交互界面上新增1台主机并且连接到交换机上,再测试新拓扑的连通性。

py net.addHost('h4')
py net.addLink(h4, s1, 0, 4)
py s1.attach('s1-eth4')

# py h4.setIP('10.0.0.4', 24)
# the above instruction can replace the follow two.
py net.get('h4').cmd('ifconfig h4-eth0 10.0.0.4')
# py net.get('h4').cmd('ifconfig h4-eth0 10.4')
h1 ping h4 
# h2/h3 ping h4 is ok.


pingall

实验1: SDN拓扑实践

4. 编辑(一)中第1步保存的Python脚本,添加如下网络性能限制,生成拓扑:

a) h1 的 cpu 最高不超过50%;
b) h1 和 s1 之间的链路带宽为10,延迟为5 ms,最大队列大小为1000,损耗率50。

    info( '*** Add hosts/n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None, cpu = 0.5)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
    h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
    h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)

    info( '*** Add links/n')
    net.addLink(s1, s2)
    net.addLink(s1, h1, bw=10, delay='5ms', max_queue_size=1000, loss=50)
    net.addLink(s1, h2)
    net.addLink(s2, h3)
    net.addLink(s2, h4)

实验1: SDN拓扑实践

实验1: SDN拓扑实践

5. Advanced 进阶要求

#!/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):
    def __init__(self):

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

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

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

        # add edge ovs		边缘交换机	Level3		e
        for i in range(L3):
            sw = self.addSwitch('s{}'.format(L1 + L2 + i + 1))
            e.append(sw)

            # add links between core(L1) and aggregation ovs(L2)
        for i in range(L1):
            sw1 = c[i]
            for sw2 in a[0:]:
                # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
                self.addLink(sw2, sw1)

        # add links between aggregation(L2) and edge ovs(L3)
        for i in range(L2):
            sw1 = a[i]
            j = i // 2
            for sw2 in e[j * 4:j * 4 + 4]:
                self.addLink(sw2, sw1)

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


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

实验1: SDN拓扑实践

实验1: SDN拓扑实践

实验1: SDN拓扑实践

实验1: SDN拓扑实践

实验1: SDN拓扑实践

6.个人总结

在整个的实验过程中, 操作难度并不高, 按部就班, 参考老师提供的资料, 能够非常顺利地完成实验要求.

在添加客户机host 的时候,碰到了一些问题, 最后参考了 这篇博客, 了解了新客户机配置IP 的必要性.

最后的进阶实验, 需要自学一部分Python 相关知识. 不过那些复杂的import, 我们都在实验环境配置的实验中下载好了, 这为我们编程来具体实现这个网络的拓扑节约了非常多的精力.

最大的遗憾是最后的一个实验要求没有完全实现. 在pingall命令下, Terminalmininet显示主机之间不能互相通信, 而其他的命令, 比如nodes, links, net, dump, 均可以正常显示出用户希望得到的结果.

在后面会考虑抽出时间来具体探寻一下原因.

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/288942.html

(0)
上一篇 2022年9月12日 08:50
下一篇 2022年9月12日 09:16

相关推荐

发表回复

登录后才能评论