网络通信是 Web 接口开发的底层基础。本文讲解 TCP/IP 四层协议栈分层职责,数据包封装和解封装流程;深入讲解 HTTP 协议请求报文、响应报文、HTTP 方法、状态码、无状态特性;对比 HTTP/1.1、HTTP/2、HTTP/3;HTTPS 加密原理,附带面试高频问题,适合后端开发夯实网络基础。
前言
所有 Web 接口、REST 接口、SSE 推送,底层全部依赖 TCP/IP 协议栈,HTTP 是构建在 TCP 之上的应用层协议。后端开发调试接口、排查超时、连接异常、跨域问题,都需要理解这套底层网络模型。很多开发只会调用接口,但不清楚数据包从客户端发出,经过多层封装,到达服务端的完整流转过程。
OSI 七层模型是理论参考模型;TCP/IP 四层模型是互联网真实使用的标准。
一、TCP/IP 四层协议栈分层详解
从上层到下层:应用层 → 传输层 → 网络层 → 网络接口层
表格
| 分层 | 包含协议 | 核心职责 |
|---|---|---|
| 应用层 | HTTP、HTTPS、DNS、FTP | 面向应用程序,定义业务数据格式。HTTP 就是应用层协议,规定请求响应报文格式 |
| 传输层 | TCP、UDP | 端到端进程通信,端口寻址。TCP 可靠传输;UDP 无连接不可靠 |
| 网络层 | IP、ICMP、ARP | 主机寻址,IP 地址,路由选择,跨网络转发数据包 |
| 网络接口层 | 以太网、WiFi | 物理传输,比特流,封装帧,网卡传输 |
数据包封装(发送端:从上往下层层打包)
- 应用层:HTTP 生成请求报文(请求行、请求头、请求体);
- 传输层 TCP:增加 TCP 头部(源端口、目标端口、序列号、确认号),封装 TCP 段;
- 网络层 IP:增加 IP 头部(源 IP、目标 IP),封装 IP 数据包;
- 网络接口层:封装帧头帧尾,转为比特流,网卡发送出去。
接收端解封装(自下向上解析):逐层剥离头部,最终把 HTTP 报文交给应用程序。
TCP 核心特性(HTTP 默认基于 TCP)
TCP:面向连接、可靠传输、三次握手、四次挥手、流量控制、拥塞控制。
- 三次握手:建立连接。客户端 SYN → 服务端 SYN+ACK → 客户端 ACK;
- 四次挥手:断开连接。双方分别关闭读写通道;
- 可靠:序列号 + 确认应答、超时重传,保证数据不丢、不乱序;
- 全双工:双方可以同时收发。
UDP:无连接,没有握手,开销小,不可靠。DNS、直播使用 UDP。HTTP 默认 TCP;HTTP/3 使用 QUIC(基于 UDP)。
二、HTTP 协议原理
HTTP(HyperText Transfer Protocol,超文本传输协议),应用层协议,基于 TCP,客户端 - 服务端请求响应模型,无状态协议。
无状态:协议本身不记住上一次请求信息;服务端无法识别两次请求是不是同一个用户。解决方案:Cookie、Session、Token。
1. HTTP 请求报文结构
- 请求行:
方法 URL HTTP版本例:GET /api/users HTTP/1.1 - 请求头(Request Headers):大量 K-V,Host、User-Agent、Content-Type、Cookie、Authorization 等
- 空行(必须):分隔请求头和请求体
- 请求体 Body:POST/PUT 携带 JSON / 表单数据;GET 一般没有请求体
2. HTTP 响应报文结构
- 状态行:
HTTP版本 状态码 描述例:HTTP/1.1 200 OK - 响应头:Content-Type、Content-Length、Set-Cookie、Cache-Control
- 空行
- 响应体:返回 JSON、HTML、文本等业务数据
3. 常用 HTTP 方法
- GET:获取资源,安全、幂等,参数放 URL
- POST:新建资源,非幂等,请求体传参
- PUT:全量更新资源,幂等
- PATCH:局部更新资源
- DELETE:删除资源,幂等
安全:操作不会修改服务端资源;幂等:多次执行结果和执行一次完全一致。
4. HTTP 状态码分类
- 2xx 成功:200 OK;201 Created 创建成功;204 No Content 删除成功无返回体
- 3xx 重定向:301 永久重定向;302 临时重定向;304 Not Modified 缓存命中
- 4xx 客户端错误:400 参数错误;401 未认证;403 权限不足;404 资源不存在;405 方法不允许;422 参数校验失败
- 5xx 服务端错误:500 服务内部异常;502 网关错误;503 服务不可用
5. HTTP 版本演进
- HTTP/1.0:短连接,每次请求新建 TCP 连接;
- HTTP/1.1:默认长连接 keep-alive,管线化,支持分块传输,目前最广泛;
- HTTP/2:二进制帧、多路复用、头部压缩、服务端推送;仍基于 TCP;
- HTTP/3:QUIC 协议,基于 UDP,解决 TCP 队头阻塞,低延迟。
HTTPS
HTTP+TLS。TCP 三次握手之后,先进行 TLS 握手加密,再传输 HTTP 明文。
- 作用:传输加密、身份认证、防篡改;
- 默认端口 443;HTTP 默认 80。
三、HTTP 通信完整流程示例
访问https://xxx.com/api/users
- DNS 解析域名 → 拿到服务器 IP;
- TCP 三次握手,建立客户端和服务器 TCP 连接;
- TLS 握手,协商加密套件,生成会话密钥;
- 客户端构造 HTTP 请求报文,加密后发送;
- 服务端解密,解析 HTTP 报文,执行业务逻辑;
- 构造 HTTP 响应报文,加密返回;
- 客户端解密,解析响应;
- 空闲超时或者主动断开,TCP 四次挥手释放连接。
四、高频面试题
Q1:TCP 和 UDP 区别?HTTP 基于哪个? A:TCP 面向连接、可靠,三次握手四次挥手;UDP 无连接不可靠。HTTP/1.1、HTTP/2 底层 TCP;HTTP/3 使用 QUIC 基于 UDP。
Q2:HTTP 无状态是什么意思?如何解决无状态? A:协议本身不保存客户端状态。使用 Cookie、Session、Token 维持会话。
Q3:GET 和 POST 区别? A:GET 用于查询,参数拼接 URL,无请求体;POST 新建资源,数据放请求体。GET 安全幂等,POST 非幂等。
Q4:Keep-Alive 作用? A:HTTP 长连接,一次 TCP 连接可以连续多次 HTTP 请求,不用反复握手,提升性能。
结语
TCP/IP 是底层传输骨架,HTTP 是应用层规范。掌握分层封装、TCP 可靠传输、HTTP 报文结构,是理解 REST 接口、SSE 推送、接口超时、网络异常的基础。后续 RESTful、SSE 都是建立在 HTTP 协议之上。