网络--01远程通信协议

一个http请求的整个流程

网络--01远程通信协议_第1张图片

负责域名解析的DNS服务

首先,用户访问一个域名,会经过DNS解析

DNS(Domain Name System),它和HTTP协议一样是位于应用层的协议,主要提供域名到IP的解析服务。我们其实不用域名也可以访问目标主机的服务,但是IP本身不是那么容易记,所以使用域名进行替换使得用户更容易记住。

加速静态内容访问速度的CDN

CDN(Content Delivery Network)内容分发网络。

CDN其实就是一种网络缓存技术,能够把一些相对稳定的资源放到距离最终用户较近的地方,一方面可以节省整个广域网的带宽消耗,另外一方面可以提升用户的访问速度,改进用户体验。我们一般会把静态的文件(图片、脚本、静态页面)放到CDN中。

HTTP协议通信原理

域名被成功解析以后,客户端和服务端之间,是怎么建立连接并且如何通信的呢?

http协议的通信是基于tcp/ip协议之上的一个应用层协议,应用层协议除了http还有FTP、DNS、SMTP、Telnet等。

分层模型

网络--01远程通信协议_第2张图片

 

请求发起过程,在tcp/ip四层网络模型中所做的事情?

当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)

网络--01远程通信协议_第3张图片

客户端如何找到目标服务?

在客户端发起请求的时候,我们会在数据链路层去组装目标机器的MAC地址,目标机器的mac地址怎么得到呢?这里就涉及到一个ARP协议,这个协议简单来说就是已知目标机器的ip,需要获得目标机器的mac地址。(发送一个广播消息,这个ip是谁的,请来认领。认领ip的机器会发送一个mac地址的响应)

有了这个目标MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开IP 包,发现IP 地址也是自己的,再打开TCP 包,发现端口是自己,也就是80端口,而这个时候这台机器上有一个nginx是监听80端口。于是将请求提交给nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到MAC 层。因为来的时候有源MAC 地址,返回的时候,源MAC 就变成了目标MAC,再返给请求的机器。

为了避免每次都用ARP 请求,机器本地也会进行ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以ARP 的MAC 地址缓存过一段时间就会过期。

接收端收到数据包以后的处理过程

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议都要去检查报文首部中的协议标识,以确定接收数据的上层协议。

网络--01远程通信协议_第4张图片

为什么有了MAC层还要走IP层呢?

之前我们提到,mac地址是唯一的,那理论上,在任何两个设备之间,我应该都可以通过mac地址发送数据,为什么还需要ip地址?

mac地址就好像个人的身份证号,人的身份证号和人户口所在的城市,出生的日期有关,但是和人所在的位置没有关系,人是会移动的,知道一个人的身份证号,并不能找到它这个人,mac地址类似,它是和设备的生产者,批次,日期之类的关联起来,知道一个设备的mac,并不能在网络中将数据发送给它,除非它和发送方的在同一个网络内。

所以要实现机器之间的通信,我们还需要有ip地址的概念,ip地址表达的是当前机器在网络中的位置,类似于城市名+道路号+门牌号的概念。通过ip层的寻址,我们能知道按何种路径在全世界任意两台Internet上的的机器间传输数据。

TCP/IP的分层管理

TCP/IP协议按照层次分为4层:应用层、传输层、网络层、数据链路层。

复杂的程序都需要分层,这个是软件设计的要求,每一层专注于当前领域的事情。如果某些地方需要修改,我们只需要把变动的层替换掉就行,一方面改动影响较少,另一方面整个架构的灵活性也更高。最后,在分层之后,整个架构的设计也变得相对简单了。

分层负载

了解了分层的概念以后,我们再去理解所谓的二层负载、三层负载、四层负载、七层负载就容易多了。可以有下层没上层,绝对不可能有上层没下层。

二层负载

针对MAC,负载均衡服务器对外依然提供一个VIP(虚IP),集群中不同的机器采用相同IP地址,但是机器的MAC地址不一样。当负载均衡服务器接受到请求之后通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

二层负载均衡会通过一个虚拟MAC 地址接收请求,然后再分配到真实的MAC 地址

三层负载均衡

三层负载是针对IP,和二层负载均衡类似,负载均衡服务器对外依然提供一个VIP(虚IP),但是集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器

三层负载均衡会通过一个虚拟IP 地址接收请求,然后再分配到真实的IP 地址

四层负载均衡

四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

四层通过虚拟IP + 端口接收请求,然后再分配到真实的服务器

七层负载均衡

七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别来决定是否要进行负载均衡。

七层通过虚拟的URL 或主机名接收请求,然后再分配到真实的服务器。

 

 

 

 

你可能感兴趣的:(网络)