【探索Java之路】简单聊聊网络通讯核心协议
在Java后端开发中,几乎所有涉及“网络”的功能(RPC、HTTP接口、消息队列、缓存、分布式协调、微服务调用、WebSocket、文件上传下载等)最终都会落到下面这几层协议上。
我们用最简洁的方式,从上到下把最核心的几层协议过一遍(2025-2026年视角):
| 层级(OSI模型近似) | 协议家族 | 典型代表协议 | Java中最常见的场景 | 传输层用什么? | 是否面向连接 | 是否可靠 | 头部开销 | 典型端口 |
|---|---|---|---|---|---|---|---|---|
| 应用层 | HTTP/HTTPS | HTTP/1.1、HTTP/2、HTTP/3 | REST API、Spring Boot Web、浏览器前后端交互 | TCP | 是 | 是 | 中~大 | 80/443 |
| 应用层 | WebSocket | RFC 6455 + 子协议 | 实时聊天、推送、在线协作、股票行情 | TCP | 是 | 是 | 小~中 | 任意 |
| 应用层 | gRPC | HTTP/2 + Protobuf | 高性能内部服务调用、微服务间通信 | TCP | 是 | 是 | 很小 | 任意 |
| 应用层 | Dubbo | Dubbo协议 / Triple(HTTP/2) | 传统Dubbo RPC、部分云原生场景 | TCP | 是 | 是 | 小 | 任意 |
| 应用层 | MQTT | MQTT 3.1.1 / 5.0 | IoT、设备上报、弱网环境推送 | TCP / WebSocket | 是 | 可配置 | 极小 | 1883/8883 |
| 应用层 | Redis协议(RESP) | RESP2 / RESP3 | Redis客户端通信 | TCP | 是 | 是 | 小 | 6379 |
| 应用层 | Kafka协议 | Kafka Wire Protocol | 生产者/消费者与Broker通信 | TCP | 是 | 是 | 中 | 9092 |
| 传输层 | TCP | — | 几乎所有需要可靠传输的场景 | — | 是 | 是 | 中 | — |
| 传输层 | UDP | — | DNS、QUIC底层、部分游戏、音视频、实时监控 | — | 否 | 否 | 很小 | — |
| 传输层(新兴) | QUIC(基于UDP) | HTTP/3、部分自定义协议 | 低延迟网页、移动端API、游戏、视频会议 | UDP | 是 | 是 | 小~中 | 443常见 |
| 网络层 | IP | IPv4 / IPv6 | 所有网络通信的基础 | — | 否 | 否 | 小 | — |
最常出现在Java面试/日常开发中的几条协议对比(一句话总结)
| 协议 | 一句话本质 | Java主流框架/库 | 2025-2026主流使用场景排名 | 延迟敏感度 | 吞吐量潜力 | 移动端友好度 |
|---|---|---|---|---|---|---|
| HTTP/1.1 | 最熟悉的文本协议,请求-响应模式 | Spring MVC / WebFlux | ★★★★★ | 中 | 中 | 中 |
| HTTP/2 | 二进制、多路复用、头部压缩 | Spring Boot 2.0+、Netty | ★★★★☆ | 中低 | 高 | 高 |
| HTTP/3 | QUIC + HTTP语义,连接迁移、0-RTT | 少数前沿项目、Cloudflare、部分CDN | ★★☆☆☆ | 低 | 很高 | 很高 |
| WebSocket | 全双工、持久连接、轻量帧 | Spring WebSocket / Netty | ★★★★☆ | 低 | 中高 | 高 |
| gRPC | 高性能RPC,Protobuf + HTTP/2 | grpc-java、Spring Boot gRPC starter | ★★★★☆ | 很低 | 很高 | 中高 |
| TCP长连接 | 最原始可靠流式传输 | Netty、Mina、自定义协议 | ★★★☆☆ | 低 | 高 | 中 |
| MQTT | 极轻量级发布订阅,适合弱网 | Eclipse Paho、EMQ X Java Client | ★★★☆☆(IoT) | 中 | 中 | 很高 |
| QUIC | UDP上做可靠传输 + 加密 + 多路复用 | quiche-java、cloudflare quicly绑定 | ★★☆☆☆(快速增长中) | 极低 | 极高 | 极高 |
快速记忆口诀(面试/架构图时常用)
- 要可靠 + 顺序 → TCP(HTTP/1、HTTP/2、WebSocket、gRPC、Dubbo、Redis、Kafka……)
- 要极低延迟 + 移动弱网友好 → QUIC(HTTP/3)或自定义UDP协议
- 要极致轻量 + 海量长连接 → MQTT(IoT、IM信令)
- 要最高性能内部调用 → gRPC(Protobuf + HTTP/2)或自定义二进制协议(Netty)
- 还在用明文HTTP/1.1 → 基本是历史包袱或对调试友好
2025-2026年最值得关注的趋势(Java视角)
- HTTP/3 + QUIC 正在快速渗透(尤其移动端、边缘计算、游戏、视频)
- gRPC 仍然是内部高性能通信首选,但 gRPC over HTTP/3(Triple + QUIC)已经在部分公司落地
- WebTransport(基于QUIC的双向流)正在成为WebSocket的潜在继任者
- 二进制协议(Protobuf、FlatBuffers、Avro)比JSON越来越普遍
- Netty 仍然是Java生态里自定义协议、代理、网关、高性能网络IO的绝对王者
一句话总结:
“Java程序员写业务代码时主要跟HTTP打交道,写中间件/网关/实时系统时主要跟TCP/WebSocket/gRPC打交道,想极致性能或移动端体验时开始关注QUIC/HTTP/3。”
你目前更关心哪一块?
- HTTP/2 vs HTTP/3 到底差在哪?
- gRPC 在Spring Boot项目里怎么优雅集成?
- Netty 写自定义TCP协议入门?
- WebSocket 断线重连 + 心跳最佳实践?
- MQTT 在Java里怎么用得舒服?
告诉我你的方向,我可以继续往下展开~