NS-3下的OpenFlow仿真(四)——OpenFlow1.3简介



  • OpenFlow1.3概述

    1 前言:

    建议先阅读OpenFlow的WhitePaper,了解OpenFlow基本结构与思想。该概述基于OpenFlow1.3标准,鉴于笔者水平有限,如发现错误,望海涵。下述所有专有名词都使用英文,有利于读者阅读其他文献以及源代码。

    2 名词简述:

    Flow Table:用于对进入交换机的包转发的表,一个交换机中有允许有多个Flow Table和一个Group Table;
    Group Table:算是一种特殊的Flow Table,它可以实现对包的多发,全发等操作。Flow Table不会对包进行复制,只能单转单。
    Pipeline:在此处特指包在Flow Table与Group Table中转发的过程。
    OpenFlow Channel:特指交换机与Controller的连接通路。
    Flow Entry:这是包的转发规则,每一个Flow Table可以有多条Flow Entries。
    Metedata:Metadata是用于在Flow Table与Flow Table之间转发包是传递信息的寄存器。
    Instruction:当包与Flow Entry匹配成功时,需要执行的操作,一般包括Pipeline Processing和Action。
    Pipeline Processing:即包在Pipeline中转发。
    Action:即对包执行的操作,例如将包输出到哪个端口,修改包的TTL(生存时间)等。
    Action Set:这是与每一个包绑定的,在包与Flow Entry匹配成功后,执行Instruction时,Instruction中的Action会存放在Action Set中,当包结束Pipeline processing时执行。
    Meter:用于测量和控制包速率的机制。
    Datapath:每一个交换机与controller的连接就是一个Datapath。

    3 OpenFlow Port:

    3.1 Standard Port:
    包括Physical Port,Logical Port和Local Port(Local port将不详述);
    3.2 Physical Port:
    指的是实体交换机存在的结构,它是交换机的出口和入口。
    3.3 Logical Port:
    是针对Flow Table而言,由于Flow Table可以转发给其他的Flow Table,并不一定是Physical Port,这些的Port选项都称为Logical Port。
    3.4 Reserved Port:
    是针对OpenFlow协议而言,OpenFlow协议保留一部分字域用于特殊用途,如:多发,全发等;和IP地址的广播,私有地址类似。
    下面是OpenFlow的Reserved Port选项:
    All:将包复制并转发给所有的Standard Port;
    CONTROLLER:将包转发给Controller(注意Controller并不是Port口的一个)
    TABLE:将刚进入交换机的包转发给FlowTable,这是PipeLine的开始。
    IN_PORT:一般所有转给输入口的包都会被扔掉,除非使用In_Port;
    ANY:通配任何Port,即对Port没有要求。
    注意:此处只列出部分,以方便读者理解。

    4 OpenFlow Table:

    4.1 Pipeline Processing:

    0_1551334743739_99d7799c-24be-4149-91ae-afa10c52c309-image.png

    Flow Table用一串用0开始的数字命名,Pipeline Processing开始于Flow Table 0,结束于最后一个Flow Table。
    当匹配成功时,将转发给下一个Flow Table,继续匹配,但需要注意,Flow Table的转发是单向的,不能回传,在转发的过程中,所有的Action都会存放在Action Set中,最后结束Pipeline Processing时,执行Action Set中的操作。
    当匹配不成功时:产生table miss,table miss的处理取决于配置,可以是:将包丢掉;转发给Controller;转发给下一个Flow Table;

    4.2 Flow table:

    Flow entry如下图所示:
    0_1551334771686_8f1f770a-2669-4afc-aea8-2dc1b150e21e-image.png
    Match Field:用于匹配的包和转发规则的词条,一般包括包头,输入端口(ingress port)和metadata;
    Priority:匹配优先级;
    Counters:匹配成功时自增;
    Instruction:调整action set或者pipeline processing
    Timeouts:该Flow Entry的过期时间
    Cookie:此处不详述

    4.3 匹配过程:

    0_1551334787499_b7c527d3-2973-4afb-84c5-2d6f8750dd26-image.png
    如果Flow Entry的Matching Field被设置为ANY,则任何包都可以匹配成功,每个包只会匹配优先级最高的一个Flow Entry,如果出现两个优先级一样的Flow Entry,那么用于匹配是哪一个,将是未知的。

    4.4 Table-miss:

    Table-miss也类似与一个Flow Entry,它可以匹配任何包,且拥有最低优先级0,转发对象为CONTROLLER或者下一级Flow Table,它也有timeout,即它也可能过期,如果一个Flow Table中没有Table-miss那么没有匹配成功的包将会被丢弃。

    4.5 Flow Removal:

    一个Flow Entry的移除可以是通过controller发送delete,或者Flow Entry的timeout,timeout有两种:一种是hard,即Flow Entry的使用时间,时间过了即过期;另一种为idle,即一段时间改Flow Entry没有被匹配后过期。无论哪种方式产生Flow Removal都必须向controller发送Flow Removal的消息(可配置)

    5 OpenFlow Channel:

    5.1 OpenFlow Channel:

    OpenFlow Channel上的OpenFlow协议支持三种信息:controller-to-switch,asynchronous和symmetric

    5.1.1 Controller-to-switch:

    即控制器向交换机发出的指令.
    Features:要求交换机回复其能力范围,如有几个接口,可以支持哪些指令等。
    Configurations:询问并配置交换机。交换机进返回配置结果。
    Modify-state:设置Flow Table(增加,删除,调整Flow Entry),设置Port的属性。
    Read-state:读取Flow Entry,Configurations等。
    Packet-out:给交换机发包或者包的存储ID,让它想某个Port转发。与Packet-in配合。
    Barrier:交换机收到Barrier之后,会想Barrier之前的信息全部处理后,回复Controller,在处理之后的信息。(这是由于OpenFlow Channel支持多种协议同时运行,不仅有TCP,还有UDP等其他,而UDP不能保证按序到达,而且还有可能出现多个controller控制一个交换机的情况,这种情况下,有时需要保证信息的先后顺序)
    Role-Request:用于多controller时的角色切换。
    Asynchronous-Configuration:配置滤除交换机发送的部分Asynchronous信息。

    5.1.2 Asynchronous:

    即switch可以主动发送的消息。
    Packet-in:所有传入CONTROLLER的包都由Packet-in输入,可以是携带包本身,或者存在交换机中,发送存储ID。
    Flow-Removal:所有Flow Entry的移除都通过该消息发给Controller。
    Port-status:告诉controller某个port发生了变化,如断线等。
    Error:告诉controller发生配置错误等。

    5.1.3 Symmetric:

    双方都可以主动发送的消息。
    Hello:交换机与controller建立连接时使用。
    Echo:呼唤对方,以确保连接正常,在controller-to-switch和Asynchronous消息中,如果接收方不用回复消息,也要回复Echo,通知连接正常。
    Experimenter:未来用于实验的命令,不详述。

    5.1.4 链接建立:

    除开TCP等各协议自己必须的连接建立通信外,还需要双方互发hello并携带OpenFlow版本信息,最后确认版本后,开始正常通信,controller在建立连接后应该最先发送Features消息来获取交换机的Datapath ID。

    5.1.5 链接中断:

    当controller与交换机断开连接时:交换机进入两种模式之一:掉线独立模式或者掉线安全模式。掉线独立模式指掉线后,交换机可以执行普通交换机的功能。掉线安全啊模式指掉线后,交换机依旧使用Flow Table转发,并且其中的Flow Entry同样会timeout。

    6 OpenFlow标准中补充:

    在OpenFlow标准中,还描述了Group Table,Meter Table的具体细节,多controller防止交换机掉线,OpenFlow Channel的多连接通信,以及所有实现中需要用到的结构体数据等,读者需要可自行阅读。



  • 你说我们现在写这么多以后会有人用得上吗,踩了这么多坑了



  • 黑老师他们不是在做ns-3的仿真吗?用到OpenFlow的地方可以作个借鉴吧。


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待