TCP、HTTP、HTTP/2、gRPC 到底是什么关系

很多人会背 TCP、HTTP、HTTP/2、gRPC 这些名词,但一到实际场景就容易混。本文不堆术语,用寄快递和高速公路的类比,把这四层关系彻底讲明白。

很多后端开发在刚接触消息队列、微服务或者 AI 网关时,都会碰到这样一串词:

  • TCP
  • HTTP
  • HTTP/2
  • gRPC

单看每个词,好像都认识。 但一旦放在一起,就容易开始乱:

  • HTTP 不是协议吗,为什么还能长连接
  • gRPC 不是远程调用吗,怎么又跑在 HTTP/2 上
  • TCP 和 HTTP 到底谁包谁
  • RocketMQ、微服务、网关这些中间件,为什么老提 gRPC

这篇不准备堆定义,而是把它们当成一套”运输系统”来讲。


先说最短结论

你可以先把这四个东西简单记成这样:

  • TCP:负责把路打通
  • HTTP:规定车上货物怎么装、怎么写单子
  • HTTP/2:HTTP 的升级版,让同一条路可以更高效地跑很多车
  • gRPC:一种基于 HTTP/2 的远程调用方式,定义”双方怎么像调本地函数一样通信”

如果你只记住这一层,已经够应付很多工程场景。

但为了彻底不混,下面拆开讲。


先用生活中的寄快递来类比

假设你在上海开公司,仓库在杭州。

你每天都要不断往仓库发各种东西:

  • 订单
  • 图片
  • 对账单
  • 通知单
  • 统计报表

这个”你和仓库之间反复通信”的场景,就很像程序和服务器之间的网络通信。

现在我们来对应这几个概念。


第一层:TCP 是什么

你先别把 TCP 想复杂。

你可以把它理解成:

TCP 负责把一条可靠的运输线路打通。

也就是说,它不关心你运的是订单、图片还是聊天消息,它主要关心的是:

  • 这条路能不能通
  • 货能不能按顺序送到
  • 丢了能不能补发
  • 对面到底收没收到

所以 TCP 更像是:

一条能稳定送货的公路系统。

它解决的是”传输可靠性”问题,而不是”业务语义”问题。

换句话说:

TCP 不关心你传的是”登录请求”还是”支付请求”,它只负责尽量可靠地把字节流送过去。


第二层:HTTP 是什么

如果说 TCP 只是把路修好了,那接下来还缺什么?

还缺:

  • 送货单怎么写
  • 发货人写哪里
  • 收货人写哪里
  • 这是请求还是响应
  • 内容是什么格式
  • 一次通信怎么开始,怎么结束

这就是 HTTP 干的事。

所以 HTTP 你可以理解成:

在 TCP 这条路之上,约定一套大家都看得懂的通信规则。

比如:

  • 请求行怎么写
  • Header 怎么写
  • Body 放哪里
  • 状态码是什么
  • 方法是 GET 还是 POST

所以 HTTP 不是”路”,而是:

跑在路上的运输规范。

就像快递行业里,不同公司之间要统一面单格式、包裹规则、签收流程一样。


一句话区分 TCP 和 HTTP

这是最容易记混的地方,可以直接记这一句:

TCP 解决”怎么可靠地传”,HTTP 解决”传的内容按什么规则组织”。

也就是说:

  • 没有 TCP,路都不稳
  • 没有 HTTP,双方虽然能传,但不知道该怎么理解彼此的数据

第三层:HTTP/2 又是什么

HTTP/2 不是一种跟 HTTP 完全没关系的新协议。

它本质上还是 HTTP 家族的一员,只是比传统 HTTP/1.x 更现代、更高效。

你可以把它理解成:

HTTP/2 = 对 HTTP 这套通信规则做了一次大升级。

升级点里,最重要的是两个:

  1. 一条连接可以长期复用
  2. 一条连接里可以并发跑多个流

这句话第一次听会很抽象,所以继续用生活类比讲。


HTTP/1.x 更像单车道小路

假设你和仓库之间只有一条比较窄的路。

虽然这条路能用,但很多车要排队:

  • 订单车先过
  • 图片车等着
  • 报表车再等
  • 通知车继续排队

这样的问题是:

  • 容易堵
  • 效率不高
  • 一个慢任务容易拖住后面的任务

这就像早期 HTTP 使用体验里,虽然也能通信,但同一条连接上的并发利用率不高。


HTTP/2 更像多车道高速公路

HTTP/2 的思路不是”有多少请求就修多少路”,而是:

保留少量长期存在的大路,然后让很多车在不同车道上同时跑。

也就是说:

  • 路先修好
  • 不要老拆老建
  • 同一条路上有多个车道
  • 多辆车可以同时运输不同货物

这就是为什么大家会说:

HTTP/2 更强调在少量长期存在的连接上复用和并发多个流。

翻译成人话就是:

不要每次请求都新建一条连接,而是在少数几条长期存在的连接里,同时跑很多独立任务。


那”流”到底是什么

如果你还没学过协议细节,可以先不要死磕”流”的精确定义。

你只要先把它理解成:

同一条连接里的一个独立任务通道。

比如同一条高速公路上:

  • 1 号车道跑订单
  • 2 号车道跑图片
  • 3 号车道跑通知
  • 4 号车道跑报表

它们都在一条大路上,但彼此相对独立,不必完全串行排队。

这就是”多个流”。


第四层:gRPC 是什么

讲到这里,再看 gRPC 就容易多了。

gRPC 不是在和 TCP、HTTP 平级竞争。

它更像是:

建立在 HTTP/2 之上的一套远程调用框架。

你可以把 gRPC 理解成:

它不是只规定”请求怎么发”,而是进一步规定”服务之间怎么像调用本地函数一样互相调用”。

比如你写代码时可能会想这样调用:

CreateOrder(userId, goodsId)
GetUserProfile(userId)
SendMessage(content)

在本地进程里,函数调用很自然。 但如果这个函数实际上在另一台机器上,你就需要一套机制来完成:

  • 参数怎么编码
  • 方法名怎么传过去
  • 返回值怎么带回来
  • 错误怎么表达
  • 超时、重试、流式传输怎么处理

gRPC 解决的就是这一层问题。


gRPC 和 HTTP/2 的关系

这句话可以直接背下来:

gRPC 通常跑在 HTTP/2 上。

为什么?

因为 gRPC 很适合这种场景:

  • 高频调用
  • 长连接复用
  • 低延迟
  • 流式通信
  • 一个连接里并发多个请求

而 HTTP/2 刚好非常适合承载这些能力。

所以它们的关系不是:

  • 二选一
  • 谁替代谁

而是:

gRPC 借助 HTTP/2 作为底层传输通道。

再往下一层,HTTP/2 又通常跑在 TCP 上。

所以整条链路可以理解成:

gRPC

HTTP/2

TCP

再换一个更完整的类比

你可以把整个通信过程想成一家物流公司。

TCP

负责修高速公路,保证车能从 A 地到 B 地,并且尽量不丢件、不乱序。

HTTP

规定物流面单怎么写、箱子怎么打包、签收单怎么返回。

HTTP/2

把原来单车道的小路升级成多车道高速公路,让同一条路上可以同时跑很多运输任务。

gRPC

不只是寄”包裹”,而是直接定义一套”业务调用规则”:

  • 我要调用哪个服务
  • 方法名是什么
  • 参数是什么
  • 返回值是什么
  • 错误码怎么传

所以 gRPC 更像是:

在高等级公路和统一物流规则之上,再加一层标准化的业务调度系统。


为什么很多中间件和云产品都喜欢 gRPC

因为它很适合现代服务之间的频繁通信。

比如:

  • 微服务之间互调
  • AI 推理服务调用
  • 消息代理层通信
  • 网关和后端服务通信

它的优势通常在于:

  • 连接复用好
  • 编码效率高
  • 接口定义清晰
  • 流式能力强
  • 更适合服务间通信

所以你会发现,很多新一代中间件文档里,经常出现”基于 gRPC""通过 HTTP/2 通信”这种表述。


那 REST 和 gRPC 又是什么关系

这也是一个高频疑问。

你可以这样简单区分:

REST

更像”面向资源”的 HTTP 接口风格。

例如:

  • GET /users/123
  • POST /orders

它更适合:

  • 对外开放接口
  • 给前端调用
  • 人类更容易理解和调试

gRPC

更像”面向方法调用”的服务通信方式。

例如:

  • GetUser
  • CreateOrder
  • SendMessage

它更适合:

  • 内部服务之间通信
  • 高频 RPC 调用
  • 强类型接口约束
  • 流式场景

它们不是谁绝对替代谁,而是各有适用场景。


回到最常见的误区

误区一:HTTP 和 TCP 是一回事

不是。

  • TCP 是传输层
  • HTTP 是应用层

一个负责”路通不通”,一个负责”交流规则是什么”。

误区二:HTTP/2 是完全不同的新协议

也不是。

HTTP/2 仍然是 HTTP 家族,只是做了现代化升级。

误区三:gRPC 和 HTTP/2 是平级关系

不是。

更准确地说:

gRPC 通常建立在 HTTP/2 之上。

误区四:用了 gRPC 就不用 TCP

也不对。

底层传输通常还是要落到 TCP 上。


最后用一张关系图记住

业务调用层:gRPC
通信协议层:HTTP/2
传输保障层:TCP

如果你更喜欢生活化版本,也可以记成:

gRPC = 业务调度规则
HTTP/2 = 高效运输规范
TCP = 可靠公路系统

最后总结

把这四个概念压缩成一句最实用的话:

TCP 负责把路修稳,HTTP 负责规定交流格式,HTTP/2 负责把这条路升级成高效多车道,gRPC 则是在这套基础上,进一步把跨机器通信包装成标准化的远程方法调用。


参考资料

你可能还感兴趣