【网络基础】Openflow协议问题集合
Openflow消息能有多长
openflow消息的消息头的长度字段为2字节(16位),2的16次方,0-65535,64K长。
只有openflow1.5版本下的GROUP-MOD消息可能超过64K。因为它有INSERT-BUCKET命令,将buckets不断插入到小于64K的组表中,组成超过64K的消息。至于FLOW-MOD消息,其action只有有限个且一个FLOW-MOD消息中action不能重复,所以即便携带所有类型action也不会超过64K。至于PACKET-OUT消息,如果要携带的报文超过64K,则先缓存此报文,携带缓存ID,上送控制器。
添加转更新操作
控制器下发GROUP MOD消息command类型为OFPGC_ADD添加组表项时,若所添加的组表项在逻辑交换机的组表集合中已经存在,且将要分时删除或GC老化删除,则添加转更新。
将交换机已有的此组表项删除替换为控制器下发消息中携带的组表项(包含定长字段和buckets)。
循环依赖检查
形成闭环的原因:组表项中buckets的每个action中的类型字段可取组表类型,因此action可能关联其他组表。组表A中的组表项action所关联的组表为B,组表B的组表项action所关联的组表为A,则组表A和B形成闭环。
循环依赖检查的实现不是协议内容,是解决需求的本地实现算法。
流表项的action中同时有output和group动作,如何处理
当表项没有go to table指令时就到流水线末尾了,执行output或group之前会执行流水线的action set。当遇到最后的表项动作同时有output和group时,忽略output,执行group组表
流水线执行组表SELECT功能
选择当前组表项使用的bucket(或此组表项buckets链的第一个bucket),将bucket的actions写入流水线的action set,若处理若干个报文后此bucket权重不足但还有报文需要处理,则将下一个bucket的actions写入流水线的action set,最后统一执行流水线action set。
组表项中的buckets组成一个链,算出所有链节点bucket的SELECT weight的最大公约数,从第一个链节点bucket开始依次处理报文,每个节点bucket的weight是最大公约数的多少倍,此bucket节点就可以处理多少个报文。
流水线执行组表FF功能的watch port与watch group原理
遍历组表项的buckets链,直到检查到第一个活着的bucket,将其actions加入流水线action set,最后一起执行。如何判断活着的bucket:watch_port比watch_group的优先级高,先判断watch_port,
情况一:此bucket监听的端口watch_port若取OFPP_ANY,则检查此bucket监听的组表watch_group,若其取OFPG_ANY,则返回FALSE,此bucket不活,检查buckets链的下一个bucket;
情况二:此bucket监听的端口watch_port若取OFPG_ANY,则检查此bucket监听的组表watch_group,若其不为OFPG_ANY,
1)查找组表项在此交换机的组表中是否存在,
2)判断此组表项是否为空,
3)判断此组表项是否是分时任务将要删除的,
4)依次遍历此组表项的buckets,直到有一个bucket是活着的(检查这个bucket所监听的端口watch_port和组表watch_group),
如果watch_group的组表项存在且不为空,并且不是被分时任务标记要删除的,且此watch_group的组表项中的buckets至少有一个bucket是活着的,即遍历buckets后不返回空,则监听此组表watch_group的bucket是活着的;
情况三:此bucket监听的端口watch_port若不为OFPP_ANY,
1)先检查端口在此交换机中是否存在,
2)再检查端口是否不为空,
3)再检查此端口的状态是否为OFPPS_LIVE,
如果都通过,则说明监听此端口watch_port的bucket活着(不必再检查watch_group);
流水线执行组表INDIRECT功能
INDIRECT的组表项中只有一个bucket,将此bucket的actions加入流水线的action set,最后一起执行。
控制器下发消息携带的组表最终到哪里
控制器将消息下发给交换机主控,主控使能网络操作系统公共库将消息同步到线卡,然后通过网络操作系统公共库将有效数据下发给项目,高端项目有自己专门的转发处理芯片,来处理数据,低端项目将数据存储在内存中,由CPU来处理,处理流程与协议处理流程类似,但是具体代码由项目自己实现。
一个流表项包含若干个instruction指令,每种类型的指令的作用
METER,限速。若报文速度超速则丢弃。
APPLY_ACTIONS,在流表组成的报文处理流水线中,报文被此类型的流表项处理时,按照action类型立即执行具体的action操作信息。
CLEAR_ACTIONS,报文被此类型的流表项处理时,清空之前WRITE ACTIONS在action set中积累的所有action信息。
WRITE_ACTIONS,在流表组成的报文处理流水线中,报文被此类型的流表项处理时,会将具体的action操作信息,如转发等,不立即执行,而是先存储到一个叫action set的集合中,等流水线的流表都匹配执行后,再统一执行action set中的操作。
WRITE_METADATA,数据报文被此类型的流表项处理时,流表会将metadata信息以附加的形式写入报文,而下级流表中流表项的match域中有metadata字段,与报文中刚写入的metadata信息相匹配的流表项才可以继续处理此报文。相当于多一个匹配条件。
GOTO_TABLE,数据报文被此类型的流表项处理后,要跳转到流水线中指定的流表作匹配,被处理。
约束:
METER指令需要在APPLY指令之前执行;
CLEAR指令需要在WRITE ACTION指令之前执行;
GOTO TABLE指令在最后执行
Action set相关
当一个流表项的若干个instruction指令中没有GOTO_TABLE类型时,流水线处理停止,执行action set处理报文。
当所添加的action类型已经存在于action set中,则新添加的action覆盖原来的action类型。
egress的action set中不能添加output action和group action。
如果action set中有group action和output action,则忽略output action,执行group action;如果action set中没有group action和output action,则丢包。
如果action list中含有效的group action和output action,则复制一份报文执行group action,然后原报文执行output action。
Action类型中set field和copy field类型的action可以重复,这两种类型的action可以重复是因为match域中包含多个match field,但是每个match field只能被设置一次。
表之间依赖删除
Flow table依赖group table时,要删除group table,则flow table也关联删除;
Flow table依赖port时,要删除port,则flow table不删除;
Group A依赖group B时,要删除group B,则报错。
流表项中cookie:特定的数值信息,删除时增加一个匹配条件。删除此流表项时,要比较out_port,out_group,cookie三个条件;修改此流表项时,比较cookie一个条件。
【网络基础】Openflow协议问题集合相关推荐
- 网络基础知识 | 协议 | TCP/IP分层模型
目录 网络基础知识 网络互联 互联网基础知识 网络的构成要素 网卡 中继器 网桥/2层交换机 路由器/3层交换机 4-7层交换机 网关 协议 分组交换协议 谁来规定协议 协议的标准化 协议的分层 分层 ...
- SDN软件定义网络之OpenFlow协议
文章目录 P16 实验三 OpenFlow协议 拓扑图 要点 控制器设置 P16 实验三 OpenFlow协议 抓包软件分析实验内容 拓扑图 要点 控制器设置
- 网络基础 IP协议 子网划分 子网汇总 超网 无类间路由超详细介绍
1.10数据封装/解封装过程 1.10.1封装 特点 从四层网上层封装 2.过程 1)在数据后面加FCS校验.data->FCS校验 2)对数据在四层进行封装,通过TCP/UDP.TCP/UDP ...
- (chap1 web网络基础) HTTP协议相关的各个协议(1)
1. IP ( Internet Protocol ) 协议 作用是把各种数据包传送给对方,其中两个重要条件是IP地址和MAC地址( Media Access Control Address ). 2 ...
- (chap1 web网络基础) HTTP协议相关的各个协议(2)
- 软件定义网络基础(SDN①)
1.SDN的产生: SDN(软件定义网络)的产生源于传统网络无法满足现代网络环境对网络灵活性.可扩展性和安全性等方面的要求.传统网络架构中,网络设备(如交换机和路由器)负责控制和转发数据流量,网络管理 ...
- OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结
目录 OpenFlow起源与发展 OpenFlow网络 1.OpenFlow交换机: 2.FlowVisor: 3.Controller: OpenFlow交换机 分类 安全通道 流表 OpenFlo ...
- 01 前端HTTP协议(图解HTTP) 之 网络基础
1. 什么是http http(HyperText Transfer Protocol,超文本船速协议):是一种协议规范,完成从客户端到服务器端等一系列运作流程.而协议是指规则的约定.可以说:Web是 ...
- 网络基础之网络协议,OSI,TCP/IP介绍
文章目录 1 概述 1.1 网络协议 1.2 OSI模型 1.2.1 应用层 1.2.2 表示层 1.2.3 会话层 1.2.4 传输层 1.2.5 网络层 1.2.6 数据链路层 1.2.7 物理层 ...
最新文章
- Python列表变字典
- Linux下NFS(网络文件系统)的建立与配置方法
- 为什么cp新的so文件替换老的so,程序会core掉的根本原因是什么?
- 简单好用!利用Spring AOP技术10分钟实现一个读写分离方案
- 关于excel的join怎么做
- 新手必须掌握的学车技巧-上坡起步
- getlasterror返回57怎么解决_王者荣耀:用时最短职业比赛?3分57秒结束,解说都看呆了!...
- WampServer + phpcms 开发中,浏览器 localhost 出现 Cannot to connect to mySQL server 的原因分析和解决办法?
- oracle 11g 存储结构和数据文件
- Quartz.net官方开发指南 第七课 : TriggerListeners和JobListeners
- linux显示指定目录容量,linux 查看指定目录的容量大小,系统目录容量大小
- 峰峰值(Vpp)与dBm的转换关系
- ATTiny85 Arduino开发环境搭建及使用
- 【供应链架构day11】京东履约系统的演进之路
- 怎么不让WORD自动检查语法和拼写错误,福利在这里,不让WORD自动检查语法和拼写错误该如何设置
- Kubernetes--学习笔记-3-Kubernetes Web UI部署
- notion 纪念日公式
- 【开源项目】电视盒子好用又强大的APP: TVRemoteIME
- 下载神器Aria2 + WebUI-Aria2 + 接管Chrome下载任务
- 搭建本地 Protractor 运行环境