3.9 KiB
3.9 KiB
计算机网络实验:TCP 与 QUIC 协议对比 (Linux 指南)
本指南根据 Windows 版本的实验手册,针对 Linux 环境进行了适配。
1. 预备工作
确保已安装以下工具和库:
gcc(编译器)quiche库 (已安装头文件和共享库/静态库)openssl(用于生成证书)tcpdump或wireshark(用于抓包)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 安装的 include 和 lib 目录。
3. 任务一:基础 TCP 客户端-服务器
-
启动服务器:
./tcp_server -
运行客户端 (在新的终端窗口):
./tcp_client预期输出: 客户端发送消息,服务器接收并回复。
4. 任务二:基础 QUIC 客户端-服务器
-
启动服务器:
./quic_server -
运行客户端 (在新的终端窗口):
./quic_client预期输出: 完成 QUIC 握手,客户端发送流数据,服务器回显数据。
5. 任务三:性能分析
3.1 连接建立时间
-
在回环接口 (
lo) 上开始抓包:sudo tcpdump -i lo -w handshake.pcap(或者使用 Wireshark 监听
lo接口) -
再次运行 TCP 或 QUIC 的客户端/服务器程序。
-
使用 Wireshark 打开
handshake.pcap,分析从第一个包 (TCP 的 SYN 或 QUIC 的 Initial) 到握手完成的时间差。
3.2 吞吐量测试 (100MB 传输)
基准测试 (正常网络):
- 运行 TCP 性能服务器:
./tcp_perf_server - 运行 TCP 性能客户端:
./tcp_perf_client - 记录输出的 MB/s 吞吐量。
- 重复上述步骤测试 QUIC (
./quic_perf_server,./quic_perf_client)。
模拟网络环境 (丢包 / 延迟):
在 Linux 下我们使用 tc (Traffic Control) 的 netem 模块,替代 Windows 下的 clumsy 工具。
场景 A: 5% 丢包率
- 设置回环接口 5% 丢包:
sudo tc qdisc add dev lo root netem loss 5% - 再次运行性能测试程序。
- 重要: 测试结束后删除规则!
sudo tc qdisc del dev lo root
场景 B: 100ms 延迟
- 设置 100ms 延迟:
sudo tc qdisc add dev lo root netem delay 100ms - 再次运行性能测试程序。
- 删除规则:
sudo tc qdisc del dev lo root
3.3 进阶测试:多路复用与多连接对比
本实验任务要求对比 TCP 多连接与 QUIC 多流复用的性能。
场景 1: TCP 多连接并发 同时建立 5 个 TCP 连接,每个连接传输 20MB 数据 (总计 100MB)。
- 启动 TCP 多连接服务器:
./tcp_multi_server - 启动 TCP 多连接客户端:
./tcp_multi_client - 记录服务器输出的总时间与吞吐量。
场景 2: QUIC 单连接多流复用 建立 1 个 QUIC 连接,在其中同时开启 5 个流 (Stream),每个流传输 20MB 数据 (总计 100MB)。
- 启动 QUIC 多流服务器:
./quic_multi_server - 启动 QUIC 多流客户端:
./quic_multi_client - 记录服务器输出的统计数据。
分析重点:
- 在正常网络下,两者的总耗时差异。
- 使用
tc模拟丢包 (如 5%) 后,对比两者性能下降的幅度。QUIC 的多流复用应能避免 TCP 的“队头阻塞”问题 (即一个包丢失不影响其他流的传输),从而在丢包环境下表现更优。