1. Mininet 简介
1. Mininet Introduction >/span blues= "bjh-br"
Mininet是一个网络仿真器,或者更确切地说是一个网络仿真编排系统。它在单个Linux内核上运行一组终端主机,交换机,路由器和链接。它使用轻量级虚拟化使单个系统看起来像一个完整的网络,并运行相同的内核,系统和用户代码。Mininet主机的行为就像一台真实的机器。您可以将其SSH(如果您启动sshd并将网络桥接到主机)并运行任意程序(包括底层Linux系统上安装的任何程序)。您运行的程序可以通过看似真实的以太网发送数据包接口,具有给定的链接速度和延迟。数据包由看起来像真正的以太网交换机,路由器或中间盒的设备处理,并具有一定数量的队列。当两个程序(如iperf客户端和服务器)通过Mininet通信时,测得的性能应与两个(较慢)本机的性能相匹配。简而言之,Mininet的虚拟主机,交换机,链接和控制器是真实的东西,它们只是使用软件而不是硬件创建的,并且在大多数情况下,它们的行为类似于离散的硬件元素。通常可以创建类似于硬件网络的Mininet网络,或者类似于Mininet网络的硬件网络,并可以在两个平台上运行相同的二进制代码和应用程序。
2. Mininet的优点
快速-启动简单的网络仅需几秒钟。可以创建自定义拓扑:单个交换机,较大的类似于Internet的拓扑。可以运行真实的程序:可以运行在Linux上运行的任何程序,从Web服务器到TCP窗口监视工具再到Wireshark。可以自定义数据包转发:Mininet的交换机可以使用OpenFlow协议进行编程。在Mininet中运行的自定义软件定义网络设计可以轻松地转移到硬件OpenFlow交换机,以进行线速数据包转发。可以在笔记本电脑,服务器,VM中运行Mininet。可以共享和复制结果:打包后,任何拥有计算机的人都可以运行。可以轻松地使用它:可以通过编写简单的Python脚本来创建和运行Mininet实验。
/spans "spanspans" >s"
3. Mininet的缺点
在单个系统上运行很方便,但是会带来资源限制,这些资源将需要在虚拟主机和交换机之间进行平衡和共享。Mininet对所有虚拟主机使用单个Linux内核;这意味着不能运行依赖于BSD,Windows或其他操作系统内核的软件。Mininet没有专门的OpenFlow控制器。如果需要自定义路由或交换行为,则需要查找或开发具有所需功能的控制器。默认情况下,Mininet网络与LAN和Internet隔离;默认情况下,所有Mininet主机共享主机文件系统和PID空间。这意味着,如果您正在运行需要在/ etc中进行配置的守护程序,则可能必须要小心,并且要注意不要误杀死错误的进程。数据包由共享CPU和内存资源的软件交换机(例如Open vSwitch)的集合转发,通常性能比专用交换硬件低。
4. Mininet 使用示例 > 4. Mininet use the example /span slips= "bjh-br" /span > > > /spanspan 详细的安装步骤在此不做介绍,在ubuntu系统中可以直接使用apt-get install 命令来安装mininet。我使用的系统信息如下: detailed installation steps are not described here. The apt-get install command can be used directly to install Mininet in the ubuntu system. The system information I use is as follows: 实例1:创建如下的网络结构,并使网络之间可以连通 Example 1: Create the following network structure and make the network /span 1. 创建一个交换机,3个主机,无controller的SDN网络 1. Create a switchboard, three hosts, no controller SDN network root@tintin-virtual-machine:~# mn --topo=single,3 --mac --switch=ovsk --controller=remote*** Creating network*** Adding controllerUnable to contact the remote controller at 127.0.0.1:6633*** Adding hosts:h1 h2 h3 *** Adding switches:s1 *** Adding links:(h1, s1) (h2, s1) (h3, s1) *** Configuring hostsh1 h2 h3 *** Starting controllerc0 *** Starting 1 switchess1 ...*** Starting CLI:mininet> 2. 查看网络节点及其拓扑 "bjh-p" <2. View network nodes and their punctures mininet> nodesavailable nodes are: c0 h1 h2 h3 s1mininet>mininet> neth1 h1-eth0:s1-eth1h2 h2-eth0:s1-eth2h3 h3-eth0:s1-eth3s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0 s1-eth3:h3-eth0c0mininet> 查看各个节点的网络网络配置信息 mininet> dump<Hosth1:h1-eth0:10.0.0.1pid=6712><Hosth2:h2-eth0:10.0.0.2pid=6714><Hosth3:h3-eth0:10.0.0.3pid=6716><OVSSwitchs1:lo:127.0.0.1,s1-eth1:None,s1-eth2:None,s1-eth3:Nonepid=6721><RemoteControllerc0:127.0.0.1:6633pid=6706>mininet> 3. 在三个主机(h1,h2,h3)上开启Xterm,并查看当前的flowtable信息 3. Start Xterm on three hosts (h1,h2,h3) and see currentlowtable information mininet> xterm h1 h2 h3mininet>mininet> dpctl dump-flows*** s1 ------------------------------------------------------------------------NXST_FLOW reply (xid=0x4):mininet> 4. 在h1上ping h1,在h2上用tcpdump抓包,查看结果 4. Ping h1 on h2, grab the bag with tcpdump, look at the results 结果显示:Ping失败,h2上没有收到任何ICMP echo request packet.原因:拓扑里没有SDN controller,我们也没有用dptcl给openflow交换机添加任何flow entry, 所以交换机不会做转发决定,并直接丢弃h1到h2的ping包。 reason: there is no SDN controller in Totoma and we didn't use dptcl to add any low entry to the openfly switch, so the switch will not make a forward decision and simply discard the ping package from h1 to h2. 5. 用dpctl给SDN交换机添加双向的flow entry, 因为ping包除了echo request还有echo reply "bjh-p" 5. Add a two-way entry to the SDN switch with dpctl, because the ping bag has "bjh-br" in addition to "cho request" . mininet> dpctl add-flow in_port=1,action=output:2*** s1 ------------------------------------------------------------------------mininet> dpctl add-flow in_port=2,action=output:1*** s1 ------------------------------------------------------------------------mininet> dpctl dump-flows*** s1 ------------------------------------------------------------------------NXST_FLOW reply (xid=0x4): cookie=0x0, duration=28.434s, table=0, n_packets=0, n_bytes=0, idle_age=28, in_port=1 actions=output:2 cookie=0x0, duration=6.801s, table=0, n_packets=0, n_bytes=0, idle_age=6, in_port=2 actions=output:1mininet> 其中 dpctl add-flow in_port=1,action=output:2 的意思是用dpctl对交换机添加flow,让交换机从s1-eth1这个端口接收到的所有traffic都从s1-eth2这个端口发出去。 dpctl add-flow in_port=2,action=output:1 用dpctl对交换机添加flow,让交换机从s1-eth2这个端口接收到的所有traffic都从s1-eth1这个端口发出去。通过增加这两条flow,h1可以成功的ping通h2. 示例2:给交换机配置流表 Example 2: Configure switch flow tables 首先清楚交换机s1所有的flows first clears all of the switchboards 然后用dpctl给交换机添加两条traffic类型为IPv4的flow,命令如下: 第一条命令的意思是:用dpctl对交换机添加flow,让交换机把所有EtherType为0x0800(IPv4)并且destiation IP为10.0.0.2的traffic从s1-eth2这个端口发出去。第二条命令的意思是:用dpctl对交换机添加flow,让交换机把所有EtherType为0x0800(IPv4)并且destiation IP为10.0.0.1的traffic从s1-eth1这个端口发出去。 The first command means: to add to the switch by dpctl, to allow the switch to be sent from the port of s1-eth2 from the port of s1-eth2 from all EtherType to 0x0800 (IPv4) and from the target IP to 10.0.0.2. The second command means to add the switch from the switch with dpctl to the port of s1-eth1 from the port of dthtype to 0x0800 (IPv4) and from the testiation IP to 10.0.0.1 from the port of s1-eth1 . 此时,尝试h1 ping h2. 众所周知,处在同一网段下的host,它们之间的交流是L2 forwarding,是要靠ARP来解析MAC地址的,之前我们只匹配了0x0800 (IPv4) 这个协议,并没有匹配到0x0806(ARP),这样当交换机收到h1的ARP包后,因为没有controller,flow table里面也没有相应的flow告诉它如何转发这个ARP包,交换机只能将它丢弃,从而导致h1 ping h2失败。 is well known, under the same web section, that the communication between them is L2 forwarding, that the ARP was used to decipher the MAC address, that we only matched 0x0800 (IPv4), that did not match 0x0806 (ARP), so that when the switch received the h1 ARP package, there was no Controller and there was no corresponding fit to tell it how to forward the ARP package, and the switch could only throw it away, leading to a failure of h1 ping h2. 在交换机中添加ARP的dpctl命令,让交换机以NORMAL形式(即广播)将所有ARP包从各个端口广播出去。 再次尝试h1 ping h1,结果如下: tried again h1 ping h1 with the following results: 示例3:OVS交换机VLAN 网络测试 Example 3: OVS switch VLAN network test 1. 使用mn命令创建两个主机h1,h2和一个交换机s1,两个主机分别连接到交换机上。 1. Create two hosts (h1,h2 and one switch) using mn commands, each connected to the switch. 两个主机连接到交换机的两个端口,分别是s1-eth2,s1-eth2。所有的端口默认其实都是有tag的,tag为0,因为ovs交换机中没有任何流表,所以目前主机网络之间不通 2. 配置OVS交换机的转发流表,使得交换机成为一个正常的传统交换机。 2. Configure the OVS switch forwarding flow sheets, making the switch a normal traditional switch. 注意,ovs交换机有两种工作模式,分别是SDN模式和传统模式。传统的ovs交换机是通过mac地址自学习来完成数据帧交换,SDN模式是交换机里的流表匹配数据流然后有相应的转发动作。这里就是让交换机实现mac地址自学习功能。配置完交换机后进行连通性测试 are performed after the switch is configured. 可以看出,此时主机h1和h2之间连通,查看交换机s1的mac地址学习表,可以看到此时交换机的端口信息。可以看到两个端口的VLAN都是0. 3. 配置OVS端口的tag,s1-eth1的标签为1,s1-eth2标签为2. 3. Configure OVS port tags 1-eth1 with 1 and s1-eth2 with 2. 测试主机间的连通性,并查看交换机的地址表信息,可以看出,由于配置了不同的tag,导致主机之间网络隔离。 tests the connectivity of the host and looks at the address sheet information of the switch. It can be seen that the configuration of different tags has resulted in network isolation between hosts. 参考文章 1. Introduction to Mininet https://github.com/mininet/mininet/wiki/Introduction-to-Mininet 2. SDN(软件定义网络)初体验----Mininet : 2. SDN (software-defined network) Initial Experience - Minet: https://zhuanlan.zhihu.com/p/30935141 3. ovs小tag实现OpenStack大网络: 3. https://www.sdnlab.com/24098.html/span>
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
发表评论