计算机网络
计算机网络
TCP 三次握手 / 四次挥手
Q: 为什么需要三次握手?
三次握手的本质是双方确认各自的收发能力正常:
客户端 服务端
| ——— SYN(seq=x) ——————→ | 第一次:客户端发送连接请求
| ←—— SYN+ACK(seq=y) —— | 第二次:服务端确认+发送自己的SYN
| ——— ACK(seq=y+1) ————→ | 第三次:客户端确认服务端的SYN两次握手不够:无法防止历史连接请求导致的资源浪费。
Q: 为什么挥手需要四次?
因为 TCP 是全双工的,关闭连接需要双方各自发送 FIN:
客户端 服务端
| ——— FIN ——————————→ | 第一次:客户端不再发数据
| ←—— ACK —————————— | 第二次:服务端确认
| ←—— FIN —————————— | 第三次:服务端也不再发数据
| ——— ACK ——————————→ | 第四次:客户端确认HTTP vs HTTPS
Q: HTTPS 的握手过程?
- 客户端发送支持的 TLS 版本、加密套件
- 服务端返回证书(含公钥)
- 客户端验证证书,生成随机数,用公钥加密发给服务端
- 双方根据三个随机数生成对称密钥,后续通信使用对称加密
非对称加密(慢)→ 交换密钥
对称加密(快)→ 传输数据HTTP 状态码
| 状态码 | 含义 |
|---|---|
| 200 | OK |
| 301 | 永久重定向 |
| 302 | 临时重定向 |
| 400 | 请求错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 429 | 请求过于频繁(限流) |
| 500 | 服务器内部错误 |
| 502 | 网关错误 |
| 503 | 服务不可用 |