mininet入门实战 学习指南
课程链接:https://www.51openlab.com/platform/curriculum/a18026230ad04063a70b6bb625212f3f/detail/
实验一:mininet源码安装与验证
指令说明
ll
命令:实际上是ls -l
,以长格式显示目录下的内容列表,包括文件名、文件类型、权限模式等信息
cat INSTALL | more
命令:显示文件INSTALL的内容,其中more参数是为了控制文件内容的输出速度,可更换为less达到同样效果,不同之处在于使用| less
格式,需要输入q
才能退出命令
mn --test pingall
:测试基本功能,包括添加主机、交换机、链路,以及pingall操作等功能
mn --version
:查看当前mininet版本
tips for experiment
在util
目录下,即使使用./install.sh -a
命令安装mininet,也要先执行apt-get update
实验二:mininet拓扑构建与命令使用
重点内容
使用mininet构建网络时,参数topo用于指定网络拓扑
--topo=single,n
:一个交换机与n台主机相连--topo=linear,n
:n个交换机线性连接,每个交换机连接一台主机--topo=tree,depth=n,fanout=m
:深度为n的m叉树,每个分支节点是一台交换机,每个叶节点是一台主机--custom
:与--topo
一起使用,支持自定义拓扑
指令说明
sudo mn --custom topo-2sw-2host.py --topo mytopo
:py文件是目录下已编写好的创建自定义拓扑的文件,--topo
后面跟的mytopo
,是由于配置文件中定义了topos={'mytopo':(lambda:MyTopo())}
,如果将这里的mytopo
进行修改,则命令中也要进行相应的修改
net
:查看链接信息
nodes
:查看节点;links
:查看链路是否连通
xterm +主机名
:进入可视化操作界面
mn -c
:清除mininet配置的交换机和主机
chmod
:修改文件权限
tips for experiment
如果需要验证minimal网络拓扑,直接运行sudo mn
即可
运行miniedit之后,右键长按交换机,选择List bridge details
可查看交换机的bridge信息,右键长按host可打开主机终端
DPID:OpenFlow 规范指定每个数据路径(交换机)都具有唯一的数据路径 ID,即DPID
实验三:mininet调用API扩展自定义拓扑
指令说明
dump
:显示每个节点的接口设置,以及表示每个节点的进程的PID
attach()
:添加端口
py
:执行python表达式
py net.addLink(s3,net.get(‘h3’))
:添加s3到h3之间的链路,但此时如果执行h3 ping s3
,会提示network is unreachable
,因为s3还没有配置端口
tips for experiment
第一次执行dump命令时,会发现h3-eth0=None
,无法看到h3
的ip地址,是因为还没有被发现,而不是没有配置,如果执行pingall
命令后再次dump,就可以看到h3
的ip地址了
如果执行cd /home/openlab/openlab/mininet/custom
这种从home目录开始的,不要漏掉home前面的/
符号
拓展
py 主机名.setIP()
可以重设某台主机的IP地址
实验四:mininet可视化构建网络拓扑
与实验二中的第三部分完全相同,参考实验二指南即可
实验五:手动添加流表
指令说明
vim +文件名
:若该文件不存在,则创建一个文件,若存在,则使用vim读取文件
本实验提供的拓扑文件,构造的拓扑为交换机s1连接h1和h2,s2连接h3,且s1和s2互连
--controller=remote,ip=127.0.0.1,port=6653
:用于指定一个不存在的控制器,使交换机没有控制器控制
dpctl dump-flows
:查看交换机流表信息
tcpdump -n -i h2-eth0
:抓包指令,其中-n
选项阻止网络地址显示为名字,-i
选项用于指定监听的网络接口
ping -c 3 10.0.0.2
:其中-c
选项用于设置ping的次数,例如这条命令设置为3次
dpctl add-flow in_port=1,actions=output:2
:向交换机添加端口流表,从s1-eth1端口接收到的数据包都转发到s1-eth2端口
dpctl add-flow dl_type=0x0800,nw_dst=10.0.0.2,actions=output:2
:使交换机将EtherType(以太网类型字段)=0x0800(代表ipv4报文),且目标ip为10.0.0.2的数据包,转发到eth-2端口
actions=NORMAL
:从各个端口广播出去
tips for experiment
vim的简易使用:输入i即可进入编辑模式,按Esc退出编辑模式后,输入:wq
即可保存并退出,输入:q!
可强制不保存并退出
当eth1与eth2建立双向的端口流表之后,h1只能ping通h2但不能ping通h3,是因为通过net指令可以看到,交换机s1与s2连接是通过eth3端口的,在这个地方没有配置任何流表,所以无法ping通h3
常见的EtherType:IPv4: 0x0800;ARP:0x0806;IPV6: 0x86DD
由于一开始h1并不知道h2的ip所对应的MAC地址,需要进行ARP解析,所以只配置了ipv4协议流表时,交换机会把进行ARP的帧默认丢弃,导致h1无法ping通h2
实验六:控制器下发流表协议分析
指令说明
netstat -an|grep 6653
:netstat -an
命令本身,可以显示活跃的网络连接(包括本地地址、外部地址、状态等信息),|grep
就是把上个命令的运行结果带入grep的参数中进行,在这里的效果就是通过端口号进行过滤
tips for experiment
创建拓扑并测试通信部分:
- 步骤1,2,10是在controller处进行的,步骤3-9是在host处进行的
- 步骤一中,应执行
netstat -an|grep 6653
命令,在这里用netstate
命令会出现报错 - 步骤六中,远程控制器ODL的ip地址,要与步骤二中eth0的
inet addr
的ip地址相同 - 步骤十中,直接输入
http://127.0.0.1:8181/index.html#/topology
即可
Wireshark的基本使用:单击蓝色鱼鳍图标开始抓包,单击旁边的红色方块停止,通过过滤器对数据包进行过滤,选中数据包即可在下方查看数据包的详细信息
实验七:Mininet多数据中心网络拓扑流量带宽实验
指令说明
mkdir -p
:递归创建目录,可以一次创建多级文件夹
需要用vi
可以用vim
代替
iperf
命令:一种网络性能测试工具
tips for experiment
“编写网络带宽测试程序”中的所有操作都在host1中执行,教程中提到的mininet主机就是host1
建议需要修改文件时,先进入文件所在的目录再用vim打开,注意~/openlab/mininet/mininet
是在~
目录下的
在bin/mn
文件下添加'iperfmulti':'iperfMulti'
时,注意上一行需要加逗号