四层反向代理和七层反向代理

1、概述

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

2、四层网络代理

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

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

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

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

  代表软件:LVS、F5。

          

3、七层网络代理

  七层代理的七层就是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开发的系统。

  代表软件:Nginx、Haproxy。

          

 4、四层网络代理和七层网络代理区别

   根据上文对四层网络代理和七层网络代理介绍可以,它俩最直观的区别是四层代理只进行了一次TCP请求,而七层代理进行了两次TCP请求。

4.1 四层网络代理

  所谓四层网络代理,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

  以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

4.2 七层网络代理

  所谓七层网络代理,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

  以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。

5、现在对网络代理的使用是随着网站规模的提升根据不同的阶段来使用不同的技术

  第一阶段:利用Nginx或HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。这时是第一选择。

  第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用Array就是首要选择,Nginx此时就作为LVS或者Array的节点来使用,具体LVS或Array的是选择是根据公司规模和预算来选择,Array的应用交付功能非常强大,性价比也远高于F5,商用首选,但是一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

  第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。

  最终形成比较理想的基本架构为:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer。

https://blog.csdn.net/vah101/article/details/121617249

https://www.cnblogs.com/buray/p/16294778.html

参考:跟字节大佬聊了下四层代理和七层代理,我人傻掉了

参考:4层代理和7层代理的区别

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的基本

python之基本介绍(1)什么是pythonpython 是一门编程语言python是一门面向对象,解释型的动态类型的编程语言 guido van rossunm (吉多*范罗苏姆) 在1989年发明,第一个公开发行版本与1991年; python在市面上的版本:python 2.7 (以前用的非常多)目前用的版本是3.0 版本最…

IP-域名关联关系系统设计

0x01 数据库表实现 IP域名关系系统包括域名库检索和whois库检索,详情如下。 域名库检索 域名库检索支持以下5项功能: 1.通过过滤器检索 筛选条件包含IP地址、口令、工具名称、可利用的漏洞编号、创建时间; 2.通过关键字检索 在查询框中输入域名库名称的部分关键词,支持模糊…

5、Git之版本号

5.1、概述 每一次提交,Git 都会生成相关的版本号;每个版本号由 40 位 16 进制的数字组成。 这 40 位 16 进制的数字,是根据提交的内容,通过 SHA-1 算法计算出来的。 版本号具体还分为两部分,前 2 位是目录名,后 38 位是文件名。 5.2、文件操作 5.2.1、初始化本地库如上图…

linux内存管理(一)物理内存的组织和内存分配

从这一篇开始记录以下我看有关内存管理的内核代码的笔记. 内容很长,很多是我自己的理解,请谨慎观看. 伙伴系统的工作的基础是物理页的组织,组织结构有小到大依次为page->zone->node。下面从源码里看看各个结构是如何组织的。typedef struct pglist_data {struct zone no…

IP和域名 关联关系系统设计

基本说明 IP域名关系库管理包括域名库检索和whois库检索,详情如下。 域名库检索 域名库检索支持以下5项功能: 1.通过过滤器检索 筛选条件包含IP地址、口令、工具名称、可利用的漏洞编号、创建时间; 2.通过关键字检索 在查询框中输入域名库名称的部分关键词,支持模糊查找和精…

PLC通过Profinet转Modbus网关与流量计通讯案例

Profinet 转Modbus网关(XD-MDPN100/300)集成了Modbus和Profinet两种协议,支持Modbus RTU主从站。Profinet 转 Modbus网关自带网络和串口,可提供单路或多路RS485接口。Profinet 转 Modbus网关每个串口可连接32个从站设备,可实现协议转换和接口转换。PLC通过Profinet转Modbus网…

OpenGL:纹理

我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。 艺术家和程…

北京端午游(送小微)

北京端午游 1、奥林匹克森林公园 🅿️交通:🚇地铁8号线森林公园南门站出🚗开车不推荐,游园还得回起点拿车,有点绕不值当🕙时间:半天or全天,根据路线决定🍚餐饮:自带或出国奥村门吃,太多好吃的,推荐日坛涮肉,眉州和满久居奥森北园北门出来有个林奥city!里面…

北京端午游

北京端午游 1、奥林匹克森林公园 🅿️交通:🚇地铁8号线森林公园南门站出🚗开车不推荐,游园还得回起点拿车,有点绕不值当🕙时间:半天or全天,根据路线决定🍚餐饮:自带或出国奥村门吃,太多好吃的,推荐日坛涮肉,眉州和满久居奥森北园北门出来有个林奥city!里面…

快速幂

快速幂大家好,我是Weekoder! 今天的内容是快速幂!(实际上是为了讲矩阵快速幂赶出来的嘻嘻 \[\texttt{Part 1 用处} \]快速幂,顾名思义就是快速地计算出某个数的幂,形如 \(a^n\)。 \[\texttt{Part 2 思想} \]为什么普通的幂运算慢?假设要计算 \(a^n\),则需要拆分成 \(a\…

JavaScript中的async/await

async/await是什么? async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数。await 也是一个修饰符,await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Prom…