四层、七层网络负载的区别?

664 阅读5分钟

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

四层网络负载均衡是基于IP和端口做的转发。通过虚拟的IP和端口接收到请求后,然后分配到真实的服务器,K8s中的endpoint就是基于四层网络负载均衡实现。

七层网络负载均衡是基于URL等应用层信息作的转发。通过虚拟的URL或者主机名接收到请求,然后在分配给真实的服务器。K8s中的ingress就是基于七层网络负载均衡实现。

dd820f3253157cd1345fffdb5e6a8000.jpeg

四层网络负载均衡和七层网络负载均衡有什么区别呢?

四层网络负载:一般是在对于后台的服务器进行负载均衡的时候,根据IP地址和端口号以及一些负载均衡设备(例如LVS、F5)来决定那些流量需要做负载均衡,对需要处理的流量进行转发,记录下TCP/UDP的流量通过哪一台服务器处理,后续的同一链接的流量都可以转发到当前的服务器。

举个例子:负载均衡设备在收到一个TCP请求,接收到SYN的请求时,会通过LVS上配置的一些负载策略进行选择,选出合适的后台服务器,并对报文中的目标IP地址进行修改,修改成后段服务器的IP地址,然后进行转发。 TCP在链接建立的过程中,三次握手时客户端与服务器直接建立的,而负载均衡设备只是起到了一个类似于路由器的转发作用。有的时候为保证服务器的回包可以正确返回给负载均衡设备,在转发报文的时候可能会对报文的源地址进行修改。

七层网络负载均衡(“内容交换”):在四层的基础上,加上了应用层、表示层、会话层。同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。主要是通过报文中的有意义的应用层数据,在加上负载均衡设备配置的策略进行内部服务器的选择。

如果你的 Web 服务器分成两组,一组是中文语言的,一组是英文语言的, 那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。

举个例子,七层网络模型中,客户端和服务器建立连接,只有完成TCP三次握手后,才能接受到客户端发送的真正应用层的报文数据,然后在根据报文中某些特定的字段数据,进行内部服务器的选择和过滤。 在七层网络模型中,负载均衡设备更多的充当于代理服务器的作用,负载均衡设备与客户端、后段的服务器分别建立TCP链接。

1787733-614f0b870366e3cc.png

四层交换机主要分析 IP 层及 TCP/UDP 层,实现四层流量负载均衡。 七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如 HTTP 协议 URI 或 Cookie 信息。

本质上4 层负载均衡本质是转发,而 7 层负载本质是内容交换和代理。

七层网络负载的应用场景

访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。

网络中最常见的 SYN Flood 攻击,即黑客控制众多源客户端,使用虚假 IP 地址对同一目标发送 SYN 攻击, 通常这种攻击会大量发送 SYN 报文,耗尽服务器上的相关资源,以达到 Denial of Service(DoS) 的目的。 从技术原理上也可以看出,四层模式下这些 SYN 攻击都会被转发到后端的服务器上;而七层模式下这些 SYN 攻击自然在负载均衡设备上就截止,不会影响后台服务器的正常运营。

另外负载均衡设备可以在七层层面设定多种策略,过滤特定报文。

常用的工具 LVS

LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

LVS主要用来做四层负载均衡。其抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。

NGINX

Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。

Nginx主要用来做七层负载均衡。7层负载均衡比基于数据包的4层负载均衡更占CPU,但很少会导致服务器性能下降。