3.1 流与流表
流:
- 同一时间,经过同一网络中具有某些共同特性(属性)的数据,抽象成一个流。可以将访问同一目的地址的数据视为流;
- 流一般由网络管理员定义,根据不同的流执行不同的策略
- OpenFlow体系中,数据以‘流’为单位进行处理
流表:
- 针对特定流的策略表项的集合,负责数据的查找与转发
- 一张流表包含了一系列的流表项
3.2 OpenFlow 流表项
流表项包含三个域:
- 包头域(head fields):涵盖了链路层、网络层、传输层大部分标识
- 计数器(counters):用于统计数据流量相关信息,可以针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护;
- 动作表(actions):指示与该流表项匹配的数据包应该执行的下一步操作
流表及其组成:
安全通道
-----------------------------OpenFlow协议---------控制器
流表
- 包头域:输入端口-MAC地址-MAC目的地址-以太网类型-VLAN ID-VLAN优先级-IP源地址-IP目的地址-IP协议-IP服务类型-IP源端口-IP目的端口
包头域分为四层:
1.入端口(Ingress Port),消息在哪个端口进入交换机
2.源MAC地址+Ether dst+Ether Type+VLAN id+VLAN prioroty
3.IP src+IPdst+IP Proto+IP ToSbits
4.TCP/UDP src port + TCP/UDP dst port - 计数器:数据包、字节的统计
针对交换机中的每张流表,每个数据流,每个设备端 口,每个转发队列进行维护,用于统计数据流量相关信息如下:
- 对每张数据流表,统计当前活动的表项数、数据包查询次数、数据包匹配次数
- 对每个数据流,统计接收到的数据包数、字节数、数据流持续时
- 对每个设备端口:接收到的数据包数、发送数据包数、接收字节数、发送字节数以及错误发生次数
- 对每个队列:统计发送的数据包数和字节数,还有发送时的溢出错误次数
- 动作表:
1.转发数据包到端口
2.转发数据包到控制器
3.丢弃数据包
4.送到正常的处理了流程
- 必备动作(Forward and drop):需要所有OpenFlow交换机默认支持
- 可选动作(Forward[NORMAL利用交换机传统转发机制处理数据包/FLOOD] + enqueue +modify fileld):需要交换机告知控制器它所能支持的动作类型
OpenFlow端口类型:
端口(Ports):交换机传递数据包的网络接口,交换机通过端口和其他交换机建立逻辑连接:
- 物理端口
- 逻辑端口:对物理端口虚拟化,提高复用性,逻辑端口数据包需要 tunnel_id;
- 保留端口:指定通用转发动作ALL\CONTROLLER\TABLE\IN_PORT\ANY\LOCAL\NORMAL\FLOOD
3.3数据包处理流程
每个包按照优先级依次去匹配流表中的表项,匹配包的优先级最高的项即为匹配结果匹配成功,对应计数器更新,同时实施转发动作;如果没有匹配到相应表项,则转发给控制器。
- 接收报文
- 802.1STP处理
- 包头解析
- 匹配:是--执行动作 否---匹配---是--执行动作;否--通过安全通道发送给控制器