zoukankan      html  css  js  c++  java
  • Mininet的内部实现原理简介

    原文发表在我的博客主页,转载请注明出处.

    前言

    之前模拟仿真网络一直用的是Mininet,包括写了一些关于Mininet安装和真实网络相连接Mininet简历拓扑的博客,但是大多数都是局限于具体步骤的使用,直到今天,被问了一句:你知道Mininet的内部实现原理吗?瞬间懵比,所以找找资料搞明白这个问题。

    实现原理

    要了解Mininet的内部实现,需要了解Linux容器———网络命名空间。网络命名空间允许创建虚拟的网络域,这个网络域拥有自己的接口,IP地址,路由表等。网络命名空间通过虚拟的以太网链路连接到外面的网络,虚拟以太网链路有两个端,一端位于本地命名空间,另一个位于全局命名空间,网络命名空间在Docker和OpenStack中也同样不可或缺,在OpenStack的Neutron网络管理模块中,网络命名空间将租户独立,并且可以让他们拥有重叠的IP地址。
    Mininet是如何实现呢?

    • 网络命名空间用于实现主机或者端,每个主机拥有自己的接口,IP地址和路由表
    • OVS或者Linux交换机用于实现交换机,默认使用的是OVS,OpenFlow用于对数据平面编程,ovsdb用来设置配置文件
    • 控制链路的特性比如带宽,延时等用的是Linux的tc工具
    • Mininet使用python将上面的工具以及其他的比如perf进行了包装。

    现在欲创建一个最基本的网络:两个主机,一个交换机,两个主机分别连在交换机上面,这个拓扑是Mininet默认的,所以直接使用Mininet的启动命令"mn"就可以了,但是这个拓扑的创建在Linux系统中有哪些等价命令呢?

    # 1. 创建两个命名空间,分别命名为h1,h2
    ip netns add h1
    ip netns add h2
    
    # 2. 创建拓扑所需的交换机s1
    ovs-vsctl add-br s1
    
    # 3. 创建以太网链路来连接两个主机和交换机
    ip link add h1-eth1 type veth peer name s1-eth1
    ip link add h2-eth1 type veth peer name s1-eth2
    
    # 4. 把主机的端口移到对应命名空间
    ip link set h1-eth1 netns h1
    ip link set h2-eth1 netns h2
    
    # 5. 把交换机端口连接到OVS上
    ovs-vsctl add-port s1 s1-eth1
    ovs-vsctl add-port s1 s1-eth2
    
    # 6. 连接控制器
    ovs-vsctl set-controller s1 tcp:127.0.0.1
    
    # 7. 设置IP
    ip netns exec h1 ifconfig h1-eth1 10.0.0.1
    ip netns exec h1 ifconfig lo up
    ip netns exec h2 ifconfig h2-eth1 10.0.0.2
    ip netns exec h2 ifconfig lo up
    ifconfig s1-eth1 up
    ifconfig s1-eth2 up
    
    

    总结

    虽然不想重复造轮子,但是Mininet的设计思路和理念还是比较常用的,所以了解其大概的思路还是必须的。

  • 相关阅读:
    Cannot complete this action,please try again. Correlation ID :bd640a9d-4c19-doff-2fe0-6ce1104b59ae
    我的工作流为什么启动不了
    关于IE下复选框的样式问题
    使用SharePoint rest语法返回已上传的SharePoint Excel 文件
    Running the complier from the Command Line
    关于inline
    来到坡国
    在oracle Virtual Box 虚拟机中搭建hadoop1.2.1完全分布式环境(转自康哥的博客)
    hadoop调试
    linux相关指令学习
  • 原文地址:https://www.cnblogs.com/cotyb/p/5252421.html
Copyright © 2011-2022 走看看