OpenFlow 1.3 学习笔记

因为7、8月我跟小伙伴们在备战今年的全国大学生SDN大赛,9月在全身心投入准备特殊人才保研的专家答辩,所以好久没有新文章跟大家见面啦。现在一切尘埃落定,继续卯足了劲头向前冲,弥补这几个月落下的学习进度哈!

前段时间学了OpenFlow 1.3,感觉跟1.0比起来就是改头换面,焕然一新。改进了Match,改变了Action的地位和执行方式,引入了流表流水线处理,新加了Instruction、Meter Table、Group Table等,刚开始接触的同学可能一下子都不容易把握它们的整体脉络。

我在完整地学习了OpenFlow 1.3的主要部分之后,做了这份梳理图给大家,这也是我的学习笔记和梳理总结啦,希望跟大家共同进步哦!

OpenFlow1.3 梳理总结:

这份梳理图和本文以下梳理总结的笔记内容,是我在完整地学习了1.3的主要部分之后,觉得各方面比较重要的points:

还是很推荐大家去阅读协议原文,各种你不清楚的情况,都讲得很详细(openflow-spec-v1.3.0.pdf)。

对于以下各项的排序,是大致按照各项间的引用、我猜大家看本文时的思考和理解的顺序来的。

以下内容默认大家是在看过我的梳理图的基础上哈。

Action

从OF1.0学习过来的同学请注意,1.3中Action可看成分为了两种,Action Set和 Action List。

Action Set是跟每一个数据包绑定的,一起走过流水线的每一步,受Instruction的修改,最后统一执行到数据包上的。

Action Set可以这么理解: 数据包背上了一个名叫Action Set的小背包,顺着流水线徒步旅行,每到一个地方,就往背包里放一点纪念品或者拿出去一些东西,等走过了最后一个景点,来到了旅途的终点,再打开背包,回味旅途的点点滴滴。

Action List则跟1.0时候的Actions很像(感觉似乎一样),就是匹配到哪条流表项,就执行一下。只是有个前提,它是各种Instruction中的一种,即Apply-Actions。

Action Set中,每种类型只能有一个,可以多个set-field,但每种set-field只能有一个。

Metadata

这也是OpenFlow1.3的新东西,它是一个64 bits的数据,也是跟每个数据包绑定的,可以作为匹配域,跟随原先的IP、MAC等,一起参与流表的匹配过程,匹配源IPv6是OXM_OF_IPV6_SRC,匹配Metadata是OXM_OF_METADATA。它是由流表的Instruction去修改的。

看完Metadata,我第一时间想到的是唐僧取经的通关文牒,到一个地方,有需要的话就盖个章,改一改,到了另一个地方,还要给人家拿去看看,大家可以想想是不是这样,哈哈。

流水线Pipeline Processing

1.只能GoTo序号更大的表

2.流水线走完以后(即没有GoTo的Instruction),则开始执行数据包的Action Set

使用流水线,实现了一定程度的聚合,节省了对TCAM等SDN专用交换芯片的存储空间的占用,上学期看盛科最新的芯片好像能支持64K数量的流表了。空间很宝贵的呀!

对于流水线这块,协议里给了几张图,挺不错的。

Table-miss

这种流表要说特殊嘛其实也没什么特殊的。数据包无法匹配流表中的其他所有表项时,就会匹配这条流表项,因此: 1.wildcard all match field,通配掉所有的待匹配域,所有包都会匹配上这条表 2.have the lowest priority(0),拥有最低的优先级

OpenFlow1.0中匹配不到任何流表时,交换机会主动Packet-in上报,但是1.3的Table-miss给了我们更多选择:上报、丢包、去另一张表。

By the way,无法匹配时OpenFlow1.3中默认是丢包,但可以通过数据面配置协议去设定其他处理方式。

但是,我们应该注意到:

Table-miss不是默认存在于流表中的,它跟其他流表一样,由控制器下发或移除,移除!

但协议还是把它单独提出来说了,且看,它的特殊性就在于: “The match of the table-miss flow entry may fall outside the normal range of matches supported by a flow table, for example an exact match table would not support wildcards for other flow entries but must support the table-miss flow entry wildcarding all fields.” 这段我理解得可能不是特别好,但我们能知道的是,即使流表在实际的实现上有某些限制条件,比如匹配域不支持通配,但它也必须支持Table-miss的存在,也推荐向后兼容“上报、丢包、去另一张表”这三种处理方式。请回忆,Table-miss wildcards all match field。

OpenFlow1.3的两大新货,Group Table和Meter Table,Group没有太需要提醒的点,倒是Meter有些需要注意的地方。

Meter Entry

1.一条流表只能绑定一条Meter Entry,一条Meter Entry能被多条流表绑定。

协议里有更详细的场景、说明,但我觉得最核心的就是这两句。

梳理图中右侧的那张大图,就是这方面的一个展示,只是梳理图中是按协议中的说法——“不允许交集”,来画的。

2.Band的选取,其实就是用不同的Rate在数轴上画几条线,当前的速率做类似的“下取整”,取到哪个Rate就执行哪个Band的Type操作。

Instruction

1.每种类型的Instruction只能有一个,跟Action Set一样;

2.各Instruction在一定程度上也是按“协议”顺序执行。

最后,在实践方面,请同学们注意一下协议中这一章节:A.2.3.6 Flow Match Field Prerequisite;还有这个表:Table 11: Match fields details。

结语

That's all of my notes, wish to chat with you!

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2015-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Java设计模式-外观模式

外观模式: 又称门面模式: 外观Facade为子系统的一组接口提供一个一致界面,使得这组子系统易于使用(通过引入一个新的外观角色降低原系统复杂度,同时降低客户类...

35740
来自专栏Jimoer

Java设计模式学习记录-责任链模式

 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式)。

14120
来自专栏网站那些事

强制更改社保卡密码,跟社保局的碰撞试验

昨天早晨,我妈叫我把回来重庆后参加工作的社保缴纳的截图发给她,她给村里的一个类似于会计工作的人,用于统计整个村的社保缴纳情况,我一想,这个简单呐,以前在惠州的时...

38930
来自专栏平凡文摘

成为java高级程序员需要掌握哪些

20930
来自专栏牛客网

后台开发:校招中遇到的问题总结

楼主的秋招也算是今天开始结束了,期间也迷茫过,最终拿到了百度sp、腾讯sp、360sp、京东、招行信用卡中心、华为、中兴、陌陌sp 等的offer(具体的面经前...

63490
来自专栏IT技术精选文摘

GO语言版鹅厂广告交易实时平台价格解析

腾讯广告实时交易平台在向竞价胜出一方返回成交价的时候,先对价格进行TEA加密,再对密文进行BASE64编码,接收方先对BASE64解码,再对密文解密,双方事先...

11830
来自专栏Data Analysis & Viz

手把手教你完成一个数据科学小项目(2):数据提取、IP查询

本系列将全面涉及本项目从爬虫、数据提取与准备、数据异常发现与清洗、分析与可视化等细节,并将代码统一开源在GitHub:DesertsX/gulius-proje...

11510
来自专栏吴伟祥

一些免费的学习资源 原

HTML5 Canvas编程:http://blog.csdn.net/column/details/canvas-programming.html GTK编...

50730
来自专栏Java学习网

面向对象设计的 10 条戒律

不,这不是上帝说的。 这也不是Jon Skeet / Martin Fowler / Jeff Atwood / Joel Spolsky(可以用你最喜欢的技术...

30130
来自专栏写代码的海盗

初生牛犊不怕虎 golang入坑系列

读前必读,下面所有内容都是来自这里。 放到这里的目的,就是为了比对一下,哪里的读者多。。(X := '难' || X :='耐' || X := '好' ) 都...

30740

扫码关注云+社区

领取腾讯云代金券