认识软件定义网络(SDN)(一)

一、SDN体系结构简介

在传统IP网络中,网络设备内部同时集成了控制逻辑和数据逻辑,控制平面需要实现各种类型的网络协议和功能,为数据平面构造和配置路由转发表,而数据平面则根据路由转发表实现数据包的转发。一般来说,网络设备内部控制平面和数据平面的接口是设备生产厂商已经封装好的,网管人员只能使用生产厂商特定的低级指令所提供的有限的功能来实现网络的管理和配置。同时,由于设备提供商之间的低级指令并不是相通的,所以当网络中存在来自许多不同提供商的设备时,网管人员需要花费大量时间和精力对这些设备逐一进行管理和配置。总结来说,传统IP网络具有以下几个缺点:
(1) 控制平面和数据平面紧密耦合。
在传统网络设备设计中,决定数据包如何被处理的控制平面和实现快速报文转发的数据面是集成在一起的,这就意味着控制面和数据面不能独立进化。一旦网管需要在控制面实现新的网络协议或者网络功能,必须要先得到设备提供商的同意,并等待他们在硬件上实现相应的功能。传统网络中控制面和数据面的紧密耦合导致新协议的实现、测试和部署的周期很长,不利于网络基础设施的创新和演进。
(2) 封闭且不一致的网络设备配置接口。
由于网络设备中控制面和数据面的接口是由设备提供商实现并封装的,网管人员需要使用这些有限的配置接口命令对设备进行管理,并且来自不同提供商的配置接口并不相同,而目前缺乏针对不同厂商的统一的配置接口,这就导致人工配置和管理网络的开销非常大。
软件定义网络与传统IP网络的区别
图1.软件定义网络与传统IP网络的区别
SDN的出现能够很好地解决传统IP网络面临的上述问题。如图1.所示,与传统IP网络相比,SDN将控制面的功能从数据面分离,并将其在逻辑上集中的控制器上实现。通过将控制面从硬件中分离,SDN中的网络设备变成了只具备简单转发功能的“傻瓜式”设备,而网管人员也不再需要逐个设备进行配置和管理,而是可以在统一的控制器上进行新协议的实现和部署,这大大减小了网络管理的开销,并加速了网络基础设施的创新和演进。

二、SDN中数据包处理

在SDN中,控制平面和数据平面通过一系列定义好的编程接口,即南向接口,进行通信,目前已被标准化且应用最为广泛的南向接口为OpenFlow协议。在传统IP网络中,路由器或者交换机是通过路由表或者MAC地址表对数据包进行转发的,而路由表存储的只是网络层的信息,MAC地址表存储的仅仅是链路层的信息。但是在SDN中,数据平面的转发设备不再根据路由表或者MAC地址表来处理数据包,而是统一根据流表(flow table)中的规则来对数据包进行处理。流表中的每条规则由匹配域、动作域和统计信息组成,匹配域包含第二层到第四层的部分信息(如IP地址、端口号、MAC地址等),动作域则是包括转发或者丢包等操作在内的对数据包的处理方式,统计信息可以用来统计某条流已经发送的字节数、交换机某个端口已经发送的字节数等信息。
当转发设备收到数据包时,它首先查找流表,寻找该数据包能够匹配上的规则。当数据包的部分包头信息匹配上某条规则对应的匹配域时,转发设备将按照这条规则对应的动作域处理该数据包,同时更新统计信息。若数据包可以同时匹配上多条规则,那么交换机将按照最高优先级的规则处理该数据包;若数据包在流表中无法找到匹配的规则,那么交换机需要使用OpenFlow协议的Packet-in消息,将包头的部分信息上报给控制器,由控制器决定该类型的数据包应该如何处理。当控制器收到Packet-in消息之后,它会根据全局网络状况决定如何转发该数据包,并向位于转发路径上的交换机下发Flow-mod消息,安装流表项。
SDN中完整的数据包处理过程示意图
图2.SDN中完整的数据包处理过程示意图
图2.给出了SDN中一个完整的数据包处理过程。当交换机S_1第一次收到某类型的数据包时,由于流表中并没有与之匹配的规则,因此S_1会使用Packet-in消息询问控制器该如何处理这个数据包。当控制器收到Packet-in消息后,会根据全局的网络状态信息决策该数据包应该按照S_1→S_2→S_3→S_4的路径进行转发。接着,控制器将会使用Flow-mod信息向这四个交换机安装对应的流表项。当流表项安装完成之后,数据包能够匹配上这四个交换机中新下发的规则并完成整个传输过程。
为了保证控制器能够及时感知到最新的网络状态,交换机需要定时上报网络状态信息(如链路连接、带宽资源等)给控制器,便于控制器根据全局信息作出决策。

三、OpenFlow协议消息类型

OpenFlow协议支持三种类型的消息:控制器-交换机(controller-to-switch)消息类型, 异步(asynchronous)消息类型以及对称(symmetric)消息类型,在这三种消息类型下还细分了许多其他子类型的消息。控制器-交换机消息是由控制器发给交换机用于管理交换机状态的消息,而异步消息则是由交换机发给控制器用于通知控制器交换机状态的改变以及网络事件状态更新的消息。对称消息既可以由交换机发出也可以由控制器发出,这种类型的消息主要用于维护控制器和交换机之间的连接。接下来,本小节将简单介绍一下这三种消息类型下面常见的子类型消息。
1) 控制器-交换机(controller-to-switch)消息类型。该类型的消息指的是那些由控制器发给交换机但并不一定要求交换机回复的消息,它有以下常见的子类型消息。
Features消息:控制器可以通过Features消息请求交换机的id标识以及交换机基本的功能;交换机必须使用Features回复消息对该请求进行响应并明确交换机的id标识和基本的功能。该消息一般是在OpenFlow信道刚建立好的时候使用。
Configuration消息:用于控制器设置和查询交换机的配置参数;交换机可以只回复控制器的查询而不必回复设置。
Modify-state消息:该类型的消息是由控制器发出用于管理交换机状态的消息,主要目的是增加、删除和修改流表中的条目以及设置交换机端口的状态。2.1.2小节中提到的Flow-mod消息就是Modify-state消息中的一种。
Packet-out消息:控制器使用Packet-out消息将数据包从交换机指定的端口发送出去,同时将通过Packet-in消息收到的数据包转发出去。
Barrier消息:Barrier请求/回复是控制器用于确保交换机已经完成某些指定动作的消息。
2) 异步(asynchronous)消息类型。异步消息是由交换机主动发送给控制器用于表示数据包到达或者交换机状态改变的情况,它有以下几种常见的子类型消息。
Packet-in:Packet-in消息将数据包的控制权转移给控制器。特别的,当交换机收到无法匹配上流表中任何一条规则的数据包时,可以向控制器询问如何处理这个数据包并使用该消息将数据包的控制权转移给控制器,2.1.2小节中提到的例子就使用了Packet-in消息的这种典型用法。
Flow-removed:用于通知控制器流表中某个流表条目已经被移除。
Port-status:用于通知控制器端口状态的改变。当端口配置(比如,被用户设置为down)或者状态改变(比如链路失效)时,交换机应当发送Port-status消息通知控制器。
3) 对称(symmetric)消息类型。对称消息既可以由交换机发出也可以由控制器发出,主要用于维护控制器和交换机之间的连接,它主要包含以下几种常见的子类型消息。
Hello:刚建立连接时,交换机和控制器之间使用Hello消息进行交互。
Echo:Echo请求/回复消息可以由控制器或者交换机发出,Echo请求必须要用Echo响应进行回复。Echo消息主要用来验证控制器和交换机之间的连接的存活性,也可以用来测量控制器和交换机之间的连接的延时或者带宽。
Error:Error消息是交换机或者控制器用来通知OpenFlow连接的另一端,本地发生了一些问题。该消息经常被交换机用于说明控制器发出的请求失败的情况。
Experimenter:交换机可以使用Experimenter消息来提供OpenFlow消息类型空间中额外的功能,该消息主要用于OpenFlow未来的修改和发展。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值