1、原理

sdn交换机与控制器之间采用Openflow协议进行通信。
openflow 交换机和控制器之间的交互步骤


SDN交换机和控制器在建立TCP连接的基础上,进行如下通信:
1、首先互相发送Hello消息互相协商Openflow协议版本。
2、发送Hello消息之后控制器向将换机发送Featrues Request消息,获取交换机的ID、缓冲区数量、端口信息等特性,因此交换机相应的回Features Reply。
3、set config是控制器用来配置交换机发送的数据包。
4、当流表中没有关于新到达流的数据包或者即使有关于新到达流的流规则但其行为是发往控制器的时候,交换机向控制器发送Packet In消息。
5、而Packet Out消息是控制器指定的某个数据包的处理方法。

2、目的

本文主要目的是通过wireshark监控sdn交换机与控制器之间的交互过程,以加深Openflow协议的理解。

3、操作步骤

查看控制器与交换机之间的TCP连接

#打开wireshark
wireshark
#登录ryu控制器
cd ryu/ryu/app
ryu-manager simple_switch_13
# 建立拓扑,指定远程控制器,连接端口以及openflow协议版本
sudo mn --controller=remote,port=6633 --switch=ovsk,protocols=OpenFlow13

【查看TCP连接】
因为我是把控制器和交换机都部署在了同一台虚拟机上因此源、目的IP地址相同。

查看Hello数据包
Hello数据包中只包含openflow header,其中的type字段为OFPT_HELLO,version字段为发送方支持的最高版本的openflow协议版本。

如果控制器与交换机的协议版本相互匹配则连接,否则发送Error消息断开连接。

查看features消息

控制器为了查看交换机的特征信息,向交换机发送features request消息。features request消息也只包含openflow header,其type为OFPT_FEATURES_REQUEST。

交换机会回应相应的features reply消息,features request消息的transaction ID与features reply消息的transaction ID相同:

features reply消息包含OpenFlow Header 和 Features Reply Message。header包含version、type、length、xid等信息。
下面的参数解释如下:
datapath_id:交换机的标识符,低48位是一个MAC地址,高16位是自定义的。

n_buffers:一次最多缓存的数据包数量。

n_tables:表示交换机支持的流表数量。每个流表可以设置不同的通配符和不同数量的流表项。

auxiliary_id:标识辅助连接。

capabilities:所支持的功能。交换机的一些详细信息。

reserved:保留字段。

查看Packet in消息
产生packet in消息的原因:
1、不存在与流表项一致的项目时(Table-miss), OFPR_NO_MATCH
2、匹配的流表项中记载的行动为“发送至OpenFlow控制器”时,OFPR_ACTION

发送Packet-In消息时OpenFlow交换机分为两种情况,一种是缓存数据包,一种是不缓存数据包。如果不通过OpenFlow交换机缓存数据包,那么Packet-In消息的buffer_id字段设置为-1,将整个数据包发送至OpenFlow控制器。

字段 内容
buffer_id 表示OpenFlow交换机中保存的数据包的缓存id
Total_len 帧的长度
in_port 接受帧的端口
reason 发送Packet-in消息的原因
pad 用于调整对齐的填充
data 包含以太网帧的数据时使用的字段。

查看Packet Out消息

Packet out消息是由控制器发往交换机,是包含数据包发送命令的消息。若OpenFlow交换机的缓存中已存在数据包,而OpenFlow控制器发出“发送该数据包”的命令时,该消息指定了表示相应数据包的buffer_id。使用Packet-Out消息还可将OpenFlow控制器创建的数据包发送至OpenFlow交换机。此时,buffer_id置为-1,在Packet-Out消息的最后添加数据包数据。

字段 内容
buffer_id 表示OpenFlow交换机中保存的数据包的缓存id
in_port 数据包的输入端口
actions_len 行动信息的长度

SDN入门第五篇——交换机与控制器之间的交互流程相关推荐

  1. java 读取邮件正文_JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  2. Android JNI入门第五篇——基本数据类型使用

    前面讲到了java和native数据类型,这里就开始做一下使用: 第一步:新建工程 第二部:书写 java方法: [java] view plaincopyprint? public class Na ...

  3. Android JNI入门第五篇——Android.mk分析

    转载请标明出处: http://blog.csdn.net/michael1112/article/details/56671708 江东橘子的博客 Android.mk文件是在使用NDK编译C代码时 ...

  4. Avalonia跨平台入门第五篇之ListBox多选

    前面我也提前预告了今天要实现的效果;不过中间被卡了一下;今天赶紧去弥补上次要做的效果,其实在WPF效果中已经实现过了,看效果吧: ListBox的前台布局代码: 使用的附加属性和WPF好相似: 子项模 ...

  5. java邮件接收代码,JavaMail入门第四篇 接收邮件(示例代码)

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  6. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  7. android tablelayout 多行,Android入门户五篇之TableLayout (二)//生成10行,8列的表格

    当前位置:我的异常网» Android » Android入门户五篇之TableLayout (二)//生成10行,8 Android入门户五篇之TableLayout (二)//生成10行,8列的表 ...

  8. Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享!

    Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享! 一.Mysql的Linux版本下载! 博主采用的是mysql-8.0.25-1.el7.x86_64.rpm- ...

  9. R语言入门第五集 实验四:数据分析

    R语言入门第五集 实验四:数据分析 一.资源 [R语言]R语言函数练习--东北大学大数据班R实训第四次作业 R语言:常用apply函数(apply,tapply,sapply,lapply)用法介绍 ...

最新文章

  1. 华为抢购助手_就一句话,华为这个智慧办公新物种“有点东西”!
  2. linux 网络传输压塑文件,萌新的Linux学习之路(十一)文件压缩传输
  3. linux下安装ftp服务器
  4. 来试试读论文的新神器!AMiner发布“论文背景文献”一键生成工具,帮你搞清一篇论文的“来龙去脉”...
  5. 18个不常见的C#关键字,您使用过几个?
  6. Python中的模块和包:模块的(动态)导入、__future__模块使用
  7. python 网格线_Python版简单网格策略(教学)
  8. 2021-03-10 模板扩展类调用模板基类成员函数
  9. 2017年最流行的5个php开发框架视频教程推荐
  10. mod_wsgi 的两种模式
  11. 使用opencv中函数实现基于Harris算法的图像角点检测
  12. dubbo原理和机制_面试官几个 Dubbo 微服务框架问题,把我整懵了?
  13. ssh免密码登陆远程服务器(3种方式)
  14. python下载docx模块_怎么下载python-docx模块
  15. matlab画分散点图,Matlab怎么绘制离散图? matlab画散点图的教程
  16. SDOI2015 寻宝游戏
  17. js 十六进制,八进制,二进制
  18. 使用EasyExcel从Excel表格读取链接地址下载文件
  19. UTC LocalDateTime 根据时区转换
  20. PPT打印省纸法及改变ppt背景

热门文章

  1. 移动通信网络规划:双工技术
  2. JAVA 油站管理系统_基于JAVA的全国加油站[实时油价]接口调用代码实例
  3. 中晋最新消息2020年_油价调整最新消息:今天油价再次创出2020年新低
  4. docker ss-pannel_docker+traefik配置mysql + panel
  5. 论文学习 AInnoFace:Accurate Face Detection for High Performance
  6. 计算机的好处和坏处的英语作文,电脑利与弊英语作文
  7. 计算机分区的优点,作为一个电脑老手来告诉你们:电脑分区真的是越多越好吗?...
  8. 浙江更新了小学3年级到9年级信息技术课,小学开始学编程
  9. 爬虫入门必学——常见的几种网站类型
  10. 使用python爬取猎聘网的职位信息