软件定义网络三层路由策略研究*
2020-08-14黄徐祎李传东顾宪锋
黄徐祎,李传东,顾宪锋
(中国电子科技集团公司第28研究所,江苏 南京 210007)
0 引言
IP通信技术是传统网络的核心技术,其采用分布式控制架构,涵盖众多复杂的控制协议,扩展性差,运行维护困难,业务创新缓慢。传统网络虽然带来了当今网络世界的繁荣,却也越来越难以满足当前快速发展的需求。
软件定义网络(Software Defined Network,SDN[1-2])诞生于美国斯坦福大学的Clean Slate课题,是一种新型的网络架构。软件定义网络的关键特征包括集中控制、转控分离和开放的接口,可以对网络像软件一样进行灵活编程[3]。SDN架构如图1所示,包括应用层、控制层和转发层。控制器处于控制层,通过南向接口请求转发层的网络设备生成流表和转发数据包,并通过开放的北向接口为应用层的应用提供服务,从而使各类应用通过可编程的方式控制整个网络。其中北向接口还缺少业界公认的标准,南向接口以ONF(Open Networking Foundation,开放网络基金会)组织倡导的OpenFlow[4-6]协议为代表。OpenFlow交换机使用基于安全连接的OpenFlow协议与SDN控制器通信,“流”是通信过程中数据分组特征(如MAC地址、IP地址、端口号等)的抽象,SDN控制器使用OpenFlow协议下发流表至OpenFlow交换机,交换机按照流表对数据包进行匹配和转发。
图1 软件定义网络架构
自SDN问世以来,学术界进行了大量研究和实践,众多企业也将SDN技术引入到实际应用场景中并取得了相当的成效。本文研究了在软件定义网络架构上进行三层路由交换的方法,得益于架构优势,相对于传统三层网络大大简化且易于实现,具有更好的性能优化空间和功能拓展能力。
1 路由机制探究
传统三层网络采用分布式控制架构,通过路由协议交互来建立网络拓扑和计算路由。为便于管理庞大的网络,网络按区域划分为自治系统,域内使用域内路由协议(如OSPF),域间则使用BGP协议。基于SDN构建三层网络具有集中化控制[7]的优势,SDN控制器拥有全局的网络拓扑视图,能以内置的算法快速计算路径并通过南向接口协议将流表下发至网络设备,从而建立全网的路由。由于不需要部署各种路由协议,网络得到了极大的简化。为达到全网拓扑信息的一致性,传统分布式架构网络中的各节点之间同步路由信息要消耗大量带宽且机制复杂,SDN集中控制方式只需中央控制器和各网络交换设备同步信息,大大降低了带宽消耗和计算复杂度。为满足新的需求或提高性能,只需要对SDN控制器软件进行修改升级,无需像传统网络那样更新所有的路由交换设备,使基于SDN的三层网络具备更好的灵活性和演进能力。
要管控规模庞大的网络,逻辑上单一的控制器是无法满足处理性能要求的。要保持集中控制的优势并分解巨大的处理压力,可参照传统网络将整个网络划分成多个域,并为各域分配独立的SDN控制器进行管控,同时部署中央SDN控制器管理所有域SDN控制器。域控制器负责域内路由的建立,中央控制器协同[8]域控制器建立域间的路由。
2 系统设计
网络管控模式如图2所示,系统使用两类控制器:域控制器和中央控制器。域控制器负责建立域内路由,保证域内主机间的IP通信。中央控制器负责建立域间路由,使不同域内的主机能相互通信。为实现清晰的分层管控,以及简化域控制器和中央控制器协作模式,域控制器将网络域抽象成虚拟交换机受中央控制器管控,域间的互联链路则被抽象为虚拟交换机[8]的互联链路,中央控制器通过在虚拟交换机上安装流表建立域边界上的域间路由。
图2 网络管控模式
2.1 系统参数
当域控制器虚拟成交换机连接中央控制器后,通过OpenFlow协议交互,中央控制器自动获得了虚拟交换机的id号、端口等信息,另外通过和所有虚拟交换机交互LLDP[9](Link Layer Discovery Protocol,链路层发现协议)获取所有域的拓扑信息。此外还需给中央控制器设置各虚拟交换机所属三层网段地址,用于设置域间路由。以上中央控制器所需的参数信息如表1所示,其中自动获取的信息来自OpenFlow协议或LLDP协议,人工设置的参数则通过编程接口配置。
同样,域控制器通过OpenFlow协议自动获得物理交换机的id号、端口等信息,通过LLDP获取本域的拓扑信息。另外当主机请求IP通信时,可通过OpenFlow协议的packet-in消息获取主机的MAC地址、IP地址以及所连的交换机端口。当域控制器作为控制器管控三层域时,需设置各三层域的网段地址、网关地址和管理的交换机。同时域控制器作为虚拟交换机运行,可自动生成唯一的虚拟交换机id号,并设置底层物理交换机端口和虚拟端口的映射。以上域控制器所需的参数信息如表2所示。
表1 中央控制器参数
表2 域控制器参数
Mininet[10]虚拟化网络平台可以模拟SDN的网络拓扑结构,可对OpenFlow等协议进行测试和验证,几乎可以无缝迁移到真实的硬件环境中。为便于描述,设定系统连接关系用Mininet按图3所示搭建。网络分3个三层域,域2又分两个子域。
图3 连接关系
主机都连至所属交换机端口1,此类型端口称为交换机的访问端口,主机具体网络信息如表3所示。
表3 主机信息
2.2 流表设计
从OpenFlow1.1开始设计了多级流表[11]而不是之前就1张表,因为将匹配过程分解成多个步骤,以流水线形式处理,从而降低了流表记录数量,提高了资源利用率。另外设计多级流表也便于对流表进行功能划分和管理。OpenFlow交换机中的表从0开始编号,数据包进入交换机后从流表0开始依次匹配,依据指令进行操作。
系统设计了三张表:表0为分类表,用于根据数据包类型进行分类处理;表1为二层表,用于匹配在二层域转发的数据包;表2为三层表,用于匹配三层转发的数据包。流表对数据包的匹配流程如图4所示。
图4 多级流表匹配流程
2.3 域间路由
域控制器模拟的虚拟交换机和中央控制器连接的建立遵循OpenFlow协议握手过程,状态机如图5所示。
当完成一系列协议交互处于ACTIVE状态后,中央控制器通过packet-out消息要求所有虚拟交换机将封装有设备标识、接口标识等信息的LLDP数据包从所有端口发送出去,相邻虚拟交换机收到后将通过packet-in消息将数据包转发至中央控制器,然后通过分析创建相邻虚拟交换机之间的链接关系,从而建立域网络拓扑结构。
网络拓扑建成后,中央控制器计算域间的路径,并结合域三层网络地址进行归纳,最后生成流表下发至虚拟交换机。流表指定了域间路由规则,包括匹配的网段地址和转发数据包的端口。域控制器依据映射关系在对应的物理交换机安装流表,至此完成了域边界上域间路由的建立。域控制器还必须在域内其它物理交换机上安装相应流表以建立到本域出口的路由,例如在交换机2上的流表是若目的网段为10.2.0.0/16或10.3.0.0/16,则从端口3转发。但是交换机1没有相关流表,主机1无法和域2和域3的主机通信,因此域控制器需依据域内拓扑计算路径并在交换机1上安装流表,当数据帧目的网段为10.2.0.0/16或10.3.0.0/16时,则从端口2转发。各交换机域间流表如表4所示。
图5 域控制器握手流程
表4 交换机域间流信息
2.4 域内路由
域内路由包括子域内部二层路由和子域间三层路由,域内网络拓扑结构也需要域控制器利用LLDP探测。
2.4.1 二层通信
在传统二层网络中,主机间IP通信需通过ARP协议先获取对方MAC地址:源主机发送的ARP请求包在网络中广播,目的主机收到ARP请求后返回ARP响应包至源主机,至此通信双方都学习到了对方的MAC地址,之后主机间交换的IP包中被填入对方MAC地址和IP地址,由交换机在依据生成树协议STP[1213](Spanning Tree Protocol)计算的路径上传输。
软件定义网络二层交换须符合以上主机层面的通信过程,网络层通信流程以主机3和5通信为例设计如下:
(1)主机3发出的ARP请求包由交换机3封装入 packet-in消息发送给域控制器2处理;
(2)域控制器2将该ARP请求包在子域1内广播;
(3)主机5收到ARP请求后返回包含本机MAC地址的ARP响应包,该包由交换机5封装入packet-in消息发送给域控制器2处理;
(4)域控制器2依据拓扑信息下发流表至交换机3和5建立主机3和5双向路径,并把该ARP响应包通过交换机1发送至主机3。
(5)后续主机3和5可以互发IP包进行通信。
交换机3和5上和二层通信相关的流表如表5所示(表号0的条目从上往下的优先级是从高到低)。
表5 交换机二层流信息
2.4.2 三层通信
当域控制器和域内交换机建立连接后,通过LLDP探测获取本域网络拓扑。域控制器计算子域间的路径,并依据给各子域设定的网络地址下发流表至交换机建立子域间的三层路由,如表6所示。
表6 交换机子域间三层流信息
对于三层通信,主机发现目的IP地址与自己不在同一网段内,须先通过ARP协议解析网关的MAC地址,然后将IP数据包发至网关进行转发,因此域控制器需实现网关的功能。
以主机3和4跨三层域进行通信为例,设计三层通信流程如下:
(1)主机3发出对网关地址10.2.1.1的ARP请求,由交换机3封装入 packet-in消息发送至域控制器2处理;
(2)域控制器2构造包含交换机3端口1(该端口与主机3直连)的MAC地址的ARP响应包,发送至主机3;
(3)主机3收到ARP响应后,构造IP数据包,其中源和目的MAC地址分别为主机3和网关的MAC,源和目的IP地址分别为主机3和主机4;
(4)交换机3发现目的IP地址为主机4的包和子域间流表匹配,将该IP包经端口3发送至交换机4;
(5)交换机4没有匹配目的IP为主机4的流表,将缓存这个数据包,并封装入 packet-in消息发送至域控制器2处理;
(6)域控制器2构造对主机4的IP的ARP请求,在交换机4的所有访问端口(与主机直连)泛洪;
(7)主机4收到ARP请求后返回包含本机MAC地址的ARP响应包,该包由交换机4封装入packet-in消息发送给域控制器2处理;
(8)域控制器2下发流表至交换机4建立从子域边界端口2到端口1上主机4的通路,并将之前缓存的来自主机3的IP包由交换机4转发至主机4;
(9)主机4发送IP包给主机3的过程和以上过程类似;
(10)当主机3收到主机4的IP包后,双向路由完全建立,后续主机3和4可以互发IP包进行通信。
以上流程如图6所示。
最后形成的满足主机3和4通信的流表如表7所示。
图6 三层通信流程
表7 交换机子域流信息
2.5 域间通信
域间三层通信建立在域间路由和域内路由机制上,其通信流程和域内三层通信类似但有所不同,以主机3和2通信为例,其与主机3和4的通信流程不同点如下:
当主机3发送IP包到主机2时,交换机3匹配的是由中央控制器下发的域间流表,不是子域间流表;
交换机2收到目的主机2的包将由域控制器1处理,不是主机3所在域的域控制器2。
3 结语
利用SDN集中控制的特点提出了SDN三层网络的路由策略,通过把网络划分为多个区域并抽象成虚拟交换机受中央控制器管控,这种分布式和集中式相结合的控制平面不仅分解了控制器的处理压力,而且保留了集中控制的优势和全局的视图,降低了管控复杂度,具有很好的扩展能力。开放的SDN使学术界和产业界充分加入到研究和创新行列中,促进传统网络向新型网络架构快速演进和发展。