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

1.首先简单介绍一下什么是SDN,传统的网络是每个节点自己计算路由;

   SDN是集中控制路由。在一个数据中心的网络中,只有一个控制器,下面可以连接多个交换机。控制器集中计算好路由后,将流表下发给交换机,交    换机根据流表进行转发。

   跑在最上层是用户的APP(相当于计算机架构的应用软件),下一层是SDN控制层面(相当于操作系统),给APP提供接口,并负责集中    计算并控制所有    的路由;

   最下面一层是进行转发的网络设备,控制器将流表下发给交换机,交换机根据流表进行转发。

 

2.openflow规定了控制器与交换机之间进行交互的协议。


二、openflow的机制是什么?

1.openflow交换机的包处理流程如下:

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

openflow 端口镜像 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粗浅的了解,请高手多多指教:)