OpenState之 Mac学习 实验
OpenState之 Mac学习 实验
目录
- OpenState安装
- Port Knocking 实验
Mac Learning 实验
环境要求:
- 系统ubuntu 14.04
- mininet:2.3.0d
- 已安装OpenState
Port Knocking 实验
1.通过键入以下命令在Mininet中启动maclearning控制器应用程序:
$ ryu-manager ryu/ryu/app/openstate/maclearning.py
从启动结果可以看见交换机支持最大为四个端口:

2.启动Mininet,使用4个主机的单个拓扑:
$ sudo mn --topo single,4 --mac --switch user --controller remote

3.mininet终端上键入以下命令:
mininet> pingall

4.打开s1的终端,进行debug流表
mininet>xterm s1
在打开的s1终端窗口中,分别输入以下两条命令,查看s1中table0的流状态(请注意安装的规则如何与任何MAC地址不匹配,而只与数据包的当前状态匹配。) 和 查询s1的状态表
sudo dpctl -c unix:/tmp/s1 stats-flow
结果如下:


sudo dpctl -c unix:/tmp/s1 stats-state

OpenFLow对比试验
1 在RYU中启动simple_switch_13 app
$ ryu-manager ryu/ryu/app/simple_switch_13.py
2 启动Mininet树状拓扑
sudo mn --topo tree,4 --mac --switch user --controller remote
拓扑的形状如下,底层的每个交换机各连接两个主机,共16个主机。


3 在mininet终端 h1 ping h16,我们可以看到,第一次ICMP包ping通耗费了51.8 ms,主要是花费在广播arp包,寻找1.0.0.16。
mininet> h1 ping h16

如果ping不关闭,用wireshark软件进行抓包,从总的端口上可以看到各个网卡的流量波动如下。

ICMP数据包的访问顺序如下(右上图)。

对比
删除之前的拓扑,启动maclearning应用,重新启动mininet上相同的拓扑,再次h1 ping h16,发现使用时间为2.05 ms,简直不要太低。
删除原来拓扑命令
sudo mn -c

为了防止是意外,h1 ping h15测试了一下,时间为2.02 ms,仍然特别的小。

OpenState之MACLearning个人分析
以上例树状4层拓扑图为例,假设s4交换机与h1相连为1口,与s3相连为3口,那么ping包发送过程如下。
首先解析IP,发送ARP包,s4交换机收到 1口进入+源mac(00:00:00:00:00:01)+目的mac(?未知)+state,
根据目的mac查找state,没有找到,默认为default,即state=0。这时候进行洪泛,并且更新状态表,以目的地址为Match,state为进入端口,得出下表中第一行。一直等到从交换机3口回来的ARP数据包,这时候的信息为,3口进入+源mac(00:00:00:00:00:16)+目的mac(00:00:00:00:00:01)+state,查找state的值是根据目的mac,得出state=1,故从1口进行转发。同时,根据源mac地址(00:00:00:00:00:16)更新state为入端口,state=3。
简略状态表如下:
| Match(可以理解为目的Mac) | State |
|---|---|
| 00:00:00:00:00:01 | 1 |
| 00:00:00:00:00:16 | 3 |
| * | 0 |
这个表是通过“学习”得来的,故称之为Mac学习吧。另外Match属于个人定义,State就是为对应的端口号,state=0是表示泛洪发送。不对的地方还望指正!
OpenState之 Mac学习 实验的更多相关文章
- 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等) (转载)
原文链接:http://blog.csdn.net/jinzhuojun/article/details/78508203 前段时间Nature上发表的升级版Alpha Go - AlphaGo Ze ...
- 交换机的交换原理、mac学习机制和老化机制
1.交换机的交换原理: 1.交换机在mac地址表中查找数据帧中的目标mac地址,如果找到就讲该数据帧发送到相应的端口,如果找不到就广播. 2.如果交换机收到的报文中的源mac地址和目标mac地址一致的 ...
- 使用mac学习java的一些基本操作
使用mac学习java的一些基本操作 本文主要讲一下MacOS与windows的不同 iTerm2 使用mac的同学是不需要安装虚拟机来学习linux命令的.只需要使用iTerm2[下载地址]+zsh ...
- mac废纸篓清空的心得、mac设置不睡眠不待机不锁屏、如何快速锁屏待机睡眠、mac重启、mac学习的必备软件-城
mac废纸篓清空: 1.使用废纸篓的清空废纸篓,清空所有包括被锁定的文件: 2.使用“磁盘工具”的“修复磁盘权限”,修复完成再操作清空废纸篓: 3.使用cleanmymac软件“垃圾清理”和“擦除器” ...
- ELK学习实验014:Nginx日志JSON格式收集
1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd- ...
- Mac欺骗实验
实验目的 1.掌握MAC欺骗的原理 2.学会利用MacMakeUp软件工具进行伪造源MAC地址的MAC欺骗. 实验内容 使用MacMakeUp伪造主机mac地址,进行mac欺骗实验. 实验环境描述 1 ...
- 常用增强学习实验环境 I (MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2) (转载)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590 和其它的机器学习方向一样,强化学习(Reinforcement Learni ...
- Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
http://lib.csdn.net/article/aimachinelearning/68113 原文地址:http://blog.csdn.net/jinzhuojun/article/det ...
- 20145307第五次JAVA学习实验报告
20145307<Java程序设计>第五次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 实验名 ...
随机推荐
- [Eclipse]在重命令文件名时,提示编码格式有问题导致修改失败,需要设置如下几个默认编码为UTF-8
需要设置的几处地方为: 1.Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 2. W ...
- Android 生态消息推送平台介绍
一.手机厂商平台 华为消息推送服务 华为推送(Push)是为开发者提供的消息推送平台,建立了从云端到手机端的消息推送通道,使应用可以将最新信息及时通知用户,从而构筑良好的用户关系,提升用户的感知和活跃 ...
- 7.Solr查询参数
一.基本查询 q 查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*, fl (field list)指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id, ...
- Vuex数据页面刷新丢失问题解决方案
用Vue做项目开发很久了,对于vuex能用.会用,但是因为状态脱离页面和刷新丢失两个原因,一直都有种抵触,特别是一些简单的数据都是通过query或者本地存储就解决了,然而对于一些复杂内容,不可避免的还 ...
- vue-cli静态资源处理
vue-cli是利用webpack进行打包部署,其中静态资源的路径问题是一个比较麻烦的部分. 项目中共有两个存放静态文件的地方. /static 根目录下的static文件夹 assets src目录 ...
- poi 创建excel数据
public static void main(String[] args) throws Exception { // TODO 设置excel的标题 List<String> exce ...
- 关于Maven配置的一些标签含义(后续逐渐补充)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Odoo作为App后端时如何调试App
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307340.html 一:Odoo可以作为app后台+后台管理系统使用 Odoo作为一个可供二次开发的框架, ...
- 转自:strcmp函数实现及详解
strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下:int strcmp(constchar*str1,constchar*str2);其中str1和st ...
- 大数据入门第十四天——Hbase详解(三)hbase基本原理与MR操作Hbase
一.基本原理 1.hbase的位置 上图描述了Hadoop 2.0生态系统中的各层结构.其中HBase位于结构化存储层,HDFS为HBase提供了高可靠性的底层存储支持, MapReduce为HBas ...