一、网络分层

1.OSI七层模型和TCP/IP四层模型

ARP协议在OSI七层模型中属于数据链路层,在TCP/IP四层模型中属于网络层。

ARP协议是一种地址解析协议,根据IP地址可以查出对应的MAC地址

2.TCP/IP协议栈工作方式

 

 

通过TCP/IP协议族进行网络通信时,会通过分层顺序与对方通信。发送端从应用层至链路层,每通过一层增加首部信息。接受端从链路层至应用层,每通过一层则删除首部信息。

二、与HTTP相关的协议

1.IP协议

IP协议位于网络层,主要作用是解决寻址和路由选择问题。

2.TCP/UDP协议

(1)TCP和UDP区别:

(2)三次握手

 

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手;

(3)为什么需要三次握手

三次握手的目的是建立可靠的通信信道,来保证数据的发送与接收。

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常;

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

(4)四次挥手

 

第一次挥手:客户端发送连接释放报文,FIN=1;

第二次挥手:服务端收到之后发出确认,此时TCP属于半关闭状态,服务端能向客户端发送数据但是客户端不能向服务端发送数据,ACK=1;

第三次挥手:当服务端不再需要连接时,发送连接释放报文,FIN=1,ACK=1;

第四次挥手:客户端收到后发出确认,进入TIME-WAIT状态,等待 2 MSL(最大报文存活时间)后释放连接;

(5)TIME-WAIT

客户端接收到服务端FIN报文后进入TIME-WAIT状态,而不是直接进入CLOSED状态。两个原因:

  a.确保最后一个确认报文能够到达。如果服务端没收到客户端发送来的确认报文,那么就会重新发送连接释放请求报文, 客户端等待一段时间就是为了处理这种情况的发生

  b.等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文 

(6)如何保证TCP可靠传输

  a.流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。

  b.拥塞控制:当网络拥塞时,减少数据的发送。

  c.ARQ协议:它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。

    d.超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 

3.DNS协议

DNS协议位于应用层,主要作用是提供域名到IP地址之间的解析服务。

三、URI和URL

 

区别:URI指的是一个资源,URL指的是用地址定位一个资源,URN指的是用名称定位一个资源。 即URL和URN是URI的子集。

举一个常见的例子 找一个人,如果通过地址查找,即北京市海淀区***,这是URL。如果通过身份证号12345去找,这是URN(身份证号可以表识出某个人,但是不能表识出某个人的位置)

1.输入URL到页面展示 流转过程

(1)浏览器处理URL

  a. 浏览器进程检查URL,组装协议,构建完整的URL;

  b.浏览器进程通过网络间通信把URL传递给网络进程;

  c.网络进程获取到URL后先去本地缓存查找是否有缓存文件,如果有 拦截请求,直接返回200。否则,进入网络请求过程;

(2)建立网络连接

  a.网络进程请求DNS返回域名对应的IP和端口号,如果之前DNS数据缓存服务缓存过当前域名信息,就会直接返回缓存信息;否则,请求将使用域名解析得到的IP和端口号。如果没有端口号,http 默认80,https默认443。如果是https请求,还需要建立TLS连接;

  b.TCP通过三次握手与服务端建立连接;(可结合TCP/IP协议栈工作原理详谈)

(3)服务端处理数据

 服务端由于规模不同架构不同,通常处理流程有一些差异。大体上可以划分为:

  a.网络接入层处理请求URL,路由给真正的服务器集群。网络接入层一般是 nginx/apache 服务器,进行请求转发、负载均衡等;

  b.应用服务器处理真正的业务逻辑。通常会通过 SOA、微服务等方式调用下游的业务服务,通常还包括缓存读写逻辑等;

  c.业务逻辑最终会和数据库结合起来,在进行一系列的数据增删查改后,通过 SOA、微服务等方式返回给调用方具有业务语义的数据;

(4)浏览器渲染过程

  a.网络进程将获取到的数据包进行解析,根据响应头中的 Content-type 来判断响应数据的类型,如果是字节流类型,就将该请求交给下载管理器,流程结束;如果是 text/html 类型,就通知浏览器进程获取文档准备渲染;

  b.浏览器进程获取到通知,根据当前页面 B 是否是从页面 A 打开的并且和页面 A 是否是同一个站点(根域名和协议一样就被认为是同一个站点),如果满足上述条件,就复用之前网页的进程,否则,新创建一个单独的渲染进程;

  c.渲染进程对文档进行页面解析和子资源加载,HTML 通过 HTM 解析器转成 DOM Tree,CSS 按照 CSS 规则和 CSS 解释器转成 CSSOM TREE,两个 tree 结合,形成 render tree(不包含 HTML 的具体元素和元素要画的具体位置),通过 Layout 可以计算出每个元素具体的宽高颜色位置,结合起来,开始绘制,最后显示在屏幕中新页面显示出来;

 

 posted on 2020-12-09 08:38  HuangCoder  阅读(162)  评论(0编辑  收藏  举报