日常与大佬沟通或看文章,时不时总会遇到两个概念“四层代理负载均衡”和“七层代理负载均衡”,那么,所谓的四层代理和七层代理分别指的是什么?又在什么场景下用到呢?这篇文章就带大家聊聊这方面的知识点。

OSI七层模型

要聊几层代理,需要先看一下网络分层,在之前的文章中也提到,标准的七层网络分层,也就是OSI七层模型。TCP/IP五层模型和TCP/IP四层模型是从OSI七层优化而来。

这里所谈的四层代理和七层代理,便是基于OSI七层模型来划分的。

从下往上看,第四层为传输层、第七层为应用层。再来看看每层对应的常见协议:

四层对应的是TCP/UDP协议,也就常说的IP+端口。七层已经是非常具体的应用层协议了。因此,所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;

同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。二层负载均衡通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址。

四层代理

四层代理主要工作于OSI模型中的传输层,传输层主要处理消息的传递,而不管消息的内容。TCP就是常见的四层协议。

**四层负载均衡只针对由上游服务发送和接收的网络包,而并不检查包内的具体内容是什么。**四层负载均衡可以通过检查TCP流中的前几个包,从而决定是否限制路由。

因此,四层负载均衡的核心就是IP+端口层面的负载均衡,不涉及具体的报文内容。

七层代理

七层代理主要工作于OSI模型的应用层,应用层主要用来处理消息内容的。比如,HTTP便是常见的七层协议。

七层负载均衡服务器起到了反向代理的作用,Client端要先与七层负载均衡设备三次握手建立TCP连接,把要访问的报文信息发送给七层负载均衡。

七层负载均衡器基于消息中内容( 比如URL或者cookie中的信息 )来做出负载均衡的决定。之后,七层负载均衡器建立一个新的TCP连接来选择上游服务并向这个服务发出请求。

使用七层负载均衡的设备经常被用于反向代理

两者区别

先通过一张图来看看四层代理和七层代理的区别:

上图中最直观的区别是四层代理只进行了一次TCP请求,而七层代理进行了两次TCP请求。

四层代理:四层代理拆解报文至传输层,根据请求的服务器IP+端口号进行转发;四层代理是由后端服务器进行处理,包括报文的封装都是后端服务器进行封装;四层代理相当于是一个路由器。

七层代理:七层代理拆解报文至应用层,分析用户请求的资源,然后负载均衡器会代替用户请求后端服务器的资源;后端服务器把资源返回给负载均衡器,负载均衡器对资源再次进行封装,然后返还给客户端;在此过程中,需要建立两次TCP连接,一次是客户端,一次是后端的服务器。

七层负载均衡的CPU密集程度比基于包的四层负载均衡更高。七层负载均衡能够让均衡器做更小粒度的负载均衡决定,并且会根据消息的内容( 比如压缩和加密 )利用最优化方式做出改变。它运用缓存的方式来卸载上游服务较慢的连接,并显著地提高了性能。

负载均衡器

负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。

负载均衡分为L4 switch(四层交换),即在OSI第4层工作,也就是TCP层。四层负载均衡器(如:LVS,F5)不关心应用协议(如HTTP/FTP/MySQL等)。

L7 switch(七层交换),OSI的最高层,应用层。七层负载均衡器(如: HAProxy,MySQL Proxy)能理解应用协议。

Nginx、LVS、HAProxy是目前使用最广泛的三种负载均衡软件。

应用场景

七层负载均衡器可以是使整个网络更智能化,比如可以通过七层代理将图片类、静态文件类(JS、CSS)请求转发到特定的服务器,利用缓存技术达到更好的性能。

从技术原理上,可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。例如Nginx或者Apache上部署的功能可以前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。

针对SYN Flood攻击,四层模型下攻击请求会被转发到后端服务器上,而七层模式下则可在负载均衡器上进行拦截,不影响后台服务器正常运营。针对SQL注入等情况,也可以通过在七层代理设置策略进行特定报文的过滤,从应用层面进一步提高系统整体安全。

总之,七层负载均衡,主要着重于应用HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。 四层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。

虽然四层代理性能比七层高很多,但目前像Nginx这类负载均衡器已经可以满足大多数场景的需求,应用最多的也是像Nginx这类七层负载均衡器。

小结

看似简单的四层代理和七层代理,其实涉及到很多基础的知识点,比如网络分层、网络通信协议、负载均衡器等,更进一步像微服务架构,Service Mesh架构以及前端系统性能优化等方面都涉及该知识点。

通过这篇文章,你学到吗?更多实战知识点,持续关注吧。

博主简介:《SpringBoot技术内幕》技术图书作者,酷爱钻研技术,写技术干货文章。

公众号:「程序新视界」,博主的公众号,欢迎关注~

技术交流:请联系博主微信号:zhuan2quan


程序新视界”,一个100%技术干货的公众号


架构师聊的四层代理和七层代理,都在聊什么?相关推荐

  1. 与大佬沟通,聊到四层代理和七层代理分别指的是什么这个问题时?会擦出什么火花呢

    日常与大佬沟通或看文章,时不时总会遇到两个概念"四层代理负载均衡"和"七层代理负载均衡",那么,所谓的四层代理和七层代理分别指的是什么?又在什么场景下用到呢?这 ...

  2. 所谓的四层代理和七层代理分别指的是什么?又在什么场景下用到呢?

    日常与大佬沟通或看文章,时不时总会遇到两个概念"四层代理负载均衡"和"七层代理负载均衡",那么,所谓的四层代理和七层代理分别指的是什么?又在什么场景下用到呢?这 ...

  3. 负载均衡集群 [ 1 ] ---集群的认识,四层负载,七层负载 ,LVS 实现四层负载均衡

    文章目录 负载均衡集群 1.集群是什么? 2.负载均衡集群技术 3.负载均衡集群技术的实现 4.负载均衡分类 5.四层负载均衡(基于IP+端口的负载均衡) 6.七层的负载均衡(基于虚拟的URL或主机I ...

  4. 软考-架构师-第三章-数据库系统 第七节 数据库设计(读书笔记)

    版权声明 主要针对希赛出版的架构师考试教程<系统架构设计师教程(第4版)>,作者"希赛教育软考学院".完成相关的读书笔记以便后期自查,仅供个人学习使用,不得用于任何商业 ...

  5. 《测试架构师的修炼之道》七—测试策略实战

    一.开始 此时,软件测试架构师对项目的了解还非常有限,在制定测试策略之前,收集了解更多的项目信息非常重要: ·项目的范围. ·人力投入. ·历史情况. ·-- 二.初次使用'四步测试策略制定法' 2. ...

  6. 《沈剑架构师训练营》第2章 - 接入层架构

    6.接入层:反向代理,负载均衡,我有话要说 no6:代理和反向代理是什么? no6:一般用什么做反向代理? 软件层面:nginx/apache 操作系统层面:LVS 硬件:F5 no6:反向代理能解决 ...

  7. 四层LVS与七层Nginx负载均衡的区别

    一.四层负载均衡与七层负载均衡: (1)四层负载均衡: 四层负载均衡工作在 OSI 七层模型的第四层(传输层),指的是负载均衡设备通过报文中的目标IP地址.端口和负载均衡算法,选择到达的目标内部服务器 ...

  8. 四层负载均衡 七层负载均衡

    负载均衡,一般是指将客户端流量分配到不同服务器上的一个服务.他的功能一般有三个: 将客户端请求分配到多个服务器 保证分配请求时本身高可用,且被分配的服务都是可用的 根据需求,弹性增加或者减小服务器的数 ...

  9. mac mysql 的lb_四层LB和七层LB

    总结: 基于MAC地址玩的是二层(虚拟MAC地址接收请求,然后再分配到真实的MAC地址), 基于IP地址玩的是三层(虚拟IP地址接收请求,然后再分配到真实的IP地址), 基于IP地址加端口玩的是四层( ...

最新文章

  1. 新版数据库分页方法(Sql server2012)
  2. 用泛型实现参数化类型
  3. 深入Python(1): 字典排序 关于sort()、reversed()、sorted()、cmp()等
  4. MongoDB基础命令
  5. 在linux安装光盘启动不了,linux光盘启动
  6. mysql典型安装和自定义_Mysql8.0.19下载安装—windows版本自定义安装
  7. python语言适合哪些领域的计算问题数据处理和文本挖掘_R和Python中文本挖掘8大入门指南...
  8. Judge whether the user is in some windows group.
  9. 技巧:MacOS 中快速复制文件或文件夹路径
  10. jQuery.extend函数详细用法![转]
  11. transform-style: preserve-3d「In CSS」
  12. crazybox路由器解决授权码问题
  13. c语言实现生成随机数
  14. CSS实现立体字的效果
  15. 前端“Wed, 22 Sep 2021 15:48:33 GMT“时间转换成“2021-09-22 15:48:33
  16. jerryscript有关“error: inlining failed in call to always_inline”问题的解决
  17. 对零基础java学习者的建议
  18. 《Effective C++》》阅读笔记
  19. Matlab 分段函数怎么画 表示方式 (推荐)
  20. SSL证书价格为什么差异如此大?

热门文章

  1. 尼康D500套机相机黑屏是怎么回事
  2. 饱和气压与温度的关系_饱和蒸汽温度与压力关系
  3. 如何使用微信、支付宝提现免手续费
  4. QT鼠标悬停和点击功能
  5. CDA数据分析LEVEL1--数据结构
  6. matlab学习计划11.4
  7. 小白练习cocos creator——property用法记录
  8. matlab 二元微分方程组,求助,matlab求解二元二阶的常微分方程组
  9. Android运营商名字显示规则
  10. 经纬度与距离的换算关系