SDN环境下网络路由的设计与实现

(整期优先)网络出版时间:2021-02-24
/ 2

SDN环境下网络路由的设计与实现

菅秀河 陈红红 王蕾

中国联合网络通信有限公司济南市分公司,山东 济南 250000

摘要:随着云计算、大数据、物联网、移动互联网等新技术和新应用的爆炸式增长,传统网络架构所承载的功能不断扩展和复杂化,越来越难以适应当前的网络环境。为了解决这些问题,许多国家和地区都开展了下一代互联网的研究。SDN体系结构以OpenFlow为核心,提供了一个比传统网络体系结构更灵活、可编程、独立于供应商、更具创新性的网络框架。

关键词:SDN环境;网络路由;设计与实现

引言

由于SDN技术还处于发展初期,现有的SDN路由机制主要是两层技术。不同子网之间的互联主要采用VLAN转换技术、隧道技术等。它不能很好地集成网络层路由协议。本文针对SDN网络的路由问题,借助路由流平台,根据路由组件提供的逻辑控制策略,设计pox controller,使SDN网络具有路由转发功能。

1 系统设计与实现

1.1 路由算法模块

初始化net_rtb_info列表用来保存所有交换机的路由信息,其中,每个交换机的路由表用一个字典来保存。字典中的每一项为目的网络地址net_name与其对应的路由信息。路由信息为一个字典,数据结构为{“next_dpid”:next_hop_dpid,"out_port":out_port,"next_ip"}

分别为下一跳交换机的dpid,出端口,以及下一跳IP地址。

计算路由表的函数输入邻接矩阵、网段信息和链路信息。首先,计算交换机之间的邻接关系。根据邻接矩阵,计算出每个交换机的相邻节点集合。然后,计算出属于各个网段的交换机节点集合。接着,计算对于每个交换机节点,计算其直连网段列表和非直连网段列表。最后,遍历所有交换机节点的非直连网段列表,遍历所有交换机节点的非直连网段列表,为每一项计算最短路径路由。

对于某个目的网络地址,遍历该网段的所有交换机节点。对于每个目的交换机节点,通过_get_path函数计算其最短路径的下一条dpid和路径代价。找到最小的路径代价,并计算出端口和下一跳IP地址,将默认路由信息保存在net_rtb_info列表中。其中,_get_path函数中通过调用floyd算法,来计算最短路径的每一跳switch编号和路径代价。

设计算法的接口为floyd(d,n,s,t),其中d为邻接矩阵,n为交换机节点的个数,s和t分别为源端和目的端交换机的dpid。利用floyd算法,对最短路径进行更新,将路径代价和各跳路由分别保存在cost和route二维列表中。给定源节点和目的节点的交换机编号,则返回对应的route和cost。

1.2 系统总体设计

SDN路由系统是基于Ryu控制器的扩展。该扩展包括三个模块:全局拓扑发现模块、事件响应模块和路由算法模块。

1)拓扑发现模块

通过定期在各交换机节点之间发送和接收LLDP报文,监控链路连接状态,计算当前网络的邻接矩阵。控制器接收到LLDP数据后,解析处理LLDP数据包,并注册网络中新增的交换机。新链路以事件的形式发送到链路状态响应函数,及时更新邻接矩阵。

2)事件响应模块

首先对报文头进行协议域解析。然后,可以根据不同的协议类型(如ARP、ICMP、TCP或UDP等)设计消息中相应包的响应函数,分别进行处理。

3)路由算法模块

该控制器具有全局网络拓扑,因此对于每个交换节点,它可以控制交换节点的数量、端口IP地址和子网掩码。在此基础上,采用最短路径算法计算每个交换节点到每个网段的路由。

1.3 拓扑发现模块

LLDP(链路层发现协议)或链路层发现协议定义了不同供应商的设备在网络上通信和访问信息的标准。通过使用该协议,网络中的设备可以将自己的信息告诉网络中的其他设备,并保存相邻设备的信息,方便网络的管理。

LLDP协议设备间语音信息的格式、传输协议和存储方式。对于网络中的设备,可以将其主要功能、管理地址、设备ID、端口号等信息组织成TLV格式,即类型/长度/值。TLV是LLDP数据的基本单位,每个TLV代表一条消息。

在SDN中,由于是逻辑集中控制,控制器需要引导其控制域内的交换机完成LLDP帧的发送和接收,同时建立拓扑变化事件的触发和响应机制,完成网络拓扑的计算和可视化显示。

为了获得拓扑信息,本文定义了ryu.topology modular switches.py两个周期,即设置开关周期发送LLDP数据帧(LDP)循环和轮询检测链路状态循环。当开关启动时,两个周期会继续。

在LLDP循环中,遍历保存所有端口信息的交换机中的字典。向所有端口发送LLDP数据帧。当交换机接收到LLDP数据帧时,它首先尝试以LLDP协议格式解析数据帧。如果交换机号SRC和源端口号SRC可以正确解析,则进程将继续。消息.datapath.id获取终端交换机的目标交换机号、DST和目标端口号。如果端口号更改,将触发LinkDelete事件以断开原始链接。如果构造的链接实例是新链接,则会触发LinkAdd事件。此外,LinkState类的update函数用于更新self。更新链接的时间戳。

link_Loop Loop,切换到保存链路信息的字典遍历。当链路断开时,更新链路状态并生成eventlinkdelete事件。根据收集到的交换机和链路信息,计算网络拓扑并以邻接矩阵的形式可视化。

1.4 事件响应模块

当交换机中没有匹配的流量表条目时,数据包被转发给控制器,控制器执行路由表计算。当控制器从交换机接收到数据包时,将触发 ofppacketin 事件。这个事件的响应函数接口是:

@set_ev_cls(ofp_event.EventOFPPacketIn,MAIN_DISPATCHER)def packet_in_handler(self,ev)

根据您输入的事件类型,首先获得消息数据MSG。数据,判断长度是否满足要求。如果是LLDP报文,则解析包头报文,更新拓扑信息。对于其他类型的报文,如ARP、IPV4、ICMP、TCP/UDP报文,则定义相应的函数进行处理。

其中,如果是要发送到主机或网关的数据包,则调用函数self.\u packetin \u to \u node(MSG,header \u list)。此函数首先从数据包解析源和目标IP地址。如果在交换机的MAC地址表中可以找到与目的IP地址对应的目的MAC地址,则表示该包来自内网段的主机。如果无法获得目的MAC地址,则通过路由表搜索下一跳的目的IP地址,并向其发送ARP请求以获得目的节点的MAC地址。

2 结语

软件定义网络技术具有广阔的应用前景,是下一代网络技术发展的新方向。路由功能对于网络的运行和扩展是非常重要的。鉴于目前SDN网络的路由功能并不理想,本文通过设计,解决了在SDN环境下,不同网段的主机之间的通信问题,从而实现了SDN网络的路由转发功能。实验结果表明,当整个系统开启路由功能时,不仅保证了流量能够在不同网段之间成功转发,而且保持了相对稳定的性能。

参考文献:

[1]任欢;周杭霞.SDN环境下网络路由的设计与实现[J].测试计量技术及仪器,2017-02.

[2]卢志海.扁平化+SDN的网络设计与实[J].文化科学,2019-03.