tcp/quic lab finished
This commit is contained in:
109
network/tcpquiclab/README_LINUX_CN.md
Normal file
109
network/tcpquiclab/README_LINUX_CN.md
Normal file
@ -0,0 +1,109 @@
|
||||
# 计算机网络实验: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`),观察连接是否能恢复传输。
|
||||
Reference in New Issue
Block a user