|
NFV(Network Function Virtualization)--网络功能虚拟化 |
|
|
|
SDN典型架构:应用层、控制层、基础设施层 |
|
应用层--不同业务和应用 |
|
控制层--处理数据平面资源的编排,维护网络拓扑、状态信息 |
|
基础设施层--数据处理、转发、状态收集 |
|
|
|
南向接口--控制层与基础设施层接口(OpenFlow标准)(ForCES,PCE-P) |
|
北向接口--应用层与控制层接口 |
|
|
|
OpenDayLight典型架构:网络应用、编排和服务层、控制平面层、数据平面网元、 |
|
数据平面网元:南向接口 |
|
控制平面层:基于REST的OpenDaylight API北向接口 |
|
|
|
SDN特性 |
|
1.集中控制 |
|
2.开放接口 |
|
3.网络虚拟化 |
|
|
|
ACL(Access Control List)--访问控制列表 |
|
|
|
SDN核心理念--控制平面和转发平面的分离、支持全局的软件控制 |
|
实现方案:基于专用接口的方案、基于叠加网络的方案、基于开放协议的方案 |
|
|
|
基于专用接口方案:不改变传统网络的实现机制工作方式,升级改造操作系统,开发专用API,实现统一配置管理和下发(onePK) |
|
基于叠加网络的方案:以现行的IP网络为基础,在其上建立叠加的逻辑网络,实现网络资源虚拟化,使得多个逻辑上彼此隔离的网络分区,及异构虚拟网络可以共存(解耦、独立、控制)(隧道技术) |
|
基于开放协议的方案 |
|
|
|
SDN三层要求 |
|
1.转发层--处理性能高 |
|
2.控制层--控制逻辑周全,根据全局网络试图做出合理的资源调配决策 |
|
3.应用层--提需求,完成任务 |
|
|
|
SDN交换机--负责具体数据转发处理的设备。收到数据包,匹配表项,相应处理。表项由远程控制器统一下发,南向接口OpenFlow传达 |
|
SDN控制器--负责整个网络运行,是提升SDN网络效率的关键(链路发现,拓扑管理,策略制定,表项下发)北向接口RESTAPI |
|
OpenStack--可以工作在SDN应用层的云管理平台 |
|
标准南向接口--把单独的网络设备中的控制平面集中抽取到控制层,转发决策由控制层通过南向接口协议统一下发 |
|
|
|
传统网络交换设备架构中的两个平面 |
|
1.转发平面--主要用于对每一个数据报文进行处理,使得他能够通过网络交换设备。大多采用专门的硬件实现,主要包括转发决策、背板、输出链路调度 |
|
2.控制平面--主要用于对交换机的转发表或路由器的路由表进行管理,同时负责网络配置,系统管理方面的操作,与转发平面相比,运行频率较低,可以采用软件实现 |
|
|
|
转发决策(Forwarding Decision)--当数据报文到达SDN交换机后,数据包头中携带的信息会在交换机转发表中被查到,如果地址被找到了,那么对应的下一跳MAC地址就会被挂接在数据报文的最前端,同时IP数据报报文TTL递减1,并计算出一个新的校验和 |
|
背板(Backplane)--数据报文进而通过背板转发到SDN交换机对应的设备出端口。为了保证处理顺序,数据报文需要被加入到一个队列中等待。 |
|
输出链路调度(Output Link Scheduling)--当数据报文到达SDN交换机的设备出端口后,按照一定顺序等待,直到被发出到相应交换机输出链路上。FIFO |
|
|
|
SDN具体实现的选择 |
|
1.交换模式 |
|
a.直通(Cut-Through):仅对前6个字节信息(目的MAC地址)接收和分析。具有最小的转发延迟,并不检查数据完整性 |
|
b.零碎片(Fragment-Free):快速转发,对前64个字节进行接收和解析,再转发 |
|
c.存储转发(Store-and-Forward):对整个内容接受和解析,建议SDN交换机采用 |
|
2.背板设计(转发决策信息及中继管理信息) |
|
a.共享总线机制(Shared Bus):交换机入端口、出端口共享同一数据通路,并由集中仲裁器决定访问权归属。比较容易实现组播和广播 |
|
b.交叉开关矩阵机制(Crossbar):纵横式交换矩阵,支持在交换机端口之间提供多个同时使用的数据通路,突破带宽限制 |
|
3.缓冲机制 |
|
a.端口缓冲:为每个端口提供一定数量的高速内存,不支持灵活调整 |
|
b.共享内存:为所有端口提供可以同时访问的共享内存空间用于端口缓冲,将所有接收到的数据帧保存在内存池,动态分配共享内存 |
|
4.数据转发(流表中各个表项的长度及其中包含的匹配域可自定义,不再适合采用预定义的硬件电路进行流表实现) |
|
(TCAM(Ternary Content Addressable Memory)--三态内容寻址存储器,成本高,功耗大) |
|
|
|
OpenFlow(OpenFlow Switch Specification)=交换机、控制器、协议 |
|
OpenFlow v1.0 |
|
1.流表 |
|
a.流表是交换机的高速数据转发依据,是对数据转发功能的一种抽象 |
|
b.包头域(数据包匹配)+计数器(统计匹配数据包个数)+动作(展示如何操作处理) |
|
--包头域:用于对交换机接收到的数据包的包头匹配 |
|
入端口|源MAC地址|目的MAC地址|以太网类型|VLAN ID|VLAN优先级|源IP地址|目的IP地址|IP协议|IP TOS位|TCP/UDP源端口|TCP/UDP目的端口 |
|
--计数器:对每张流表、每个数据流、每个设备端口、每个转发队列进行维护,统计相关信息 |
|
--动作:由于缺少控制平面能力,操作不仅是转发,而需要详细说明处理,没有定义动作则默认丢弃 |
|
..必备动作和可选动作 |
|
..必备动作需要所有交换机默认支持,可选动作需要交换机告知控制器它所能支持的动作种类 |
|
..必备动作(转发和丢弃) |
|
..转发ALL CONTROLLER LOCAL TABLE IN_PORT |
|
..可选动作(转发、排队、修改域) |
|
..转发NORMAL FLOOD |
|
..排队 转发到某个出端口对应的转发队列 |
|
..修改域 VLAN_ID VALN优先级 剥离VLAN头 源MAC 目的MAC 源IPv4 目的IPv4 ToS位 源TCP/IP端口 目的TCP/IP端口 |
|
c.专用交换机和使能交换机 |
|
--专用只支持OF协议 |
|
--使能支持混合协议 |
|
d.匹配过程 |
|
--首先按照物理端口对入端口进行匹配 |
|
--然后按照第二层包头比较 |
|
..0x8100对应VLAN包,继续查询VLAN ID 和PCP域 |
|
..0x0806对应ARP包,继续查询源目IP地址 |
|
..0x0800对应IP包,继续查询IP包头相关域,如果是TCP/UDP包,继续查询传输层端口,如果是ICMP包,继续查询Type和Code |
|
..分段数据包后续包,将传输层端口设为0继续查询 |
|
2.安全通道 |
|
a.控制器利用OpenFlow协议对交换机进行流表配置,通道是连接交换机和控制器的接口 |
|
b.采用TLS(Transport Layer Security,安全传输层协议)技术 |
|
3.OpenFlow协议 |
|
a.三种信息类型:controller-to-switch asynchronous symmetric |
|
b.controller-to-switch |
|
--Features 在建立TIS会话时控制器发送给交换机,交换机应答自身支持的功能 |
|
--Configuration 控制器设置或查询交换机上的配置参数,交换机应答查询信息 |
|
--Modify-state 控制器管理交换机流表项和端口信息 |
|
--Read-state 控制器向交换机请求统计信息 |
|
--Send-packet 控制器通过交换机指定端口发出数据包 |
|
--Barrier 控制器通过barrier请求及相应报文,确认相关信息已经被满足或收到完成操作的通知 |
|
c.asynchronous |
|
--Packet-in 收到数据包没有匹配或指定发送到控制器,如果缓存多数据包先存缓存,如果不多则附带数据包发送 |
|
--Flow-removed 流表项因为超时或收到修改删除命令被删除 |
|
--Port-status 交换机端口状态发生改变 |
|
--Error 通知问题 |
|
d.symmetric |
|
--Hello 发起建立连接 |
|
--Echo 发起Echo,接受者恢复Echo reply,用来协商延迟,带宽,是否连接保持等参数 |
|
--Vendor 预留 |
|
e.协议交互过程 |
|
--连接建立 |
|
..控制器与交换机建立TLS隧道后,隧道中传递控制协议信息,无需流表 |
|
..安全隧道建立后,双方必须首发HELLO消息给对方,携带本方支持的最高协议版本号,接收方采用双方均支持的最低的版本号通信 |
|
..如果没有共同支持的协议版本则发送ERROR消息 |
|
--连接中断 |
|
..连接异常时交换机尝试连接备份控制器 |
|
..多次尝试失败后,交换机进入紧急模式,并重置所有TCP连接 |
|
..此时所有包匹配紧急模式表项,正常表项被删除 |
|
..交换机刚启动时默认进入紧急模式 |
|
--加密 |
|
..安全通道采用TLS连接加密 |
|
..启动交换机时尝试连接到控制器的6633TCP端口 |
|
..双方通过交换证书进行认证 |
|
..每个交换机至少配置两个证书,一个用来认证控制器,一个用来向控制器发出认证 |
|
--生成树支持 |
|
..交换机选择支持802.1d生成树协议 |
|
..如果支持,所有相关包在查找流表之前应该先在本地进行传统生成树处理 |
|
..支持生成树协议的交换机在FEATURES消息中设置STP支持位 |
|
..需要所有物理端口支持,但虚拟端口不需要支持 |
|
..生成树协议会设置端口状态,来限制发往FLOOD的数据包仅被转发到生成树指定的端口 |
|
..已经指定了出端口的转发或发往ALL的数据包会忽略生成树所指定的端口,而按照规则的设置进行端口转发 |
|
..如果交换机不支持生成树协议,则必须允许控制器指定洪泛时的端口状态 |
|
--流表项修改 |
|
..五种类型 |
|
..ADD 增加一个新流表项 |
|
..MODIFY 修改所有匹配流表项 |
|
..MODIFY_STRICT 修改严格匹配流表项 |
|
..DELETE 删除匹配流表项 |
|
..DELETE_STRICT 删除严格匹配的流表项 |
|
--交换机移除流表项 |
|
..两种情况 |
|
..定时器计时结束 |
|
..控制器发出删除表项命令 |
|
..每个表项有一个idle_timeout定时器和一个hard_timeout定时器 |
|
..idle_timeout定时器计算没有流量匹配的时间 |
|
..hard_timeout定时器计算被插入表中的总时间 |
|
..一旦到达时间期限,则自动删除表项,并发送一个流删除的消息 |
|
..控制器可以下发DELETE,DELETE_STRICT等消息主动删除流表项 |
|
|
|
OpenFlow标准演进 |
|
1.OpenFlow交换机架构 |
|
控制器 |
|
| |
|
| |
|
安全通道 组表 |
|
流表->····->流表 |
|
2.流表结构 |
|
a.v1.1和v1.2 |
|
--匹配域 计数器 指令 |
|
b.v1.3后 |
|
--匹配域 优先级 计数器 指令 超时定时器 Cookie |
|
c.匹配域 对数据包匹配,包括入端口,数据报包头,及由前一个表指定的可选的元数据 |
|
d.优先级 流表项的匹配次序 |
|
e.计数器 更新匹配数据包的计数 |
|
f.指令 修改动作集或流水线处理 |
|
g.超时定时器 一个流的最长有效时间或最大空闲时间 |
|
f.Cookies 由控制器选择的不透明数据值,控制器用来过滤流统计数据,流改变和流删除,但处理数据包不可以用 |
|
3.多流表 |
|
a.多级流表,将流表进行特征提取,进而将匹配过程分解成多个步骤,形成流水线处理形式 |
|
b.转发规则被组织在不同的OpenFlow流表中,属于同一个流表的规则则按照优先级顺序进行匹配 |
|
c.数据包进入到交换机,从流表0开始匹配,后续处理中流表可以按次序从小到大越级,但不能前跳。流表将以优先级高低顺序与数据包匹配,成功匹配到流表项后首先更新改流表项对应的计数器记录的统计数据,然后根据流表项指令进行相关操作。当数据包已经处于最后一个流表时,对应动作集合中的所有动作指令将被执行。 |
|
d.v1.3在每个表最后加上Table-miss项,指明数据包与其他流表都不匹配。该流表项优先级被设置为0 |
|
4.组表 |
|
a.组表结构==组标识符 组类型 计数器 动作桶 |
|
b.组类型 |
|
--所有all 执行所有动作桶中的动作,可用于组播或广播 |
|
--选择select 执行该组中一个动作桶的动作,可用于多路径 |
|
--间接indirect 执行该组中一个确定的动作桶中的动作 |
|
--快速故障恢复fast failover 执行第一个具有有效活动端口的动作桶中的指令 |
|
5.匹配域 |
|
6.计数器变化 |
|
7.指令和动作 |
|
a.v1.1 |
|
--可选指令 |
|
..Apply-Actions 立即进行指定的动作,而不改变动作集合 |
|
..Clear-Actions 在动作集合中立即清除所有动作 |
|
..Write-Metadata metadata/mask 在元数据区域记录元数据 |
|
--必备指令 |
|
..Write-Actions 将指定动作添加到正在运行的动作集合中 |
|
..Goto-Table next-table-id 转到流水线处理进程的下一张表的ID |
|
b.v1.3 |
|
--Meter meter id 直接将包计量后丢弃 |
|
c.对v1.0必备动作的完善 |
|
--必备动作 |
|
..Output用于将数据包输出到指定端口,与可选动作LOCAL合并执行,并由端口的属性决定其是否为可选 |
|
..Drop无变化 |
|
..Grop用于利用组表处理数据包 |
|
--可选动作 |
|
..Set-Queue 设置数据包队列ID,完成Qos功能 |
|
..Push-Tag/Pop-Tag 用于VLAN,MPLA_Tag入栈和出栈 |
|
..Set-Field 设置数据包头的类型和修改数据包头的值 |
|
..Change-TTL 用于修改TTL值 |
|
d.动作集合与数据包相关,最初一个空集合,每匹配一流表项,匹配项对应的指令都可能增加数据包的动作集合。当一个表项的指令集中没有包含Goto-Table指令时,流水线处理结束,动作集合中的动作指令按照一定顺序执行 |
|
8.流表匹配流程 |
|
报文输入从表0开始 |
|
|-----------------------------------是 |
|
| | |
|
| | |
|
在表n中匹配---是---更新,执行------转到表n |
|
| | |
|
| 否 |
|
否 | |
|
| 执行动作集合 |
|
| |
|
基于表配置,执行某一操作 |
|
-发送到控制器 |
|
-丢弃 |
|
-继续下一个表项 |
|
|
|
v1.3后 |
|
报文输入从表0开始 |
|
|-----------------------------------是 |
|
| | |
|
| | |
|
在表n中匹配---是---更新,执行------转到表n |
|
| | | |
|
| | 否 |
|
否 是 | |
|
| | | |
|
| | | |
|
存在Table-Miss项 | |
|
| |
|
否 执行动作集合 |
|
| |
|
基于表配置,执行某一操作 |
|
-发送到控制器 |
|
-丢弃 |
|
-继续下一个表项 |
|
9.安全通道 |
|
建议缺省状态下使用TCP6633端口 |
|
10.OpenFlow协议 |
|
a.旧三种信息类型:controller-to-switch asynchronous symmetric |
|
b.controller-to-switch |
|
--Features 在建立TIS会话时控制器发送给交换机,交换机应答自身支持的功能 |
|
--Configuration 控制器设置或查询交换机上的配置参数,交换机应答查询信息 |
|
--Modify-state 控制器管理交换机流表项和端口信息 |
|
--Read-state 控制器向交换机请求统计信息 |
|
--Packet-out 控制器通过交换机指定端口发出数据包 |
|
--Barrier 控制器通过barrier请求及相应报文,确认相关信息已经被满足或收到完成操作的通知 |
|
--Role-Request 用于控制器向其OpenFlow通道设置或查询role |
|
--Asynchronous-Configuration 用于控制器设置或查询异步消息的附加过滤器,一般用于多控制器连接建立过程 |
|
c.asynchronous |
|
--Packet-in 收到数据包没有匹配或指定发送到控制器,如果缓存多数据包先存缓存,如果不多则附带数据包发送 |
|
--Flow-removed 流表项因为超时或收到修改删除命令被删除 |
|
--Port-status 交换机端口状态发生改变 |
|
--Error 通知问题 |
|
d.symmetric |
|
--Hello 发起建立连接 |
|
--Echo 发起Echo,接受者恢复Echo reply,用来协商延迟,带宽,是否连接保持等参数 |
|
--Experimenter 预留 |
|
11.OpenFlow端口 |
|
a.端口是OpenFlow进程和网络之间传递数据包的网络接口 |
|
b.三种类型端口 物理端口 逻辑端口 保留端口 |
|
c.物理端口 与交换机硬件接口一一对应,硬件虚拟化后一个物理端口可以对应交换机硬件接口的一个虚拟接口 |
|
d.逻辑接口 交换机定义的端口,但并不直接对应一个交换机硬件接口。物理端口与逻辑端口唯一区别是:一个逻辑端口的数据包可能增加了一个额外的元数据字段即隧道ID,而当一个逻辑端口上接受到的报文被发送到控制器时,其逻辑端口和底层的物理端口都要报告给控制器 |
|
e.保留端口 用于特定的转发动作,如发送到控制器,洪泛,或使用非OpenFlow的方法转发 |
|
f.八种端口 |
|
--必备端口 |
|
..ALL:表示所有端口均可用于转发指定数据包,当其被用作输出端口时,数据包被复制转发除入端口及OFPPC_NO_FWD端口 |
|
..CONTROLLER:到控制器的控制通道,用作一个出或入端口。用作出端口时,封装数据包中为数据包信息,用作一个入端口时确认来自控制器的数据包 |
|
..TABLE:表示流水线开始,仅在输出行为时有效,此时交换机提交报文给第一流表 |
|
..IN PORT:代表数据包进入端口,只有一种情况用于输出端口,即从入端口发送数据包 |
|
..ANY:特定值,用在没有指定端口的情形,不能用于入端口和出端口 |
|
--可选端口 |
|
..LOCAL:表示交换机本地网络堆栈和管理堆栈,可入可出。使得远程实体可以与交换机通过OpenFlow网络交互,而不再需要单独的控制网络,通过配置一组合适的默认流表项,可以实现一个带内控制器的连接 |
|
..NORMAL:传统非OpenFlow流水线处理,仅可用于普通流水线的输出端口,如果交换机不能从OpenFlow流水线转发数据包到普通流水线,必须标明它不支持这一动作 |
|
..FLOOD:使用普通流水线处理洪泛过程,可用于出端口,除入端口或OFPPS_BLOCKED状态的端口,可以将数据包发往其他所有标准端口。 |
|
g.可选类型只在OpenFlow使能交换机被支持 |
|
12.IPv6支持 |
|
13.多控制器 |
|
a.初始化时交换机与一至多个配置好的控制器建立连接,这些控制器为主备关系,提供负载均衡能力和快速故障倒换 |
|
b.增加角色(Role)信息用于控制器之间协商主备关系 |
|
c.角色缺省情况下是EQUAL,可以响应交换机请求。也可以设为SLAVE,只监听不响应。第三种MASTER,系统只能有一个MASTER |
|
14.计量表(Meter Table) |
|
a.计量表结构:计量标识符 计量带 计数器 |
|
b.计量标识符:32位无符号整数 |
|
c.计量带:由计量带组成无序列表,每个计量带指明速率及处理数据包的方式 |
|
d.计数器:用于在报文被计量表项处理时更新相关计数 |
|
f.计量带结构:带类型 计量速率 计数器 类型参数 |
|
g.计量带类型:定义了数据包怎样被处理 |
|
--drop:通过丢弃数据包,定义带宽速率限制 |
|
-dscp remark:降低数据包的IP头中的DSCP字段丢弃的优先级,可用于定义简单的DiffServ策略 |
|
h.计量速率:用于选择计量带,定义带可以运行的最低速率 |
|
i.计数器:当数据报文被计量带处理时,更新计数 |
|
j.类型参数:带类型的可选参数 |
|
OpenFlow问题分析 |
|
1.转发性能:基于可编程硬件 |
|
2.流表规模:多流表技术 |
|
3.控制器容量 |
|
4.可靠性:多控制器方式 |
|
5.版本协议兼容性 |
|
|
|
OF-CONFIG配置管理协议(OpenFlow Configuration and Management Protocol) |
|
1.OpenFlow定义的是SDN网络架构中一种南向接口,提出由控制器向OpenFlow交换机发送流表以控制数据流通过网络所经过的路径的方式 |
|
2.OF-CONFIG本质是提供一个开放接口用于远程配置和控制OpenFlow交换机,不影响流表的内容和数据转发行为,对实时性没有要求 |
|
3.OpenFlow上所有参与数据转发的软硬件(例如端口、队列等)都可以被视为网络资源,OF-CONFIG作用是对这些资源进行管理 |
|
OpenFlow配置点 OpenFlow控制器 |
|
| | |
|
| | |
|
OF-CONFIG OF-CONFIG |
|
| | |
|
| | |
|
OpenFlow交换机 |
|
操作环境 |
|
4.OF-CONFIG主要目标是实现以下基本功能配置 |
|
a.配置一至多个控制器的IP地址 |
|
b.配置设备的队列、端口等资源 |
|
c.支持远程修改设备的端口状态 |
|
|
|
OF-CONFIG v1.0概述 |
|
1.目标 |
|
a.配置一至多个控制器的IP地址 |
|
b.配置设备的队列、端口等资源 |
|
c.支持远程修改设备的端口状态 |
|
2.OF-CONFIGv1.0定义的OpenFlow v1.2功能配置需求 |
|
a.控制器连接 支持在交换机上配置控制器参数 |
|
b.多控制器 支持多个控制器的参数配置 |
|
c.逻辑交换机 支持对逻辑交换机(openFlow交换机的实例)的资源设置,且支持带外设置 |
|
d.连接中断 支持故障安全,故障脱机等两种应对模式的设置 |
|
f.加密传输 支持控制器与交换机之间TSL隧道参数设置 |
|
g.队列 支持队列参数设置,包括最小速率,最大速率,自定义参数等 |
|
h.端口 支持交换机端口的参数和特征的配置 |
|
i.数据通路标识 支持长度为64位的数据通路标识的配置,其中低48位是交换机的MAC地址,高16位由各设备生产厂家定义 |
|
3.运维需求内容 |
|
a.支持从多个配置点进行配置操作 |
|
b.支持一个配置点配置和管理多个交换机 |
|
c.支持由多台控制器控制同一台逻辑交换机 |
|
d.支持对已分配给逻辑交换机的端口和队列的配置 |
|
4.数据模型 |
|
a.OpenFlow配置点---OpenFlow交换机 |
|
b.OpenFlow控制器---OpenFlow逻辑交换机 |
|
c.两类资源:OpenFlow端口和OpenFlow队列 |
|
5.NETCONF:核心在消息层上定义一个操作集 |
|
|
|
OVS交换机 |
|
1.Open vSwitch是一款基于软件实现的开源虚拟交换机 |
|
2.控制器--Openflow协议--数据通路--(慢速通道,快速通道) |
|
3.数据转发通路(datapath)执行数据交换工作,负责从设备入端口接收数据包并依据流表信息对其进行管理 |
|
4.OpenFlow协议支持则用于实现交换策略 |
|
5.两种数据转发通路:完全工作在用户态 |
|
|
|
OVS交换机核心实现 |
|
1.分为用户空间和内核空间 |
|
2.用户空间有多个组件,负责实现数据交换和OpenFlow流表功能 |
|
3.ovs-vswitchd是重要组件,与内核模块通过generic netlink通信,将交换机配置信息,数据流信息及变化保存到数据库ovsdb(通过UNIX socket机制与ovsdb-server通信管理数据库) |
|
4.ovs-appctl发布内部命令给ovs-vswitchd改变配置 |
|
5.ovs-dpctl驱使ovs-vswitchd在不依赖数据库的情况下管理内核空间中的数据通路 |
|
6.ovsdb-client或ovsdb-tool对数据库操作 |
|
7.通过ovs-ofctl可以使用OpenFlow去连接交换机并在远程开展监控和管理 |
|
8.sFlow协议用于数据包的采样和监控,但需要额外的sFlowTrend的软件 |
|
|
|
OVS交换机负责数据流发送相关流程 |
|
1.OVS定义的port结构在内核观察到从OVS上的链接的某块虚拟网卡上有数据包发来,将其传递给一个名为internal_dev_xmit()函数,该函数依次接收数据包 |
|
2.OVS在内核状态下查看流表结构,观察是否有缓存的信息可用于转发这个数据包,这项工作主要是由ovs_flow_tbl_looup()函数完成。该函数运行需要一个独一无二的key值,将从ovs_flow_extract()函数通过手机收集数据包细节信息得到 |
|
3.假设数据包是由虚拟网卡发出的第一个包,那么在OVS内核中将不会有相应的流表缓存存在,那么内核将不会知道如何处置这个数据包,这时内核就会通过genl发送一个upcall给用户空间 |
|
4.位于OVS用户空间的ovs-vswitchd进程在接收到upcall后,将检查数据库以查看数据包的目的端口,通过OVS_ACTION_ATTR_OUTPUT告诉内核 |
|
5.最终OVS_ACTION_ATTR_OUTPUT命令将使得内核执行用户此前设置的动作,即内核将在do_execute_actions()函数中执行这条genl命令,并将数据包通过do_output()函数转发给目的端口,数据包进而被发出 |
|
|
|
南向网络控制技术 |
|
1.链路发现和拓扑管理 |
|
a.控制器利用南向接口上行通道对底层交换设备上报信息进行统一监控和统计技术 |
|
b.LLDP(Link Layer Discovery Protol,链路层发现协议)作为链路发现协议,提供了一种标准的链路发现方式,可以将本端设备主要能力,管理地址,设备标识,接口标识等信息组织成不同的TLV(Type/Lenth/Value),并封装在LLDPDU(Link Layer Discovery Protocol Data Unit,链路层发现协议数据单元)中发布给直连邻居,邻居收到后将其以标准MIB(Management Information Base,管理信息库)保存起来,以供网络管理系统查询及判断链路通信状况 |
|
c.仅含OpenFlow交换机的发现过程 |
|
--控制器在执行链路发现过程中,首先通过一个Packet_Out消息向所有与之相连接的交换机发送LLDP数据包 |
|
--该消息命令交换机将LLDP数据包发送给所有端口 |
|
--一旦交换机收到Packet_Out消息,就会把LLDP数据包通过所有端口发送给其他与之连接的设备 |
|
--如果邻居交换机是一台OpenFlow交换机,将执行相应流表匹配操作,因为交换机没有专门的流表项处理LLDP信息,将通过Packet_In消息发送给控制器 |
|
--控制器收到Packet_In消息后对数据包进行分析并在其保存的链路发现表中创建两台交换机之间的链接记录 |
|
--最终控制器创建完备的网络拓扑视图 |
|
d.含费OpenFlow交换机的发现过程 |
|
--首先发送Packet_Out消息给与之相连的OpenFlow交换机,同时控制器要求交换机发出广播包 |
|
--广播包将被发往除交换机与控制器相连的端口之外的其他所有端口 |
|
--如果存在非OpenFlow域,广播包将从网络域穿越,到达与非OpenFlow域连接的其他OpenFlow交换机 |
|
--广播包被接收到的OpenFlow交换机上传给控制器,从而告知控制器在网络中存在有非OpenFlow域 |
|
--如果控制器没有收到广播包,可判断出整个网络都由OpenFlow交换机构成 |
|
f.拓扑管理主要作用是随时监控和采集SDN交换机信息,及时反馈网络的设备工作状态和链路连接状态 |
|
--控制器定期发送包含LLDP数据包的Packet_In |
|
2.策略制定和表项下发 |
|
a.控制器利用南向接口下行通道对网络设备实施统一控制技术 |
|
b.针对不同层次的网络传输需求,制定转发策略: |
|
--对于二层网路转发,在SDN中MAC地址学习已经在控制器的链路发现过程中实现,只需要控制器以目的MAC地址为依据将对应的交换机转发端口写入相应交换机的流表项即可 |
|
--对于三层网络转发,传统设备采取“一次路由多次转发”机制,SDN网络中核心是控制器利用相关路由算法计算出源和目的之间的路由信息,并以IP地址,MAC地址为依据将对应的交换机转发端口号写入相应的交换机流表项中 |
|
--对于四层网路转发,主要变化是额外考虑用于区分每个数据包中包含哪些应用协议的TCP/UDP端口号信息,这些信息就是四层转发的基础。传统设备的实现通常需要维护一个连接表用于保存与业务应用服务器相对应的源IP,源TCP/UDP端口等信息。在SDN网络中,四层数据解析将在控制器中完成,并以TCP/UDP端口号、IP地址和MAC地址为依据将对应的交换机转发端口号写入相应交换机的流表项中 |
|
c.流表下发有两种方式 |
|
--主动流表下发:在数据包到达OpenFlow交换机之前就进行流表设置,消除数据传输过程中流表项设置延迟,不存在控制器每秒钟能够处理的流数量的限制,理想情况下控制器尽可能预扩散流表项 |
|
--被动流表下发:当OpenFlow交换机收到第一个数据包没有发现与之匹配的流表项时,将其交给控制器处理,一旦控制器确定了处理方式,相关信息返回并缓存在交换机,同时控制器将确定这些缓存信息的保存时限 |
|
|
|
北向业务支撑技术 |
|
REST API特征 |
|
a.可寻址性强 |
|
b.接口无状态 |
|
c.注重关联性 |
|
d.接口要统一 |
|
其他北向接口形式:java接口 |
|
OSGi--Open Service Gateway Initiative开放服务网关协议 |
|
|
|
东西向控制器扩展技术 |
|
1.控制器软件化使得服务器作为控制器载体,控制器集群也可以以服务器集群为基础进行搭建 |
|
2.服务器集群技术Hazelcast,集群通信机制JGroups |
|
3.重要考虑 |
|
a.主控制器的选举 一旦主控制器(master controller)出现失效,从副控制器(slave controller)选举一个新的主控制器 |
|
b.控制器集群对交换机的透明化 |
|
4.关键技术要点 |
|
a.主控制器选举 |
|
--集群中的副控制器周期性监控主控制器工作状态 |
|
--主控制器访问不可达时,启动主控制器选举过程 |
|
--选举算法 paxos分布式选举算法 |
|
b.集群虚拟地址 |
|
--利用传统负载均衡技术,实现控制器负载均衡 |
|
c.全网拓扑获取 |
|
--各控制器周期性进行链路发现 |
|
--主控制器汇总并统一下发给各个控制器 |
|
d.控制器失效应对 |
|
-- |
|
利用负载均衡技术,将指派给失效控制器的IP地址映射到其他工作正常的控制器 |
|
|
|
控制器设置要素 |
|
1.总述:OpenFlow支持,网络功能,网络编程功能,可靠性,集中监视和可视化,网络虚拟化,扩展性,性能,网络安全性 |
|
2.OpenFlow支持 |
|
a.OpenFlow交换机工作过程 |
|
--一个数据包到达OpenFlow交换机 |
|
--数据包头与交换机中的流表进行匹配域 |
|
--如果发现匹配项,则遵循流表项中规定的动作或指令被转发给相应端口或抛弃 |
|
--如果没有相应匹配项,交换机把数据包封装并发给控制器 |
|
--控制器决定如何处置数据包并告知交换机 |
|
b.基本功能 |
|
--支持OpenFlow协议数据包头中各个元组(tuple)的匹配 |
|
--支持OpenFlow协议中规定的各个数据包动作,如包头重写 |
|
--支持通过LLDP发现网络 |
|
3.网路虚拟化 |
|
a.传统网络虚拟化技术 |
|
--VLAN将一个以太网划分最多4094个彼此独立的二层广播域,以隔离不同类型的流量 |
|
--VRF(Virtual Routing and Forwarding,虚拟路由转发)是一种三层网络虚拟化技术,使得同一物理路由器能够支持多个拥有自有路由协议并维护自有转发表的虚拟路由器实例 |
|
b.SDN虚拟化要求 |
|
--必须是端到端的 |
|
--能像服务器虚拟化技术一样抽象和池化网络资源 |
|
--创建满足租户需求的、拓扑与底层物理网络解耦的虚拟网络 |
|
--动态创建基于策略(policy-based)的虚拟网络以满足广泛的需求 |
|
--在不影响现有数据流的前提下对物理网络进行调整(例如扩充容量) |
|
4.网络隔离功能 |
|
a.集中控制 |
|
b.自动配置 |
|
c.发现从流的源头到目的的多条通路,并将同一数据包流分散到这些通路上传输 |
|
5.扩展性 |
|
a.传统网络架构存在多个层次,其中三层路由主要用于实现多个二层网络的互联,这一做法使得端到端的通路上只存在一台或多台三层设备,导致扩展性不强 |
|
b.SDN使得网络管理人员能够在其需要时增加网络功能从而支持更好的扩展性,这就要求控制器能够对所有网络功能进行管理,就好像它们是同一台设备一样。 |
|
c.网络广播影响了SDN扩展性,在SDN应用过程中,必须要确保控制器能缓解网络广播造成的影响 |
|
d.流表项的增生也会限制SDN扩展性,如果不进行优化,SDN控制器就需要针对每个数据流产生逐跳的流表项,因此控制器必须最小化流表项的生成 |
|
6.性能 |
|
a.性能指标 |
|
--流表的设置时间 |
|
--每秒钟能处理的流表项数量 |
|
7.网络编程能力 |
|
a.传统网络环境中,对网络配置需要逐台设备进行,这种方式通常是静态的,设备的配置不会动态改变,严重影响网络运行效率 |
|
b.SDN关键特征之一是能够在控制器上提供编程接口 |
|
8.可靠性 |
|
9.网络安全性 |
|
10.集中监控和可视化 |
|
|
|
控制器实现分析 |
|
1.具备组件化的系统架构 |
|
2.采用高效的编程语言 |
|
3.支持的统一的资源管理 |
|
4.开展全面的性能评测 |
|
5.选择综合实力雄厚的技术产品 |
|
|
|
SDN应用类型 |
|
1.资源管理平台 |
|
主要是面向云计算资源统一管理和调配的平台,目标是实现池化的计算、存储、网络等资源的灵活交付,按需满足云计算业务的资源需求 |
|
2.软件定义的应用交付 |
|
基于SDN理念改造负载均衡、访问控制、应用加速等应用交付技术,使之能够替换或者扩展此前在传统网络中需要利用专用硬件实现的功能 |
|
3.创新网络业务 |
|
在传统的静态网络中难以实现,但是在SDN环境中获得良好支持的新业务 |
|
4.资源管理平台和软件定义的应用交付通常直接调用SDN控制器提供的北向接口API,可以根据应用需求直接驱动控制器调用底层的SDN网络能力。同时在扩展和封装控制器北向接口API的基础上,为多样化的创新网络业务(例如云计算领域的虚拟主机资源分配、多租户按需组网等服务)提供功能更全面、更易于使用的应用编程接口,供它们便捷调用网络能力 |
|
|
|
OpenStack平台的Quantum组件分析 |
|
1.OpenStack--开源云计算管理平台 |
|
2.七大核心组件 |
|
a.计算(Compute)组件Nova 提供按需交付的虚拟机资源 |
|
b.镜像存储(Image)组件Glance 提供用于保存虚拟磁盘镜像文件的目录和空间,通常与计算模块一块应用 |
|
c.对象存储(Object Storage)组件Swift 提供文件的保存和获取功能,使用该组件无需额外进行文件路径的挂载操作 |
|
d.块存储(Block Storage)Cinder 为用户虚拟机提供持久化的块存储资源 |
|
e.网络服务(Network)组件Quantum 支持将网络连接作为服务向用户提供,满足其他OpenStack组件所需的网络链接要求 |
|
f.仪表盘(Dashboard)组件Horizon 为所有的OpenStack服务提供模块化的基于Web的用户界面 |
|
g.身份识别(Identity)组件Keystone 为所有的OpenStack服务提供授权和认证 |
|
|
|
Quantum特征和实现原理 |
|
1.丰富的Quantum API |
|
a.网络:隔离的二层网段,与物理网络的VLAN类似 |
|
b.子网:一组IPv4或者IPv6地址段和相关配置状态 |
|
c.端口:将单个设备挂接到虚拟网络的连接点及相关的网络配置 |
|
2.灵活的技术选择 |
|
3.将云计算数据中心的网络资源抽象为网络、子网、端口三类型 |
|
|
|
OpenStack Quantum的基本功能 |
|
1.四类物理网络 |
|
a.管理网络 用于OpenStack组件之间的内部通信,该网络中的IP地址只能是数据中心内部可达 |
|
b.数据网络 用于云环境中部署虚拟机之间的数据通信,具体的IP寻址需求需要根据网络插件决定 |
|
c.外部网络 用于提供虚拟机对外部互联网的访问,IP地址需要被互联网上任意节点可达 |
|
d.API网络 用于将OpenStack API交付给用户,该网络中的IP地址需要是互联网可达,有可能与外部网络是同一网络,也有可能在外部网络中指定IP地址分配范围以创建一个子网 |
|
2.OpenStack中典型链接拓扑形式 |
|
a.单个平坦网络 |
|
--API使用到它 |
|
--租户虚拟机具有一个单独的NIC,并具有一个属于网络中相关子网的固定的IP地址,这个网络可以被映射为在OpenStack Compute服务中提出的FlatManager和FlatDHCPManager模型 |
|
--不支持浮动IP地址,即租户虚拟机的IP地址是固定的 |
|
--由管理员创建并被直接映射到一个数据中心已有的物理网络中 |
|
--允许供应商将数据中心中的物理路由器作为网关供虚拟机到达外部网络 |
|
b.多个平坦网络 |
|
--与单个平坦网络类似,但租户可以通过API看到多个共享网络,并选择插入哪一个网络中 |
|
c.基于平坦网络的私有网络 |
|
--租户可选地访问私有的仅属于自己的租户网络 |
|
--在虚拟机创建过程中,虚拟机既可以拥有位于任何共享网络中的NIC,也可以拥有只属于其所在租户的私有网络 |
|
--支持将一台虚拟机作为网关模型,其中虚拟机能提供路由、NAT、负载均衡等服务 |
|
d.基于同一供应商路由器的私有网络 |
|
--为每个租户提供一个或多个私有网络,这些网络可以通过Quantum路由器与外界联通 |
|
--每个租户都有能精确地映射到和OpenStack计算组件服务中提供的VlanManager中具有相同逻辑拓扑的网络 |
|
--使用Quantum API,租户只能看到指派给自己的私有网络 |
|
e.基于租户自有路由器的私有网络 |
|
3.SLA--Service Level Agreement服务水平协议 |
|
|
|
Mininet支持操作 |
|
1.查看全部节点 |
|
mininet> nodes |
|
2.查看链路信息 |
|
mininet> net |
|
3.输出各节点的信息 |
|
mininet> dump |
|
4.对某个节点单独操作 |
|
mininet> node cmd |
|
5.自定义拓扑 |
|
6.指定远程控制器 |
|
|
|
Mininet启动参数列表 |
|
-h,--help 显示帮助信息 |
|
--switch=SWITCH 设置交换机类型 |
|
--host=HOST 设置主机进程 |
|
--controller=CONTROLLER 设置控制器类型 |
|
--topo=TOPO 设置拓扑 |
|
-c,--clean 清除并结束 |
|
--custom=CUSTOM 从.py文件中读取定制参数 |
|
-x,--xtrems 为每个节点打开xterm |
|
--mac 设置MAC地址等于DPID |
|
--arp 设置ARP对 |
|
--ip=IP 设置远程控制器IP |
|
--port=PORT 设置远程控制器侦听端口 |
|
|
|
Mininet命令行接口 |
|
help 默认列出所有命令文档,后面加命令行将介绍该命令用法 |
|
dump 打印节点信息 |
|
gterm 给定节点上开启gnome-terminal |
|
xterm 给定节点上开启xterm |
|
intfs 列出所有的网络接口 |
|
iperf 两个节点之间进行简单的iperfTCP测试 |
|
iperfudp 两个节点之间用指定带宽udp进行测试 |
|
net 显示网络链接状态 |
|
noecho 运行交互式窗口,关闭回应(echoing) |
|
source 从外部文件读入命令 |
|
dpctl 在所有交换机上用dpctl执行相关命令,本地为tcp 127.0.0.1:6634 |
|
link 禁用或启用两个节点之间的链路 |
|
nodes 列出所有节点信息 |
|
pingall 所有host节点之间互ping |
|
py 执行python表达式 |
|
sh 运行外部shell命令 |
|
quit/exit 退出 |
|
|
|
互联网总体概述 |
|
1.由IP网,移动网,互联网数据中心,企业网构成 |
|
2.IP根据延伸距离及用于连接节点与网络的设备类型不同,可以分为骨干网、城域骨干网、接入网 |
|
a.骨干网 连接国家间或城市之间的网络,是国家批准的可以直接和国外连接的互联网 |
|
b.城域骨干网和接入网 作为骨干网络在本地的延伸,是城市范围的IP网络,主要承载数据、图像、多媒体、IP接入和各种增值业务及智能业务 |
|
3.移动网 用来满足移动通信业务需求而建设的网络 |
|
a.主要包括基站、移动回传网、移动核心网 |
|
b.移动回传网 面向3G/LTE业务需求的综合业务承载网络,主要实现移动基站BTS(Base Transceiver Station,基站收发台)、eNodeB(EvolvedNodeB,演进型NodeB,LTE中基站名称)等基站接入及流量的汇聚 |
|
c.移动核心网 |
|
--实现接入终端注册、用户认证、控制和转发等策略制定、计费信息统计、基站管控等功能 |
|
--相关设备包括BSC(Base Station Controller,基站控制器)、PCF(Packet Control Function,分组控制器)、MME(Mobility Management Enity,移动性管理实体)、S-GW(Service Gateway,服务网关)、HSS(Home Subscriber Service,归属签约用户服务器)、PCRF(Policy And Charging Rules Function,策略和计费控制单元) |
|
d.互联网数据中心(IDC) |
|
--一种拥有完善的设备、专业化管理、完善的应用级服务的服务平台 |
|
--两个显著特征:在网络中的位置、总的网络带宽容量 |
|
e.企业网 |