四层代理和七层代理:原理与应用场景详解
四层代理和七层代理:原理与应用场景详解
在日常工作中,我们经常会遇到“四层代理负载均衡”和“七层代理负载均衡”这两个概念。它们分别指的是什么?又在什么场景下使用呢?本文将为您详细解析四层代理和七层代理的核心原理及其应用场景。
OSI七层模型
要理解四层代理和七层代理,首先需要了解网络分层。标准的七层网络分层,也就是OSI七层模型。TCP/IP五层模型和TCP/IP四层模型是从OSI七层优化而来。
四层代理和七层代理的划分,正是基于OSI七层模型。从下往上看,第四层为传输层、第七层为应用层。每层对应的常见协议如下:
- 四层对应的是TCP/UDP协议,即常说的IP+端口。
- 七层已经是非常具体的应用层协议,如HTTP等。
此外,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。二层负载均衡通过虚拟MAC地址接收请求,再分配到真实MAC地址;三层负载均衡通过虚拟IP地址接收请求,再分配到真实IP地址。
四层代理
四层代理主要工作于OSI模型中的传输层,处理消息传递而不关注消息内容。TCP是常见的四层协议。
四层负载均衡只针对由上游服务发送和接收的网络包,不检查包内的具体内容。它可以通过检查TCP流中的前几个包,决定是否限制路由。因此,四层负载均衡的核心就是IP+端口层面的负载均衡,不涉及具体的报文内容。
七层代理
七层代理主要工作于OSI模型的应用层,处理消息内容。HTTP是常见的七层协议。
七层负载均衡服务器起到反向代理的作用。客户端先与七层负载均衡设备建立TCP连接,发送报文信息。七层负载均衡器基于消息中内容(如URL或cookie信息)做出负载均衡的决定。之后,七层负载均衡器建立新的TCP连接,选择上游服务发出请求。
使用七层负载均衡的设备经常被用于反向代理。
两者区别
通过下图可以直观地看到四层代理和七层代理的区别:
上图中最直观的区别是四层代理只进行了一次TCP请求,而七层代理进行了两次TCP请求。
- 四层代理:拆解报文至传输层,根据请求的服务器IP+端口号进行转发。由后端服务器处理报文封装,相当于一个路由器。
- 七层代理:拆解报文至应用层,分析用户请求的资源。负载均衡器代替用户请求后端服务器资源,后端服务器返回资源给负载均衡器,负载均衡器再次封装后返还给客户端。此过程需要建立两次TCP连接。
七层负载均衡的CPU密集程度比基于包的四层负载均衡更高。七层负载均衡能让均衡器做更小粒度的负载均衡决定,并根据消息内容(如压缩和加密)优化处理方式。它运用缓存来卸载上游服务较慢的连接,显著提高性能。
负载均衡器
负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡,还能分析应用层信息,如HTTP协议URI或Cookie信息。
负载均衡分为L4 switch(四层交换)和L7 switch(七层交换)。四层负载均衡器(如LVS、F5)不关心应用协议(如HTTP/FTP/MySQL等)。七层负载均衡器(如HAProxy、MySQL Proxy)能理解应用协议。
Nginx、LVS、HAProxy是目前使用最广泛的三种负载均衡软件。
应用场景
七层负载均衡器可以智能化地处理网络请求,例如将图片类、静态文件类(JS、CSS)请求转发到特定服务器,利用缓存技术提升性能。它可以在客户端请求和服务器响应中进行任意意义上的修改,提升应用系统在网络层的灵活性。
针对SYN Flood攻击,四层模型下攻击请求会被转发到后端服务器,而七层模式下则可在负载均衡器上拦截,不影响后台服务器正常运营。针对SQL注入等情况,也可以通过在七层代理设置策略进行特定报文过滤,从应用层面提高系统整体安全。
总之,七层负载均衡主要应用于基于HTTP协议的网站或内部信息平台等B/S系统。四层负载均衡则对应其他TCP应用,如基于C/S开发的ERP系统。
虽然四层代理性能比七层高很多,但目前像Nginx这类负载均衡器已经可以满足大多数场景的需求,应用最多的也是像Nginx这类七层负载均衡器。