前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenFlow 1.3 学习笔记

OpenFlow 1.3 学习笔记

作者头像
SDNLAB
发布2018-04-03 12:17:38
1.1K0
发布2018-04-03 12:17:38
举报
文章被收录于专栏:SDNLAB

因为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!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Action
  • Metadata
  • 流水线Pipeline Processing
  • Table-miss
  • Meter Entry
  • Instruction
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档