跳至内容
计算机网络

计算机网络

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 的握手过程?

  1. 客户端发送支持的 TLS 版本、加密套件
  2. 服务端返回证书(含公钥)
  3. 客户端验证证书,生成随机数,用公钥加密发给服务端
  4. 双方根据三个随机数生成对称密钥,后续通信使用对称加密
非对称加密(慢)→ 交换密钥
对称加密(快)→ 传输数据

HTTP 状态码

状态码含义
200OK
301永久重定向
302临时重定向
400请求错误
401未认证
403无权限
404资源不存在
429请求过于频繁(限流)
500服务器内部错误
502网关错误
503服务不可用