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