网络模型与负载均衡

Posted 踏破四方猪脚部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络模型与负载均衡相关的知识,希望对你有一定的参考价值。

这里简要介绍OSI网络模型,实际应用的网络模型,以及通过网络模型了解各层的负载均衡器如何工作。

OSI网络模型

OSI网络模型有7层,从低到高分别为:

物理层

OSI的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。

数据链路层

它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。

网络层

传输层

这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。

会话层

它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的。在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。

表示层

这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。

应用层

与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。

TCP/IP 网络模型

在实际生产环境中,TCP/IP 模型将 OSI 模型由七层简化为四层,传输层和网络层被完整保留,物理层和数据链路层被合并为网络接口层,传输层以上被统一为应用层,可以认为TCP/IP 网络模型是对OSI网络模型的实现,具体分别为:

网络接口层(物理层和数据链路层)

网络互连层(网络层)

传输层(传输层)

由于网络互连层已经提供了端到端的消息送达能力,所以该层主要解决端到端可靠性和保证数据按照正确的顺序到达这样的问题。TCP就是该层一个可靠的,面向连接的传输机制,它提供一种可靠的字节流保证数据完整、无损并且按顺序到达。相对于下层“尽力而为”的特点,TCP通过重传等手段来确保数据的完整性。该层除了TCP外还有UDP,是一个无链接的数据报协议。它是一个“尽力传递”(best effort)或者说“不可靠”协议——不是因为它特别不可靠,而是因为它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。端口号的概念在这一层,IP只提供主机级别的送达能力,进程级别的消息送达是在传输层处理的。

应用层(会话层,表示层,应用层)

在传输层已经解决了消息可靠性问题后,应用层的实现根据业务又丰富了起来,出现了诸如HTTP,FTP,SSH,RTSP,XMPP等各种因为具体业务而定义的网络协。这些协议均工作在TCP协议之上,也就是说这些协议不用再把精力花费到解决“丢包”这个事情上,而可以专注于解决自己的问题。

网络模型中,各层的工作并不是严格划分的,也没有严格上下依赖关系,存在比如ARP,RARP,DoH等等实质工作内容跨网络层的协议。

负载均衡器如何工作

负载均衡器工作的方式就是数据转发,按各种各样人为设定的规则进行数据转发;可能会修改报文,可能不会;负载均衡器不止出现在网络模型的其中一层,下面简要介绍一下常用的负载均衡器的工作方式。

二层负载均衡(MAC)

三层负载均衡(IP)

四层负载均衡(TCP,UDP)

使用"虚拟IP+port"接收请求,再转发到对应的机器。四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器。该层负载均衡的实际应用比较广泛,比如F5,LVS,HAProxy以及各大云厂商均提供四层负载均衡能力。

七层负载均衡(HTTP)

根据虚拟的URL或IP,主机名接收请求,再转向相应的处理服务器。七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。该层负载均衡的实际应用比较广泛,比如HAProxy,nginx以及各大云厂商均提供七层负载均衡能力。

七层负载均衡并不转发IP包,而是向客户端和服务器分别建立了一条TCP连接,分析应用层报文并根据规则进行转发,所以会有“连接复用”的概念。举个例子:HTTP的负载均衡,对于每一条面向客户端的TCP连接,并没有一一对应一条面向服务器的TCP连接,转发HTTP报文的时候会尝试使用已有的面向服务器的TCP连接。因为七层负载均衡会分析报文内容,所以效率不如四层负载均衡,但是七层负载均衡能根据应用层协议的内容进行更加复杂的转发行为。

后记

在选择负载均衡器进行使用的时候,一定要关注负载均衡器的实现细节是否和我们的实际需求一致,到底在第几层,实际进行的转发行为是什么。我们在实际业务中遇到过一个问题:aws的传统LB提供 TCP 和 HTTP 的负载均衡,但是它的内部实例会进行切换,切换工作中会强制切断TCP连接。我们的业务中使用了这个LB进行XMPP协议的负载均衡,每次LB内部进行切换的时候业务层都会报告连接异常。后来我们查明原因之后,将负载切换到了NLB就没有再遇到连接异常问题。

参考

https://blog.csdn.net/yangyangye/article/details/40046581

https://zh.wikipedia.org/wiki/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1

https://baike.baidu.com/item/OSI%E6%A8%A1%E5%9E%8B

https://blog.csdn.net/yangyangye/article/details/40046581

以上是关于网络模型与负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

最接地气的版本 30个字讲透 四层负载均衡 七层负载均衡

负载均衡总结(四层负载与七层负载的区别)

负载均衡原理与技术实现

Nginx——nginx作为负载均衡服务(负载均衡与nginx)

必看负载均衡原理与技术实现

lvs-dr模型负载均衡