对网络一直处于懵逼状态,我们说的 Nginx 的 4 层代理通常是 TCP 代理,7 层是 HTTP 层代理,4 层代理就是不管这个数据包是否承载 HTTP 协议数据,只解析到 IP 和端口,然后做转发。而 7 层代理要解析到 HTTP 层,比如 URL 、请求头、请求体等,然后做的还是转发,相当于可以判断如何转发的信息比 4 层的更丰富了。那么假如不需要解析 HTTP 层信息,那是不是可以所有转发都只走 4 层?还有就是一直不太清楚 LVS 到底是 4 层转发还是 3 层?假如我上面说的没问题的话,那 LVS 就是个 4 层代理吧?上次问了这个问题有几个兄弟说是个 3 层代理。
1
shawshi 2021-01-17 12:17:47 +08:00
tcp 协议
|
2
bianzhifu 2021-01-17 12:24:51 +08:00 1
OSI Model
|
3
chaleaoch 2021-01-17 12:30:10 +08:00
四层, 带端口都是四层. 没听说过 不带端口的转发.
|
4
doublleft 2021-01-17 13:14:21 +08:00
OSI
|
5
NSAgold 2021-01-17 13:36:19 +08:00
OSI 七层模型
|
6
cassyfar 2021-01-17 13:42:42 +08:00
楼层的层
|
7
deorth 2021-01-17 13:52:59 +08:00
哪来的三层代理,三层转发叫路由。
LVS 有个 DR ( Direct Routing )模式,如字面意思一样,这就是个路由转发 |
8
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 层(网络层)数据。这可能是理解混淆的地方。 |
10
towser 2021-01-17 15:17:37 +08:00 3
层指的是什么?
指 OSI 参考模型中对网络的分层。 那么假如不需要解析 HTTP 层信息,那是不是可以所有转发都只走 4 层? 可以。 LVS 到底是 4 层转发还是 3 层? 作为均衡负载器,LVS 有多种模式,可以调度七层、四层、三层流量。如果问 LVS 自身实现,它工作在三层和四层之间。我倾向于认为其工作在三层。 那 LVS 就是个 4 层代理吧? 差不多可以这么说,LVS 大部分时候都是作为四层均衡负载器使用。 上次问了这个问题有几个兄弟说是个 3 层代理 我想这主要是口头表达上的差异。在 DR 模式下,LVS 需要操作 IP 和 Mac,所以可以说 LVS 是三层代理(准确一点说,是三层「转发」)。 |
11
zhoudaiyu OP @towser 大佬,你解答的是目前最详细的,十分感谢!再问个小白的问题 (目前没找到靠谱答案)比如一个 HTTP POST 请求,通常把 payload 放在请求体中,那么是否可以用 TCP 层承载数据呢?
|
12
mansurx 2021-01-17 16:20:23 +08:00
@zhoudaiyu #11 一般意义上的 HTTP 协议是工作在 TCP 的 80 、443 端口的。它的数据包(包括 http 头部和 payload 部分)本来就是 TCP 负载的一种,自然也就是在 TCP 包的 data 部分。
|
13
zhoudaiyu OP @mansurx 谢谢,我好大致明白您的意思了,就是 TCP 上层的协议的全部数据都在 TCP 的 data 里
|
14
NSAgold 2021-01-17 16:30:33 +08:00
@zhoudaiyu 可以看一下《计算机网络基础》 这门课的教科书在这方面讲的还是比较详细的。
HTTP 等应用层协议是在底层(运输层等)的基础之上的。 具体可以参考 OSI 7 层模型 tcp/ip 四层模型 和 五层模型的知识。 |
15
Tyuans 2021-01-17 20:11:59 +08:00
我是看了看计算机网络的书,然后听了听 b 站的课,基本的都差不多了。
|
16
zw1027 2021-01-17 22:25:56 +08:00
图解 TCP/IP,图解 HTTP 解君愁
|
17
masker 2021-01-17 22:35:36 +08:00 via Android
建议买一本 图解 TCP/IP 自己啃。
|
18
towser 2021-01-17 23:13:48 +08:00
@zhoudaiyu
那么是否可以用 TCP 层承载数据呢 实际上 HTTP1 和 2 就是用 TCP 承载数据的。HTTP 的所有数据都封装在 TCP 的载荷部分。 HTTP3 不再使用 TCP 而转向 UDP ( QUIC )。 |
19
learningman 2021-01-18 00:38:28 +08:00 via Android
首先是数据,然后加上 http 头 7 层,加上 TCP 头 4 层,加上 IO 头三层
|
20
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 配合抓包工具一起理解(当然你也可以自己抓各种其他协议的包去看) |
22
julyclyde 2021-01-18 12:38:27 +08:00
你还是继续读吧
你这问题根本就是 NULL |