% !TEX root = ../bachelor-thesis.tex

\chapter{实验验证与分析}
\label{chap:实验验证与分析}

本章主要介绍系统的实现情况及实验结果。\ref{sec:实验环境} 节介绍本文提出的设计方案的实现情况及实验环境与实验设置等基本信息，\ref{sec:实验结果} 节展示了实验结果，并对实验现象及其原因进行了分析。

\section{实验环境}
\label{sec:实验环境}

本文使用Rust语言实现了设计的分布式转发与控制系统，实现了动态FEC编解码、丢包统计及参数自动计算等所有核心设计要点。本文实验在一台配备两颗Intel Xeon E5-2620 v3处理器的服务器上进行。服务器共搭载~\SI{64}{GiB} 运行内存。本文中的实验使用Rattan\cite{wang2025rattan}对网络上的丢包，延迟及带宽限速进行模拟。在实验中，多台不同的虚拟机通过虚拟交换机互联，并在每台虚拟机的虚拟出口使用Rattan对网络流量进行处理，以达成对链路延迟、丢包带宽等不同性质的模拟。如图~\ref{fig:实验拓扑}，在实验中，共使用三台虚拟机（记作A，B，C）作为转发以及用户接入客户端，使用另外一台虚拟机作为控制器。利用控制器建立A经由B到达C的链路，其中AB间的链路为模拟低质量链路，存在丢包，往返时延~\SI{50}{ms}；BC间的链路为模拟高质量链路，不存在丢包，往返时延~\SI{50}{ms}。两条链路的带宽均为~\SI{100}{Mbps}。通过调整AB间链路的丢包率并测量AC之间的传输性能，可以测量本文提出的方法与直接进行转发的基准方案的性能，并进行对比。

实验时，AB链路分别选取0至2\%范围内的不同丢包率，分别使用本文提出的动态链路优化算法与直接进行转发的方法在A、C间使用iperf3进行测速，持续~\SI{60}{s}，并记录收端的接收速率。

\begin{figure}[H]
    \centering
    \includegraphics[width=.8\linewidth]{exp_topology.drawio.pdf}
    \caption{实验建立的网络拓扑}
    \label{fig:实验拓扑}
\end{figure}

该实验拓扑用于模拟跨域覆盖网络中常见的分段质量不均衡场景：端到端路径由多段覆盖网络链路组成，其中只有部分片段存在明显丢包，而其他片段仍保持较好质量。通过仅在AB段注入丢包、保持BC段无丢包，实验可以观察本文方法是否能够将修复行为限制在低质量链路片段上，而不是对整条端到端路径统一加入冗余。直接转发方案作为基准方案，使用与本文方法相同的A-B-C覆盖网络路径和相同的链路参数，但不启用FEC编码、解码和动态参数调整。两种方案的差异仅在于是否使用本文提出的片段级链路质量修复机制，因此可以用于比较该机制对端到端传输性能的影响。

本文选取端到端吞吐量作为主要评价指标。对于基于TCP的文件传输或可靠数据传输业务，吞吐量能够直接反映链路丢包、恢复机制和额外冗余开销对应用可用带宽的综合影响。若片段级FEC能够有效降低端到端连接感知到的丢包，则发送端可以维持更高的发送速率；反之，若残余丢包较多或冗余开销过大，最终吞吐量仍会下降。因此，端到端吞吐量可以同时体现本文方法的丢包修复效果和额外带宽开销。

\section{实验结果与分析}
\label{sec:实验结果}

实验结果如图~\ref{fig:实验结果图}所示。图~\ref{fig:吞吐绝对值} 展示了不同丢包率下两种方法的端到端吞吐量，图~\ref{fig:吞吐相对提升} 展示了不同丢包率下本文方法相对于直接转发基准方案的吞吐提升程度。

\begin{figure}[H]
    \centering
    \subcaptionbox{不同丢包率下的端到端吞吐量\label{fig:吞吐绝对值}}
      {\includegraphics[width=0.48\linewidth]{thpt_absolute.pdf}}
    \hspace{0.02\linewidth}
    \subcaptionbox{相对于基准方案的吞吐提升\label{fig:吞吐相对提升}}
      {\includegraphics[width=0.48\linewidth]{thpt_speedup.pdf}}
    \caption{不同丢包率下本文方法的吞吐性能提升}
    \label{fig:实验结果图}
\end{figure}

从图~\ref{fig:吞吐绝对值} 可以看到，在无丢包链路中，直接转发与本文方法都能够接近实验链路的带宽上限，吞吐量分别为~\SI{92.1}{Mbps} 和~\SI{90.9}{Mbps}。这说明在链路质量良好时，本文系统引入的虚拟网卡、UDP隧道、流标识和普通转发逻辑本身没有造成明显的性能损失。本文方法相比直接转发低约~\SI{1.3}{\percent}，主要来自额外包头和转发处理开销。由于该开销在无丢包场景下已经能够直接观测到，而在存在丢包时本文方法带来的吞吐提升显著大于这一差距，因此可以认为系统基础转发开销不会掩盖后续FEC修复带来的性能收益。

随着AB段链路丢包率升高，直接转发的吞吐量迅速下降。当丢包率为~\SI{0.2}{\percent} 时，直接转发吞吐量已经从~\SI{92.1}{Mbps} 下降至~\SI{42.5}{Mbps}；当丢包率进一步升高到~\SI{1}{\percent} 和~\SI{2}{\percent} 时，吞吐量分别只有~\SI{18.9}{Mbps} 和~\SI{12.7}{Mbps}。这一趋势符合TCP类可靠传输协议对丢包较为敏感的特点：在实验拓扑中，AB链路上的随机丢包会被端到端连接感知为网络拥塞，发送端随之降低拥塞窗口和发送速率；同时，由于A到C的端到端路径包含两个~\SI{50}{ms} 往返时延的链路片段，丢包后的恢复和发送速率回升都需要经历较长反馈周期。因此，即使底层链路的带宽上限仍为~\SI{100}{Mbps}，少量丢包也会明显降低应用层实际可用吞吐。

相比之下，本文方法在有丢包条件下能够维持更高的端到端吞吐量。当AB段丢包率为~\SI{0.2}{\percent}、~\SI{0.5}{\percent}、~\SI{1}{\percent} 和~\SI{2}{\percent} 时，本文方法的吞吐量分别为~\SI{61.7}{Mbps}、~\SI{59.8}{Mbps}、~\SI{54.8}{Mbps} 和~\SI{45.3}{Mbps}，均显著高于直接转发。对应地，图~\ref{fig:吞吐相对提升} 表明，本文方法相对于直接转发的吞吐提升从~\SI{0.2}{\percent} 丢包时的约~1.45倍，逐渐提高到~\SI{2}{\percent} 丢包时的约~3.6倍。也就是说，底层公网链路质量越差，直接转发越难以维持稳定吞吐，而片段级FEC修复越能够体现出对低质量链路的补偿效果。

这一结果验证了本文方法对不同链路片段进行差异化处理的有效性。通过查阅控制器日志可以发现，本文方法正确识别了两条链路中的不同丢包率，并在丢包严重的AB段链路上启用了FEC，在没有丢包的BC段链路上则始终使用普通转发。这一点与本文的设计目标一致：系统并没有将A到C的整条路径都视为一条低质量链路，也没有在质量良好的BC段继续添加冗余流量，而是将额外带宽开销限制在真正发生丢包的AB片段上。因此，实验不仅说明FEC能够提升端到端吞吐，也说明覆盖网络中间节点对链路片段的独立控制能力可以被用于实现更细粒度的质量修复。

从吞吐曲线的形状还可以看出，本文方法在丢包率升高后的下降程度明显低于直接转发。直接转发曲线随丢包率增加持续陡峭下降，而本文方法在~\SI{0.2}{\percent} 至~\SI{1}{\percent} 的丢包范围内保持在约~\SI{55}{Mbps} 至~\SI{62}{Mbps} 之间。这说明动态FEC参数调整机制能够根据测量得到的丢包统计选择更合适的冗余强度，使修复后的残余丢包率维持在相对稳定的范围内。换言之，虽然底层AB链路的原始丢包率持续恶化，但上层TCP连接实际感知到的丢包变化被片段级修复机制削弱，因此端到端吞吐没有像直接转发一样快速退化。

不过，本文方法的吞吐量仍然低于无丢包条件下的吞吐量，这反映了FEC修复带来的两类代价。第一，冗余包会占用AB段链路的一部分传输能力，使有效数据能够使用的带宽低于物理链路带宽。丢包率越高，系统为了达到目标残余丢包率需要使用更强的冗余参数，冗余流量占比也会随之上升。第二，FEC并不能保证恢复所有丢包。当同一恢复单元内发生超过编码能力的丢包时，解码端仍然无法恢复全部原始数据包，这些残余丢包最终会被端到端传输协议感知，并触发发送端的发送速率下降逻辑。因此，本文方法的性能上限受到冗余开销和残余丢包的共同影响：较低冗余会留下更多残余丢包，较高冗余又会占用更多带宽，动态参数调整需要在二者之间取得平衡。

% 实验结果也说明，本文方法更适用于公网链路已经出现明显丢包、直接转发性能受到限制的场景。在无丢包链路上，本文方法只能保持接近直接转发的性能，并不会带来额外吞吐收益；而当链路出现~\SI{0.2}{\percent} 以上丢包时，片段级修复开始显著改善端到端吞吐。该现象与本文的研究动机一致：本文并不是试图在所有链路上无条件启用冗余，而是希望在公网链路质量下降、但仍具有可用带宽时，通过低质量片段上的冗余修复将这部分链路重新转化为可承载高质量传输的资源。

总体而言，上述实验从两个方面验证了本文提出的方法。首先，系统能够区分同一路径中不同链路片段的质量差异，只在低质量AB段启用FEC修复，在高质量BC段保持普通转发，验证了片段级质量修复的可行性。其次，在链路丢包率从0升高到~\SI{2}{\percent} 的过程中，本文方法能够随链路状态变化调整冗余参数，使端到端吞吐始终显著高于直接转发，验证了自适应参数调整机制的有效性。实验中的最高吞吐提升约为3.6倍，表明在跨域公网链路质量不稳定的场景下，利用覆盖网络内部可控节点进行分段修复能够有效缓解丢包对传输性能的影响。

