openflow交换机 ryu_关于OpenFlow协议

SDN中两个重要元素:控制器(掌控全局,指挥网络内的设备工作)

交换机(转发数据)

控制器与网络设备通过OpenFlow协议进行通信

OpenFlow交换机内有一个FlowTable,交换机按照流表转发数据,流表由控制器生成和维护。内有数据包匹配特征和数据包处理方法。

流表数据包匹配特征的构成:

1.进入交换机的端口(Ingress Port)

2.源MAC地址(Ether Source)、目的MAC地址(Ether dst)、以太网类型(Ether Type)、VLAN标签(VLAN id)、VLAN优先级(VLAN priority)

3.源IP(IP src)、目的IP(IP dst)、IP协议字段(IP Proto)、IP服务类型(IP Tosbits)

4.TCP/UDP源端口号(TCP/UDP src port)、TCP/UDP目的端口号(TCP/UDP dst port)

数据包处理方法:

转发、修改包头。处理称为Action

OpenFlow协议的消息类型:

1.控制器to交换机(Controller to Switch 由控制器发出)

1)Features:获取交换机特征

2)Configuration:配置交换机

3)Modify-State:修改交换机状态(修改流表)

4)Read-Stats:读取交换机状态

5)Send-Packet:发送数据包

6)Barrier:阻塞消息

2.异步消息(Asynchronous 由交换机发出)

1)Packet-in:收到数据包后告知控制器、

2)Flow-Removed:告知控制器交换机流表被删除

3)Port-Status:告知控制器交换机端口状态更新

4)Error:告知控制器交换机发生错误

3.对称消息(Symmetric 控制器或交换机发出)

1)Hello:建立OpenFlow连接

2)Echo:确认交换机与控制器之间的连接状态

3)Vendor:厂商自定义的消息

OpenFlow协议数据包包括包头Header和消息Message:Header(协议版本、数据包长度等)、Message(具体的数据包内容)

OpenFlow通信过程:

1)控制器与交换机三次握手建立socket连接;然后控制器与交换机互发OFPT_Hello消息(只有Header,version为发送方支持的协议的最高版本,双方选择最低的版本的协议作为通信协议,若一方不支持OpenFlow协议则发送OFPT_ERROR消息后断开连接,否则建立连接成功)

2)获取交换机Features。建立连接后控制器获取交换机特性信息(交换机ID、交换机缓冲区数量、交换机端口及端口属性)。控制器发送Features Request消息(只包含Header),交换机收到消息后,返回Features Reply消息(包含Header和Message)

Features Message结构:

datapath_id为交换机独一无二的ID号

n_buffers为交换机可以同时缓存的最大数据包个数

n_tables为交换机的流表数量

Capabilities表示交换机支持的特殊功能

Actions表示交换机支持的动作(见ofp_action_type)

ofp_phy_ports为交换机的物理端口描述列表

port_no为物理端口的编号

hw_addr为端口的MAC地址

name为端口的名称

config为端口的配置

State为端口状态

curr, advertised supported,peer为端口物理属性

3)PACKET_in 事件(交换机接收数据包),控制器获取交换机特性后,向交换机发送数据包,交换机收到数据包后开始处理。若收到的数据包没有匹配流表则交换机将其封装在packet_in中发送给控制器。触发此事件的原因有:一、收到数据包若流表中有与数据包包头相匹配的则按所指示的action处理数据包,否则封装在Packet_in消息中发回控制器处理,此时数据包还缓存在交换机中;二、流表中包含转发给控制器的动作(Output=Controller),此时不会缓存。Packet_in消息格式(uffer_id为packet‐in事件所携带的数据包在交换机中的缓存区ID、total_len为data段的长度、 in_port数据包进入交换机的入接口号、Reason为packet‐in事件产生的原因)packet_in事件后一般会触发两种事件(packet_out、flow_mod)若为广播包,则包装为packet_out包,让交换机flood(发送给除接收口以外的所有端口)

4)OFPT_PACKET_OUT:

不是所有的数据包都要向交换机中添加一条流表项来匹配处理,有数量很少数据包(如ARP、IGMP等),为了节省系统开销,控制器可以使用PacketOut消息,让交换机做相应处理。

5)OFPT_FLOW_MOD:流表中无匹配项时,触发packet_in事件,控制器收到此消息后发送flow_mod消息向交换机添加一个流表项,将flow_mod消息中的buffer_id字段设为packet_in中的buffer_id,向交换机流表内写入与此数据包有关的流表项并指定action处理。

OFPT_FLOW_MOD= header(type:类型、length:整个数据包长度、xid:数据包编号)+match+flow_mod(添加、删除、修改交换机的流表信息)+action[]

6)OFPT_ECHO:没有数据包交换时,控制器定期发送OFPT_ECHO_REQUEST消息,交换机回复OFPT_ECHO_REPLY,确保通信顺畅。

主要参考了[我对OpenFlow的理解](https://blog.csdn.net/haidalongjuanfeng/article/details/61196489)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT 语言切换

1. 代码里面需要切换语言的文字用tr包裹 2. 在工程pro文件目录下 3. 使用QT安装目录下的 Linguist程序增加中文字符串 4. 打开命令行 5. 执行 lrelease.exe ......\translations\zh_CN.ts

excel条形码字体_在Excel中批量生成条形码,竟如此简单!

条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。那么如何在Excel中快速生成条形码呢?我们以前看到的方法有&am…

(视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定...

本文是《快速创建网站》系列的第6篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文。 访问本系列目录,请点击:http://devopshub.cn/tag/wordpress-on-azure/ 1. 网站管理平台WordPress和云计算…

自定义外部协议使浏览器拉起本地程序

什么是自定义协议 由于我们的游戏需要在浏览器中调用NPAPI插件,而chrome移除了NPAPI的支持,导致游戏并不能很好的适配所有的浏览器,所以这个时候我们对于chrome浏览器用到了自定义浏览器协议这一标准。自定义浏览器协议允许在浏览器中使用pr…

hssfcolor 不建议使用_不建议使用微信双开的真正原因!

不少小伙伴都有两个甚至多个微信号,通常一个是自己的私人号,其它则用于工作,所以想要在手机中双开微信,这样使用起来更方便。不过使用 iPhone 的小伙伴就很郁闷了,为什么在 iPhone 上不能像部分安卓手机那样方便的双开…

【转】如何用css限制文字长度,使溢出的内容用省略号…显示

文章转自这里(现在貌似被黑了,建议不要点击了) ps:因在该地方没看到转载按钮,复制下存到这里以待自己方便,别人能看到帮助一下更是乐意之至,效果亲测可以实现,兼容IE、谷歌、火狐 由于文字内容长度的不确定…

yytextview多种格式_iOS YYText的使用笔记一(YYTextView图文编辑器)

YYText是强大的YYKit的一部分可以单独下载Powerful text framework for iOS to display and edit rich text. (Its a component ofYYKit)集成的时候建议使用cocopod管理1.里面主要两个控件:YYTextView 和 YYLabel现在主要是YYTextview的简单使用YYText主要是NSMutab…

React Canvas:高性能渲染 React 组

React Canvas 提供了使用 Canvas 渲染移动 Web App 界面的能力,替代传统的 DOM 渲染,具有更接近 Native App 的使用体验。React Canvas 提供了一组标准的 React 组件,由基于的渲染元素抽象而成。 GitHub 源码下载 示例代码: …

移除集合效率高还是add高_List、set集合接口分析

一、List接口详解1、List接口有三个实现类,ArrayList、LinkedList、Vector2、三个实现类的异同点:(1)ArrayList: 作为list接口的主要实现类;线程不安全,效率高;底层使用Object[]存储&#xff08…

代码实践

闭包举例: function closure(){var innerVariable inner;function innerFn(){ return innerVariable;}return innerFn(); } var innerVariable defined in outer; var outerVariable closure(); console.log(outerVariable); 测试字符串是否回文: …

python 读取excel太慢_Python 读取excel并转换为字典

方法一:利用利用xlrd读取excel文件其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可。1.安装 xlrdpip install xlrd2.读取文件,并进行格式转换导入的excel表格的格式是这样的:解析后的格式…

windows上编译zlib-1.2.8

MSVC编译 使用VS(x86)命令行工具进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库) zdll.lib(动态库的导入库) zlib1.dll(动态库) 。必要的头文件有zlib.h和zconf.h 默认生成的是release版的…

大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

侯亚南数据技术处支宸啸数据技术处在大数据计算中,我们可能会遇到一个很棘手的问题——数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者报OOM(内存溢出)。数据倾斜调优&#xf…

NYOJ 289 苹果(01背包)

苹果 时间限制:3000 ms | 内存限制:65535 KB难度:3描述ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。 输入有多组测试数据,每组测试数据第一…

磁盘剩余空间策略_MySQL磁盘消耗迅猛掌握这点就够了,包你事半功倍

Part1:写在最前当一张单表10亿数据量的表放在你面前,你将面临着什么?Part2:背景介绍为了提升数据库资源利用率,一个实例中,在不互相影响,保证业务高效的前提下,我们会将同一个大业务下的不同小业务放在一个…

Date Picker控件:

Date Picker控件: 中文:日期/时间选取器UIDatePicker有一个实例方法setDate:animated,以编程的方式选择日期。UIDatePicker有四种模式(model):Time(只选时间)Date(只选日…

logback日志pattern_@Slf4j 实现日志输入到外部文件

添加一个配置文件\src\main\resources\logback-spring.xml<?xml version"1.0" encoding"UTF-8"?><configuration scan"true" scanPeriod"10 seconds"> <contextName>logbackcontextName> <prope…

C++ Prime:sizeof运算符

sizeof运算符的结果部分地依赖于其作用的类型&#xff1a; 对char或者类型为char的表达式执行sizeof运算结果得1&#xff1b; 对引用类型执行sizeof运算得到被引用对象所占空间的大小&#xff1b; 对指针执行sizeof运算得到指针本身所占空间的大小&#xff1b; 对解引用指针执行…

前驱和后驱什么意思_为什么只有豪车才敢用后驱

为什么只有豪车才敢用后驱https://www.zhihu.com/video/1156959599864147968一般的家用车&#xff0c;基本上都是前驱为主&#xff0c;前驱够用&#xff0c;成本还低。但前驱满足不了豪华车的运动需求&#xff0c;所以豪华车后驱才是王道。有人这个时候肯定要跳出来不服了&…

leetcode 第五题 Longest Palindromic Substring (java)

Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. time255ms accepted 暴力遍历 public String longes…