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

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