SDN 网络系统之 Mininet 与 API 详解

时间:2022-01-08 06:14:18

2. Mininet wiki: https://github.com/mininet/mininet/wiki

SDN 与 Mininet 概述

SDN 全名为(Software Defined Network)即软件界说网络,是现互联网中一种新型的网络创新架构,其核心技术 OpenFlow 通过网络设备控制面与数据面分分开来,从而实现网络流量的灵活控制,为网络及应用供给了良好的平台。而 Mininet 是一个轻量级软件界说网络和测试平台;它给与轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它撑持 OpenFlow、OpenvSwith 等各类协议,Mininet 也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术;同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。

Mininet 实现的特性

撑持 OpenFlow、OpenvSwitch 等软界说网路部件

撑持系统级的还原测试,撑持庞大拓扑,自界说拓扑等

供给 Python API, 便利多人协作开发

很好的硬件移植性与高扩展性

撑持数千台主机的网络布局

Miniet 实现与事情流程

Mininet 的安置方法对照简单通过 Git 源码和自带的安置脚本方法即可安置在 Linux 系统中,这里我给与了默认安置所有 Mininet 相关的相关套件,如:OpenFlow、POX 等工具会默认生存在当前用户的家目录。

1

2

3

4

5

 

# git clone git://github.com/mininet/mininet

# cd mininet/util/

# ./install.sh -a

# ls

mininet  of-dissector  oflops  oftest  openflow  pox

 
创建网络 图 1.简单网络示例图

由于 Mininet 撑持自界说网络,这里先引用一个简单网络示例如图 1,在 Mininet 网络系统中直接输入 mn 命令,可以在此系统中创建单层的拓扑网络,从中默认创建了两台 host 和一个交换机,并且激活了控制器和交换机。同时也可以通过命令 net 检察到链路情况,先简单列出了示例,如在 Mininet 系统中启用 Web 处事器与客户端。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

# mn

*** Creating network

*** Adding controller

*** Adding hosts:

h1 h2

*** Adding switches:

s1

*** Adding links:

(h1, s1) (h2, s1)

*** Configuring hosts

h1 h2

*** Starting controller

*** Starting 1 switches

s1

*** Starting CLI:

mininet>

 

启用与* Web 处事

在 Mininet 环境中可便利成立一个 Web 处事器,从下面示例中可以看到从 host1 成立了一个 Web 处事器,并今后外一台 Host 主机想 Web 处事器获取 HTTP 请求。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

 

mininet> h1 python -m SimpleHTTPServer 80 &     #在主机 h1 开启 Web 处事

mininet> h2 wget -O - h1                           #主机 h2 上下载 h1 web 站点内容

--2013-11-04 00:05:40-- 

Connecting to 10.0.0.1:80... connected.

HTTP request sent, awaiting response... 200 OK

…………

Length: 760 [text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>

<title>Directory listing for /</title>

<li><a href=".bash_history">.bash_history</a>

<li><a href=".wireshark/">.wireshark/</a>

<li><a href="install-mininet-vm.sh">install-mininet-vm.sh</a>

<li><a href="mininet/">mininet/</a>

<li><a href="of-dissector/">of-dissector/</a>

<li><a href="oflops/">oflops/</a>

<li><a href="oftest/">oftest/</a>

<li><a href="openflow/">openflow/</a>

<li><a href="pox/">pox/</a>

</ul>

<hr>

</body>

</html>

 

     0K                                           100% 1.65M=0s

2013-11-04 00:05:40 (1.65 MB/s) - written to stdout [760/760]

 

mininet> h1 kill %python                       # 杀失 web 进程

10.0.0.2 - - [04/Nov/2013 00:05:40] "GET / HTTP/1.1" 200 -

bash: line 23: kill: python: ambiguous job spec

Ping 测试

 

在 Mininet 系统上,实现两主机互连测试。

1

2

3

4

5

6

7

8

9

10

 

mininet> h1 ping -c4 h2

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=1.55 ms

64 bytes from 10.0.0.2: icmp_req=2 ttl=64 time=0.094 ms

64 bytes from 10.0.0.2: icmp_req=3 ttl=64 time=0.075 ms

64 bytes from 10.0.0.2: icmp_req=4 ttl=64 time=0.071 ms

 

--- 10.0.0.2 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3006ms

rtt min/avg/max/mdev = 0.071/0.448/1.553/0.638 ms

 
检察节点与链接

1

2

3

4

5

6

7

8

 

mininet> nodes

available nodes are:

c0 h1 h2 s1

mininet> net

h1 h1-eth0:s1-eth1

h2 h2-eth0:s1-eth2

s1 lo:  s1-eth1:h1-eth0 s1-eth2:h2-eth0

c0

 
自界说拓扑