V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhoudaiyu
V2EX  ›  问与答

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

  •  
  •   zhoudaiyu · 2021-01-17 12:16:41 +08:00 via iPhone · 4619 次点击
    这是一个创建于 1404 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    22 条回复    2021-01-18 12:38:27 +08:00
    shawshi
        1
    shawshi  
       2021-01-17 12:17:47 +08:00
    tcp 协议
    bianzhifu
        2
    bianzhifu  
       2021-01-17 12:24:51 +08:00   ❤️ 1
    OSI Model
    chaleaoch
        3
    chaleaoch  
       2021-01-17 12:30:10 +08:00
    四层, 带端口都是四层. 没听说过 不带端口的转发.
    doublleft
        4
    doublleft  
       2021-01-17 13:14:21 +08:00
    OSI
    NSAgold
        5
    NSAgold  
       2021-01-17 13:36:19 +08:00
    OSI 七层模型
    cassyfar
        6
    cassyfar  
       2021-01-17 13:42:42 +08:00
    楼层的层
    deorth
        7
    deorth  
       2021-01-17 13:52:59 +08:00
    哪来的三层代理,三层转发叫路由。
    LVS 有个 DR ( Direct Routing )模式,如字面意思一样,这就是个路由转发
    anubu
        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 层(网络层)数据。这可能是理解混淆的地方。
    zhoudaiyu
        9
    zhoudaiyu  
    OP
       2021-01-17 14:45:35 +08:00 via iPhone
    @deorth
    @anubu 二位,LVS 到底是哪层的啊
    towser
        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 是三层代理(准确一点说,是三层「转发」)。
    zhoudaiyu
        11
    zhoudaiyu  
    OP
       2021-01-17 16:15:05 +08:00 via iPhone
    @towser 大佬,你解答的是目前最详细的,十分感谢!再问个小白的问题 (目前没找到靠谱答案)比如一个 HTTP POST 请求,通常把 payload 放在请求体中,那么是否可以用 TCP 层承载数据呢?
    mansurx
        12
    mansurx  
       2021-01-17 16:20:23 +08:00
    @zhoudaiyu #11 一般意义上的 HTTP 协议是工作在 TCP 的 80 、443 端口的。它的数据包(包括 http 头部和 payload 部分)本来就是 TCP 负载的一种,自然也就是在 TCP 包的 data 部分。
    zhoudaiyu
        13
    zhoudaiyu  
    OP
       2021-01-17 16:23:54 +08:00 via iPhone
    @mansurx 谢谢,我好大致明白您的意思了,就是 TCP 上层的协议的全部数据都在 TCP 的 data 里
    NSAgold
        14
    NSAgold  
       2021-01-17 16:30:33 +08:00
    @zhoudaiyu 可以看一下《计算机网络基础》 这门课的教科书在这方面讲的还是比较详细的。
    HTTP 等应用层协议是在底层(运输层等)的基础之上的。
    具体可以参考 OSI 7 层模型 tcp/ip 四层模型 和 五层模型的知识。
    Tyuans
        15
    Tyuans  
       2021-01-17 20:11:59 +08:00
    我是看了看计算机网络的书,然后听了听 b 站的课,基本的都差不多了。
    zw1027
        16
    zw1027  
       2021-01-17 22:25:56 +08:00
    图解 TCP/IP,图解 HTTP 解君愁
    masker
        17
    masker  
       2021-01-17 22:35:36 +08:00 via Android
    建议买一本 图解 TCP/IP 自己啃。
    towser
        18
    towser  
       2021-01-17 23:13:48 +08:00
    @zhoudaiyu

    那么是否可以用 TCP 层承载数据呢
    实际上 HTTP1 和 2 就是用 TCP 承载数据的。HTTP 的所有数据都封装在 TCP 的载荷部分。
    HTTP3 不再使用 TCP 而转向 UDP ( QUIC )。
    learningman
        19
    learningman  
       2021-01-18 00:38:28 +08:00 via Android
    首先是数据,然后加上 http 头 7 层,加上 TCP 头 4 层,加上 IO 头三层
    ETiV
        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
    配合抓包工具一起理解(当然你也可以自己抓各种其他协议的包去看)
    zhoudaiyu
        21
    zhoudaiyu  
    OP
       2021-01-18 09:51:58 +08:00
    @zw1027 #16
    @masker #17 感谢,我买了 TCP/IP 详解,但是太难了啃不下去
    julyclyde
        22
    julyclyde  
       2021-01-18 12:38:27 +08:00
    你还是继续读吧
    你这问题根本就是 NULL
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:18 · PVG 08:18 · LAX 16:18 · JFK 19:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.