计算机网络 lab2 使用 Mininet 创建网络拓扑
一、Miniset 简介
Miniset 是一个开源的网络仿真器,是一个轻量级软件定义网络和测试平台,支持 OpenFlow 和 OpenSwitch 等协议。
Miniset 上运行的代码可以轻松移植到支持 OpenFlow 的硬件设备上。
Mininet 提供 python API,简单易用
二、环境搭建
安装 mininet
1 | $ su root |
https://joechang0113.github.io/2020/02/18/mininet-ryu-install.html
尝试打开可视化界面:1
2$ cd /mininet/mininet/examples
$ ./miniedit.py
报错 1:运行 miniedit.py 时报错 ImportError: No module named mininet.log
是 python 版本的问题
http://shangdixinxi.com/detail-1528015.html
报错 2:pip install,Error:Cannot uninstall ‘PyYAML’.
原因:从 pip 10 开始就不支持卸载 distutils 的包了
解决方法:pip install —ignore-installed PyYAML
https://www.twblogs.net/a/5e50e655bd9eee2117bff2c9
报错 3:
有些错误是因为 ubuntu 的 python 默认版本是 2.7 导致的
所以按照以下方式改变 python 的默认版本 1
2
3
4
5
6
7
8
9
10
11$ update-alternatives --list python // 列出所有可用的 python 替代版本信息
$ update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
$ update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
$ update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3
$ update-alternatives --config python
# 第一个参数: --install 表示向 update-alternatives 注册服务名。
# 第二个参数:注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链;
# 第三个参数:服务名,以后管理时以它为关联依据。
# 第四个参数:被管理的命令绝对路径。
# 第五个参数:优先级,数字越大优先级越高。
https://www.jianshu.com/p/3d8304f4fb4a
报错 4:terminal 打不开
https://blog.csdn.net/u011622434/article/details/103121262
首先,按 ctrl+alt+F1(我是 ctrl+alt+F5)进入命令行模式,也就是无图形界面,这时候会让你输入用户名和密码 1
$ gnome-terminal
该指令是查看出现的终端错误,我有两处错误
错误一:No module named “apt_pkg”,解决方法如下 1
2
3
4$ sudo apt-get remove --purge python-apt
$ sudo apt-get install python-apt -f
$ cd /usr/lib/python3/dist-packages/
$ sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.cpython-36m-x86_64-linux-gnu.so
错误二:cannot import name ‘_gi’,解决方法如下1
2
3cd /usr/lib/python3/dist-packages/gi/
sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-36m-x86_64-linux-gnu.so
sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-36m-x86_64-linux-gnu.so
三、Mininet 常用指令
四、熟悉常用指令
1 | $ su root |
五、Mini 搭建网络拓扑的三种方式
1. 通过命令行 terminal
单一拓扑 (Single)
1 | sudo mn --topo=single,3 |
线性拓扑
1 | sudo mn --topo=linear,3 |
树形拓扑
1 | sudo mn --topo=tree,depth=2,fanout=3 |
自定义拓扑
通过 python 文件
py net.addSwitch (‘s3’) // 添加交换机 23
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 地址为 10.0.0.3
通过可视化界面
1 | $ cd /mininet/mininet/examples |
Edit 设置网段,host 的 IP 地址要和网段对应
右键设置控制器、交换机、主机的 property
设置好之后,开启另一个终端,开启 ryu,然后再回到可视化界面点选 run
(开启 ryu:cd/ryu/ryu/app 然后 ryu-maneger simple_switch.py)
可以将这个拓扑存成 python 文件:点击 stop,点选 File-Export Level 2 Script
六、lab2
问题 1
Simulate the following topology in Mininet. Set the link bandwidth for (s1,s2) and (s1,s3) as 10Mbps. Use iperf3 to test the TCP throughput between h1 to h2, h3, h4.(30 points)
知识点:带宽设置1
2#10 Mbps, 5ms 延迟,0% 丢包,1000 字节的大小
self.addLink (host, switch, bw=10, delay='5ms', loss=0, max_queue_size=1000, use_htb=True)
Mininet 系列实验(五):Mininet 设置带宽之简单性能测试
报错:mininet 中运行网络拓扑时
Exception:Error creating interface pair (s1-eth1,s2-eth1): RTNETLINK answers: File exists
这是因为重复构建了相同的拓扑,没有清除,所以若在.py 中构建相同的拓扑图时需要先清除掉先前的拓扑结构:1
$ sudo mn -c
https://blog.csdn.net/weixin_46490821/article/details/109065097
计算机网络系列
计算机网络 lab1
计算机网络 lab2 使用 Mininet 创建网络拓扑
计算机网络 lab3 使用 Socket 完成多人聊天室 — 原理
计算机网络 lab3 使用 Socket 完成多人聊天室 — 实作
计算机网络 lab4 Overlay Network 和 VXLAN