网路的七层架构从下到上主要分为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
物理层:主要定义物理设备标准,主要作用是传输比特流,具体做法是在发送端将0/1码转化为电流的强弱来进行传输,在接收端再转化为0/1码,也就是常说的数模转化,模数转换,这一层的数据叫做比特。
数据链路层:主要用于对数据包中的MAC地址进行解析和封装。这一层的数据叫做帧。在这一层工作的设备主要有网卡、网桥、交换机。
网络层:主要用于对数据包中的IP地址进行封装和解析,这一层的数据叫做数据包。在这一层工作的设备主要有路由器、交换机、防火墙等。
传输层:定义了传输数据的协议和端口号,主要用于数据的分段、传输和重组。在这一层的工作协议有TCP和UDP等。TCP是传输控制协议,传输效率低,可靠性强,用于传输对可靠性要求高、数据量小的数据;UDP是用户数据报协议,不可靠传输,用于传输数据量大的数据。
会话层:在传输层的基础上建立连接和管理会话,具体包括登录验证、断点续传、数据沾包与分包等。在设备之间需要相互识别的是IP,也可以是MAC或者主机名。
==思考:登录验证、断点续传、数据沾包与分包 ==
表示层:主要对接收的数据进行解释、加密、解密、压缩、解压缩等,即把计算机能够识别的内容转换成人能够识别的内容(图片、声音、文字等)。
应用层:基于网络构建具体应用,例如FTP文件上传下载服务、Telnet服务、HTTP服务、DNS服务、SNMP邮件服务等。
TCP/IP指的是因特网的整个TCP/IP协议簇。从协议分层模型方面来讲,TCP/IP由4个层次组成:网络接口层、网络层、传输层和应用层。
控制位 | 说明 |
---|---|
URG | 1表示紧急指针有效,0表示忽略紧急指针的值 |
ACK | 1表示确认号有效,0表示在报文中不包含确认信息,忽略确认号字段 |
PSH | 1表示时带有PSH标志的 数据, 表示接收方应该尽快将这个报文段交给应用层,而不用等待缓冲区 装满 |
RST | 用于复位由于主机崩溃或者其他原因而出现的错误连接,还可以用于拒绝非法的报文段和拒绝连接请求。在一般情况下,如果收到一个RST为1的报文,那么一定发生了某种问题。 |
SYN | 同步序号,1表示连接请求,用于建立连接和使顺序号同步 |
FIN | 用于释放连接,1表示发送方已经没有数据要发送了,即关闭本方数据流 |
TCP是因特网的传输层协议,使用三次握手协议建立连接。在客户端主动发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方式可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
三次握手的过程:
TCP在建立连接时需要进行三次握手,在断开连接时要进行四次挥手,这是由于TCP的半关闭造成的。因为TCP连接是全双工的(即数据可在两个方向上独立传递),所以在进行关闭时对每个方向都要单独进行关闭,这种单方向的关闭叫做半关闭。在一方完成它的数据发送任务时,就发送一个FIN来向另一方通告将要终止这个方向的连接。
TCP断开连接既可以由客户端发起的,也可以是服务器端发起的。如果由客户端发起断开连接操作,则称客户端主动断开连接;如果是服务器端主动发起的断开操作,则称服务端主动断开连接。
四次挥手的过程:
HTTP是一个无状态的协议,无状态指在客户端web浏览器和服务器之间不需要建立持久的连接,在一个客户端向服务器端发出请求且服务器收到请求并返回响应(Response)后,本次通信结束,HTTP连接将被关闭,服务器不保留连接的相关信息。
HTTP遵循请求/应答(Request/Response)模型, 客户端相服务器发送请求,服务器处理请求并返回适当的应答。
HTTP的传输流程包括地址解析、封装HTTP数据包、封装TCP包、建立TCP连接、客户端发送请求、服务端响应、服务端关闭TCP连接。
地址解析:地址解析通过域名系统DNS解析服务器域名从而获得主机的IP地址。例如,用客户端的浏览器请求http://localhost.com:8080/index.html,可以从中分解出协议名、主机名、端口、对象路径等部分结果
封装HTTP数据包:解析协议名、主机名、端口、对象路径等并结合本机自己的信息封装成一个HTTP请求数据包。
封装TCP包:将HTTP请求数据包进一步封装成TCP数据包。
建立TCP连接:基于TCP的三次握手机制建立TCP连接。
客户端发送请求:在建立连接后,,客户端发送一个请求到服务器。。
服务器响应:服务器在接收到请求后,结合业务逻辑进行数据处理,然后向客户端返回相应的响应信息。在响应信息中包含请求行、协议版本号、成功或错误代码、消息体等内容。
服务器关闭TCP连接:服务器在向浏览器发送请求响应数据后关闭TCP连接。但如果浏览器或者服务器在消息头中加入Connection:keep-alive,则TCP连接在请求响应数据发送后仍然保持连接状态,在下一次请求中浏览器可以继续使用相同的连接发送请求。采用keep-alive方式不但减少了请求响应的时间,还节约了网络带宽和系统资源。
一般情况下,“20x”表示请求成功,“30x”表示网络重定向,“40x”表示客户端请求错误,“50x”表示服务器错误。
HTTPS是以安全为目标的HTTP通道。它在HTTP中加入了SSL层以提高数据传输的安全性。HTTP被用于在web浏览器和网站服务器之间传递信息,但以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP不适合传输一些敏感信息,比如身份证号码、密码等。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并对浏览器和服务器之间的通信进行数据加密,,以保障数据传输的安全性。
HTTP的加密流程如下:
CDN(Content Delivery Network , 内容分发网络)指基于部署在各地的机房服务器通过中心平台的负载均衡、内容分发、调度的能力,使用户就近获取所需内容,降低网络延迟,提升用户访问的响应速度和体验度。
CDN的关键技术包含内容发布、内容路由、内容交换和性能管理。具体如下
将用户请求的数据分发到就近的各个中心机房,以保障为用户提供快速、高效的内容服务。缓存的内容包括静态图片、视频、文本、用户最近访问的JSON数据等。缓存的技术包括内容缓存、分布式缓存、本地文件缓存等。缓存的策略主要考虑缓存更新、缓存淘汰机制。
负载均衡系统是整个CDN系统的核心,负载均衡根据当前网络的流量分布、各中心机房服务器的负载和用户请求的特点将用户的请求负载到不同的中心机房或不同的服务器上,以保障用户内容访问的流畅性。负载均衡系统包括全局负载均衡(GSLB)和本地负载均衡(SLB)。
管理系统分为运营管理和网络管理子系统。网络管理系统主要对整个CDN网络资源的运行状态进行实时监控和管理。运营管理指对CDN日常运维业务的管理,包括用户管理、资源管理、流量计费和流量限流等。
负载均衡建立在现有网络结构之上,提供一种廉价、有效、透明的方法来扩展网络设备和服务器的带宽,增加吞吐量,加强了网络数据处理能力,并提高网络的灵活性和可用性。项目中常用的负载均衡有四层负载均衡和七层负载均衡。
四层负载均衡基于IP和端口的方式实现网络的负载均衡,具体实现为对外提供一个虚拟IP地址和端口接收所有用户的请求,然后根据负载均衡配置和负载均衡策略将请求发送给真实的服务器。
七层负载均衡基于URL等资源来实现应用层基于内容的负载均衡,具体实现为通过虚拟的URL或者主机名接收所有用户的请求,然后将请求发送给真实的服务器。
两者最大的区别是:四层负载均衡只能针对IP地址和端口上的数据做统一的分发,而七层负载均衡能根据消息的内容做更详细的有针对性的负载均衡。通常使用LVS等技术实现基于socket的四层负载均衡,使用nginx等技术试下能给予内容分发的七层负载均衡。比如 “ /user/*** ” 开头的url请求负载到单点登录服务器,而将以 “ /business/** ”开头的URL请求负载到具体的业务服务器。
四层负载均衡主要通过修改报文中的目标地址和端口来实现报文的分发和负载均衡。以TCP为例,负载均衡设备在接收到第一个来自客户端的SYN请求后,会根据负载均衡配置和负载均衡策略选择一个最佳的服务器,并将报文的目标IP地址修改为该服务器的IP地址直接转发给该服务器、TCP连接的建立(即三次握手过程)是在客户端和服务器端之间完成的,负载均衡设备只起到路由器的转发功能。
常用的软硬件如下:
七层负载均衡又叫作“内容负载均衡”,主要通过解析报文中真正有意义的应用层内容,并根据负载均衡配置和负载均衡策略选择一个最佳的服务器响应用户的请求。
七层应用负载可以使整个网络更加智能化,七层负载均衡根据不同的数据类型将数据存储在不同的服务器上来提高网络整体的负载能力。比如将客户端的基本信息存储在内存较大的缓存服务器上,将文件信息存储在磁盘空间较大的文件服务器上,将图片视频存储在网络I/O能力较强的流媒体服务器上。在接收到不同客户端的请求时从不同的服务器上获取数据并将其返回给客户端,提高客户端的访问效率。
七层负载均衡常用的软件如下:
常见的负载均衡算法有:轮询均衡(Round Robin)、权重轮询均衡(Weighted Round Robin)、随机均衡(Random)、权重随机均衡(Weighted Random)、响应速度均衡(Response Time)、最少连接数均衡(Least Connection)、处理能力均衡、DNS响应均衡(Flash DNS)、散列算法均衡、IP地址散列、URL散列。
轮询均衡指将客户端请求轮流分配到n个服务器上,每台服务器均被均衡的分配一定数量的客户端请求。轮询均衡算法适用于集群中所有服务器都有相同的软硬件配置和服务能力的情况下。
权重轮询均衡指根据每台服务器的不同配置及能力,为每台服务器都设置不同的权重值,然后按照设置的权重值轮询地将请求分配到不同的服务器上。例如:ABC三台服务器的权重值为3/3/4、则服务器ABC将分别承担30%、30%、40%的客户端请求。
权重轮询均衡算法主要用于服务器配置不均等的环境中。
随机均衡指将来自网络的请求随机分配到内部的多态服务器,不考虑服务器的配置和负载情况。
权重随机均衡算法类似于权重轮询算法,只是在分配请求时不再轮询发送,而是随机选择某个权重的服务器发送。
响应速度均衡指根据服务器设备响应速度的不同将客户端请求发送到响应速度最快的服务器上。对响应速度的获取是通过负载均衡设备定时为每台服务都发出一个探测请求(例如Ping)实现的。响应速度均衡能够为当前的每台服务器根据其不同的负载均衡情况分配不同的客户端请求,这有效避免了某个服务器单点负载过高的情况。但需要注意的是,这里探测到的响应速度是负载均衡设备到各个服务器之间的响应速度,并不完全代表客户端到服务器的响应速度,因此存在一定偏差。
最少连接数均衡指在负载均衡器内部记录当前每台服务器正在处理的连接数量,在有新的请求时,将该请求分配给连接数最少的服务器。这种均衡算法适用于网路连接带宽有限、CPU处理任务简单的请求服务。例如FTP
处理能力均衡算法将服务请求分配给内部负荷最轻的服务器,负荷是根据服务器的CPU型号、CPU数量、内存大小及当前连接数等换算而成的。处理能力均衡算法由于考虑到内部服务器的处理能力及当前网络的运行状况,所以相对来说更加精确,尤其适用于七层负载均衡的场景。
DNS响应均衡算法指在分布在不同中心机房的负载均衡设备都收到同一个客户端的域名解析请求时,所有负载均衡设备均解析此域名并将解析后的服务器IP地址返回给客户端,客户端向收到第一个域名解析的IP地址发起请求服务,而忽略其他负载均衡设备的响应。这种均衡算法适用于全局负载均衡的场景。
散列算法均衡指通过一致性散列算法和虚拟节点技术奖相同参数的请求总是发送到同一台服务器,该服务器将长期、稳定地为某些客户端提供服务。在某个服务器被移除或异常宕机后,该服务器的请求基于虚拟节点技术均摊到其他服务器,而不会影响集群整体的稳定性。
IP地址散列指在负载均衡器内部维护了不同链接上客户端和服务器的IP对应关系表,将来自同一个客户端的请求统一转发给相同的服务器。该算法能够以会话为单位,保证同一客户端的请求能够一直在同一台服务器上处理。主要适用于客户端和服务器需要保持长连接的场景,比如基于TCP长连接的应用。
URL散列指通过管理客户端请求URL信息的散列表,将相同URL的请求转发给同一台服务器。该算法主要适用于在七层负载中根据用户请求类型的不同将其转发给不同类型的应用服务器。
LVS(Linux Virtual Server)是一个虚拟的服务器集群系统,采用IP负载均衡技术将请求均衡地转移到不同的服务器上执行,且通过调度器自动屏蔽故障服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。整个服务器集群的结构对用户是透明的,无序修改客户端和服务器端的程序,便可实现客户端到服务器的负载均衡。
LVS由前端的负载均衡器(Load Balance ,LB)和后端的真实服务器(Real Server,RS)群组成,在真实服务器间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只需要关注作为LB的虚拟服务器,而不需要关注提供服务的真实服务器群。在用户的请求被发送给虚拟服务器后,LB根据设定的包转发策略和负载均衡调度算法将用户的请求转发给真实服务器处理,真实服务器在处理完成后再将用户请求的结果返回给用户。
实现LVS的核心组件有负载均衡调度器、服务器池和共享存储。
在接收LVS内部数据的转发流程前,了解LVS技术中常用的一些名词:
缩写 | 名称 | 说明 |
---|---|---|
CIP | 客户端IP(Client IP Address) | 用于记录发送给集群的源IP地址 |
VIP | 虚拟IP(Virtual IP Address) | 用于Director对外提供服务的IP地址 |
DIP | Director IP | Director用于连接内外网络的IP地址,即负载均衡器上的IP地址 |
RIP | 真实IP(Real Server的IP Address) | 集群中真实服务器的物理IP地址 |
LIP | LVS内部IP(Local IP Address) | LVS集群的内部通信IP |
LVS的IP负载均衡技术是通过IPVS模块实现的。IPVS是LVS集群系统的核心软件,被安装在Director Server 上,同样在Director Server 上虚拟出一个IP地址。用户通过这个虚拟的IP地址访问服务器。这个虚拟的IP地址一般被称为LVS的VIP,即Virtual IP。
访问的请求首先经过VIP到达负载调度器,然后由负载调度器从真实服务器列表中选取一个服务节点响应用户的请求。
LVS的数据转发流程是LVS设计的核心部分:
LVS NAT(Network Address Translation)即网络地址转换模式,具体实现流程如下:
图