SDN拓扑发现原理

Posted 安全防护技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDN拓扑发现原理相关的知识,希望对你有一定的参考价值。

前言

SDN网络的一大特点就是资源由控制器集中管理,控制器管理网络,最基本的当然需要知道网络的拓扑,而网络拓扑可能时时发生变化,所以控制器需要时时监测。对于传统交换机,正常情况他们是通过LLDP等类似的邻居发现协议发现彼此网络设备,形成整网拓扑。OpenFlow的官方没有规定标准的拓扑发现方法,现在的OFDP(OpenFlow Discovery Protocol)利用的仍然是传统网络中的链路发现协议LLDP。而在SDN环境中,设备是无脑的,此时需要借助Openflow和LLDP同时工作,来保障Controller环境下能够对全网进行拓扑发现。

LLDP(Link Layer Discovery Protocol,链路层发现协议)

LLDP提供了一种标准的链路层发现方式,可以将本端设备的的主要能力、管理地址、设备标识、接口标识等信息组织成不同的TLV(Type/Length/Value,类型/长度/值),并封装在LLDPDU(Link Layer Discovery Protocol Data Unit,链路层发现协议数据单元)中发布给与自己直连的邻居,邻居收到这些信息后将其以标准MIB(Management Information Base,管理信息库)的形式保存起来,以供网络管理系统查询及判断链路的通信状况。
LLDP是一个信息发现与通告协议,LLDP的实体中维护了两个MIB库(管理信息库),一个local system MIB,用于维护本地相关设备MIB信息,一个remote system MIB,用于维护远端设备MIB信息。
LLDP通过PTOPO MIB、Enitity MIB、Interface MIB、Other MIB等库来维护local system MIB,并将本地的相关信息通告。当接收到其他设备的信息时就将其更新到remote system MIB中。

在这里插入图片描述

在传统以太网交换机中,交换机从自己的每个端口发送LLDP数据包,这个数据包不会被其他交换机转发,寿命只有一跳,LLDP负载被封装在以太网帧中,结构如下图,其中深灰色的即为LLDP负载,Chassis ID TLV, Port ID TLV和Time to live TLV三个是强制字段,分别代表交换机标识符(在局域网中是独一无二的),端口号和TTL。这个数据发出并被邻居节点收到之后进行解析,就可以知道这条链路的源目的交换机以及源目的接口。

在这里插入图片描述

OpenFlow中LLDP处理流程

在SDN网络中,由于控制器对域内的交换机进行集中控制,所以交换机是通过接收控制器发送的指令来完成LLDP帧的发送和接收。
假设现在有两个OpenFlow交换机连接在控制器上,如下图,简述拓扑发现步骤(以S1作为主体,S2的类似):

  1. SDN控制器构造PacketOut消息向S1的三个端口分别发送上图所示的LLDP数据包,其中将Chassis ID TLV和Port ID TLV分别置为S1的dpid和端口号;
  2. 控制器向交换机S1中下发流表,流表规则为:将从Controller端口收到的LLDP数据包从他的对应端口发送出去;
  3. 控制器向交换机S2中下发流表,流表规则为:将从非Controller接收到LLDP数据包发送给控制器;
  4. 控制器通过解析LLDP数据包,得到链路的源交换机,源接口,通过收到的PacketIn消息知道目的交换机和目的接口;

在这里插入图片描述

如下图所示,

  1. OpenFlow控制器向OpenFlow交换机2发送Packet-Out消息,以此来发送LLDP帧。
  2. OpenFlow交换机2通过OpenFlow交换机1上连接的网络接口发送包含packet-Out消息中的LLDP帧。
  3. OpenFlow交换机1接收来自openflow交换机2的LLDP帧后,将LLDP帧添加到Packet-In消息中,然后发送给OpenFlow控制器,OpenFlow控制器依据OpenFlow交换机1发来的Packet-In消息中所包含的信息,构建网络拓扑检测的数据库。

在这里插入图片描述

OpenFlow交换机不对LLDP帧做任何处理,而是由OpenFlow控制器进行网络拓扑检测。
LLDP与OpenFlow二者之间的关系仅仅是在OpenFlow框架内运用LLDP,即使OpenFlow规范中并未标明LLDP,该规范也支持LLDP,但并不意味着必须要用LLDP来进行网络拓扑检测,同样,利用IS-IS或OSPF也能实现网络拓扑检测。

网络中存在非OpenFlow设备时,如何去做链路发现?

基于LLDP消息的方法只能对于控制器直连的openflow交换机进行链路发现,如果网络中存在非openflow域,即两台openflow交换机通过其他多台非openflow交换机连接,此时需要其他的链路发现手段。在这种情况下,控制器还是会首先发送packet-out消息给与之相连的openflow交换机,先维护OpenFlow交换机直连场景的拓扑。但同时控制器会要求交换机发出广播包,广播包将被发往除交换机和控制器相连的端口之外的其他端口。广播包从openflow交换机发出后,如果网络中存在非openflow域,广播包将从这个网络域的一端进入并穿越,达到与该非openflow域连接的其他openflow交换机。因为在接收到广播包的openflow交换机中并没有对应的流表项可供广播包匹配,所以该广播包将被上传到控制器,从而告知控制器在网络中存在非openflow域。
如果控制器并没有收到上传的广播包,那么就可判断出整个网络都有openflow交换机组成。why? 相连的都是openflow交换机时,会丢弃广播包?
(总结,控制器通过要求交换机发送广播包,广播包会穿过非openflow域,最后通过到达的openflow交换机上交控制器,由此获知存在非openflow域。)

说明OpenFlow交换机有处理广播的流表,而这些流表均是刚开始做LLDP探测时控制器下发的。

参考

H3C<LLDP技术介绍>
LLDP(链路层发现协议)和OpenFlow
提高SDN控制器的拓扑发现性能
SDN交换机的拓扑发现与ARP处理
获得SDN全网信息关键:链路发现技术

以上是关于SDN拓扑发现原理的主要内容,如果未能解决你的问题,请参考以下文章

sdn控制器拓扑发现

请比较懂交换机、网管和LLDP协议的前辈进来指导一下,懂SDN和openflow更好。能留个邮箱是最好了。

实验1:SDN拓扑实验

实验1:SDN拓扑实践

实验1:SDN拓扑实践

实验1:SDN拓扑实践