63 lines
15 KiB
TeX
63 lines
15 KiB
TeX
% !TEX root = ../bachelor-thesis.tex
|
||
|
||
\chapter{背景介绍与相关工作}
|
||
|
||
\section{云网络与覆盖网络}
|
||
|
||
云网络的核心思想是服务商将计算和网络基础设施作为一种服务进行售卖(Infrastructure as a Service, IaaS)的新型计算范式\cite{azodolmolky2013cloudnetworking}。它的核心思想是云网络的服务商出资搭建数据中心并购买网络网络资源将数据中心内的计算、存储等单元连接互联网,其他服务提供商或者个人用户可按需要购买云服务商中提供的资源,并通过互联网访问。与传统的网络依赖与本地硬件进行部署不同,云网络通过虚拟机、虚拟路由器、虚拟交换机、负载均衡、虚拟防火墙等多种技术将已有的物理网络和计算资源抽象为虚拟化的计算资源,提供给不同的用户进行访问。通过网络虚拟化技术,云网络同时减少了计算资源的提供商与用户的成本,因为云网络的虚拟化特性使得资源可以按需用户需求动态分配与计费,用户只会为自己真正使用的资源付费,而云服务商可以通过对虚拟资源在硬件上的整合避免资源分配后的浪费,高效地满足所有用户的资源需求,降低运营成本\cite{luong2017cloudnetworksurvey}。
|
||
|
||
在云网络模型下,用户所能访问的几乎所有资源如计算资源、存储资源以及网络互联资源都是虚拟资源而非物理资源。在云网络中,云服务器、云存储等实例可能分布在不同的物理节点上,所有的资源都需要通过高质量的网络进行互联,因此高性能的虚拟网络是云网络的基础\cite{mogul2012cloudnetworkperf}。
|
||
|
||
覆盖网络(Overlay Network)是一种广泛应用于云网络结构的网络虚拟化设计,它基于物理的底层网络(Underlay Network)上通过对资源的逻辑整合而形成的逻辑网络。如图\ref{fig:overlay网络示意},覆盖网络在已有的硬件网络上构建一个虚拟的网络层,使得使用云网络服务的企业和用户可以获得更灵活与稳定的虚拟网络连接。近年来,企业对虚拟化和云网络的需求不断增长,因而将分布在全球各地的云资源进行互联的需求也不断提升。不同的云资源所处的基础设施可能出现异构的情况,使用覆盖网络可以有效地将这些区别隐藏在相同的虚拟网络层抽象之后,极大地简化了部署和配置网络的成本。
|
||
|
||
\begin{figure}[htbp]
|
||
\centering
|
||
(覆盖网络从underlay中构建的图,仿照tcf论文)
|
||
\caption{覆盖网络基于底层网络,将各类物理网络资源抽象为一个虚拟的网络层}
|
||
\label{fig:overlay网络示意}
|
||
\end{figure}
|
||
|
||
覆盖网络的实现依赖于隧道封装技术,其基本原理是将原始的二层或三层报文封装在另一种网络协议中进行传输,从而在底层的IP网络上构建虚拟的二层网络。当前主流的Overlay隧道技术主要包括VXLAN\cite{rfc7348vxlan}、NVGRE\cite{rfc7637nvgre}和Geneve\cite{rfc8926geneve}等,它们在封装格式、协议机制和适用场景上各有特点。
|
||
|
||
VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网)\cite{rfc7348vxlan}是由IETF制定的虚拟网络技术之一,广泛应用于在数据中心和云网络中。VXLAN通过MAC over UDP的方式,将二层的以太网帧封装在UDP报文中通过公网传递,对虚拟的二层网络在三层网络的基础上进行扩展。VXLAN使用24比特的虚拟网络标识(VXLAN Network ID, VNI)来区分不同的虚拟以太网,可以突破传统VLAN的4096个虚拟网络数量限制,提供约1600万个各自独立的虚拟局域网。VXLAN协议将普通的二层网络数据帧添加上VXLAN的包头,之后再将数据包装上外层的以太网、IP和UDP报文头后发送至公网。VXLAN包的封装和解封装由VXLAN隧道端点(VXLAN Tunnel End Point)进行,VTEP负责将从虚拟机进入隧道的包进行封装,也负责将从隧道接收到的包进行解封装后交付给虚拟机。这使得VXLAN隧道对虚拟机透明,便于与其他网络系统集成。VXLAN利用已有的UDP传输机制在网络中建立隧道,成熟度高,当前已广泛应用于数据中心。
|
||
|
||
NVGRE(Network Virtualization using Generic Routing Encapsulation,基于路由封装的网络虚拟化)\cite{rfc7637nvgre}是另一种主要的虚拟隧道协议。该协议主要应用于微软的Hyper-V虚拟环境中\cite{microsoft_nvgre}。NVGRE将二层的MAC包封装在GRE隧道包内通过公网传递,利用GRE协议中的Key字段传递包所属的虚拟子网标识(Virtual Subnet ID, VSID)以及流标识(FlowID)。NVGRE同样以24比特标识虚拟网络的名称,因此也可以支持最多约1600万个虚拟子网。同时,NVGRE支持在同一子网内进一步通过流标识来区分不同的数据流,为更精细地管理流量和流量均衡提供了支撑。然而,这要求物理网络设备具备识别和处理这些字段的能力,对在公网部署带来了一定的挑战。
|
||
|
||
Geneve(Generic Network Virtualization Encapsulation,通用虚拟化网络封装技术)\cite{rfc8926geneve}是IETF新提出的通用网络虚拟化封装协议,旨在以单一、可扩展的封装格式取代碎片化的VXLAN、NVGRE等多种隧道协议,以维持生态统一。Geneve也采用MAC over UDP的封装,通过灵活配置的元数据传递机制满足多种网络虚拟化需求。Geneve也使用24比特的虚拟网络标识(Virtual Network Identifier, VNI)来区分不同的虚拟网络,支持的网络数量与VXLAN、NVGRE等协议相当。与VXLAN等协议不同,Geneve允许在头部后添加可变长度和数量的控制位和控制信息,可以有效满足不同虚拟网络的需求,增强了可扩展性。Geneve协议通过设计可选的元数据空间,允许在不修改协议的前提下引入新功能,自推出以来已经逐步得到各类虚拟网络平台的支持\cite{ovn_geneve,vmware_nsxt_geneve},但是协议较为复杂,适配难度较大。
|
||
|
||
\section{链路质量优化}
|
||
|
||
低质量的互联网链路由于负载较大出现拥塞或部分设备运行故障,容易出现丢包或者延迟波动。在这些低质量的链路上进行传输时,即使链路还有可用的传输带宽,也会出现丢包或是延迟波动。即使TCP\cite{rfc9293tcp}等可靠传输协议通过重传确保了所有数据都能可到送达,但性能较差。这是因为TCP协议依靠超时重传来在确保所有数据都最终送达至接收端,即使使用了基于重复ACK的快速重传机制,恢复单个丢失的包也至少要经历接收端检测丢包——请求发送端重传——发送端重传包送达恢复的过程,至少需要一个往返时延(Round Trip Time, RTT)才能恢复。对于一条在云网络中的跨域链路,往返时延可能达到\SI{300}{ms}或更长,如此缓慢的丢包恢复不仅会阻塞后续数据包的发送,也会极大地影响实时媒体服务如影视直播、视频通话等应用的用户体验。
|
||
|
||
针对此问题,研究者们提出了多种解决方案,其中前向纠错编码(Forward Error Correction, FEC)被广泛地用于应对链路传输中的丢包。其基本思想是,在发送数据时直接加入一部分冗余信息,以确保在部分信息丢失时,接收端无需请求发送端重新传送任何信息,而可以利用已经接收到的信息配合冗余信息推算出丢失的信息。使用前向纠错编码进行丢包恢复时,与重传机制需要经历一整个往返时延的长时间反馈路径不同,利用前向纠错编码的冗余包进行恢复只需要等待后续冗余包送达后即可进行,错误恢复时间短,能更好地适应延迟敏感型应用如视频通话等应用的需求。
|
||
|
||
为了实现高效地前向纠错编码,研究者们提出了多种编码方式,它们针对不同的目标进行了设计和优化。
|
||
|
||
早期的FEC工作主要通过对时间敏感的数据包进行简单地复制和多次传输进行错误恢复。如图\ref{fig:早期FEC}所示,通过将每个数据包复制多份,每次发送新的数据的同时,在同一个数据包中同时捎带发送之前已经发送过的一些数据包,这样可以在一部分数据包丢失的同时仍旧确保接收端收到了所有数据。Bolot等人\cite{bolot1999adaptivefec}基于此思路提出可以利用实时语音通话应用中已经存在的平均丢包率监控字段对传输链路的丢包模式和丢包律进行估计,从而动态地选重复发送包的发送间隔和次数,优化通话用户的用户体验。之后Gandikota等人\cite{gandikota2008multipathfec}在此基础上提出可以通过多路径传输,进一步提升冗余包和原始数据包中至少有一个送达的概率。Gandikota等人在工作中提出通过估算网络中的丢包率,动态地调整冗余参数以实现对语音流中的重要子流进行保护,同时再将编码后的数据包以及其他次要子流经过两个最大程度节点不相交路径在网络上与重要数据流分开传输,以降低数据传输丢失概率、提升用户体验。Huang等人\cite{huang2010skypefec}通过测量Skype应用在不同丢包网络条件下的行为,印证了相关冗余编码在提升实时语音通话用户体验方面的积极作用。
|
||
|
||
\begin{figure}[htbp]
|
||
\centering
|
||
\includegraphics[width=.6\linewidth]{naive_fec_ref_pic.jpg}
|
||
\caption{早期FEC工作将冗余信息附加在后续发出的包中进行发送}
|
||
\label{fig:早期FEC}
|
||
\end{figure}
|
||
|
||
通过重复发送数据包的方式添加冗余虽然简单,但是会带来较高的冗余开销,为了提高冗余信息的恢复效率,研究者们进一步提出了基于纠删码(Erasure Code)的前项纠错机制。XOR码和R-S码是较为主要的冗余纠错恢复机制。这两种编码都是线性分组码,将原始数据分为$n$个数据包一组,对于每一组数据再加入$k$个冗余数据包并将$n + k$个数据一并发送,接收端同样以组为单位进行丢包的恢复。
|
||
|
||
在XOR编码中,$n$可以为任意值,而固定$k = 1$,冗余包通过将所有组内的数据包按位进行异或运算得到。如果接收端只接收到了一组数据包共$n + 1$个包中的$n$个,则丢失的包可以通过对已经接收到的包按位进行异或运算恢复得到。XOR编码可以在一组数据共$n + 1$个包丢失任意一个时通过剩余的$n$个包将丢失的包恢复,但是如果丢失了两个或更多包,则完全不能恢复丢失的数据。XOR码的计算简单,冗余包生成和丢失数据包恢复都只需要使用异或运算即可完成,运算开销小,但是只能恢复固定模式的少量丢包,面对组内多个丢包的情况效果有限。
|
||
|
||
为应对XOR编码的缺点,在1960年,Reed与Solomon提出了R-S编码\cite{reed1960rscode},通过对一组共$n$个数据包在有限域上进行运算,计算出$k$个额外的冗余包。R-S编码保证,对于$n$个数据包和$k$个计算出的冗余包共$n + k$个数据包,接收端只要接收到了其中的任意$n$个,就能完整地恢复出所有的原始数据包。相较于XOR编码,R-S编码的恢复能力有较大的提升,能够在同一个编码组里出现较多的丢包的恶劣情况下进行恢复,从能承受最多1个丢包增加至能承受最多$k$个丢包。RS编码被广泛用于传输音视频流媒体,Lin等人\cite{bolot1999adaptivefec}通过在物理层上对数据包进行FEC编码,提升了视频传输的效果。更多的其他研究者选择结合视频编码自身以帧和画面组(Group of Pictures, GOP)进行编码的特性,进行FEC编码以提升视频传输质量。Shih等人\cite{shih2016framefec}通过对视频中的关键帧进行FEC保护,提升了关键帧以及后续多个依赖关键帧的画面质量,有效提升了视频传输质量。Xiao等人\cite{xiao2012subgopfec}使用贪心算法动态决定每个冗余组需要包含的帧数量及冗余度,在不牺牲延迟的情况下提升了视频质量。Yang等人\cite{yang2003qualitygopfec}通过估算不同的数据包丢包后对解码视频的影响时间,动态选择FEC参数以提升用户的视频观看体验。Kurdoglu等人\cite{kurdoglu2017fecwithquantation}则将FEC冗余率与编码帧率、编码量化参数及编码方式等联合优化,以最佳化用户观看体验而非追求更高的单一量化指标。总体而言,R-S编码相比简单复制冗余具有更高的冗余恢复效率,因此被广泛应用于实时音视频传输等场景。
|
||
|
||
然而,R-S编码通常以固定大小的数据组为单位进行编码与恢复,其恢复能力依赖于单个编码组中的丢包数量不超过冗余包数量$k$。实际网络上的丢包并不是独立的,在部分链路上可能由于链路拥塞、无线信号衰减等原因出现连续的突发丢包。在这些场景下如果使用R-S编码进行丢包恢复,为了能成功恢复数据,必须按照最差的可能情况决定$n$与$k$的相对取值,而这通常使得算法对网络的状况产生过于悲观的估计,为了应对短暂出现的连续丢包而将$k$的值始终维持在较高水平。这导致在其他未遭遇连续丢包的数据组中,大量的冗余包被浪费,占用了传输带宽而未能有效地提升传输质量。为解决此问题,研究者们提出了交织(Interleave)技术。如图\ref{fig:交织示意图}所示,交织技术将多个编码组交替地在网络上发出,使得当传输过程中出现了连续丢包时,丢包被分散在多个不同的编码组中分别应对,使得单个编码组需要应对的丢包比例大大下降,从而降低了整体需要的冗余率。
|
||
|
||
\begin{figure}[htbp]
|
||
\centering
|
||
\caption{交织编码示意}
|
||
\label{fig:交织示意图}
|
||
\end{figure}
|
||
|
||
\section{软件定义网络}
|
||
|
||
随着现代网络应用的快速发展,云网络用户遍布全球,网络内部需要传输数据量不断提升,且跨域传输的流量快速增长。如何在跨域传输场景下提升网络的传输可靠性与传输性能是当前研究的重点。跨域云网络服务通常涉及来自世界不同地区的复杂接入请求,交织复杂的流量调度需求和对流量和链路状态变化的动态响应,直接使用传统的物理网络进行传输难以依照不同用户的不同服务质量需求快速调整传输时网络的流量管理能力,而使用覆盖网络则允许云网络服务商通过集中控制覆盖网络中的各节点行为,综合多种标准如节点负载、链路质量等,灵活地对流量进行调度,以达成稳定高效传输的目标。
|
||
|
||
覆盖网络的概念最初由Anderson等人提出\cite{andersen2001RON}。该工作提出了将公网中并不直接相连的一些节点重新抽象为一个覆盖网络中的相邻节点,称为RON节点。各个RON节点之间通过公网建立连接,形成Overlay网络中的虚拟链路。除了转发功能,RON节点间还可以通过主动探测的方式,对建立虚拟链路所依靠的物理链路质量进行实时测量,并将测量结果汇总至控制器。当客户端希望通过RON网络进行连接时,控制器将将综合考虑覆盖网络中所有可用的连接的质量,选择最符合客户端的传输需求的链路对流量进行调度。 |