使用mininet创建网络拓扑,使ryu、ovs、主机连接
实验拓扑
控制器:RYU
交换机:s1,s2
主机:h1,h2,h3,h3
联通性(直连):
h1<->s1;h2<->s1
h3<->s2;h4<->s2
s1<->s2
拓扑代码如下:
#!/user/bin/env python
from mininet.topo import Topo
class MyTopo(Topo):
def build(self):
left=[]
left.append(self.addHost("h1"))
left.append(self.addHost("h2"))
right=[]
right.append(self.addHost("h3"))
right.append(self.addHost("h4"))
switchs=[]
switchs.append(self.addSwitch("s1"))
switchs.append(self.addSwitch("s2")) self.addLink(left[0],switchs[0])
self.addLink(left[1],switchs[0])
self.addLink(right[0],switchs[1])
self.addLink(right[1],switchs[1])
self.addLink(switchs[0],switchs[1]) topos={'mytopo':(lambda : MyTopo())}
在 mininet/custom 中有一个示例文件topo-2sw-2host.py.。可以按照该文件的内容进行相应地修改,定义自己的拓扑结构。
将自定义的网络拓扑写好后放到该custom目录下即可。
启动RYU
cd RYUPATH/ryu/app/ #首先进入到RYU的安装目录的app目录下,里面有相应的模块
sudo ryu-manager ofctl_rest.py simple_switch.py
# 启动ofctl_rest.py模块以及simple_switch.py交换机,这个是openflow1.0的交换机
启动mininet
sudo mn --controller=remote,ip=127.0.0.1,port=6653 --custom ~/Desktop/mininet/custom/1.py --topo mytopo
在这里ryu和mininet是在一台机器上的,所以ip地址为127.0.0.1,也可以写成controller=remote预设是在本机的ip 若是controller在其他机器的话则在后面加上ip=xxx.xxx.xx.xx
例如 --controller=remote,ip=192.168.10.11
其中 1.py是刚刚定义的拓扑python文件, mytopo是 最后两行
topos={'mytopo':(lambda : MyTopo())} 中指定的拓扑名
*** Ping: testing ping reachability
h1 -> h2 h3 h4
h2 -> h1 h3 h4
h3 -> h1 h2 h4
h4 -> h1 h2 h3
*** Results: 0% dropped (12/12 received)1234567
{
"1": [
{
"actions": [
"OUTPUT:3"
],(动作,转发到3 号端口)
"idle_timeout": 0,(空闲后存活时间)
"cookie": 0,
"packet_count": 2,(包计数)
"hard_timeout": 0,(存活时间)
"byte_count": 140,(比特计数)
"duration_nsec": 111000000,
"priority": 32768,(优先级)
"duration_sec": 985,(已经存活时间)
"table_id": 0,(在流表1)
"match": (匹配字段)
{
"dl_dst": "02:28:7c:93:27:af",(主机h3的地址)(过滤目的地址为02:28:7c:93:27:af的包,就是去主机3的包)
"in_port": 2(从2号口子来的)
}
(作用:从2号口子来的,要到h3的报文都从3号口子出去哈)
},
{
"actions": [
"OUTPUT:2"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 7,
"hard_timeout": 0,
"byte_count": 518,
"duration_nsec": 113000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "d2:3e:55:89:f3:a1",
"in_port": 3
}
(作用:从3号口子来的,发往h2的包都从2号口子出去哈)
},
{
"actions": [
"OUTPUT:3"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 2,
"hard_timeout": 0,
"byte_count": 140,
"duration_nsec": 155000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "02:28:7c:93:27:af",
"in_port": 1
}
(作用:从1号口子来的,发往h3的的包都从3号口子出去哈
},
{
"actions": [
"OUTPUT:1"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 3,
"hard_timeout": 0,
"byte_count": 238,
"duration_nsec": 171000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "fe:3b:25:cc:04:97",
"in_port": 2
}
(作用:从2号口子来的,发往h1的包都从1号口子出去哈)
},
{
"actions": [
"OUTPUT:2"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 2,
"hard_timeout": 0,
"byte_count": 140,
"duration_nsec": 169000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "d2:3e:55:89:f3:a1",
"in_port": 1
}
(从1号口子来的,发给h2的包都从2号口子出去哈
},
{
"actions": [
"OUTPUT:3"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 2,
"hard_timeout": 0,
"byte_count": 140,
"duration_nsec": 137000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "ba:94:88:a1:55:63",
"in_port": 1
}
(从1号口子来的,发往h4的,从3号口子出去哈)
},
{
"actions": [
"OUTPUT:1"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 7,
"hard_timeout": 0,
"byte_count": 518,
"duration_nsec": 157000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "fe:3b:25:cc:04:97",
"in_port": 3
}
(作用:从3号口子来的,发给h1的包都从1号口子出去哈)
},
{
"actions": [
"OUTPUT:3"
],
"idle_timeout": 0,
"cookie": 0,
"packet_count": 2,
"hard_timeout": 0,
"byte_count": 140,
"duration_nsec": 92000000,
"priority": 32768,
"duration_sec": 985,
"table_id": 0,
"match": {
"dl_dst": "ba:94:88:a1:55:63",
"in_port": 2
}
(从2号口子来的,发给h4的都从3号口子出去哈)
}
]
}
由上面,我们可以分析出:
第一个交换机一个有3个端口
端口1与h1直连
端口2与h2直连
端口3负责与另外一个交换机直连
另一个交换机也是类似的作法
使用mininet创建网络拓扑,使ryu、ovs、主机连接的更多相关文章
- 使用Mininet创建网络拓扑
使用Mininet创建Topo Python脚本实现创建拓扑 #coding:utf-8 from mininet.net import Mininet from mininet.topo impor ...
- Docker容器的跨主机连接
Docker容器的跨主机连接 Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态I ...
- Docker的跨主机连接:
1使用网桥实现跨主机容器连接. 2使用open vswitch虚礼的交换机实现跨主机容器连接. 3使用weave开源项目工具实现跨主机连接. 使用网桥实现跨主机容器连接:在同一个docker的主机中d ...
- docker实现跨主机连接
实验环境: centos7系统 host1:192.168.42.128 host2:192.168.42.129 dokcer容器跨主机连接 1.使用网桥实现跨主机容器连接 2.使用Open vSw ...
- 解决本地mysql服务允许被外部主机连接
今天在网上百度看了怎么使用外部主机连接本地MySQL服务,发现大多的说法都是不全面的,试了好久,整理下: 1.现创建了一个mysql用户,并赋予常用的操作权限 CREATE USER 'mysql'@ ...
- Docker学习(15) Docker容器的跨主机连接
Docker容器的跨主机连接 Docker使用网桥跨主机容器连接 Docker使用Open cSwitch实现跨主机容器连接 Docker使用weave实现跨主机容器连接
- Mininet自定义网络拓扑
在Mininet上的网络拓扑有两种方式 第一种 用mininet自带的miniedit可视化工具,在mininet/mininet/examples/的目录下的一个miniedit.py,运行这个文件 ...
- mininet和ryu控制器的连接
1.执行ryu应用程式:ryu-manager --verbose ryu.app.simple_switch_13 2.启动mininet,配置如下:创建3个host,1个交换器(open vSwi ...
- Mininet 创建topo的时候指定host的ip
示例,要创建一个3个交换机8个主机的拓扑,如下图: 可以用如下python代码创建上述拓扑,并指定ip: from mininet.topo import Topo class MyTopo( Top ...
随机推荐
- Ubuntu 18.04下用户的创建、修改权限及删除用户的方法
1. 创建用户 2. 修改用户权限 3. 删除用户 1. 创建用户useradd命令 //命令一:这种命令会在登录界面显示用户名sudo useradd -m XXX -d /home/XXX -s ...
- Java类的加载过程与ClassLoader的理解及测试
当程序准备运行某个类,但该类还未被加载到内存中时,会经过以下三个步骤进行类的加载: 类的加载(Load)→类的连接(Link)→类的初始化(Initialize) 加载:类经过javac.exe编译的 ...
- php面试笔记(2)-php基础知识-常量和数据类型
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...
- 在虚拟机中使用NetToPLCSim和PLC相连.
1,虚拟机...系统Win10...里面安装了VS. 2,本机...系统Win10...里面安装了博图15. 3,转换软件:NetToPLCSIM. 4,本机和虚拟机连接同一个路由器.注意: 5,设置 ...
- HttpContext.Current.Server未将对象引用到实例
问题描述: 在一些类库中需要读取当前系统的xml文件,当时用HttpContext.Current无法找到实例化对象 解决代码如下: XmlDocument xml = new XmlDocument ...
- Java自学-多线程 常见线程方法
Java 常见的线程方法 示例 1 : 当前线程暂停 Thread.sleep(1000); 表示当前线程暂停1000毫秒 ,其他线程不受影响 Thread.sleep(1000); 会抛出Inter ...
- C#实现的Check Password和锁定输错密码锁定账户
C#实现的Check Password,并根据输错密码的次数分情况锁定账户:如果输入错误3次,登录账户锁定5分钟并提示X点X分后重试登录.如果5分钟后再次输入,累计输入错误密码累计达到5次.则账户会被 ...
- spring cloud微服务快速教程之(十) gateway 服务网关
0.前言 gateway是spring的二代网关, 作为Netflix Zuul的替代者,是异步非阻塞网关 ,ZUUL2也是异步非阻塞的,但未纳入spring cloud整合计划 基于WebFlux ...
- 如何在 vue 中添加权限控制管理?---vue中文社区
前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...
- 【redis】基于redis实现分布式并发锁
基于redis实现分布式并发锁(注解实现) 说明 前提, 应用服务是分布式或多服务, 而这些"多"有共同的"redis"; (2017-12-04) 笑哭, 写 ...