下面是一份 「主流传输 / 通信协议的【使用场景 + 详细使用说明】大全」 ,偏工程实战 + 后端视角,可以直接用于:
- 📌 项目选型
- 📌 技术方案说明
- 📌 面试回答
- 📌 架构设计文档
- 按"真正会用到的顺序"来讲,而不是死背 OSI 模型。
一、TCP(Transmission Control Protocol)
1️⃣ 使用场景
✅ 只要你要求:
- 数据 不丢
- 顺序 不能乱
- 结果 必须可靠
👉 基本都用 TCP
常见:
- HTTP / HTTPS
- 数据库连接(MySQL、PostgreSQL)
- 文件传输
- 后端服务之间调用
2️⃣ 使用说明(核心点)
特点
- 面向连接(三次握手)
- 可靠传输(重传、确认)
- 有序
- 流量控制、拥塞控制
建立连接
plain
客户端 → SYN
服务端 → SYN + ACK
客户端 → ACK
Java 使用
plain
Socket socket = new Socket("localhost", 8080);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
什么时候不适合
❌ 实时音视频❌ 游戏实时操作
二、UDP(User Datagram Protocol)
1️⃣ 使用场景
✅ 你更关心"快"而不是"准"
- 视频通话
- 实时直播
- 在线游戏
- 语音对讲
- WebRTC 底层
2️⃣ 使用说明
特点
- 无连接
- 不保证送达
- 不保证顺序
- 延迟极低
Java 示例
plain
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet =
new DatagramPacket(data, data.length, address, port);
socket.send(packet);
工程实践
- 自己做:
- 丢包补偿
- 顺序控制
- 重发策略
👉 WebRTC / QUIC 已帮你封装好
三、HTTP / HTTPS(最核心)
1️⃣ 使用场景
✅ 请求-响应模型
- Web 接口
- 前后端交互
- 微服务调用
- 第三方 API
2️⃣ 使用说明
常见版本
| 版本 | 特点 |
|---|---|
| HTTP/1.1 | 简单、阻塞 |
| HTTP/2 | 多路复用 |
| HTTP/3 | 基于 QUIC |
请求示例
plain
POST /api/order
Content-Type: application/json
{"id":123}
Java(Spring Boot)
plain
@PostMapping("/order")
public Result create(@RequestBody OrderDTO dto) {
return Result.ok();
}
HTTPS
- HTTP + TLS
- 防监听、防篡改
四、WebSocket(实时通信)
1️⃣ 使用场景
✅ 服务端需要"主动推消息"
- 审批流状态通知
- 实时聊天
- 在线人数
- 任务进度推送
2️⃣ 使用说明
特点
- 基于 TCP
- 全双工
- 长连接
连接流程
plain
HTTP 握手 → 升级协议 → WebSocket
Spring Boot 示例
plain
@ServerEndpoint("/ws/{userId}")
public class NoticeWs {
@OnMessage
public void onMessage(String msg) {}
}
不适合
❌ 大规模 IoT(连接太重)
五、gRPC(高性能 RPC)
1️⃣ 使用场景
✅ 微服务内部调用
- 高并发
- 内网服务
- 强接口约束
2️⃣ 使用说明
特点
- HTTP/2
- Protobuf(二进制)
- 多语言
proto 示例
plain
service UserService {
rpc getUser (UserReq) returns (UserResp);
}
Java 调用
plain
UserResp resp = stub.getUser(req);
适合
- 替代 Feign
- 高 QPS 服务
六、MQTT(物联网 / 实时消息)
1️⃣ 使用场景
✅ 大量设备、低功耗、弱网络
- 设备状态上报
- IoT
- 即时通知
- 小程序 + 后端
2️⃣ 使用说明
模型
plain
设备 → Broker ← 服务
主题(Topic)
plain
device/123/status
QoS
| 等级 | 含义 |
|---|---|
| 0 | 最多一次 |
| 1 | 至少一次 |
| 2 | 仅一次 |
Java(Paho)
plain
client.subscribe("device/+/status");
七、Kafka(高吞吐消息)
1️⃣ 使用场景
✅ 日志、事件流、大数据
- 操作日志
- 埋点
- 流式计算
2️⃣ 使用说明
特点
- 拉模型
- 高吞吐
- 不适合低延迟通知
Java
plain
producer.send(new ProducerRecord<>("topic", msg));
八、WebRTC(实时音视频)
你做过 小程序 + 声网
1️⃣ 使用场景
✅ 超低延迟实时通信
- 视频会议
- 语音通话
- 屏幕共享
2️⃣ 使用说明
依赖协议
- UDP
- ICE
- STUN / TURN
- DTLS / SRTP
核心流程
plain
信令交换 → 建立通道 → 音视频传输
注意
- 穿透 NAT
- TURN 成本高
九、FTP / SFTP(文件)
1️⃣ 使用场景
- 文件上传下载
- 系统对接
2️⃣ 使用说明
- 生产一定用 SFTP
- 基于 SSH
- 支持断点续传
十、QUIC / HTTP3(未来趋势)
1️⃣ 使用场景
- 移动端
- 高丢包网络
- CDN
2️⃣ 特点
- UDP
- 0-RTT
- 快速重连
十一、最重要的【选型速查表】
| 需求 | 推荐 |
|---|---|
| 接口调用 | HTTP |
| 实时推送 | WebSocket |
| 高性能 RPC | gRPC |
| 音视频 | WebRTC |
| IoT | MQTT |
| 日志流 | Kafka |
| 文件 | SFTP |
| 弱网 | QUIC |
十二、面试一句话总结(直接背)
HTTP 适合请求响应,WebSocket 适合实时双向;TCP 保证可靠,UDP 保证低延迟;gRPC 用于微服务,MQTT 用于物联网;WebRTC 用于实时音视频。