摘要:SDN(Software Defined Networking)是由美国斯坦福大学提出的一种新型网络架构,其主要思想是将网络的控制面与数据面分离,通过软件编程的方式来实现对网络的管理和控制。本文在SDN框架基础上做了IPv4与IPv6互联技术的研究,设计了基于SDN的IPv4和IPv6互联系统。在该系统中利用SDN的技术手段,用控制面提供的标准控制接口编写IPv4与IPv6互联的应用软件,实现IPv4数据包与IPv6数据包的协议翻译和地址转换,然后将其安装配置到SDN控制器中。这种方式不仅配置起来简单方便而且不需要对原有IPv4和IPv6的网络设备做功能上的改动。当不需要IPv4与IPv6互联的需求时,只需从控制器中移除IPv4与IPv6互联的功能即可,对网络造成的影响微乎其微。
引言
随着网络规模的扩大和各种各样新应用的产生,IPv4网络暴露出来越来越多的问题,如IPv4地址耗尽、安全性问题、QoS(服务质量)问题、配置不够简便等。这些问题已严重阻碍了当前互联网的发展,因此设计制定了新的IPv6协议[1]。而要将当前的IPv4网络完全升级为IPv6网络需要付出巨大的成本,因此在未来一段漫长的时间内IPv4与IPv6会同时存在[2]。为保证网络业务的连续性,在IPv4与IPv6共存阶段必须引入IPv6过渡技术[3]。当前使用的每种过渡技术都只针对某一种特定应用需求而不具有普适性。因此在实际部署中根据具体应用需求在网络中添加具有相应功能的设备,这不但会增加网络功能的复杂性,而且配置复杂易造成资源浪费。
SDN[4](Software Defined Networking)是由斯坦福大学CleanSlate[5]研究组提出的一种新型网络架构,其核心思想是将传统网络中的网络控制与网络转发解耦分离成一个控制面和一个数据面,控制面对外界开放标准控制接口,网络管理员可以使用这些控制接口编写具体的网络应用程序从而达到对网络具体需求的控制。而数据面仅根据来自控制面的命令对网络中数据通信进行转发等处理。SDN自从其问世以来,以其通过软件编程来实现对网络实行更加灵活、开放、细粒度的管理和控制广受学术界和企业界的关注。目前OpenFlow[6]作为SDN一种比较受最多认可实现方式,在学术界、企业界得到了广泛研究和发展。因此SDN很可能会成为下一代互联网体系架构[7]的方向。
SDN出现后已经在很多方面得到关注和应用,但是如何在传统IPv6过渡技术中引入结合SDN技术,从而解决IPv4与IPv6共存阶段网络的复杂性和业务的可持续性,目前还没有过多深入的研究。本文在SDN框架基础上做的IPv4与IPv6互联技术的研究具有一定的理论和实践意义。
基于SDN的IPv4与IPv6互联系统的设计
本文在SDN框架基础上做了IPv4与IPv6互联技术的研究,设计了基于SDN的IPv4和IPv6互联系统。在该系统中利用SDN的技术手段,用控制面提供的标准控制接口编写IPv4与IPv6互联的应用软件,然后将其以插件的形式安装添加到SDN控制器中,当控制器收到IPv4主机与IPv6主机间通信的数据包后,会将数据包交给IPv4与IPv6互联的应用模块处理,然后将根据处理结果在交换机中设置相应的转发规则。最后,交换机根据控制器下发的转发规则数对数据包完成传输交换。可以看出采用了SDN后,不仅避免了在网络中为需要的实现某种功能而定制各种配置复杂的网络设备,而且使网络功能的调试测试变得灵活方便。即使以后不再需要某些网络应用功能,只需将相关应用模块从控制器中移除即可,对网络造成的影响微乎其微。
本文设计的基于SDN的IPv4与IPv6互联系统的模型如图1所示,整个系统由路由子系统和互联子系统两个子系统组成。路由子系统设计实现在控制器中,该子系统会根据收到的跨网通信数据包源目的IP地址在SDN网络中选择一条连接两个网络的路径。这样对于连接到SDN网络的IPv4和IPv6网络而言,相当于连接到一个中心路由器。如果将互联子系统同样设计实现在控制器,那么所有IPv4与IPv6网络间的通信数据包都需要由控制器处理,这将占用控制器大量的计算资源。不仅会造成网络IPv4与IPv6网络间的通信效率低下,而且会影响控制器对其他网络业务的处理。因此互联系统在一台独立的设备中实现,即图中的互联网关。控制器会为IPv4与IPv6网络间的数据通信在SDN网络中选择一条经过互联网关设备的路径。
路由子系统
控制器为IPv4与IPv6网络间的数据通信选择路径需要根据IP地址判断数据包是否需要由互联网关处理或是数据包的出口边界路由,SDN控制器仅实现了对SDN网络的基本管理控制功能,它实际管理的是一个二层链路网络,不支持不同网络间的三层路由功能。因此本文在控制器的基本功能架构基础之上设计实现了路由子系统,这样对于连接到SDN网络的其他网络来说相当于连接到一个中心路由器上。路由子系统包括路由配置模块、路由设备探测模块和路由信息管理模块理模块三个功能模块。
1.路由配置模块:网络管理员通过该模块配置边界路由设备和配置边界路由设备的网络可达信息,即边界路由设备的路由表。
2.路由设备探测模块:该模块主要用来探测定位边界路由设备在SDN网络中具体物理信息。
3.路由信息管理模块:管理维护SDN网络中已知的边界路由设备和边界路由设备中的网络可达信息。
互联子系统
控制器收到一个交换机不能处理的数据包后,若发现该数据包需要翻译转换,则先将该数据包转发到互联网关由互联子系统处理。互联网关收到该数据包后为数据包做协议翻译与地址转换处理,然后将翻译转换完成的新数据包发送到网络中由控制器继续处理。互联子系统包括DNS-ALG[8](Domain Name System-ApplicationLayer Gateway)和NAT-PT[9][10](Network Address Translation-Protocol Translation)模块两个功能模块。
1.NAT-PT模块:主要是实现IPv4格式数据包与IPv6格式数据包间的翻译转换,包括协议翻译与地址转换。
2.DNS-ALG模块:在NAT-PT模块基础上,通过域名解析建立IPv4地址与IPv6地址的映射。
路由子系统
加入路由子系统后的控制器收到交换机不能处理的数据包后处理流程如图2所示。路由子系统会根据数据包的目的IP地址判断该数据包的目的主机是否在SDN网络,若目的主机在SDN网络,则按照控制器常规的处理流程即可;若不在,则路由子系统会遍历其维护管理的所有边界路由网关设备实例,为该数据包查询可以通过哪一个边界路由设备到达目的网络,找到正确的边界路由设备后会获取其所连接的SDN交换机,最后按照控制器常规处理流程在两个交换机间选择一条路径并下发流表。
互联网关设备也是一个边界路由设备,它所到达的网络包括一个代表所有IPv6网络的IPv4网络和一个代表所有IPv4网络的IPv6网络。对于一个来自IPv4网络主机而目的主机在IPv6网络的数据包而言,路由子系统会认为该数据包可以通过互联网关设备到达目的网络,控制器会将数据包转发到互联网关设备。互联网关设备将收到的IPv4数据包翻译转换成IPv6数据包后发送回SDN网络中,与之前处理流程相似,路由子系统为新的IPv6数据包找到出口边界路由设备,然后控制器选择一条转发路径并下发流表到路径上的交换机中。
要实现不同网络间的三层路由选择,路由子系统需要管理维护边界路由网关设备的逻辑信息和边界路由网关设备的网络可达信息。网络管理员可以通过路由子系统的配置模块对配置两种信息。配置模块取得配置信息参数后,根据具体参数细节确定配置类型。若要配置路由网关设备,则先由探测模块构造设备探测消息并在SDN网络中广播该探测消息,对于IPv4路由网关设备而言,探测消息是ARP地址请求报文;对于IPv6路由网关设备而言,探测消息是ICMPv6邻居地址请求报文。当控制器的基础功能模块收到探测消息的回复后,会为该设备记录注册物信息,包括该设备在网络中具体位置。然后,路由子系统的管理模块收到探测消息的回复后,为该设备创建逻辑实例,包括该设备的路由表和路由选择方法等。至此路由网关设备配置完成。若要为某个路由网关设备配置网络可达信息,路由子系统的管理模块会根据具体参数找到对应的路由网关实例,然后在其路由表中增加路由表项即可。
互联子系统
路由子系统解决了不同网络主机间通信的网络路由问题,确定了数据包的传输路径。互联子系统则用来解决IPv4网络主机与IPv6网络主机间通信数据包的翻译转换问题。互联子系统的详细实现架构如图3所示。整个架构除了三个功能模块还有IP消息队列和DNS消息队列两个消息队列,一个地址池和一张地址转换表。互联子系统首先过滤分类接收到的数据包,若数据包的目的IP地址是互联网关自身的IP地址且传输层的源端口号或目的端口号是53,则将该数据包放到DNS消息队列中,等待DNS-ALG模块处理;若数据包的目的IP地址是临时IPv4地址池中的IPv4地址或是具体特定96位地址前缀的IPv6地址,则将该数据包放到IP消息队列中,等待NAT-PT模块处理。
NAT-PT模块主要从IP消息队列中获取消息,然后根据具体的消息类型做翻译转换处理,根据消息类型进行不同的处理,具体处理流程如图4所示,大致可以分四步描述:
(1)从消息中获取原始数据包。
(2)根据数据包的IPv4/IPv6地址查询地址转换表,进行地址映射转换。
(3)根据数据包的实际情况对IPv4/IPv6、ICMPv4/ICMPv6、UDP和TCP的头部字段进行翻译转换。
(4)将经过翻译后得到的新的数据包直接从链路层发送出去,该数据包到达SDN网络的交换机后,交换机中没有可以匹配的流表项所以将该数据包发送给控制器,由控制器继续处理。
DNS-ALG模块主要从DNS消息队列中获取消息,然后根据具体的消息类型做对应处理。根据消息的类型执行不同的处理方式。
(1)DNSv4:对于IPv4格式的DNS请求,将请求类型“A”改为“AAAA”,然后将目的地址改为IPv6网络的DNS服务器地址,源地址改为该互联子系统所在设备IPv6地址;对于IPv4格式的DNS应答,将请求类型“A”改为“AAAA”,为解析结果中的IPv4地址添加96位前缀,如该互联子系统使用的64:ff9b::/96,然后将目的地址改为IPv6网络的DNS地址。最后将翻译转换后的数据包发送到SDN网络中由控制器继续处理。
(2)DNSv6:对于DNS请求,将请求类型“AAAA”改为“A”,然后将目的地址改为IPv4网络的DNS服务器地址,源地址改为该互联子系统所在设备IPv4地址;对于IPv6格式的DNS应答,将请求类型“AAAA”改为“A”,为解析结果中的IPv6从地址池中分配一个临时可用的IPv4地址,并将该IPv4地址与解析结果中的IPv6地址作为地址映射对记录到地址映射转换表中,然后将目的地址改为IPv6网络的DNS地址。最后将翻译转换后的数据包发送到SDN网络中由控制器继续处理。
仿真环境搭建
系统仿真所需要的设备与工具如表1所示,在本文的仿真实验环境中,使用一台物理PC主机仿真模拟SDN网络。本文使用的SDN控制器是Floodlight[11],Floodlight是一个开源的控制器,本文在上面实现添加了路由子系统。本文选择OpenvSwitch[12]模拟SDN交换机,仿真搭建SDN网络拓扑。使用VirtualBox创建两台虚拟机,详细情况参考表1。搭建完成的实验仿真网络如图5所示。
功能测试
在对整个互联系统测试之前先在Floodlight控制器中配置添加SDN网络边界路由网关和配置添加边界网关所达网络的路由信息,这也是对路由子系统的测试。在该实验仿真中,虽然IPv4主机host1和IPv6主机host2分别代表实际与SDN网络相连的IPv4网络和IPv6网络,但他们也都是SDN网络下普通主机,因此不需要将他们为边界路由网关。但互联网关作为一台特殊的边界路由设备,它的可达网络是222.205.38.0/24和64:ff9b::0/96,所以需要在路由子系统中对其设置。因此实验中,将互联网关配置为IPv4边界路由网关和IPv6边界路由网关,然后配置这两个边界路由网关所达网络的路由信息。图6(a)是对IPv4网络边界路由网关和IPv6网络边界路由网关的配置,图6(b)则是对两个边界路由网关的路由表的配置。现在进行测试IPv4主机host1与IPv6主机host2之间的连通性,说明互联网关在处理域名解析报文时为host2的IPv6地址从临时地址池中分配了临时IPv4地址,完成了地址映射。
通过查看网桥br0、br1和br2中的流表项可以看到host1host2间通信的全部过程。首先是网桥br1,它只有IPv4协议的流表项,如图7(a)所示,可以看到host1与互联网关间的UDP类型的报文通信,根据端口号可知这是他们之间的域名解析请求和域名解析答复。还有host1与地址为222.205.38.1的主机间的通信报文,这些报文的收发仍在host1与互联网关之间,这就是host1与host2整个通信过程的IPv4部分。其次是网桥br0,它流表项既有IPv6协议的流表项也有IPv4协议的流表项,从中可以看到报文的翻译转换过程,如图7(b)所示,根据报文类型和端口号,不但可以看到互联网关与host1之间的域名解析报文的交互,而且还有互联网关与host2之间的域名解析报文的交互。还有host1与host2通信报文的转换,在在host1与host2通信的IPv6部分中,host1使用IPv4映射地址64:ff9b::c0a8:3802,两部分的通信报文必须经过互联网关,由互联网关负责翻译转换。最后是网桥br2,它只有IPv6协议的流表项,与br1类似,不过它展现的是host1与host2整个通信过程的IPv6部分。
在IPv6主机host2上使用IPv4主机host1的域名测试与host1的连通性,同样可以得到预期的测试结果。
SDN的出现带来一种以软件和驱动的方式管理控制网络,它通过解耦传统网络的控制逻辑和数据逻辑形成的新型网络架构对于传统网络中难以解决的问题有巨大的优势。本文就是在传统IPv6过渡技术基础上引入SDN,利用其控制与转发分离的技术,研究设计了基于SDN的IPv4与IPv6互联系统,整个互联系统路由子系统和互联子系统两个子系统组成。路由子系统主要实现了边界路由网关设备的配置、探测和路由表等信息的维护管理,控制器会根据其维护的路由表在SDN网络拓扑中寻找一条连接IPv4网络和IPv6网络的路径。互联子系统则在IPv4主机与IPv6主机的通信过程中实现了域名解析阶段中IPv4地址与IPv6地址的映射关系的建立和数据通信过程中IPv4数据包与IPv6数据包间的协议翻译和地址转换。本文最后用Floodlight控制器、OpenvSwitch等工具搭建了基于OpenFlow技术的SDN仿真网络来对互联系统进行测试并对测试结果进行分析。
转载自中国教育和科研计算机网