传统网络架构采用:分布式控制
SDN架构:采用的是集中式控制。它将网络的控制平面与数据转发平面分离,通过集中控制器的软件平台去实现可编程化控制底层硬件
与传统网络比较,SDN的基本特征:
(1)控制与转发分离
(2)控制平面与转发平面之间开放接口
(3)逻辑上的集中控制
SDN网络架构主要特性:
控制器与交换机分离。控制器知道所有网络信息,负责指挥设备如何工作;交换机不知道任何网络信息,要等待控制器的指挥来工作。
openflow协议:交换机和控制器之间相互通信时需要用到的协议
何为openflow?
OpenFlow交换机将原来完全由交换机/路由器控制的报文转发过程转化为由OpenFlow交换机和控制服务器来共同完成,目的交换机要通过of协议(OpenFlow Protocol)经安全通道(Secure Channel)连接到外部控制器(controller)从而实现数据的转发和路由控制的分离。
交换机中重要组成部分:流表
of交换机有一张流表(Flow Table)流表包含数据包匹配特征和数据包处理方法。
OpenFlow流表表项由包头域,计数器,动作三部分组成
包头域(headerfield)中有用于和交换机接收到的数据包进行匹配的元组涵盖了ISO网络模型中第二至第四层的网络配置信息,正因如此它比在进行数据转发的时候比传统网络设备可以使用更丰富的规则。
计数器(counters):是针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护,用于统计数据流量的相关信息。
动作(actions):用于指示交换机在收到匹配的数据包后应该如何对其进行处理。它分为必备动作和可选动作
根据支持的动作分类不同of的交换机分为:纯of交换机(支持必备动作)和支持of交换机(除了必备动作后还可以支持NORMAL动作)。
OpenFlow协议主要是通过对不同类型消息的处理来实现控制器与交换机之间的路由的控制它的消息类型分为:
1、Controller‐to‐Switch控制器至交换机消息 控制器主动发出
2、Asynchronous异步消息 交换机主动发出
3、Symmetric对称消息,由控制器或交换机主动发起
控制器与交换机建立OpenFlow建立连接的方式:
控制器与交换机互相发送Hello消息,Hello消息中只包含Openflow Header ,Openflow Header中的version字段为发送方所支持的最高版本Openflow协议,但双方要选取Hello消息中最低版本的协议作为通信协议,如果有一方不支持,则发送Error消息断开连接。如果双方Openflow版本可以兼容,则连接建立成功。
在建立连接后控制器最先需要的是获取交换机的特性信息,包括交换机的ID,交换机缓冲区数量,交换机端口及端口属性等等。
获取交换机特性的方法:控制器发送Features Request 给交换机(查询交换机特性)
交换机 回复Features Reply 给控制器(FeaturesReply中包含了Openflow Header 和Features Reply Message)
交换机接收数据包后的处理方法分为两种情况:
交换机收到数据包后先查看流表,看能否在流表中找到与数据包匹配的报文的条目
(1) 有匹配的条目,则交换机会按照流表所指示的action方式来处理数据包,
(2) 没有匹配的条目,交换机会把数据包封装到Packet-in消息中,发送给控制器,让控制器来处理,数据包会暂时保存到交换机中。控制器收到Packet‐in消息后,可以发送flow‐mod(控制器知道该数据包具体往哪走,则下发flow-mod数据包)消向交换机写一个流表项。flow‐mod消息中的buffer_id字段设置为packet‐in消息中的buffer_id值。交换机中便有了与此数据包相关的流表项,数据包按照此流表项中的action便可以处理数据包。
特殊情况下有数据包并不需要向交换机中添加一条流表项来匹配处理,例如ARP、IGMP等
控制器只需要使用PacketOut(不知道具体往哪走,让交换机中的数据包广播出去时下发Packet-out)消息,告诉交换机这类数据包如何处理即可
基于Openflow协议的SDN总的工作流 程为:在交换机与数据包建立连接的前提下,主机向网络中发送一个数据包,of交换机流表中如果没有关于此数据包流表项,则将数据包封装到packet-in消息中然后发送给控制器,控制器在通过flood-mod下发流表(或者下发packet-out),交换机中的流表中便有了对此数据包的处理方式。如果有关于此数据包的流表项,则按照流表中的action直接处理数据包
在掌握以上信息后了解当两台主机在ping通的过程中,数据包在经过各个交换机时,每台交换机中流表怎样变化的。