传统网络拓扑发现
传统的网络体系架构下实现网络连通的做法是在每台路由器上设置相应的路由算法
常用的路由协议有RIP、OSPF、EIGRP等
传统网络当中路由发现协议一般使用的是LLDP (Link Layer Discovery Protocol)
LLDP协议局域网中,传统的交换机首先会从每个端口发送一个有别于普通数据包的LLDP数据包,并且这个数据包的寿命通常也只有一跳。
LLDP数据包的负载信息会被封装到一个以太网帧里面,以太网帧结构如图所示。
颜色较暗的地方即为LLDP负载信息。
其中Chassis ID TLV, Port ID TLV, Time to live TLV三个为必须字段,用来表示局域网中唯一的交换机标志符,TTL及端口号。
这个数据包将被发往邻居节点,邻居节点通过解析收到的数据包信息,就能够通过分析得到链路的源交换机、目的交换机以及对应的源端口号和目的端口号。
SDN控制器拓扑发现
OpenFlow控制器没有一个统一标准的拓扑发现方法。
现有的拓扑发现方法仍然是基于传统网络的链路发现协议LLDP。
介绍SDN控制器(本文中以Ryu控制器为例)如何利用LLDP发现拓扑。
现在一台控制器上连了两台交换机,如图所示。
拓扑发现的基本步骤可描述如下:
- (1) SDN控制器构造PacketOut消息向S1的三个端口分别发送LLDP数据包,其中将Chassis D TLV和Port D TLV的值分别设置为S1的dpid和端口号;
- (2) SDN控制器下发流表信息到交换机S1,并且相应的流表内容为:来自Controller端口的数据包,会根据数据包里面提供的端口信息找到对应的端口转发出去。
- (3)控制器向交换机S2中下发流表,流表规则为:将从非SDN控制器接收到的LLDP数据包发送给控制器;
- (4) SDN控制器能够对接收到的LLDP数据包进行分析,得到链路的源、目的交换机以及源、目的端口信息。
基于LLDP消息的方法只能对于控制器直连的openflow交换机进行链路发现
如果网络中存在非openflow域,即两台openflow交换机通过其他多台非openflow交换机连接,此时需要其他的链路发现手段。
在这种情况下,控制器还是会首先发送packet-out消息给与之相连的openflow交换机,先维护OpenFlow交换机直连场景的拓扑。但同时控制器会要求交换机发出广播包,广播包将被发往除交换机和控制器相连的端口之外的其他端口。
广播包从openflow交换机发出后,如果网络中存在非openflow域,广播包将从这个网络域的一端进入并穿越,达到与该非openflow域连接的其他openflow交换机。
因为在接收到广播包的openflow交换机中并没有对应的流表项可供广播包匹配,所以该广播包将被上传到控制器,从而告知控制器在网络中存在非openflow域。
如果控制器并没有收到上传的广播包,那么就可判断出整个网络都有openflow交换机组成。