协议选型先看它位于哪一层。TCP、UDP 和 QUIC解决“数据怎样传输”,HTTP、SSE、WebSocket、gRPC 和 MQTT 解决“应用怎样交流”,Kafka 则是服务端事件流平台,不是浏览器或设备直接使用的网络替代品。
先看协议地图
1 | 应用层:HTTP | SSE | WebSocket | gRPC | MQTT | Kafka Client Protocol |
协议可以组合。例如 HTTPS 通常是 HTTP over TLS over TCP;HTTP/3 运行在 QUIC 之上,而 QUIC 基于 UDP 实现自己的可靠传输与加密机制。
TCP、UDP 与 QUIC
| 维度 | TCP | UDP | QUIC |
|---|---|---|---|
| 连接 | 面向连接 | 无连接 | 面向连接 |
| 可靠有序 | 提供 | 不提供 | 提供到流 |
| 拥塞控制 | 提供 | 由应用决定 | 提供 |
| 加密 | 需叠加 TLS | 需应用另行处理 | 内置 TLS 能力 |
| 常见场景 | HTTP/1.1、HTTP/2、数据库 | 实时音视频、DNS、局域网发现 | HTTP/3 |
UDP 不是“更快的 TCP”。它只是约束更少,丢包、重传、排序和拥塞控制要由上层协议按业务需要处理。
应用协议怎么选
| 需求 | 常见选择 | 原因 |
|---|---|---|
| 普通请求响应 API | HTTP | 生态成熟、缓存与代理友好 |
| 服务器持续向浏览器推送文本 | SSE | 单向、自动重连、实现简单 |
| 浏览器和服务器双向实时通信 | WebSocket | 长连接、双向消息 |
| 内部服务强类型调用 | gRPC | 接口契约明确、支持流式调用 |
| 设备低带宽发布订阅 | MQTT | Topic、QoS、会话机制适合设备 |
| 服务端高吞吐事件流 | Kafka | 分区日志、消费组、保留与重放 |
AI 对话逐字输出通常适合 SSE;在线协作和游戏更常使用 WebSocket;设备遥测适合 MQTT;跨服务事件流水线适合 Kafka。
分层排障流程
1 | 1. 域名能否解析 |
常用检查命令:
1 | dig example.com |
ping 不通不能直接证明网站不可访问,因为 ICMP 可能被禁用;curl 成功也不能证明所有业务接口正常。
从现象快速定位
| 现象 | 优先检查 |
|---|---|
| 域名不存在 | DNS 记录、缓存、权威服务器 |
Connection refused |
服务未监听、端口错误 |
| 连接超时 | 路由、安全组、防火墙、服务拥塞 |
| TLS 报错 | 证书、SNI、协议版本、本机时间 |
502 |
代理无法连接上游 |
504 |
上游处理超时 |
| 浏览器跨域错误 | CORS 响应头和预检请求 |
| 长连接频繁断开 | 代理超时、心跳、网络切换、资源限制 |
设计时保留可观测性
客户端、网关和应用应使用同一个请求 ID 串联日志,并分别记录 DNS、连接、TLS、首字节和总耗时。只有“接口耗时 3 秒”时,很难判断时间究竟花在网络、排队、数据库还是下游接口。