Files
NE_YuR/network/tcpquiclab/README_LINUX_CN.md
2026-01-10 10:54:46 +08:00

3.9 KiB
Raw Permalink Blame History

计算机网络实验TCP 与 QUIC 协议对比 (Linux 指南)

本指南根据 Windows 版本的实验手册,针对 Linux 环境进行了适配。

1. 预备工作

确保已安装以下工具和库:

  • gcc (编译器)
  • quiche 库 (已安装头文件和共享库/静态库)
  • openssl (用于生成证书)
  • tcpdumpwireshark (用于抓包)
  • iproute2 (用于 tc 流量控制)

2. 编译

使用提供的 Makefile 编译所有程序:

make

这将生成以下可执行文件:

  • tcp_server, tcp_client (任务一:基础 TCP)
  • quic_server, quic_client (任务二:基础 QUIC)
  • tcp_perf_server, tcp_perf_client (任务三TCP 性能测试)
  • quic_perf_server, quic_perf_client (任务三QUIC 性能测试)

注意:如果编译报错提示找不到 quiche.h 或库文件,请修改 Makefile 中的路径,指向您本地 quiche 安装的 includelib 目录。

3. 任务一:基础 TCP 客户端-服务器

  1. 启动服务器:

    ./tcp_server
    
  2. 运行客户端 (在新的终端窗口)

    ./tcp_client
    

    预期输出: 客户端发送消息,服务器接收并回复。

4. 任务二:基础 QUIC 客户端-服务器

  1. 启动服务器:

    ./quic_server
    
  2. 运行客户端 (在新的终端窗口)

    ./quic_client
    

    预期输出: 完成 QUIC 握手,客户端发送流数据,服务器回显数据。

5. 任务三:性能分析

3.1 连接建立时间

  1. 在回环接口 (lo) 上开始抓包:

    sudo tcpdump -i lo -w handshake.pcap
    

    (或者使用 Wireshark 监听 lo 接口)

  2. 再次运行 TCP 或 QUIC 的客户端/服务器程序。

  3. 使用 Wireshark 打开 handshake.pcap,分析从第一个包 (TCP 的 SYN 或 QUIC 的 Initial) 到握手完成的时间差。

3.2 吞吐量测试 (100MB 传输)

基准测试 (正常网络)

  1. 运行 TCP 性能服务器:./tcp_perf_server
  2. 运行 TCP 性能客户端:./tcp_perf_client
  3. 记录输出的 MB/s 吞吐量。
  4. 重复上述步骤测试 QUIC (./quic_perf_server, ./quic_perf_client)。

模拟网络环境 (丢包 / 延迟)

在 Linux 下我们使用 tc (Traffic Control) 的 netem 模块,替代 Windows 下的 clumsy 工具。

场景 A: 5% 丢包率

  1. 设置回环接口 5% 丢包:
    sudo tc qdisc add dev lo root netem loss 5%
    
  2. 再次运行性能测试程序。
  3. 重要: 测试结束后删除规则!
    sudo tc qdisc del dev lo root
    

场景 B: 100ms 延迟

  1. 设置 100ms 延迟:
    sudo tc qdisc add dev lo root netem delay 100ms
    
  2. 再次运行性能测试程序。
  3. 删除规则:
    sudo tc qdisc del dev lo root
    

3.3 进阶测试:多路复用与多连接对比

本实验任务要求对比 TCP 多连接与 QUIC 多流复用的性能。

场景 1: TCP 多连接并发 同时建立 5 个 TCP 连接,每个连接传输 20MB 数据 (总计 100MB)。

  1. 启动 TCP 多连接服务器:
    ./tcp_multi_server
    
  2. 启动 TCP 多连接客户端:
    ./tcp_multi_client
    
  3. 记录服务器输出的总时间与吞吐量。

场景 2: QUIC 单连接多流复用 建立 1 个 QUIC 连接,在其中同时开启 5 个流 (Stream),每个流传输 20MB 数据 (总计 100MB)。

  1. 启动 QUIC 多流服务器:
    ./quic_multi_server
    
  2. 启动 QUIC 多流客户端:
    ./quic_multi_client
    
  3. 记录服务器输出的统计数据。

分析重点:

  • 在正常网络下,两者的总耗时差异。
  • 使用 tc 模拟丢包 (如 5%) 后对比两者性能下降的幅度。QUIC 的多流复用应能避免 TCP 的“队头阻塞”问题 (即一个包丢失不影响其他流的传输),从而在丢包环境下表现更优。

3.4 网络恢复测试