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