openflow v1.0学习笔记

来源:互联网 发布:微屏软件怎么样 编辑:程序博客网 时间:2024/06/05 01:01

本部分(二)主要是对openflow的理解,汇报时间2016-12-7


目录

  • openflow v1.0内容概述
  • openflow 案例分析
  • openflow v1.3一些新特征
  • 参考资料

一、OpenFlow Switch Specification v1.0

这里写图片描述
手册内容:

  • OpenFlow Ports
  • OpenFlow Tables
  • Safety Channel
  • OpenFlow Protocol
    这里写图片描述
    openflow的发展时间节点(不完整)
    最新版本v1.5

1.端口

OF端口是OF处理流程和网络其他部分进行传递数据包的网络接口。 OF交换机通过OF接口和其他交换机建立逻辑连接。
OF交换机必须支持的端口类型为:

  • 物理端口
  • 逻辑端口 是对物理端口的虚拟化,提高可复用性,逻辑端口的数据包需要有tunnel_id;
  • 保留端口 指定通用的转发动作(包括:ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、NORMAL、FLOOD)。

2.流表(v1.0)

这里写图片描述
流表(v1.3)
这里写图片描述

2.1 数据头

这里写图片描述

2.2 计数器

主要对每张表、每个端口、每个流等进行计数,方便流量监管(例如经过这个端口有多少流量?匹配这个流的数据包有多少?这张表查找了多少次?)→流量可视化,负载均衡

2.3 动作(v1.0)

这里写图片描述

2.4匹配过程(v1.0)

这里写图片描述

  • 每个包按照优先级依次去匹配流表中的表项,匹配包的优先级最高的表项即为匹配结果。一旦匹配成功,对应计数器将更新。
  • 如果表项没有操作对应,数据包将会被抛弃。
  • 如果没有找到匹配的表项,则封装数据包,转发至控制器。

匹配过程(v1.3)
这里写图片描述


3.安全通道

用来连接交换机和控制器,必须遵守of协议。

  • 建立连接:采用TCP连接6633端口,SSL/TLS协议连接加密;
  • 连接中断:交换机进入紧急模式→重置TCP连接,匹配指定的紧急模式表项,删除所有正常流表。交换机启动默认进入紧急模式;
  • 修改流表。

4.Openflow数据结构

4.1基本结构类型

4.1.1 of数据头:每个openflow数据包都以此包作为最外部的数据头。
这里写图片描述
图片来源:Packet Structures of OpenFlow 1.0.0*(Kuang, Fangjun)
结构体:

/*  Header  on  all  OpenFlow  packets.  */struct  ofp_header  {uint8_t  version;       /*  OFP_VERSION.  */uint8_t  type; /* 数据包类型  */uint16_t  length;       /*  Length  including  this  ofp_header.  */uint32_t  xid; /*  Transaction ID字段用于将请求指令和相应指令相对应。  */};OFP_ASSERT(sizeof(struct  ofp_header)  ==  8);

4.1.2端口描述符(ofp_phy_port)
这里写图片描述

  • 端口配置标志(ofp_port_config)Port_Modify消息可用该配置
  • 端口状态标志(ofp_port_state)只读
  • 端口特征标志(ofp_port_features)

4.1.3流匹配描述符(ofp_match)
这里写图片描述

  • wildcards通配符,模糊匹配

4.1.4 actions动作描述符
4.1.5 队列:队列被绑定到某个端口,实现有限的流量控制操作


4.2 of的三种消息类型及处理流程

1. controller-to-switch消息

由控制器发起,可能需要或不需要来自交换机的应答消息

  • Features
  • Configuration
  • Modify-state
  • Read-state
  • Send-packet
  • Barrier
2. Asynchronous消息

异步消息不需要控制器请求,交换机主动向控制器通知状态变化等事件。

  • Packet-out
  • Flow-removed
  • Port-status
  • Error
3. Symmetric消息(对称消息)
  • Hello
  • Echo
  • Vendor

4.3具体消息分析

1)1 握手

控制器和交换机之间连接经过TCP建立,Hello报文之后,进行功能请求和功能响应环节。
这里写图片描述
datapath_id:交换机id(低48位为交换机Mac,高16位由实现者定义)
n_tables:交换机支持的流表个数0~255
n_buffers:缓冲数据包数量
capabilities:交换机所支持的性能
- ofp_features_request(功能请求)控→交,仅携带of消息头
- ofp_features_reply(功能响应)交→控
连接建立事件 :
这里写图片描述

1)2 配置交换机

(1)ofp_get_config_request(获取配置请求)控→交,仅携带of消息头。
ofp_get_config_reply(获取配置响应)交→控,获取配置信息
(2) ofp_set_config(设置配置)控制器主动→交换机

这里写图片描述
ofp_switch_config
设置配置(Set Configuration)事件 :
这里写图片描述

1)3 修改状态

1)3.1修改流表(ofp_flow_mod)

这里写图片描述

flags标志

  • ofpff_send_flow_rem流表项时间终止或删除时,触发流移除消息
  • ofpff_check_overlop检测同优先级新旧流表项是否有冲突
  • ofpff_emerg紧急表项

command指令:

  1. 增加新流
  2. 修改所有已匹配流表项
  3. 修改与通配符掩码匹配的流表项
  4. 删除所有已匹配流表项
  5. 删除与优先级和通配符掩码匹配的流表项

out_port:可选,用于删除时的匹配
idle_timeout:空闲时间,即流表项还未匹配到的时间
hand_timeout:插入流表中的时间
以上两个一旦到达时间期限,自动删除流表项

增添、修改、删除交换机中流表的具体操作:

  • 1 添加操作:

这里写图片描述

  • 2 修改操作:

这里写图片描述

  • 3 删除操作:

这里写图片描述

  • 注:_strict和non_strict
    non_strict版本:①此时匹配符是激活的(可以进行模糊匹配)
    eg:一条所有域都是通配符的non_strict→清空流表;
    ②带通配符,会匹配更精确的流表项
    eg:两个流表项:所有域是通配符;端口为80,其余通配符。会优先匹配后者
    _strict版本:表项头域和优先级必须严格匹配才执行

  • 此外:①对紧急流表操作时,timeout value必须为0,否则出错;
    ②若操作中流的action行为交换机不能处理,则出错。

1)3.2修改端口(ofp_port_mod)

1)3.3 配置队列

  • ofp_queue_get_request
  • ofp_queue_get_reply

1)4 获取状态
控制器试图从交换机获得不同类型的统计数据信息。

  • ofp_stats_request
  • ofp_stats_reply

    这里写图片描述

1)5 发包(ofp_packet_out)

这里写图片描述

1)6 保障消息(仅有包头):确保消息或指令完整

  • ofpt_barrier_request
  • ofpt_barrier_reply

2)1 包进入(ofp_packet_in)
这里写图片描述

reason:

  • 没有找到匹配的表项
  • 控制器action的要求

buffer_in:

2)2 流删除通知(ofp_flow_removed)

这里写图片描述

reason:

  • 代表空闲时间超时
  • 代表存在时间超时
  • 代表删除一个flow

2)3 端口状态(ofp_port_status)

2)4 错误(ofp_error)
交换机需要通知控制器发生问题时,触发。

这里写图片描述

type用来表示高层的错误类型

  • 问候协议失败 ofpet_hello_failed
  • 请求未被识别 ofpet_bad_request
  • action描述中的错误 ofpet_bad_action
  • 修改流的问题 ofpet_flow_bad_failed
  • 修改端口的问题 ofpet_port_bad_failed
  • 队列操作失败 ofpet_queue_op_failed

code为对应类型的错误代码
data则为错误相关的其他信息


3)1 Hello(ofp_hello)
hello消息只有包头

3)2 响应请求(ofp_echo_request)
一个of数据头加上任意的消息体组成,用来协助测量延迟、带宽、控制器跟交换机之间是否保持连接等信息(类似心跳机制)

3)3 响应回复(ofp_echo_reply)

3)4 生产商信息(ofp_vender)


二、OpenFlow 案例分析

1.拓扑结构的发现

这里写图片描述

步骤:

  1. TCP建立连接
  2. 特性请求和特性响应机制维护
  3. 交换机间链路的发现,需通过不同 OpenFlow交换机之间发送的链路层发现协议(LLDP)报文来实现。(所有的 LLDP报文实际上是由控制器生成,并封装在 Packet-Out 报文中,然后由控制器发送 Packet-Out报文给交换机。交换机并不能识别这个报文为 LLDP协议报文,只当普通数据报文转发处理)(注:此时控制器只是得了网络的拓扑,并不了解连接交换机的主机信息)

2. Ping 操作

这里写图片描述

mininet实验
mininet作为一个轻量级软定义网络研发和测试平台。 Stanford大学Nick McKeown的研究小组基于Linux Container架构,开发出了这套进程虚拟化的平台。
这里写图片描述
这里写图片描述

步骤:

  1. 主机A:ARP request
    这里写图片描述
  2. 主机B:ARP reply
    这里写图片描述
    这里写图片描述
  3. 主机 A 的 ARP 表项中有了主机 B 的 MAC 和 IP 信息,它将发送 ICMP request
    这里写图片描述
  4. 同时控制器也开始安装流,主机B直接给主机A发送ICMP reply
    这里写图片描述

三、openflow v1.3一些新特征

(参考资料)OpenFlow1.3学习笔记
http://www.sdnlab.com/1346.html
http://www.sdnlab.com/14484.html


四、参考资料:

  • openflow-spec-v1.0.0
  • openflow-spec-v1.3.0
  • sdnbook_OpenFlow_and_VxLAN(Vishal Shukla )
  • openflow-1.0-packet-structures-draft-0(Kuang, Fangjun)
  • 李呈(博客)http://www.muzixing.com/
  • 基于OpenFlow的SDN技术左青云陈鸣赵广松邢长友张国敏蒋培成
  • http://www.sdnlab.com/

0 0
原创粉丝点击