基于LLDP和OpenFlow的网络拓扑检测

作者简介:周正强,北京邮电大学未来网络实验室在读研究生,个人邮箱:857538065@qq.com

网络拓扑检测对于网络策略的执行十分重要,本题主要考察对拓扑检测原理的理解以及对全局拓扑的检测。

一 实验目的

1.掌握网络拓扑检测相关原理
2.熟悉SDN网络中拓扑发现机制
3.掌握控制器集群原理

二 实验原理

在SDN网络中拓扑检测是相当重要的,LLDP以及其他拓扑检测协议广泛应用于网络拓扑检测中,通过本实验掌握其检测原理,了解其原理实现过程。同时针对SDN网络中通过openflow协议将底层网络交由控制器处理,可以通过控制器集群操作实现,控制器可以彼此分享各自的运行状态,当底层Openflow交换机连接多个控制器时,由交换机确定主备控制器,这对于容错和高可用性是非常有用的。

三 实验任务

1.搭建下图中所示环境,给出控制器web界面拓扑截图,并分析上述环境中采用的控制器网络拓扑检测原理。

2.在上述网络环境中,给出一种全局拓扑检测方案,用简洁的流程图描述检测拓扑的过程。

四 实验步骤

4.1 实验环境

采用的环境如下所述:

  • Ubuntu14.04LTS虚机中安装2.2.1版本的mininet网络仿真软件(IP地址为192.168.88.136)
  • 2台ubuntu16.04LTS虚机分别安装ONOS1.10.13版本的控制器(IP地址分别为controller 1: 192.168.88.128、controller 2: 192.168.88.139)

采用mininet网络仿真软件实现底层网络拓扑,在脚本中指定其控制器等。同时由于题中需要使用两台控制器,因此我们采取两台虚机分别搭建ONOS1.10.13版本的方案。在两台虚机中分别开启控制器,利用python脚本设置拓扑连接对应的控制器,完成上述环境的搭建。同时,鉴于题中使用两台控制器,所以借用ONOS中的onos-form-cluster脚本实现ONOS控制器的分布式集群,可以使得发生事件被分布式存储与集群中的所有节点共享。同时,我们也可以在集群状态中点击各个控制器查看各个控制器下的WEB界面拓扑。

4.2 实验步骤操作

1)首先我们需要开启两台ONOS控制器,不过本题采用的是ONOS源码编译完成后生成的onos.tar.gz部署开启onos,和基础题中的开启方法有所区别,具体的步骤如后文所述。
2)在两台虚拟机中生成ssh密钥,将密钥拷贝到两台虚机中,实现两个虚机的免密访问,具体操作百度即可(最常用的命令为ssh-keygen和ssh-copy-id)。
3)在onos源代码编译完成后会在buck-out文件夹中生成一个onos.tar.gz,将此文件夹拷贝到home目录下,并解压到/tmp目录下,如下图中所示:

onos.tar.gz解压
4)在该压缩包解压完成后,执行/tmp/onos-1.10.5-SNAPSHOT/apache-karaf-3.0.8/bin/start即可开启控制器。

onos开启命令
5)执行/tmp/onos-1.10.5-SNAPSHOT/apache-karaf-3.0.8/bin/client命令即可登入ONOS的经典karaf界面。

登录onos的karaf界面
6)在另一台ONOS控制器的虚机中重复操作3~5,完成两台ONOS控制器的开启工作。
7)分别在两台控制器中激活的基本app模块(否则之后mininet创建的ovs交换机无法连接到控制器),如下图中所示:

激活对应的app模块
8)在mininet虚机中根据题中拓扑创建对应的脚本文件:

9)执行脚本文件使其连接两个控制器,如下图中所示:

Mininet脚本执行
10)进行pingall操作则可以使得控制器一侧通过对应的协议获取到主机信息,得到底层网络的完整拓扑信息。

pingall操作
11)完成后则可以在控制器的UI界面获取相应的拓扑并进行分析。

4.3 实验拓扑图

各控制器web界面拓扑截图
1)打开controller 1的web界面192.168.88.128:8181/onos/ui/index.html,可得到如下网络拓扑。

controller 1拓扑图
2)打开controller 2的web界面192.168.88.139:8181/onos/ui/index.html,可得到如下网络拓扑。

controller 2拓扑图
采用ONOS集群的web界面拓扑截图
1)在实验步骤的第六步之后可以开启集群脚本。在Controller 1中执行onos-form-cluster脚本,实现两个控制器的集群,我们在IP地址为192.168.88.128的机器中执行脚本命令/tmp/onos-1.10.5-SNAPSHOT/bin/onos-form-cluster 192.168.88.128 192.168.88.139,如下图中所示:

执行onos集群脚本
2)首先打开192.168.88.128:8181/onos/ui/index.html界面,可以查看到此时的控制器拓扑,其中深蓝色为连接192.168.88.128控制器的交换机,淡蓝色为连接192.168.88.139控制器的交换机,如下图中所示:

集群后控制器拓扑

五 拓扑检测原理

5.1 网络拓扑检测原理

在本网络环境采用的ONOS控制器,其网络拓扑检测分为三部分:链路发现、交换机发现、主机发现。

交换机发现:使用的OPENFLOW协议。具体过程主要分为三个阶段:控制器启动监听6633端口、交换机与控制器建立连接、控制器与交换机版本协商。首先,打开控制器,启动OpenFlowAgent,监听端口,等待交换机建立连接;接着,使用OpenFlow PipelineFactory,新建channel使交换机与控制器建立连接,等待交换机发送hello消息;最后,控制器收到OPENFLOW Hello的消息,便会调用processOFHello方法进行版本协商,如果协商失败,控制器则会主动断开连接,如果协商成功,则连接成功。

以下主要阐述链路发现原理和主机发现原理。

5.1.1 链路发现原理
链路发现主要应用的是LLDP和BDDP协议(仅在有非OF交换机时),首先阐述这两个协议的链路发现原理,再从控制器层面分析对应的网络拓扑检测方法。

LLDP链路发现原理
LLDP用于检测两个OF交换机是否直连,其检测原理如下图中所示:

1)控制器首先向switch1下发packet_out消息,即是一个LLDP包,此时switch1将这个包从指定的的端口转发出去,此时别的交换机switch2收到该LLDP封包时,会通过PACKET_IN消息上报给控制器,这个时候控制器就可以知道switch1和switch2是相连的,完成一次链路发现检测。
2)如果PACKET_OUT的LLDP包并未PACKET_IN给控制器,则会下发BDDP包或者判定端口和主机相连,见后文分析。
3)LLDP包只有一跳存活时间的特性,也即是只存在于两个相邻的交换机中。

LLDP检测原理图
BDDP检测原理(监测网络中非OF交换机)
BDDP用于检测OF交换机互联中是否存在非OF交换机,通过下图进行分析阐述:

1)首先在SDN控制器中会优先通过PACKET_OUT消息下发LLDP包给switch1,此时OF1会根据指定的LLDP包中指定的端口将封包转发出去,此时经过的非OF交换机,则该LLDP包会被丢弃,控制器无法收到这个包的PACKET_IN消息。
2)然后,控制器会给switch1通过PACKET_OUT消息下发一个BDDP包,此时通过switch1对应的端口转发出去后,通过非OF交换机转发后会在switch2通过PACKET_IN消息上传给控制器,此时控制器可以判定在switch1和switch2之间存在着非OF交换机。
3)此外,还存在一种情况为LLDP封包丢失,BDDP包也并没有PACKET_IN上报给控制器,此时则可以判定switch1的2端口连接的是一个主机,并没有连接交换机。

BDDP检测原理
5.1.2 ARP检测原理(主机发现)
在SDN中有一项很重要的检测原理是ARP请求,用于节点IP地址解析其MAC地址,然后进行局域网内部通信。其解析过程如下:

1)H1 ping H2时,即10.0.0.1 ping 10.0.0.2,此时没有H2的MAC,因此需做一次ARP解析,此时ARP请求会被switch1以packet_in消息的形式上报给controller;
2)Controller收到ARP请求后会记录H1的位置,并且向同一网段中所有的交换机请求H2的位置,以泛洪的形式packet_out给所有的交换机;
3)所有的交换机收到请求后悔检查是否存在该主机,此时只有switch2会以packet_in的形式给controller一个ARP回复;
4)Controller收到switch2的回复时会记录H2的位置,并将ARP回复以packet_out消息发送给switch1,此时switch1再发送给H1主机。
5)ARP请求完成后再开始传输ICMP请求报文。事实上ARP请求在网络拓扑中也是属于发现主机的一种方式,通过LLDP和BDDP可以发现交换机的拓扑关系,但是主机记录并不完善,需要ARP请求将整个网络拓扑请求完善。

ARP请求解析原理

5.2 全局拓扑检测方案

在上述网络环境中有两个控制器,我们将一个控制器直连和管控的网络称为一个集群(cluster),所以本题中有两个独立的控制平面相邻的集群。在通常情况下,控制器不能发现其他集群网络的设备和链路,所以需要不同集群的控制器进行拓扑信息的交互,来解决全局拓扑的检测问题。

本方案的主要思路是首先使用指纹信息(fingerprint)来标注设备和链路是属于哪一个集群。然后各控制器使用LLDP协议进行拓扑发现,并将连接两个集群之间的链路标记为边缘链路。最后各控制器间交换本集群的拓扑信息,收到后匹配边缘链路将不同集群的拓扑连接成全局拓扑,并使用pinall发现所有主机。具体方案如下:
准备工作:打开ONOS,在Controller 1中执行onos-form-cluster脚本,实现两个控制器的集群,具体步骤见上文。

全局拓扑监测方案流程图
1.首先为每一个集群生成一个不重复的集群名称,由集群名称进行稳定散列编码可以得到一个指纹信息(fingerprint),指纹信息可以唯一代表这个集群;
2.进行LLDP探测,以探测与交换机3相连的链路为例,由控制器构造一个探针,其中需要将指纹信息编码到源mac地址(即交换机3的MAC地址)中,探针的其他内容与普通的LLDP一致;
3.控制器通过packet-out消息将探针下发给交换机3,交换机3收到将收到的消息发送到所有端口;
4.与交换机3相连的其他交换机收到来自3的探针,通过packet-in消息发送回控制器(这个控制器可能不是交换机3所属的控制器了,交换机2将收到的探针上报给控制器1,而交换机4上报给控制器2);
5.各控制器接收各交换机发上来的探针,并解析LLDP探针,并从源MAC地址中解析出源交换机所属集群的指纹信息,进行判断:

  • 5a.若指纹信息与本控制器的指纹信息一致,将此链路标记为本集群的链路;
  • 5b.若指纹信息与本控制器的指纹信息不一致,将此链路标记为边缘链路;6.重复步骤2、3、4、5,直至遍历完所有的交换机,此时每个控制器都储存有本集群的拓扑信息:本集群交换机,源端和目的端都在本集群的链路,边缘链路;
    7.控制器之间互相发送自己的拓扑信息,此时各控制器存储了自己和其他集群的拓扑信息;
    8.针对边缘链路,控制器通过匹配源MAC地址和目的MAC地址,将不同集群的拓扑进行连接,得到全局的交换机拓扑;
    9.进行pingall操作,通过arp协议发现网络中的所有主机,最终得出全局拓扑。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/21008.html
分享到:
相关文章
条评论

登录后才可以评论

zhouwaiqiang 发表于18-06-29
3