Web服务器群集:四层代理与七层代理

news2024/9/20 7:49:25

目录

一、理论

1.OSI七层模型

2.四层代理

3.七层代理

4.四层代理与七层代理区别

5.负载均衡器

6.常见的代理组件

7.应用场景

二、总结


一、理论

1.OSI七层模型

(1)概念

标准的七层网络分层是OSI七层模型,TCP/IP五层模型和TCP/IP四层模型是从OSI七层优化而来。

在后台服务部署、运维的场景中,经常会用到代理,常见的有四层代理和七层代理,它们是基于OSI七层模型来划分的。

 (2)每层对应的常见协议



 

 (3)OSI及协议

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

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

(4)代理

代理(英语:Proxy)也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

2.四层代理

(1)概念

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

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

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

网络层通信的粒度是物理终端设备的话,IP就是标记不同物理设备的符号,那么传输层通信的粒度是进程,端口就是标记不同进程的符号。

四层代理的四层就是OSI七层模型中的传输层;四层代理是基于IP+端口做的代理。四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器。

以常见的TCP为例,从三次握手的第一次握手开始,代理设备在接收到第一个来自客户端的SYN 请求时,即按照一定的策略选择一个被代理的后端服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。

TCP连接建立,即三次握手,实际上是客户端和后端服务器建立的,代理设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

3.七层代理

(1)概念

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

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

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

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

(2)功能

七层代理的七层就是OSI七层模型中的应用层;七层代理是基于内容数据做的代理(理解应用层中的应用数据),最终的转发规则取决于内容的差异。鉴于七层应用协议非常广泛,现在的七层代理主要是指HTTP代理。

和四层代理不同的是,七层代理必须要先和代理设备三次握手后,才能得到七层(HTTP层)的具体内容,然后再转发。意思就是代理机必须要与客户端和后端服务器的机器都要建立连接。显然,七层代理对代理设备的性能要求要高于四层代理。

使用的Nginx,用作代理服务器的时候,一般都是工作在第七层的。使用Nginx,我们可以代理静态文件、ajax后台接口、CDN重定向等等,都是在传输层之上理解内容后做的工作。

七层应用负载的好处,是使得整个网络更智能化。例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。很多在后台,例如Nginx或者Apache上部署的功能可以前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。

另外一个常常被提到功能就是安全性。网络中最常见的SYN Flood攻击,即黑客控制众多源客户端,使用虚假IP地址对同一目标发送SYN攻击,通常这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到Denial of Service(DoS)的目的。从技术原理上也可以看出,四层模式下这些SYN攻击都会被转发到后端的服务器上;而七层模式下这些SYN攻击自然在负载均衡设备上就截止,不会影响后台服务器的正常运营。另外负载均衡设备可以在七层层面设定多种策略,过滤特定报文,例如SQL Injection等应用层面的特定攻击手段,从应用层面进一步提高系统整体安全。

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

4.四层代理与七层代理区别

四层:IP+PORT转发;
七层:协议+内容交换。

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

 表1 区别

类别区别备注
四层代理四层代理拆解报文至传输层,根据请求的服务器IP+端口号进行转发;四层代理是由后端服务器进行处理,包括报文的封装都是后端服务器进行封装;四层代理相当于是一个路由器。七层负载均衡的CPU密集程度比基于包的四层负载均衡更高。七层负载均衡能够让均衡器做更小粒度的负载均衡决定,并且会根据消息的内容( 比如压缩和加密 )利用最优化方式做出改变。它运用缓存的方式来卸载上游服务器较慢的连接,并显著地提高了性能。
七层代理七层代理拆解报文至应用层,分析用户请求的资源,然后负载均衡器会代替用户请求后端服务器的资源;后端服务器把资源返回给负载均衡器,负载均衡器对资源再次进行封装,然后返还给客户端;在此过程中,需要建立两次TCP连接,一次是客户端,一次是后端的服务器。

5.负载均衡器

负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析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是目前使用最广泛的三种负载均衡软件。

6.常见的代理组件

(1)Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

简单对比下Nginx和Apache的区别,在资源上,Nginx占用的内存更少;在性能上,Nginx的并发能力更强;在社区方面,Nginx和Apache都拥有广泛的使用者,Apache的插件会比Nginx丰富一些。另外Nginx的功能比Apache要丰富一些,Nginx除了作为Web服务器以外,也经常作为反向代理服务器等使用,而Apache则主要作为Web服务器去使用。

(2)LVS

LVS这个用的比较少,LVS全称是Linux Virtual Server,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是
www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

LVS主要用于服务器集群的负载均衡。它工作在OSI模型第四层传输层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

(3)HAProxy

HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上,既可以做四层代理,也可以做七层代理。

HAProxy也是支持虚拟主机的。HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。

HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。

HAProxy支持TCP协议的负载均衡转发,比如:可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。

7.应用场景

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

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

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

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

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

二、总结

四层代理基于IP+端口的负载均衡;七层基于URL等应用层信息的负载均衡。

四层代理只进行了一次TCP请求,而七层代理进行了两次TCP请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Matrix的理解

文章目录 前言一.基础1.1 Matrix1.2 使用Matrix的准备知识 二.preXXX和postXXX2.1 右乘和左乘2.2 验证规律 三.坐标原点结束 前言 Android绘制中最重要的要算Matrix类了,同时也是不太好理解的。以前也用过,但是掌握的也不是太好,刚好有时间好…

GO语言包相关总结 -引用(本地和远程),自定义,安装,使用

本篇文章总结以下go语言包相关的知识。 目录 一.导入包 (1)常规导入 (2)别名导入 (3)特殊导入 二.自定义包 三.安装自定义包 四.调用自定义包调用 五.获取远程包 六.go中的保留函数 七.实战 - G…

Python自动化测试实战篇(12),一文学完,Pytest 常用11种第三方插件

这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1) Python自动化测试实战篇(2) Python自动化测试实战篇&#xff…

解决python-opencv:(-215:Assertion failed) _img.empty() in function ‘cv::imwrite‘在将视频分成帧图片,写入时出现的问题

最近在搞视频检测问题,在用到将视频分帧保存为图片时,图片可以保存,但是会出现(-215:Assertion failed) !_img.empty() in function cv::imwrite问题而不能正常运行,在检查代码、检查路径等措施均无果后,了解了视频分帧…

rk3399 调试ap6354

电路如下: wifi&#xff1a; 按照rk3399 sdk默认配置&#xff0c;修改相应的引脚 sdio_pwrseq: sdio-pwrseq { compatible "mmc-pwrseq-simple"; clocks <&rk808 1>; clock-names "ext_clock"; pinctrl-nam…

filter功能演示-鉴权、声明缓存

文章目录 Filter定义工作原理Filter所处环节 Demo示例总结 Filter定义 在Java EE&#xff08;Java Platform, Enterprise Edition&#xff09;中&#xff0c;过滤器&#xff08;Filter&#xff09;是一种强大的组件&#xff0c;用于在Web应用程序中拦截和处理传入的请求和响应…

银河麒麟服务器V10 SP1 .Net6.0 开机自启动

开机自动启动&#xff0c;折腾了一小天&#xff0c;设置/etc/init.d/ 、update-rc.d&#xff0c;可能刚开始用&#xff0c;经验不多吧&#xff0c;尝试多种方式我的服务怎么都启动不起来&#xff0c;根据之前nginx和redis的自动启动经验&#xff0c;使用systemd管理服务&#x…

Unity基础 物理系统 刚体组件下的移动.碰撞.触发检测

当在Unity中创建游戏或应用程序时&#xff0c;重力系统是一个非常重要的组成部分。它可以模拟物体受到地球引力的影响&#xff0c;并产生逼真的物理效果。在Unity中&#xff0c;我们可以使用刚体组件和重力向量来控制重力系统。 首先&#xff0c;在Unity中创建一个物体&#xf…

数据表示与数据编码

数据表示与数据编码 数据表示 bit:二进制位 例如:480Mbps(Mb/s) 小写字母b代表bitbyte:字节 1byte8bit 使用大写字母B表示 byte最初从IBM360中开始表示word:字长 在32bit计算机中一个字长为32位&#xff0c;在64bit计算机中一个字长为64位 最早的微处理器字长为4位 章节学习内…

Windows的基本操作

Windows的基本操作 一、用户管理1.1、用户帐户1.2、用户管理 二、网络配置2.1、配置和查看命令 三、常用命令 一、用户管理 1.1、用户帐户 系统中的一种对象&#xff08;用户、组、计算机&#xff09;包含多种属性&#xff0c;如用户名、密码等不同用户帐户的用户名和密码等一…

插入排序--直接插入排序,折半插入排序,希尔排序

插入排序是一种简单直观的排序方法&#xff0c;其基本思想是每次将一个待排序的记录按其关键词大小插入前面已经排好的子序列&#xff0c;直到全部记录插入完成。 一&#xff0c;直接插入排序&#xff1a;从小到大排序 数组序号01234567待排序列4938659776132749第一轮384965…

【数据算法与结构】用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目

题目&#xff1a; Qestion: 用按层次顺序遍历二叉树的方法&#xff0c;统计树中具有度为1的结点数目。 数据结构定义 typedef struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right; } TreeNode;样例二叉树的形状 核心代码 // 统计具有度为1的节点数目的…

解决idea默认配置maven仓库地址的问题

我的maven配置地址 一直没注意 jar包什么的全部都是C盘默认的路径&#xff0c;导入项目更改后&#xff0c;再次导入项目 路径还是会变成C盘的路径&#xff1b; 上网搜索找到了解决的办法&#xff1b; 一、File——>New Projects Setup ———>Settings for New Projects…

React hooks之useCallback的使用与性能分析

使用useCallback优化代码 useCallback是对传过来的回调函数优化&#xff0c;返回的是一个函数&#xff1b;useMemo返回值可以是任何&#xff0c;函数&#xff0c;对象等都可以。 简单来说就是返回一个函数&#xff0c;只有在依赖项发生变化的时候才会更新&#xff08;返回一个…

vue项目打包后如何本都部署访问

npm run build生成dist项目后&#xff0c;在windows部署访问。 方式一&#xff1a; 1、新建一个文件夹 进入目录后打开cmd 输入npm init -y 2、输入 npm i express -s 是用于在 Node.js 项目中安装 Express 框架的命令 3、.将项目打包好的dist文件放入其中以及新建一个app.js文…

C++ 二叉搜索树

1. 内容安排说明 二叉树在前面 C 数据结构阶段已经讲过&#xff0c;本节取名二叉树进阶是因为&#xff1a; 1. map 和 set 特性需要 先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一种树形结构 2. 二叉搜索树的特性了解&#xff0c;有助于更好的理解 map 和 set 的特性 …

在JDK17尝鲜Flink1.17

在JDK17尝鲜Flink1.17 前言 还没玩明白老版本&#xff0c;Flink1.17就来了&#xff01;&#xff01;&#xff01;总还是要向前看的。。。 根据官网文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/try-flink/local_installation/ Flink r…

【Excel技巧】如何将一堆文字快速整理成一列表格数据?

在平时的工作中&#xff0c;我们有时候需要把很多零散的分布的内容&#xff08;比如姓名&#xff09;&#xff0c;复制到Excel工作表的单元格内&#xff0c;变成一列。如果一个个复制粘贴&#xff0c;显然太过繁琐。 如何批量快速的完成这一操作呢&#xff1f;只需要下面简单几…

关于排查springboot启动时页面出现404

今天在进行开发时&#xff0c;Contronller代码没有问题&#xff0c;前端html也没问题&#xff0c;发现当浏览器输入localhost:8080时404&#xff0c;于是进行排查发现&#xff0c;SpringbootWebApplication文件放到了子目录下。 springboot的启动文件必须放在父目录下才可以检测…

【Git原理与使用】-- 远程操作

目录​​​​​​​ 理解分布式版本控制系统 远程仓库 新建远程仓库 lssue 与 Pull Request模板文件 知识铺垫 lssue 模板文件 Pull Request模板文件 克隆远程仓库 使用 HTTPS 方式 使用 SSH 方式 第一步&#xff1a;创建SSH Key 向远程仓库推送 过程梳理 实操 …