最近在做集中答疑的时候,有不少同学有同一个疑难:

在后盾服务部署、运维的场景中,常常会用到代理,常见的有四层代理和七层代理。那四层代理和七层代理有什么区别呢?

01 OSI七层模型

02 TCP/IP 四层模型

03 代理是什么

代理(英语:Proxy)也称网络代理,是一种非凡的网络服务,容许一个网络终端(个别为客户端)通过这个服务与另一个网络终端(个别为服务器)进行非间接的连贯。

一些网关、路由器等网络设备具备网络代理性能。个别认为代理服务有利于保障网络终端的隐衷或平安,避免攻打。

04 四层代理

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

四层代理的四层就是OSI七层模型中的传输层;四层代理是基于IP+端口做的代理。四层通过虚构IP+端口接管申请,而后再调配到实在的服务器。

以常见的TCP为例,从三次握手的第一次握手开始,代理设施在接管到第一个来自客户端的SYN 申请时,即依照肯定的策略抉择一个被代理的后端服务器,并对报文中指标IP地址进行批改(改为后端服务器IP),间接转发给该服务器。

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

04 七层代理

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

05 常见的代理组件

Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协定下发行。

其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中体现较好,中国大陆应用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

这里能够简略比照下Nginx和Apache的区别,在资源上,Nginx占用的内存更少;在性能上,Nginx的并发能力更强;在社区方面,Nginx和Apache都领有宽泛的使用者,Apache的插件会比Nginx丰盛一些。另外Nginx的性能比Apache要丰盛一些,Nginx除了作为Web服务器以外,也常常作为反向代理服务器等应用,而Apache则次要作为Web服务器去应用。

LVS

LVS这个用的比拟少,LVS全称是Linux Virtual Server,也就是Linux虚构服务器, 是一个由章文嵩博士发动的自由软件我的项目,它的官方站点是www.linuxvirtualserver.org。

当初LVS曾经是 Linux规范内核的一部分,在Linux2.4内核以前,应用LVS时必须要从新编译内核以反对LVS功能模块,然而从Linux2.4内核当前,曾经齐全内置了LVS的各个功能模块,无需给内核打任何补丁,能够间接应用LVS提供的各种性能。

LVS次要用于服务器集群的负载平衡。它工作在OSI模型第四层传输层,能够实现高性能,高可用的服务器集群技术。它便宜,可把许多低性能的服务器组合在一起造成一个超级服务器。它易用,配置非常简单,且有多种负载平衡的办法。它稳固牢靠,即便在集群的服务器中某台服务器无奈失常工作,也不影响整体成果。另外可扩展性也十分好。

HAProxy

HAProxy是一个收费的负载平衡软件,能够运行于大部分支流的Linux操作系统上,既能够做四层代理,也能够做七层代理。

HAProxy也是反对虚拟主机的。HAProxy的长处可能补充Nginx的一些毛病,比方反对Session的放弃,Cookie的疏导;同时反对通过获取指定的url来检测后端服务器的状态。

HAProxy跟LVS相似,自身就只是一款负载平衡软件;单纯从效率上来讲HAProxy会比Nginx有更杰出的负载平衡速度,在并发解决上也是优于Nginx的。

HAProxy反对TCP协定的负载平衡转发,比方:能够对MySQL读进行负载平衡,对后端的MySQL节点进行检测和负载平衡,大家能够用LVS+Keepalived对MySQL主从做负载平衡。

以上,心愿对你有所帮忙。

作者 | 咚咚呛

本文由mdnice多平台公布