快捷搜索:

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

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

OSI七层模型

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

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

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请求。

七层代理:七层代理拆解报文至应用层,分析用户请求的资源,然后负载均衡器会代替用户请求后端服务器的资源;后端服务器把资源返回给负载均衡器,负载均衡器对资源再次进行封装,然后返还给客户端;在此过程中,需要建立两次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是目前使用最广泛的三种负载均衡软件。

应用场景

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

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

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

小结

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

经验分享 程序员 职场和发展