首页 > 代码库 > openflow简明学习笔记(原创)

openflow简明学习笔记(原创)

一、openflow用来解决什么问题?

1.首先简单介绍一下什么是SDN,传统的网络是每个节点自己计算路由;
   SDN是集中控制路由。在一个数据中心的网络中,只有一个控制器,下面可以连接多个交换机。控制器集中计算好路由后,将流表下发给交换机,交    换机根据流表进行转发。
   跑在最上层是用户的APP(相当于计算机架构的应用软件),下一层是SDN控制层面(相当于操作系统),给APP提供接口,并负责集中    计算并控制所有    的路由;
   最下面一层是进行转发的网络设备,控制器将流表下发给交换机,交换机根据流表进行转发。
 
2.openflow规定了控制器与交换机之间进行交互的协议。

二、openflow的机制是什么?
1.openflow交换机的包处理流程如下:

   每个交换机都有一系列的表,规定了哪种报文头的报文,相应动作是什么,例如:

 

上图的就是流表类的一个实例,规定了目的IP为10.1.1.1的类型为0X800的报文进行某种动作。
         
  收到一个报文,解析报文头中的信息,根据报文头(中的12元组)进行流表的匹配,匹配到了则进行相应操作。
  通常action list中可以有转发、丢弃等动作,如果报文匹配到了流表,但action list为空,openflow规定默认丢弃报文;
  但如果报文匹配不到流表,则会发往controller。
       
2.交换机与控制器的交互:
   交换机与控制器建立TCP连接后,交换过hello报文后就可以进行通信了,通信内容有比如:
   获取/设置配置信息,报文上送/发送,流表修改,端口状态获取/设置,错误信息等等。
 
3.控制器是如何获得所有交换机的组网情况的?
   通过LLD报文。控制器与交换机建立连接,并获知该交换机的所有端口情况后,控制器往该交换机的所有端口都发送一个LLD报        文,对端连接的交换机收到该LLD报文后无法识别,上送给控制器,控制器就知道两个交换机是通过哪个端口连接的了。
 
4.控制器是如何往交换机中安装转发表项,并将数据正确转发的呢?
   举个HostA与HostB相互ping同的例子:
   HostA -- SwtA-- SwtB -- HostB
   hostA要给HostB发送ICMP报文,首先需要发送ARP查询B的MAC地址。
   SwtA收到A发送的ARP查询,通过Packet-in发送给控制器,控制器学习HostA地址,并将HostA的ARP查询报文发送给所有的边缘        Swt,边缘Swt对    边缘链路转发A的ARP查询。
   HostB收到ARP查询后,也会回复ARP应答,同样的swtB将ARP应答发送给控制器,控制器学习B的MAC。
   控制器将一一通知最短路径中的交换机安装转发表项,比如从端口1收到目的地址为MACB的报文,发往端口2。
   交换机安装好表项后,ICMP报文就能按照转发表转发了。

 

以上是本人对openflow粗浅的了解,请高手多多指教:)

openflow简明学习笔记(原创)