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

141 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 计算机网络实验TCP 与 QUIC 协议对比 (Linux 指南)
本指南根据 Windows 版本的实验手册,针对 Linux 环境进行了适配。
## 1. 预备工作
确保已安装以下工具和库:
- `gcc` (编译器)
- `quiche` 库 (已安装头文件和共享库/静态库)
- `openssl` (用于生成证书)
- `tcpdump``wireshark` (用于抓包)
- `iproute2` (用于 `tc` 流量控制)
## 2. 编译
使用提供的 Makefile 编译所有程序:
```bash
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 客户端-服务器
1. **启动服务器:**
```bash
./tcp_server
```
2. **运行客户端 (在新的终端窗口)**
```bash
./tcp_client
```
**预期输出:** 客户端发送消息,服务器接收并回复。
## 4. 任务二:基础 QUIC 客户端-服务器
1. **启动服务器:**
```bash
./quic_server
```
2. **运行客户端 (在新的终端窗口)**
```bash
./quic_client
```
**预期输出:** 完成 QUIC 握手,客户端发送流数据,服务器回显数据。
## 5. 任务三:性能分析
### 3.1 连接建立时间
1. 在回环接口 (`lo`) 上开始抓包:
```bash
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% 丢包:
```bash
sudo tc qdisc add dev lo root netem loss 5%
```
2. 再次运行性能测试程序。
3. **重要:** 测试结束后删除规则!
```bash
sudo tc qdisc del dev lo root
```
**场景 B: 100ms 延迟**
1. 设置 100ms 延迟:
```bash
sudo tc qdisc add dev lo root netem delay 100ms
```
2. 再次运行性能测试程序。
3. 删除规则:
```bash
sudo tc qdisc del dev lo root
```
### 3.3 进阶测试:多路复用与多连接对比
本实验任务要求对比 TCP 多连接与 QUIC 多流复用的性能。
**场景 1: TCP 多连接并发**
同时建立 5 个 TCP 连接,每个连接传输 20MB 数据 (总计 100MB)。
1. 启动 TCP 多连接服务器:
```bash
./tcp_multi_server
```
2. 启动 TCP 多连接客户端:
```bash
./tcp_multi_client
```
3. 记录服务器输出的总时间与吞吐量。
**场景 2: QUIC 单连接多流复用**
建立 1 个 QUIC 连接,在其中同时开启 5 个流 (Stream),每个流传输 20MB 数据 (总计 100MB)。
1. 启动 QUIC 多流服务器:
```bash
./quic_multi_server
```
2. 启动 QUIC 多流客户端:
```bash
./quic_multi_client
```
3. 记录服务器输出的统计数据。
**分析重点:**
- 在正常网络下,两者的总耗时差异。
- 使用 `tc` 模拟丢包 (如 5%) 后对比两者性能下降的幅度。QUIC 的多流复用应能避免 TCP 的“队头阻塞”问题 (即一个包丢失不影响其他流的传输),从而在丢包环境下表现更优。
### 3.4 网络恢复测试