OpenFlow协议超时机制简介

作者简介: 陈俞辛,福州大学数计学院2016级计算机科学与技术本科生,目前研究方向为软件定义网络SDN,邮箱multhree @163.com。

陈翔,福州大学数计学院2015级计算机科学与技术(实验班)本科生,对软件定义网络SDN,特别是对P4语言感兴趣。邮箱wasdnsxchen@gmail.com

一、背景

为支持大规模的SDN网络,OpenFlow交换机需要存储大量的流表项来处理接收到的流量。然而,受限于交换机TCAM内存容量,流表所能存储的流表项数目是有限的;同时,由于TCAM十分耗能且昂贵,为适应大规模流量场景而增加TCAM容量以容纳更多的流表项是不现实的。

OpenFlow协议通过超时机制来缓解交换机流表容量有限的问题。该机制让流表项只在一段时间内生效,并自动清理掉旧的、失效的流表项,腾出流表容量,以添加新的流表项。OpenFlow协议的流表项超时机制的核心是有效时间(timeout),用户可以为每条流表项指定一个有效时间,在控制器向交换机下发流表项时设定。如果某条流表项存在的时间或未被匹配到的时间超过预设定的有效时间,OpenFlow交换机会主动移除该流表项。

有效时间又分为硬超时(hard timeout)和空闲超时(idle timeout)。

  • 空闲超时(idle timeout),流表项的idle_timeout字段非0。在空闲超时这段时间内,如果没有任何数据报匹配到该流表项,则交换机会主动将该流表项从流表中移除。即流表项从交换机设备移除的相对时间。
  • 硬超时(hard timeout),流表项的hard_timeout字段非0。当该流表项的存在时间超过了预设置的硬超时,流表项就会被交换机从流表中移除。即流表项从交换机移除的绝对时间。
  • 在Ruckus生产的ICX 7250、ICX 7450、ICX 7750等系列设备[1]中,当某条流表项两者字段为不同取值时,交换机的处理行为如表一所示。

表一[2]

二、现有超时机制存在的问题

问题1:控制器对流表项设定哪一类型的超时能更好地缓解交换机流表容量紧张的问题呢?

  • 硬超时 vs 空闲超时

因为硬超时不够灵活,所以一般情况下控制器会为流表项设定空闲超时而非硬超时。例如,考虑以下场景,控制器为一条会被频繁匹配的流表项设定硬超时,那么该流表项添加到流表的时间超过硬超时后就会被移除;在该表项因超时被移除后,接下来本应匹配这条流表项的数据报到达交换机时就会触发packet-in事件,增加控制器的负担;相反,如果控制器设定的是空闲超时,那么这条会被频繁匹配的流表项就不会被移除。换句话说,硬超时无法区分流表项是否有效,导致交换机流表空间无法被有效利用。因此,控制器通常为流表项设置空闲超时,而非硬超时。

问题2:如何设置空闲超时的大小,以缓解交换机流表容量紧张?

  • 过小的空闲超时 vs 过大的空闲超时

较小的空闲超时能尽快腾出流表空间以容纳新的流表项,然而过小的空闲超时会导致额外的问题。

图一:过小的空闲超时和过大的空闲超时[3]

如图一所示,理想情况下,当流f1到达交换机时应该只触发一次packet-in事件,即流f1的第一个数据报到达时触发。

但是,当流f1的空闲有效时间T1小于相应的包到达的时间间隔I1时,控制器所下发的、匹配流f1的流表项总会在后续流f1的数据报到达之前删除,由于没有相应的流表项,流f1的每一个数据报到达时都会触发 packet-in 事件,这些packet-in事件会消耗大量的控制器资源。

当流f2的空闲有效时间T2大于相应的包到达的时间间隔I2时,一条流表项失效之后会在流表中多停留 T2-I2的时间,造成不必要的冗余和开销。

因此,根据不同流量特性设置合适的有效时间是十分重要的。然而OpenFlow协议本身并没有给出可行的解决方案来计算合适的有效时间。

三、现有超时机制缓解流表空间紧张问题效果不好的解决方案

当前,存在以下两种缓解流表空间紧张的解决方案:

3.1通过启发式算法或基于历史信息的算法计算得到针对不同的流量的流表项的有效时间

(1) Effective Switch Memory Management in OpenFlow Networks[4]

文章中提出一个控制器系统,该系统采用了一种自适应超时启发式算法(an adaptive timeout heuristic)来计算最合适的空闲超时,而不是将所有的有效时间都设置为相同的值。

(2) Intelligent Timeout Master: Dynamic Timeout for SDN-based Data Centers[3]

文章中提出在控制器中添加用来记录上一次超时时间的cache模块,并且使用基于历史信息的算法(history based algorithm)来预测得到合适的有效时间。同时利用流表负载作为来调节有效时间,避免流表空间溢出。

3.2提前删除无效流表项,而非在超过有效时间之后才删除

(1) FlowMaster: Early Eviction of Dead Flow on SDN

Switches[5]

文章中提出一个提前移除流表项的方法,该方法采用一种投机机制(a speculative mechanism),通过预测判断某条流表项是否已经失效,并提前移除该流表项。

(2) A Zero Flow Entry Expiration Timeout P4 Switch[6]

文章中提出一种流表项移除技术,该技术是当交换机解析完TCP数据报的头部之后查看FIN或RST字段的值,若FIN或RST位为1,则说明这个TCP连接即将关闭,交换机将会移除相应的流表项,并向控制器发送一条消息,该消息包含了所删除流表项的详细信息,包括被移除的原因、生存时间等。

四、总结

本文介绍OpenFlow协议中为提高流表空间利用率而采用的超时机制以及该机制存在的问题,并简要介绍针对该问题的两种解决方案。

五、参考文献

[1]http://docs.ruckuswireless.com/fastiron/08.0.50/fastiron-08050-commandref/GUID-D5F020DA-5D6A-4452-AC95-0A4771D0F7B2.html

[2]http://docs.ruckuswireless.com/fastiron/08.0.80/fastiron-08080-sdnguide/GUID-067D5654-2300-41CD-BFF8-16712AC071C2.html

[3]Intelligent Timeout Master: Dynamic Timeout for SDN-based Data Centers.IFIP,IEEE,2015-05

[4]Effective Switch Memory Management in OpenFlow Networks.DEBS,ACM,2014-05

[5]FlowMaster: Early Eviction of Dead Flow on SDN Switches. ICDCN,2014

[6]A Zero Flow Entry Expiration Timeout P4 Switch.SOSR,ACM,2018-05

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

原文发表时间:2018-10-31

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

Python中文社区开源项目计划:pymysql-connpool

A simple connection pool based PyMySQL. Mainly focus on multi threads or async m...

18420
来自专栏大学生计算机视觉学习DeepLearning

c++ 网络编程(六)TCP/IP LINUX下 socket编程 多播与广播 实现一次发送所有组客户端都能接收到

原文链接:https://www.cnblogs.com/DOMLX/p/9614288.html

47370
来自专栏java思维导图

@Java 开发者,Spring Boot 最流行的 16 条实践解读!

Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这...

11310
来自专栏钱塘大数据

【推荐收藏】六大主流大数据采集平台架构分析

随着大数据越来越被重视,数据采集的挑战变的尤为突出。今天为大家介绍几款数据采集平台:Apache Flume Fluentd Logstash Chukwa S...

32840
来自专栏landv

windows server 2012 R2 远程桌面授权模式尚未配置

windows server 2012 R2 远程桌面授权模式尚未配置,远程桌面服务将在120天内停止工作。如何破解这个宽限期,目前企业7位协议号码均不包含20...

824100
来自专栏玄魂工作室

Hacker基础之Linux篇:系统简介特别番之Kali Linux

0x01. 前言 作为安全界的明星,Kali可以说是无人不知无人不晓,当然,除了Kali之外,我们还有许多的可以选择的工具,比如: ParrotSec ? ...

42460
来自专栏开源项目

这些在线考试系统,让你的工作事半功倍 | 码云周刊第 63 期

53040
来自专栏微信公众号:Java团长

Java微服务框架选型(Dubbo 和 Spring Cloud?)

微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微...

1.4K30
来自专栏向治洪

老司机带你玩转web service

当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来。毕竟是多家不同的公司的产品,研发开发语言、采用技术框架基本上是百花齐放。怎样让自家系统提...

29990
来自专栏华章科技

果断收藏!六大主流大数据采集平台架构分析

随着大数据越来越被重视,数据采集的挑战变的尤为突出。今天为大家介绍几款数据采集平台:

15230

扫码关注云+社区

领取腾讯云代金券