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)

openflow交换机 ryu_关于OpenFlow协议相关推荐

  1. openflow交换机 ryu_在RYU中实现交换机的功能

    首先源码,解析部分如下,同时可以参考RYU_BOOK上的解释说明 原文链接参考:https://blog.csdn.net/qq_34099967/article/details/89047741 f ...

  2. OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结

    目录 OpenFlow起源与发展 OpenFlow网络 1.OpenFlow交换机: 2.FlowVisor: 3.Controller: OpenFlow交换机 分类 安全通道 流表 OpenFlo ...

  3. OpenFlow交换机【ACM SIGCOMM顶会论文笔记】

    目录 写在前面的话 OpenFlow交换机 基本思想与工作原理 专用OpenFlow交换机(Dedicated OpenFlow switches) 启用OpenFlow的交换机(OpenFlow-e ...

  4. OpenFlow交换机 之 OpenFlow协议

    转载地址:3. OpenFlow协议_SDN核心技术剖析和实战指南_红黑联盟读书频道http://book.2cto.com/201310/34138.html OpenFlow协议是用来描述控制器和 ...

  5. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总

    一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...

  6. openflow交换机 ryu_ryu(示例代码)

    controller目录下的ofo_event.py定义了OpenFlow事件,handler.py定义了事件的处理 from ryu.baseimport app_managerfromryu.co ...

  7. SDN(二) 对TP-LINK TL-MR3420型号的OpenFlow交换机进行配置

    1 引言 积跬步以至千里,积怠情以至深渊. 在本人博客SDN(一)中已经详细介绍了如何将TP-LINK TL-MR3420路由器刷成OpenFlow交换机,该无线路由器已具备支持SDN功能.本文将继续 ...

  8. OpenFlow交换机概述

    1 交换机组成 OpenFlow交换机包括一个或多个流表和一个组表,执行分组查找和转发,和到一个外部控制器OpenFlow的信道. 控制器使用OpenFlow的协议,可添加.更新和删除流表中表项,既主 ...

  9. OpenFlow:简述对OpenFlow协议的认识

    OpenFlow:简述对OpenFlow协议的认识 一.OpenFlow协议的背景 转发和控制分离是SDN网络的本质特点之一 .在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中 ...

最新文章

  1. 给博客增加了一个主题Nautica02Liquid
  2. 收集一些有关SilverLight(WPF/E)的链接
  3. leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)
  4. MySQL和Mariadb都启动不了了_linux centos7mariadb安装成功启动不了 解决思路
  5. python 趣味编程课_青少年编程:Python趣味编程基础入门课程
  6. 前端进阶之防抖与节流是什么?
  7. opencv-api drawKeypoints drawMatches
  8. 《Python Enhancement Proposal #8》要点 学习摘录
  9. QT5之修改程序图标
  10. 利用C++/CLI 封装Native C++ 提升.NET web game性能
  11. 源码分析三:OkHttp(2)—拦截器简介
  12. 开发类 - Fiddler 中文版 链接手机 进行抓包
  13. Python 条件语句
  14. 计算机机房管理系统范文,计算机机房管理系统探讨论文
  15. gstreamer registry文件
  16. 北大igem生物计算机,iGEM介绍
  17. 计算机专业新老生交流会ppt,新老生交流会的经典发言稿范文
  18. VideoPipe可视化视频结构化框架开源了!
  19. 计算机房接地电阻的要求和规范,根据GB50174‐93标准要求,电子计算机机房接地装置不满足要求的是( )。...
  20. day14 方法原则 方法命名 方法组成 方法重载

热门文章

  1. iphone不显示wifi连接到服务器,iPhone连不上隐藏WIFI怎么办?
  2. Mirah - 《Cmon Miracle》
  3. python webkitformboundary_python 免杀验证
  4. c语言中的扇入与扇出题目,功能单元的最大扇入扇出工具分析.doc
  5. Team Leader 的职责与范围
  6. 使用curl下载文件
  7. Codeforces 439A, the Singer and Churu, the Joker(水题)
  8. 前端工程化基础和架构设计
  9. ThreadLocal在数据库连接中的应用
  10. 网页看板娘 js版(论坛娘、博客娘。总之就是梦娘 V (-1) 代码