ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实验1: SDN拓扑实践

2022-09-12 03:00:56  阅读:132  来源: 互联网

标签:addLink self 实践 h4 拓扑 交换机 SDN net


实验1: SDN拓扑实践

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

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

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

即线性拓扑(Linear):

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

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

即简单拓扑 :

 sudo mn --topo=single,3

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

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)

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() ) }

6.个人总结

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

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

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

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

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

标签:addLink,self,实践,h4,拓扑,交换机,SDN,net
来源: https://www.cnblogs.com/lcy20220907/p/16685327.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有