4 层代理、7 层代理的“层”到底指的是什么?

2021-01-17 12:16:41 +08:00
 zhoudaiyu

对网络一直处于懵逼状态,我们说的 Nginx 的 4 层代理通常是 TCP 代理,7 层是 HTTP 层代理,4 层代理就是不管这个数据包是否承载 HTTP 协议数据,只解析到 IP 和端口,然后做转发。而 7 层代理要解析到 HTTP 层,比如 URL 、请求头、请求体等,然后做的还是转发,相当于可以判断如何转发的信息比 4 层的更丰富了。那么假如不需要解析 HTTP 层信息,那是不是可以所有转发都只走 4 层?还有就是一直不太清楚 LVS 到底是 4 层转发还是 3 层?假如我上面说的没问题的话,那 LVS 就是个 4 层代理吧?上次问了这个问题有几个兄弟说是个 3 层代理。

4620 次点击
所在节点    问与答
22 条回复
shawshi
2021-01-17 12:17:47 +08:00
tcp 协议
bianzhifu
2021-01-17 12:24:51 +08:00
OSI Model
chaleaoch
2021-01-17 12:30:10 +08:00
四层, 带端口都是四层. 没听说过 不带端口的转发.
doublleft
2021-01-17 13:14:21 +08:00
OSI
NSAgold
2021-01-17 13:36:19 +08:00
OSI 七层模型
cassyfar
2021-01-17 13:42:42 +08:00
楼层的层
deorth
2021-01-17 13:52:59 +08:00
哪来的三层代理,三层转发叫路由。
LVS 有个 DR ( Direct Routing )模式,如字面意思一样,这就是个路由转发
anubu
2021-01-17 14:44:21 +08:00
“层”是 OSI 模型中的网络分层,4 层是传输层,7 层是应用层。
4 层代理更通用些,一些没有域名的场景也可以使用,7 层代理则一般只针对域名进行代理分发。就多个 Web 服务来说,大部分场景,不管用不用 4 层代理,7 层代理都会使用。
LVS 是一个 4 层代理,有些混淆的原因可能是在 概念>实现>实操 环节没梳理清楚。LVS 的配置工具是 ipvsadm,大部分情况下不会直接使用,而是配合 keepalived 来一起使用的。keepalived 是一个 IP 高可用方案,用来控制 3 层(网络层)数据。这可能是理解混淆的地方。
zhoudaiyu
2021-01-17 14:45:35 +08:00
@deorth
@anubu 二位,LVS 到底是哪层的啊
towser
2021-01-17 15:17:37 +08:00
层指的是什么?
指 OSI 参考模型中对网络的分层。

那么假如不需要解析 HTTP 层信息,那是不是可以所有转发都只走 4 层?
可以。

LVS 到底是 4 层转发还是 3 层?
作为均衡负载器,LVS 有多种模式,可以调度七层、四层、三层流量。如果问 LVS 自身实现,它工作在三层和四层之间。我倾向于认为其工作在三层。

那 LVS 就是个 4 层代理吧?
差不多可以这么说,LVS 大部分时候都是作为四层均衡负载器使用。

上次问了这个问题有几个兄弟说是个 3 层代理
我想这主要是口头表达上的差异。在 DR 模式下,LVS 需要操作 IP 和 Mac,所以可以说 LVS 是三层代理(准确一点说,是三层「转发」)。
zhoudaiyu
2021-01-17 16:15:05 +08:00
@towser 大佬,你解答的是目前最详细的,十分感谢!再问个小白的问题 (目前没找到靠谱答案)比如一个 HTTP POST 请求,通常把 payload 放在请求体中,那么是否可以用 TCP 层承载数据呢?
mansurx
2021-01-17 16:20:23 +08:00
@zhoudaiyu #11 一般意义上的 HTTP 协议是工作在 TCP 的 80 、443 端口的。它的数据包(包括 http 头部和 payload 部分)本来就是 TCP 负载的一种,自然也就是在 TCP 包的 data 部分。
zhoudaiyu
2021-01-17 16:23:54 +08:00
@mansurx 谢谢,我好大致明白您的意思了,就是 TCP 上层的协议的全部数据都在 TCP 的 data 里
NSAgold
2021-01-17 16:30:33 +08:00
@zhoudaiyu 可以看一下《计算机网络基础》 这门课的教科书在这方面讲的还是比较详细的。
HTTP 等应用层协议是在底层(运输层等)的基础之上的。
具体可以参考 OSI 7 层模型 tcp/ip 四层模型 和 五层模型的知识。
Tyuans
2021-01-17 20:11:59 +08:00
我是看了看计算机网络的书,然后听了听 b 站的课,基本的都差不多了。
zw1027
2021-01-17 22:25:56 +08:00
图解 TCP/IP,图解 HTTP 解君愁
masker
2021-01-17 22:35:36 +08:00
建议买一本 图解 TCP/IP 自己啃。
towser
2021-01-17 23:13:48 +08:00
@zhoudaiyu

那么是否可以用 TCP 层承载数据呢
实际上 HTTP1 和 2 就是用 TCP 承载数据的。HTTP 的所有数据都封装在 TCP 的载荷部分。
HTTP3 不再使用 TCP 而转向 UDP ( QUIC )。
learningman
2021-01-18 00:38:28 +08:00
首先是数据,然后加上 http 头 7 层,加上 TCP 头 4 层,加上 IO 头三层
ETiV
2021-01-18 04:18:14 +08:00
https://linuxhint.com/osi_network_layer_analsysis_wireshark/
https://medium.com/the-cabin-coder/viewing-osi-layers-on-wireshark-a51b77cfbd72

光靠文字还是太抽象了,你可以去搜一下 Wireshark OSI layers
配合抓包工具一起理解(当然你也可以自己抓各种其他协议的包去看)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745622

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX