YEN HARVEY
cd ../notes

网络 / 后端

我一开始以为七层代理是套了七层 CDN

7 min read
夜色中的网络拓扑图,屏幕上画着浏览器、边缘节点和源站。
夜色中的网络拓扑图,屏幕上画着浏览器、边缘节点和源站。

最近看到了腾讯的 EdgeOne,简称 EO。

我对这种产品有兴趣,不是因为第一次看到“一站式”这几个字。Cloudflare 我已经用过了,DNS、CDN、安全、证书、规则配置都放在一个地方,确实很好用。自己折腾站点的时候,少开几个控制台,少对几遍配置,出了问题少猜一层,这个体验差别很明显。

EO 真正让我多看两眼的点在于:它是腾讯云的。国内站点要备案,腾讯云这边的链路更顺;COS、云函数、证书、DNS、CDN、安全这些东西也更容易和腾讯云全家桶打通。而我现在基本上很多东西都放在腾讯云上,所以如果它能做出接近 Cloudflare 的一站式体验,对我来说就很现实。

然后我在 EO 里面看到了一个词:七层代理

我第一反应很离谱:

七层代理?这是套了七层 CDN 吗?

当时脑子里真的差不多是这个画面:

用户 -> CDN1 -> CDN2 -> CDN3 -> CDN4 -> CDN5 -> CDN6 -> CDN7 -> 源站

这就很尴尬。

后来才发现,这里的“七层”不是数量,不是代理套了七层,也不是 CDN 套娃。它说的是 OSI Model 的第七层

不是七个 CDN

先把这个误会拆掉。

“七层代理”里的七层,指的是 Layer 7,也就是应用层。它不是有七层代理节点,而是这个代理工作在第七层,能理解应用层协议。

比如 HTTP 请求长这样:

GET /posts/123 HTTP/1.1
Host: acghub.net
User-Agent: Chrome

七层代理能看懂这些东西,所以它能按路径、域名、Header、Cookie 去做转发规则。

比如:

location /api {
    proxy_pass http://api-server;
}

location /assets {
    proxy_pass http://static-server;
}

这就是七层代理做的事:它不是只转发一个连接,而是理解 HTTP 语义之后再决定怎么处理请求。

OSI Model 到底在说什么

我之前看 Hussein 的视频也看到 OSI Model,但说实话,一开始是一知半解。

OSI 七层大概是这样:

层级名字大概在管什么
L7应用层HTTP、DNS、SMTP 这类应用协议
L6表示层编码、压缩、加密这类表示问题
L5会话层会话建立、维持、恢复
L4传输层TCP、UDP,端到端传输
L3网络层IP,路由,跨网络转发
L2数据链路层MAC,以太网,同一链路内传输
L1物理层网线、光纤、电信号

如果只是背这个表,其实没什么用。背完也还是不知道七层代理和自己写后端有什么关系。

真正有用的是把它和日常看到的东西对上。

flowchart TD
    A["浏览器发起 HTTPS 请求"] --> B["EO / Cloudflare 边缘节点"]
    B --> C{"七层规则"}
    C -->|"Host = acghub.net"| D["站点源站"]
    C -->|"Path 以 /api 开头"| E["API 服务"]
    C -->|"静态资源"| F["缓存 / CDN"]

这张图里,EO 或 Cloudflare 之所以能按 Host、Path、Header 做判断,就是因为它站在应用层看请求。它不是只看到一个 TCP 连接,而是能看到 HTTP 里面的内容。

四层代理和七层代理差在哪

搞懂七层代理以后,四层代理也顺手明白了。

四层代理工作在传输层,也就是 TCP/UDP 这一层。它关心的是:

源 IP
目标 IP
源端口
目标端口
TCP 还是 UDP

它不知道你访问的是:

/posts/123
/api/login
/admin

因为这些是 HTTP 里的内容,已经是应用层了。

所以四层代理更像是:

这个 TCP 连接来了,转给后面的某台机器。

七层代理则更像是:

这个 HTTP 请求来了,我先看 Host、Path、Header,再决定转给谁。

这两个不是谁高级谁低级的问题,而是工作的位置不一样。

四层代理通常更轻,性能好,适合做 TCP/UDP 级别的转发。七层代理更聪明,能做更细的规则,但也要解析协议,成本自然更高一点。

CDN、WAF、反代其实经常叠在一起

我一开始会把“七层代理”理解成“七层 CDN”,本质上是因为现在这些边缘平台把太多东西打包在一起了。

以 EO 或 Cloudflare 这种产品为例,它可能同时在做:

  • DNS 解析;
  • CDN 缓存;
  • HTTPS 证书;
  • WAF 防护;
  • Bot 识别;
  • 反向代理;
  • 边缘规则;
  • 源站回源。

于是看起来就像一个超级入口。你把域名接过去,用户所有流量先到它,再由它决定缓存、拦截、回源、改 Header、走哪个源站。

但这里要分清楚:

CDN:重点是缓存和就近访问
WAF:重点是安全检测和拦截
反向代理:重点是代表源站接收请求再转发
七层代理:重点是理解 HTTP 等应用层协议

它们可以出现在同一个产品里,但概念不是一回事。

这也是我这次最大的收获:不要看到一个控制台里放在一起,就把概念也揉成一团。

TLS 又算哪一层

这里还有一个容易卡住的点:HTTPS 里的 TLS 到底算哪一层?

如果硬按 OSI 说,TLS 很容易被放到表示层,因为它负责加密和表示。但真实工程里大家更多按 TCP/IP 模型讨论:

HTTP
TLS
TCP
IP
以太网

也就是说,HTTP 跑在 TLS 上,TLS 跑在 TCP 上,TCP 再跑在 IP 上。

这比死背“第几层”更有用。

所以我现在更倾向于这样记:

HTTP 关心请求语义
TLS 关心加密通道
TCP 关心可靠传输
IP 关心路由转发
链路层关心同一段网络怎么发出去

这套顺序想明白以后,再回头看 OSI 七层,就不会那么抽象了。

为什么这个东西对后端也重要

以前我会觉得 OSI Model 离后端很远,好像是网络工程师才需要背的东西。

但现在发现不是。

比如你部署一个后端服务,经常会碰到这些问题:

  • 为什么 Nginx 能按 /api 转发?
  • 为什么 TCP 负载均衡不能按 URL 分流?
  • 为什么 CDN 能缓存静态资源,但动态接口要小心?
  • 为什么源站拿到的 IP 可能是代理节点 IP?
  • 为什么要看 X-Forwarded-ForCF-Connecting-IP
  • 为什么 WebSocket、gRPC、HTTP/2、QUIC 会影响网关选型?

这些问题背后其实都绕不开“它工作在哪一层”。

七层代理能看 HTTP,所以它能改 Header、做路由、做 WAF、做缓存规则。四层代理只看连接,所以它更像是把流量按 IP 和端口分过去。

这不是考试知识点,是部署的时候真的会碰到。

最后

这次最有意思的地方,不是我学会了 OSI 七层每一层叫什么。

而是我意识到:很多技术名词听起来很吓人,其实只是我还没把它放到正确的地图上。

“七层代理”这个词,一开始我以为是七层 CDN 套娃。后来才知道,它只是说这个代理站在应用层,能看懂 HTTP。

这样一来,EO、Cloudflare、Nginx、反向代理、CDN、WAF 这些东西突然就没那么乱了。它们不是一堆互相覆盖的黑盒,而是分别站在不同位置,处理不同层次的问题。

以后再看到类似的词,我大概会先问自己一句:

它到底工作在哪一层?它到底看得见什么?

能回答这两个问题,很多网络概念就没那么玄学了。

作者头像
yen@harvey:~$ exit 0