Files
NE_YuR/network/tcpquiclab/README_LINUX_CN.md
2025-12-25 14:33:29 +08:00

3.2 KiB
Raw 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 & 3.4 进阶测试

  • 多路复用: 当前的 quic_perf_client 使用单个流 (Stream ID 4)。您可以修改代码并行启动多个流,以测试 QUIC 解决队头阻塞问题的能力。
  • 网络恢复: 在长传输过程中,使用 tc 设置 100% 丢包 (loss 100%) 持续 30 秒,然后删除规则 (del),观察连接是否能恢复传输。