OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0

0x01 OpenFlow概述

1.1 设计思想:

以网络设备中内置了TCAM存储器为前提设计的,无需设计新硬件,更新其软件即可。

1.2 具体:

控制面和数据面的分离

1.2.1 控制面的构建方法
  • 1)不构建另外物理网络
  • 2)分别构建控制面和数据面
1.2.2 数据面的构建方法
  • 1)Hop-by-Hop方式
  • 2)覆盖方式
  • 3)混合方式
1.2.3 OpenFlow控制器和OpenFlow通道

OpenFlow控制器和OpenFlow交换机维持着经由OpenFlow通道的TCP连接。

两种模式:

  • 1)Proactive模式
  • 2)Reactive模式
1.2.4 流表

流表描述数据包要进行何种处理。

OpenFlow交换机可拥有多个流表。

1.3 控制器和交换机的基本动作

1.3.2 OpenFlow交换机的初始动作

连接是从OpenFlow交换机向OpenFlow控制器建立的。

1.3.3 Proactive模式

由控制器向交换机预先发送流表项的设置。

1.3.3 Reactive模式

交换机Packet-in消息询问控制器如何处理。控制器发送指示消息或设置流表项。

有时也存在根据Packet-in消息,控制器给多台交换机添加流表的情况。

0x02 OpenFlow1.0的机制

2.1 OpenFlow1.0的流表和流表项

流表中流表项由3个基本要素构成:头字段计数器行动

交换机中有多个流表,OpenFlow1.0中匹配的流表只有一个,而OpenFlow1.1以上,数据包可以在各流表中与流表项匹配。

2.2 流表项

2.2.1 头字段

OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0_第1张图片

任何一个流表项都不匹配的情况称为Table-miss,发生Table-miss时交换机发送Packet-in消息或丢弃数据包。

若数据包与多个流表匹配,按优先级匹配,有配相同根据交换机具体实现来执行。

2.2.2 计数器

有4种计数器:

  • 1)流表的PerTable计数器
  • 2)端口的Per Port计数器
  • 3)流表项的Per Flow计数器
  • 4)队列的Per Queue计数器

OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0_第2张图片

2.2.3 行动

OpenFlow中定义了4种行动:

  • 1)Forward
  • 2)Drop
  • 3)Enqueue(可选)
  • 4)Modify-Field(可选)
2.2.3.1 Foeward

OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0_第3张图片

2.2.3.2 Drop

必备行动。只有Drop能丢弃与未指定Forward行动的流表项相匹配的数据包。

2.2.3.3 Enqueue(可选)

将现有数据包转发至现有的已设定的队列中(入队)。

用于实现Qos等功能的队列支持。

OpenFlow1.1开始Enqueue改名为Set-Queue。

2.2.3.4 Modify-Field(可选)

OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0_第4张图片

OpenFlow1.1开始Modify-Field改名为Set-Field。

2.3 控制器和交换机之间的消息

2.3.1 安全通道的建立

OpenFlow规范中,安全通道通过TLS(安全传输层协议,位于TCP之上)来实现。有时也会通过TCP明文来建立。

在OpenFlow1.0.2之后,建立安全通道的TCP端口号默认使用6653。

2.3.2 消息格式

OpenFlow头

OpenFlow版本,消息类型,该头包含8位字节数,分配给该数据包的事务id(请求和响应消息对应)

OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0_第5张图片

消息类型:22种。

2.3.3 安全通道的建立和初始设置

交换机和控制器都将发送Hello消息,Hello消息仅由OpenFlow头构成。

2.3.4 握手
2.3.4.1 Features消息

安全通道建立后,控制器通过握手掌握交换机的相关消息。

控制器发送查询的Features请求,交换价返回Features响应。
各OpenFlow交换机称为datapath,datapath_id是唯一标识。

2.3.4.2 SET_CONFIG和GET_CONFIG消息

用于查询和设置OpenFlow交换机的设置状态。

2.3.5 Flow-Mod消息

控制器用于对流表项添加、删除、变更设置等操作。

Flow-Mod消息字段:OpenFlow头,数据包匹配信息,Cookie,行动内容。

2.3.6 Packet-In消息

两种情况发送Packet-In消息:

  • 1)Table-miss
  • 2)行动为发送至控制器

两种情况:

  • 1)不缓存数据包,buffer_id=-1。
  • 2)缓存数据包。

不存在通知控制器缓存已经删除的机制。

2.3.7 Packet-Out消息

控制器向交换机发送含数据包发送命令的消息。

单一的Packet-Out消息中可包含多个行动。

2.3.8 Port-Status消息

在交换机中添加、删除或修改物理端口是,需要发送该消息通知控制器。

2.3.9 Flow-Remove消息

交换机流表项超时删除或是命令删除时,发送该消息通知控制器。

2.3.10 Error消息

通知错误。

控制器和交换机均可发送。

2.3.11 Barrier消息

用于掌握消息的处理进度。Barrier请求和响应。

2.3.12 Echo消息

用来确认控制器和交换机是否连接、检测通信延迟、测量通信带宽等。Echo请求和相应消息。

参考自《图解OpenFlow》
转载请注明出处

你可能感兴趣的:(SDN)