先来理解一下osi七层模型
应用层 应用层是ISO七层模型的最高层,它直接与用户和应用程序交互,提供用户与网络的接口。它包括各种应用协议,如HTTP、FTP、SMTP等,用于实现特定应用的功能和通信
表示层 表示层负责数据的格式转换、加密和压缩,以确保不同系统之间的数据格式兼容性,并提供数据安全和加密功能
会话层 会话层负责建立、管理和终止会话(Session)或连接。它提供了会话的同步、管理和恢复功能,以确保不同应用程序之间的通信顺利进行
传输层 传输层负责端到端的数据传输和可靠性。它提供了传输控制协议(TCP)和用户数据报协议(UDP)等传输协议,用于实现可靠的数据传输、流量控制和错误恢复
网络层 网络层负责在不同的网络之间进行路由和转发,以确保数据能够正确地从源节点传输到目标节点。它处理逻辑地址(如IP地址),选择最佳路径,并进行分组和路由选择
数据链路层 数据链路层位于物理层之上,负责在直接相连的节点之间传输数据。它将比特流划分为帧(Frame),并提供了错误检测、流控制和访问控制等功能,以确保可靠的数据传输
物理层 物理层是ISO七层模型的最底层,负责在物理媒介上传输原始比特流。它定义了电压、电缆规范、物理连接和传输速率等物理特性
在了解一下接收数据包的工作流程
在防火墙接收到数据包后,因为用的是DNAT端口映射功能,所以用的是四层转发,按照osi七层模型从下往上拆包到四层,根据DNAT规则转发到后端的nginx上,nginx用的是HTTP七层代理,所以需要继续从四层拆包到七层,在根据nginx的规则转发到后端的服务
封包从上往下封装,且只有外网传输是需要封装安装包的,内网传输是不需要封装安装包的
数据包的拆包和封装主要发生在网络通信的边界处,尤其是在数据包从一个网络设备到另一个网络设备的过程中。当数据包跨越网络边界时,它们需要按照相应的协议规范进行拆包和封装,以适应不同的网络环境
在同一个内网环境中,如果数据包只是在内网中传输,没有经过网络边界,那么通常不需要进行显式的拆包和封装操作。例如,在内网中的数据包在经过网络交换机或路由器时,会根据目标设备的MAC地址或IP地址进行直接转发,而无需进行拆包和封装
nginx七层代理
nginx的七层代理作用于应用层,Nginx可以通过解析HTTP协议头部信息来处理和转发请求。它能够检查和修改HTTP请求和响应的头部,进行URL重写、反向代理、负载均衡、缓存、SSL终端等功能。通过这些功能,Nginx可以实现灵活的HTTP请求处理和流量分发
nginx使用七层代理,在接收到数据包后,需要将数据包按照osi七层模型从下往上拆包到七层,解析请求头和请求体,提取请求方法、URL、头部信息、有效负载数据等内容,nginx根据配置的策略,通过七层协议直接转发到后端的服务中,nginx的七层代理功能需要处理数据包中的数据,效率远远比不上四层转发的效率
nginx四层转发
nginx的四层转发作用于传输层,Nginx可以基于传输层协议(如TCP和UDP)进行流量转发。它可以接收客户端的传输层请求,并将其转发给后端服务器。这种四层转发通常用于负载均衡和高可用性方案,将传入的请求分发到多个后端服务器,以提高系统的性能和容错能力
nginx使用四层转发,在接收到数据包后,需要将数据包按照osi七层模型从下往上拆包到四层,提取出源IP地址、目标IP地址、源端口号和目标端口号等传输层信息,再根据配置的负载均衡算法和策略,转发给相应的目标服务器,在此过程中nginx不需要处理数据包中的数据,这使得Nginx在进行高性能的负载均衡和代理转发时能够快速、有效地处理大量的请求
关于高并发架构的讲解
在一个数据量特别大的高并发架构中,单纯使用nginx的七层代理是不够的,因为nginx的七层代理需要处理数据,在数据量大的时候,nginx的资源消耗就会特别高,很容易就会出现资源不足的情况,在此情况下,我们需要使用nginx的高可用架构,keepalived+lvs+nginx的架构,就能很好的应对高并发流量的情况,使用lvs的四层转发到后面的多个nginx中实现负载均衡,主要是四层转发不需要处理数据包中的数据,只做单纯的转发,不会出现主机资源不足的情况,所以可以处理大量的请求,通过四层转发到多个nginx后,nginx再通过七层代理功能去将数据转发到后端的服务中,具体的工作过程可以参考以上的解释,而keepalived的作用是实现lvs的高可用,lvs也可以使用haproxy代替,主要还是看数据量的大小