参考网站:
国内版
Github
特别感谢SDNLAB
进入到mininet之后,可以使用
sudo mn
直接生成一个含有h1,h2两个节点,中间有一个ovs交换机的最小拓扑
在>mininet
中, 还可以使用node
查看所有节点,net
查看所有网络接口,dump
直接输出节点信息
比如:
mininet> dump
<Host h1: h1-eth0:10.0.0.1 pid=7918>
<Host h2: h2-eth0:10.0.0.2 pid=7921>
<OVSSwitch s1: lo:127.0.0.1,s1-eth1:None,s1-eth2:None pid=7926>
<Controller c0: 127.0.0.1:6653 pid=7911>
注意: 每一个节点都有一个自己的pid,所以可以看出来他们是生成在不同的进程
对于不同的节点,可以执行他们自己的命令
比如:
mininet> h1 ifconfig -a
h1-eth0 Link encap:Ethernet HWaddr a6:2e:1f:60:5a:cd
inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3420 (3.4 KB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
每一个节点都会有两个,一个真正的物理(划掉)网卡,一个用于测试的回环网卡lo
但是有趣的是,如果执行
mininet> s1 ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0c:29:54:ad:39
inet addr:192.168.209.132 Bcast:192.168.209.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:22615 errors:0 dropped:0 overruns:0 frame:0
TX packets:18447 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15289915 (15.2 MB) TX bytes:21162304 (21.1 MB)
eth1 Link encap:Ethernet HWaddr 00:0c:29:54:ad:43
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:980 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:335160 (335.1 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8919 errors:0 dropped:0 overruns:0 frame:0
TX packets:8919 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12404847 (12.4 MB) TX bytes:12404847 (12.4 MB)
ovs-system Link encap:Ethernet HWaddr 5e:b8:57:e8:73:4c
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
s1 Link encap:Ethernet HWaddr f2:fd:8d:b6:b2:4e
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
s1-eth1 Link encap:Ethernet HWaddr 4e:af:ec:f9:25:60
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:7866 (7.8 KB)
s1-eth2 Link encap:Ethernet HWaddr 06:53:87:b8:de:c7
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:6840 (6.8 KB)
首先显示的是物理网卡,真实存在的网卡. 然后是lo,然后是交换机的物理地址, 和控制器的交换地址,两个和h主机相连的地址. 证明了交换机是在root 的真实namespace下工作的,就把物理的网卡包含进来了
其他节点都是工作在user的namespace下的.user下会有更多的新功能. root下会有更大的带宽和性能. 在创建的时候使用--innamespace --switch user
可以把交换机放在user下
wireshark的启动
笔者使用的是xshell+xmanager, 但是在mininet下是不支持启动xmanager的, 所以mininet> h1 wireshark
是不能使用的.
解决方法如下:
首先xterm h1
启动h1的界面, 在新界面中启动wireshark就好了.
如果在Linux 下启动的wireshark,抓包应该抓any网卡的.
测试一下,让h1 ping h2.
可以发现, 首先h1发送了一个广播ARP包,让s1看见后上交c1,产生了packet_in和packet_out各一个. 交换机又将ARP在其他端口广播,h2回复后又产生了packet_in和packet_out,最后交付给h1.
ping第二次的时候就快多了,因为交换机里面已经有了两者的信息
运行一个Web服务器
mininet> h1 python -m SimpleHTTPServer 80 &
Serving HTTP on 0.0.0.0 port 80 ...
mininet> h2 wget h1
--2019-01-25 02:08:55-- http://10.0.0.1/
Connecting to 10.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 990 [text/html]
Saving to: ‘index.html.1’
100%[======================================>] 990 --.-K/s in 0.01s
2019-01-25 02:08:55 (72.6 KB/s) - ‘index.html.1’ saved [990/990]
最后让h1关闭服务器 h1 kill %python
mininet不一定要进入CLI,也可以直接执行某些命令
sudo mn --test pingpair
会创建一个小的拓扑结构,然后启动of的控制器,然后跑ping测试,最后把自己关掉
sudo mn --test iperf
创建一个同样的网络,在h1跑iperf 服务器,另一个h2上运行iperf客户端,然后获取带宽情况
使用--topo
可以更改创建的拓扑结构,比如运行回归测试的时候,可以创建三个节点而不是两个
sudo mn --test pingall --topo single,3
也可以创建一个线性结构, 让每一个交换机上各连接一个主机,然后让这些交换机连接成线
sudo mn --test pingall --topo linear,4
创建的时候使用--MAC
可以固定化MAC
在mininet中使用link xx xx up/down
来决定一个链路是联通还是断开
py
emmm这一部分就比较繁琐了, 不如我们再开一篇专门说说?