基于OpenFlow协议的SDN控制器拓扑发现

基于OpenFlow协议的SDN控制器拓扑发现

    OpenFlow协议的SDN控制器通过LLDP(Link Layer Discovery Protocol,链路发现协议)协议进行链路发现,并根据收集的链路信息来识别网络结构,生成网络拓扑。

LLDP协议

    LLDP协议为二层协议,通过在本地子网中通告自己的设备标识以及相关接口信息来实现链路发现的功能,其基于Ethernet II格式封装的帧格式如下:
基于OpenFlow协议的SDN控制器拓扑发现
DMAC:目的MAC地址,为固定组播地址,0x0180-C200-000E

SMAC:源MAC地址,为端口MAC或设备MAC地址

Ether_Type:以太网类型,为0x88CC

Classis_ID TLV:用于描述设备信息

Port_ID TLV:用于描述发送的端口信息

TTL TLV:用于描述生存时间信息

END of LLDPDU TLV作为LLDPDU结尾

FCS:为帧校验序列

基于OpenFlow协议的拓扑发现原理

基于OpenFlow协议的SDN控制器拓扑发现

  1. 在上电启动后OpenFlow交换机配置IP地址,与控制器建立连接,交换机主动上报端口等状态信息;
  2. SDN控制器会根据SDN交换机上报的端口状态,构造携带LLDP 数据包的Packet SDN控制器会根据SDN交换机上报的端口状态,构造携带LLDP 数据包的Packet Out报文,并将其发送给OpenFlow交换机S0/S1。(以S0为例,发给交换机S0的LLDP的Classis ID 为 S0,Port ID为P0);
  3. OpenFlow交换机S0在接收到Packet OpenFlow交换机S0在接收到Packet Out报文后,根据转发端口信息,将其携带的LLDP报文从指定端口输出(OpenFlow交换机S0的P0);
  4. OpenFlow交换机S1在接收到P0的LLDP报文后,由于没有转发表,默认规则为送控制器处理,则OpenFlow交换机S1构造PacketOpenFlow交换机S1在接收到P0的LLDP报文后,由于没有转发表,默认规则为送控制器处理,则OpenFlow交换机S1构造Packet In报文发送给控制器。
        通过以上步骤SDN控制器可以根据Packet In 中的LLDP报文可知发送的源交换机及源端口,根据Packet IN报文的携带的交换机及端口信息可知目的交换机以及目的端口,因此可以计算出S0与S1之间的拓扑。而OpenFlow交换机下面挂载的PC结点,由于DMAC不是自己则不会对接收的LLDP报文进行响应,则SDN控制器认为其为终端节点。