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:
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如下图所示:
Match Field:用于匹配的包和转发规则的词条,一般包括包头,输入端口(ingress port)和metadata;
Priority:匹配优先级;
Counters:匹配成功时自增;
Instruction:调整action set或者pipeline processing
Timeouts:该Flow Entry的过期时间
Cookie:此处不详述4.3 匹配过程:
如果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的地方可以作个借鉴吧。