這個作業屬于哪個課程 | https://edu.cnblogs.com/campus/fzzcxy/FZUZCSDN202201 |
這個作業要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/FZUZCSDN202201/homework/12704 |
這個作業的目標 | 能夠使用源碼安裝Mininet 能夠使用Mininet的可視化工具生成拓撲 能夠使用Mininet的命令行生成特定拓撲 能夠使用Mininet交互界面管理SDN拓撲 能夠使用Python腳本構建SDN拓撲。 |
2.使用Mininet的命令行生成如下拓撲:
a) 3臺交換機,每個交換機連接1臺主機,3臺交換機連接成一條線。
b) 3臺主機,每個主機都連接到同1臺交換機上。
3.在2 b)的基礎上,在Mininet交互界面上新增1臺主機并且連接到交換機上,再測試新拓撲的連通性。
4.編輯基本要求第1步保存的Python腳本,添加如下網絡性能限制,生成拓撲:
a) h1的cpu最高不超過50%;
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None, cpu=0.5)
b) h1和s1之間的鏈路帶寬為10,延遲為5ms,最大隊列大小為1000,損耗率50。
net.addLink(s1, h1, bw=10, delay='5ms', max_queue_size=1000, loss=50, use_htb=True)
(二)進階要求
編寫Python腳本,生成如下數據中心網絡拓撲,要求:
編寫.py拓撲文件,命名為“學號_fattree.py”;
必須通過Mininet的custom參數載入上述文件,不得直接使用miniedit.py生成的.py文件;
設備名稱必須和下圖一致;
使用Python的循環功能實現,不得在代碼中手工直接添加設備和鏈路。
#!/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
L3 = L2 * 2
s = []
# add core ovs
for i in range( L1 + L2 + L3 ):
sw = self.addSwitch( 's{}'.format( i + 1 ) )
s.append( sw )
# add links between core and aggregation ovs
t = L1
for i in range( L1 ):
sw1 = s[i]
for sw2 in s[t:t+4]:
# self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
self.addLink( sw2, sw1 )
t = L1 + L2
# add links between aggregation and edge ovs
for i in range( L1, L1+ L2, 2 ):
if i > (L1 + L2) / 2:
t+=4
for sw1 in s[i:i+2]:
for sw2 in s[t:t+4]:
self.addLink( sw2, sw1 )
#add hosts and its links with edge ovs
count = 1
for sw1 in s[L1+L2:]:
for i in range(2):
host = self.addHost( 'h{}'.format( count ))
self.addLink( sw1, host )
count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
總結
實驗難度適中,基礎要求部分看著pdf操作即可,進階部分比較具有挑戰性(雖然只會改不會自己寫)
遇到的困難
1.執行sudo ./mininet/examples/miniedit.py
時報錯
Traceback (most recent call last):
File "./mininet/examples/miniedit.py", line 27, in <module>
from mininet.log import info, debug, warn, setLogLevel
ImportError: No module named mininet.log
解決方法:修改python軟鏈接
sudo rm -rf /usr/bin/python3
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python3.8 /usr/bin/python3
sudo ln -s /usr/bin/python3.8 /usr/bin/python
2.基礎要求 3 添加完主機后,新添加的主機與其它主機直接無法連通
解決方法:
py s1.attach('s1-eth4') #添加/打開交換機s1上的接口eth4
py h4,setIP('10.0.0.4') #給h3設置ip地址,
3.基礎要求 4 修改 1 所保存的學號.py文件時,該文件是只讀文件無法修改保存
解決方法:
(1)強制保存退出:wq!
(2)用sudo權限編輯sudo vim ./學號.py
(3)給文件添加寫權限chmod +w 學號.py