第21天:第三周总结与实战
今日目标
- 回顾本周核心知识点
- 完成综合实战项目
- 学习性能优化技巧
- 掌握调试和排错方法
- 了解常用工具和资源
1. 本周知识回顾
1.1 第15天:TCP协议基础
核心知识:
TCP特点:
✅ 面向连接
✅ 可靠传输
✅ 有序传输
✅ 字节流
✅ 全双工
✅ 流量控制
✅ 拥塞控制
三次握手:
1. SYN
2. SYN-ACK
3. ACK
四次挥手:
1. FIN
2. ACK
3. FIN
4. ACK
11种状态:
CLOSED → LISTEN → SYN_SENT → SYN_RECEIVED →
ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 →
CLOSING → TIME_WAIT → CLOSE_WAIT → LAST_ACK
关键概念:
TIME_WAIT:
- 持续2MSL(通常2分钟)
- 确保对方收到ACK
- 防止旧连接的数据包干扰
SYN Flood攻击:
- 发送大量SYN包
- 不完成三次握手
- 耗尽服务器资源
防御:
- SYN Cookie
- 增加半连接队列
- 缩短超时时间
1.2 第16天:TCP可靠传输机制
核心知识:
可靠性保证:
1. 序列号和确认号
2. 超时重传
3. 快速重传
4. 滑动窗口
5. 流量控制
6. 拥塞控制
滑动窗口:
发送窗口 = min(接收窗口, 拥塞窗口)
拥塞控制算法:
- 慢启动(Slow Start)
- 拥塞避免(Congestion Avoidance)
- 快速重传(Fast Retransmit)
- 快速恢复(Fast Recovery)
RTO计算(Jacobson算法):
SRTT = (1-α) × SRTT + α × RTT
RTTVAR = (1-β) × RTTVAR + β × |SRTT-RTT|
RTO = SRTT + 4 × RTTVAR
关键概念:
TCP Reno vs TCP CUBIC vs BBR:
TCP Reno:
- 经典算法
- 基于丢包
- 适合低延迟网络
TCP CUBIC:
- Linux默认
- 立方增长
- 适合高带宽网络
BBR:
- Google开发
- 基于带宽和RTT
- 适合高延迟网络
1.3 第17天:UDP协议详解
核心知识:
UDP特点:
✅ 无连接
✅ 不可靠
✅ 快速
✅ 轻量级
✅ 支持广播/多播
UDP头部:8字节
- 源端口(2字节)
- 目标端口(2字节)
- 长度(2字节)
- 校验和(2字节)
UDP vs TCP:
┌────────────┬────────┬────────┐
│ 特性 │ TCP │ UDP │
├────────────┼────────┼────────┤
│ 可靠性 │ ✅ │ ❌ │
│ 速度 │ 慢 │ 快 │
│ 开销 │ 大 │ 小 │
│ 连接 │ 是 │ 否 │
│ 顺序 │ 是 │ 否 │
└────────────┴────────┴────────┘
关键概念:
UDP使用场景:
- 实时音视频(VoIP、视频会议)
- 在线游戏
- DNS查询
- DHCP
- 流媒体
- IoT设备通信
可靠UDP实现:
- 应用层实现
- 序列号
- ACK确认
- 超时重传
- 滑动窗口
1.4 第18天:Socket编程进阶
核心知识:
阻塞 vs 非阻塞:
阻塞:等待直到完成
非阻塞:立即返回
IO多路复用:
- select:跨平台,最多1024个
- poll:无限制,O(n)
- epoll:Linux专用,O(1),最快
Socket选项:
- SO_REUSEADDR:地址重用
- TCP_NODELAY:禁用Nagle算法
- SO_KEEPALIVE:保活机制
- SO_LINGER:关闭行为
服务器架构:
1. 单线程阻塞:简单但慢
2. 多线程:简单但有限
3. IO多路复用:高性能
4. IO多路复用+线程池:最佳
关键概念:
C10K问题:
10000个并发连接
解决方案:
- IO多路复用(epoll)
- 非阻塞IO
- 事件驱动
- 异步IO
现在的挑战:
C100K、C1000K(百万并发)
1.5 第19天:HTTP协议基础
核心知识:
HTTP特点:
- 应用层协议
- 无状态
- 明文传输
- 请求-响应模式
HTTP格式:
请求 = 请求行 + 请求头 + 空行 + 请求体
响应 = 状态行 + 响应头 + 空行 + 响应体
HTTP方法:
- GET:查询
- POST:创建
- PUT:更新(完整)
- PATCH:更新(部分)
- DELETE:删除
- HEAD:获取头部
- OPTIONS:查询方法
状态码:
1xx:信息
2xx:成功(200 OK)
3xx:重定向(301、302、304)
4xx:客户端错误(400、401、403、404)
5xx:服务器错误(500、502、503)
关键概念:
Cookie vs Session:
Cookie:客户端存储
Session:服务器存储
HTTP版本:
HTTP/1.0:短连接
HTTP/1.1:持久连接
HTTP/2:多路复用、二进制
HTTP/3:基于QUIC(UDP)
1.6 第20天:HTTPS和安全
核心知识:
HTTPS = HTTP + TLS/SSL
加密技术:
- 对称加密:AES(快速)
- 非对称加密:RSA(安全)
- 哈希函数:SHA-256
- 数字签名:身份认证
TLS握手:
TLS 1.2:2-RTT
TLS 1.3:1-RTT(更快)
证书:
- DV:域名验证
- OV:组织验证
- EV:扩展验证
安全攻击:
- 中间人攻击(MITM)
- SSL剥离
- XSS
- CSRF
- SQL注入
关键概念:
混合加密:
1. RSA交换对称密钥(安全)
2. AES加密实际数据(快速)
HSTS:
Strict-Transport-Security
强制使用HTTPS
防止SSL剥离攻击
Let's Encrypt:
免费的CA
自动化证书管理
90天有效期
2. 综合实战项目:安全Web应用平台
2.1 项目需求
项目名称:SecureWebApp
项目描述:一个安全的Web应用平台
功能需求:
1. 用户管理
- 注册/登录
- Session管理
- 权限控制
2. 数据API
- RESTful API
- JSON格式
- CRUD操作
3. 实时通信
- WebSocket(模拟)
- 实时消息推送
4. 文件服务
- 静态文件服务
- 文件上传/下载
5. 安全特性
- HTTPS支持
- Cookie安全
- CSRF防护
- XSS防护
- 输入验证
技术要求:
- 支持HTTP和HTTPS
- 使用IO多路复用(epoll/select)
- 实现完整的HTTP/1.1协议
- 安全最佳实践
- 性能监控
- 日志记录
2.2 项目架构
┌─────────────────────────────────────────┐
│ 客户端(浏览器) │
└─────────────────────────────────────────┘
│
│ HTTPS
↓
┌─────────────────────────────────────────┐
│ 负载均衡(可选) │
└─────────────────────────────────────────┘
│
┌───────────┼───────────┐
│ │ │
↓ ↓ ↓
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Web │ │ Web │ │ Web │
│ Server │ │ Server │ │ Server │
│ 进程1 │ │ 进程2 │ │ 进程3 │
└─────────┘ └─────────┘ └─────────┘
│ │ │
└───────────┼───────────┘
│
↓
┌─────────────────────────────────────────┐
│ 数据存储(JSON文件/数据库) │
└─────────────────────────────────────────┘
模块划分:
1. HTTP服务器模块
- 请求解析
- 响应生成
- 路由管理
2. HTTPS模块
- SSL/TLS处理
- 证书管理
3. 认证模块
- 用户注册/登录
- Session管理
- 权限验证
4. API模块
- RESTful接口
- 数据处理
5. 文件模块
- 静态文件
- 文件上传
6. 安全模块
- CSRF Token
- XSS过滤
- 输入验证
7. 监控模块
- 性能统计
- 日志记录
2.3 核心功能实现
用户认证流程:
注册:
1. 用户提交注册表单(POST /api/register)
2. 服务器验证输入(用户名、密码、邮箱)
3. 密码哈希(使用bcrypt或类似算法)
4. 存储到数据库
5. 返回成功
登录:
1. 用户提交登录表单(POST /api/login)
2. 服务器验证用户名和密码
3. 创建Session
4. 设置Session Cookie(HttpOnly、Secure、SameSite)
5. 返回成功
认证检查:
1. 客户端请求带上Cookie
2. 服务器解析Cookie获取Session ID
3. 查找Session数据
4. 验证Session有效性
5. 获取用户信息
6. 继续处理请求
安全措施:
1. CSRF防护
- 生成CSRF Token
- 存储在Session中
- 表单中包含Token
- 服务器验证Token
2. XSS防护
- 输出编码(HTML实体)
- Content-Security-Policy头
- HttpOnly Cookie
3. SQL注入防护
- 参数化查询
- ORM框架
- 输入验证
4. 密码安全
- 强密码要求
- 密码哈希(bcrypt、argon2)
- 加盐(Salt)
- 限制登录尝试
5. HTTPS
- 强制HTTPS(HSTS)
- 只使用TLS 1.2+
- 强加密套件
3. 性能优化技巧
3.1 服务器端优化
IO优化:
1. 使用epoll(Linux)
- O(1)复杂度
- 边缘触发
- 百万并发
2. 非阻塞IO
- 提高并发能力
- 避免线程阻塞
3. 零拷贝
- sendfile()系统调用
- 减少数据拷贝
- 提高文件传输效率
4. 内存映射
- mmap()
- 直接映射文件到内存
- 适合大文件
连接优化:
1. 连接池
- 复用连接
- 减少建立开销
2. Keep-Alive
- HTTP持久连接
- 复用TCP连接
3. 连接限制
- 限制最大连接数
- 防止资源耗尽
4. 超时设置
- 读超时
- 写超时
- 空闲超时
缓存优化:
1. 静态资源缓存
- Cache-Control头
- ETag
- Last-Modified
2. 内存缓存
- Redis
- Memcached
- 应用内缓存
3. CDN
- 内容分发网络
- 边缘缓存
- 减少延迟
4. 浏览器缓存
- 强缓存
- 协商缓存
并发优化:
1. 多进程
- 利用多核CPU
- 进程隔离
- 稳定性好
2. 线程池
- 固定数量线程
- 任务队列
- 避免频繁创建
3. 协程
- 轻量级
- 高并发
- 适合IO密集
4. 异步编程
- asyncio
- 事件循环
- 回调函数
3.2 网络优化
TCP优化:
1. 调整窗口大小
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
2. 启用快速回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
3. 调整队列长度
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 2048
4. 启用BBR拥塞控制
net.ipv4.tcp_congestion_control = bbr
HTTP优化:
1. HTTP/2
- 多路复用
- 头部压缩
- 服务器推送
2. 压缩
- Gzip
- Brotli
- 减少传输大小
3. 减少请求
- 合并文件
- CSS Sprite
- 内联小资源
4. 异步加载
- defer、async
- 懒加载
- 按需加载
3.3 数据库优化
1. 索引优化
- 合理创建索引
- 避免过度索引
- 定期维护
2. 查询优化
- 避免SELECT *
- 使用LIMIT
- 避免N+1查询
3. 连接池
- 复用连接
- 限制最大连接
4. 读写分离
- 主从复制
- 分散负载
4. 调试和排错
4.1 网络抓包工具
Wireshark:
使用场景:
- 分析网络流量
- 查看数据包详情
- 诊断网络问题
常用过滤器:
tcp.port == 80 # HTTP流量
tcp.port == 443 # HTTPS流量
http.request.method == GET # GET请求
ip.addr == 192.168.1.100 # 特定IP
操作步骤:
1. 选择网络接口
2. 开始捕获
3. 应用过滤器
4. 分析数据包
5. 导出数据
tcpdump:
基本用法:
# 捕获指定端口
sudo tcpdump -i any port 80
# 保存到文件
sudo tcpdump -i any port 80 -w capture.pcap
# 读取文件
tcpdump -r capture.pcap
# 过滤主机
sudo tcpdump -i any host 192.168.1.100
# 详细输出
sudo tcpdump -i any port 80 -v -X
4.2 命令行工具
curl:
基本请求:
curl http://example.com
显示头部:
curl -I http://example.com
POST请求:
curl -X POST -d '{"key":"value"}' \
-H "Content-Type: application/json" \
http://example.com/api
HTTPS请求:
curl -k https://localhost:8443
跟随重定向:
curl -L http://example.com
显示详细信息:
curl -v http://example.com
测试速度:
curl -w "@curl-format.txt" -o /dev/null -s http://example.com
netstat / ss:
查看所有连接:
netstat -an
ss -an
查看监听端口:
netstat -lntp
ss -lntp
查看TCP连接:
netstat -nt
ss -nt
查看连接数量:
netstat -an | grep ESTABLISHED | wc -l
ss -s
查看某端口连接:
netstat -an | grep :80
ss -tan | grep :80
telnet / nc:
测试端口:
telnet example.com 80
nc -zv example.com 80
发送HTTP请求:
telnet example.com 80
GET / HTTP/1.1
Host: example.com
[空行]
监听端口:
nc -l 8080
端口转发:
nc -l 8080 | nc example.com 80
4.3 调试技巧
日志分析:
日志级别:
DEBUG < INFO < WARNING < ERROR < CRITICAL
日志内容:
- 时间戳
- 级别
- 模块
- 消息
- 异常堆栈
示例:
[2024-01-15 10:30:45] INFO [server] Client connected: 192.168.1.100:54321
[2024-01-15 10:30:45] DEBUG [handler] Request: GET /api/users
[2024-01-15 10:30:46] ERROR [database] Connection failed: timeout
性能分析:
Python profiling:
python -m cProfile -o profile.out script.py
python -m pstats profile.out
内存分析:
memory_profiler
objgraph
网络性能:
ping - 测试延迟
traceroute - 追踪路由
iperf - 测试带宽
ab - HTTP压力测试
wrk - 现代化压力测试
常见问题排查:
连接被拒绝:
- 检查服务是否启动
- 检查端口是否正确
- 检查防火墙规则
连接超时:
- 检查网络连通性
- 检查路由
- 检查防火墙
连接重置:
- 服务器主动关闭
- 防火墙拦截
- 代理问题
慢查询:
- 网络延迟高
- 服务器负载高
- 数据库慢查询
- 锁竞争
内存泄漏:
- 使用内存分析工具
- 检查循环引用
- 检查资源释放
5. 工具和资源推荐
5.1 开发工具
代码编辑器:
VS Code:
- 免费开源
- 插件丰富
- 推荐插件:
- Python
- Remote SSH
- REST Client
- GitLens
PyCharm:
- 专业Python IDE
- 强大的调试功能
- 数据库工具
Vim:
- 轻量级
- 高效编辑
- 服务器必备
API测试工具:
Postman:
- 功能强大
- 团队协作
- 自动化测试
Insomnia:
- 简洁界面
- 支持GraphQL
- 开源
curl:
- 命令行
- 脚本友好
- 通用性强
httpie:
- 用户友好
- 彩色输出
- 简单语法
网络工具:
Wireshark:包分析
tcpdump:抓包
nmap:端口扫描
netcat:网络调试
iperf:性能测试
mtr:路由追踪
5.2 学习资源
书籍推荐:
网络协议:
- 《TCP/IP详解 卷1》
- 《计算机网络:自顶向下方法》
- 《HTTP权威指南》
编程实践:
- 《Unix网络编程》
- 《高性能网络编程》
- 《Web性能权威指南》
安全:
- 《白帽子讲Web安全》
- 《Web应用安全权威指南》
- 《密码学原理与实践》
在线资源:
文档:
- MDN Web Docs
- Python官方文档
- RFC文档
博客:
- High Scalability
- Cloudflare Blog
- Google Developers
视频:
- YouTube技术频道
- Bilibili技术区
- Udemy课程
实践:
- GitHub开源项目
- LeetCode
- CTF比赛
工具网站:
测试工具:
- SSL Labs(SSL测试)
- WebPageTest(性能测试)
- GTmetrix(网站分析)
在线工具:
- regex101(正则测试)
- JSON Editor Online
- Base64编解码
监控服务:
- UptimeRobot
- Pingdom
- New Relic
5.3 开源项目学习
Web服务器:
- Nginx(高性能HTTP服务器)
- Apache(传统Web服务器)
- Caddy(现代Web服务器)
框架:
- Flask(Python微框架)
- Django(Python全栈框架)
- Express(Node.js框架)
工具:
- curl(HTTP客户端)
- redis(内存数据库)
- PostgreSQL(关系数据库)
6. 本周总结
6.1 知识地图
第三周:传输层和应用层协议
传输层:
├─ TCP协议
│ ├─ 三次握手
│ ├─ 四次挥手
│ ├─ 可靠传输
│ ├─ 流量控制
│ └─ 拥塞控制
│
└─ UDP协议
├─ 无连接
├─ 不可靠
└─ 快速
应用层:
├─ HTTP协议
│ ├─ 请求/响应
│ ├─ 方法
│ ├─ 状态码
│ └─ Cookie/Session
│
└─ HTTPS协议
├─ TLS/SSL
├─ 加密
├─ 证书
└─ 安全
编程实践:
├─ Socket编程
│ ├─ TCP Socket
│ ├─ UDP Socket
│ └─ IO多路复用
│
└─ Web开发
├─ HTTP服务器
├─ HTTPS服务器
└─ 安全实践
6.2 核心要点
TCP:
三次握手建立连接
四次挥手断开连接
通过序列号、ACK、重传保证可靠性
通过滑动窗口实现流量控制
通过拥塞控制算法避免网络拥塞
UDP:
无连接、不可靠、快速
8字节头部
适合实时应用
可以在应用层实现可靠性
HTTP:
请求 = 请求行 + 请求头 + 空行 + 请求体
响应 = 状态行 + 响应头 + 空行 + 响应体
无状态,通过Cookie/Session保持状态
HTTP/2多路复用,HTTP/3基于QUIC
HTTPS:
HTTP + TLS/SSL
混合加密:RSA交换密钥 + AES加密数据
数字证书验证身份
TLS 1.3比TLS 1.2快一倍
Socket编程:
阻塞vs非阻塞
IO多路复用:select/poll/epoll
epoll性能最好(Linux)
高性能服务器架构
6.3 实践技能
已掌握:
✅ 分析TCP连接过程
✅ 理解TCP可靠性机制
✅ 使用UDP编程
✅ 实现IO多路复用
✅ 构建HTTP服务器
✅ 配置HTTPS服务器
✅ 生成SSL证书
✅ 实现安全认证
✅ 网络抓包分析
✅ 性能优化
待提升:
□ 大规模并发处理
□ 分布式系统
□ 负载均衡
□ 服务发现
□ 容器化部署
7. 下周预告
第四周:网络层协议(第22-28天)
第22天:IP协议基础
- IPv4地址和子网划分
- IP报文格式
- IP路由原理
- NAT技术
第23天:IPv6详解
- IPv6地址格式
- IPv6 vs IPv4
- 过渡技术
- IPv6部署
第24天:ICMP和诊断工具
- ICMP协议
- ping原理
- traceroute原理
- 网络诊断
第25天:ARP和链路层
- ARP协议
- ARP缓存
- ARP欺骗
- 链路层概述
第26天:路由协议
- 静态路由
- 动态路由
- RIP、OSPF、BGP
- 路由表
第27天:网络安全进阶
- 防火墙
- VPN
- IDS/IPS
- DDoS防护
第28天:第四周总结
- 网络层知识回顾
- 路由器实现
- 网络安全实战
8. 今日练习
练习1:完成综合项目
基于本周所学知识,完成SecureWebApp项目:
必需功能:
1. HTTP和HTTPS服务器
2. 用户注册/登录
3. Session管理
4. RESTful API
5. 静态文件服务
6. 安全防护(CSRF、XSS)
加分项:
1. 多进程/线程池
2. 性能监控
3. 日志系统
4. 限流功能
5. WebSocket支持
练习2:性能测试
对你的服务器进行压力测试:
使用工具:
- ab(Apache Bench)
- wrk
- locust
测试场景:
1. 静态文件服务
2. API接口
3. 并发连接
4. 长连接
分析指标:
- QPS(每秒请求数)
- 响应时间
- 并发能力
- 错误率
练习3:安全审计
检查你的应用安全性:
检查项目:
1. HTTPS配置
2. 密码存储
3. Session安全
4. CSRF防护
5. XSS防护
6. SQL注入防护
7. 输入验证
8. 错误处理
使用工具:
- SSL Labs
- OWASP ZAP
- Burp Suite
练习4:网络分析
使用Wireshark分析:
任务:
1. 捕获HTTP通信
2. 分析TCP三次握手
3. 查看TLS握手过程
4. 识别加密流量
5. 分析DNS查询
6. 追踪完整会话
输出:
- 截图
- 分析报告
- 发现的问题
9. 总结
恭喜你完成了第三周的学习!🎉
本周成就
✅ 深入理解TCP和UDP协议
✅ 掌握Socket编程技术
✅ 学会构建HTTP/HTTPS服务器
✅ 了解网络安全基础
✅ 实践性能优化
✅ 掌握调试和排错技巧
完成的实战项目:
✅ TCP连接分析器
✅ UDP聊天室
✅ 多人聊天服务器(IO多路复用)
✅ HTTP服务器
✅ HTTPS服务器
✅ 证书生成器
✅ 综合Web应用
学习建议
1. 动手实践
- 理论要结合实践
- 多写代码
- 多做实验
2. 深入理解
- 不要停留在表面
- 思考为什么
- 查看源代码
3. 系统学习
- 从底层到应用层
- 建立知识体系
- 相互关联
4. 持续学习
- 技术在演进
- 保持好奇心
- 关注新技术
下周准备
第四周将学习网络层协议:
预习内容:
- IP地址和子网
- IPv4 vs IPv6
- 路由原理
- ICMP协议
准备工具:
- Wireshark
- tcpdump
- ping、traceroute
- iptables
继续加油! 🚀
三周的学习让你已经打下了坚实的基础,从物理层、数据链路层,到网络基础,再到传输层和应用层,你已经掌握了网络编程的核心知识。下周我们将深入网络层,学习IP协议和路由原理,这将让你对网络有更全面的理解!
进度:21/180天(11.7%)