浏览器-输入url到看到页面发生了什么

目录

总结:

1.DNS(Domain Name System)域名解析

2.通过TCP协议建立连接

[1]建立连接时的三次握手

(1)为什么 TCP 建立连接需要三次握手,明明两次就可以建立起连接

[2]断开连接时的四次挥手

3.发送接收数据

4.浏览器解析数据


总结:

  • 协议
    • DNS域名解析协议:网络层协议;
    • TCP/UDP协议:传输层协议;
    • http/https:网络层协议;
  • 步骤
    • [1]DNS域名解析;
    • [2]建立tcp连接;
    • [3]发送请求
    • [4]获取数据;
    • [5]解析数据,渲染页面;
    • [6]释放tcp连接

1.DNS(Domain Name System)域名解析

注:DNS域名解析协议是应用层协议;

[1]首先我们要知道域名是什么?

  • 域名是IP地址的别名;
  • 因为IP存在数字和英文的组合(IPV6),不利于记忆,所以就出现了域名;

[2]DNS域名解析就是根据用户输入的域名去查询IP地址是什么(真正的名字是什么)

  • 步骤
    • 浏览器缓存:浏览器会先检查自身缓存中有没有被解析过的此域名的ip地址
      • 有:解析结束;
      • 没有:操作系统缓存查找
      • 注:浏览器缓存时间可以通过TTL属性进性设置
    • 操作系统缓存:浏览器检查操作系统缓存中有没有对应的已经解析过的ip地址
      • 有:解析结束;
      • 没有:请求本地域名服务器(LDNS)来解析这个域名
    • LDNS(本地域名解析服务器):查看有没有域名解析结果
      • 解析成功:返回
      • 不成功:到根服务器(Root Serve)解析这个域名
      • 注:LDNS性能很好,一般会缓存域名解析结果(80%都能在这里查找到),所以·LDNS主要承担了域名解析的工作;
    • Root Serve:解析域名
      • 根域名服务器负责找出 一级域名 的服务器 (gTLD) 返回给本地域名服务器;
      • 本地域名服务器向 gTLD服务器 发出请求,返回Name Serve域名服务器的地址(通常是你注册的域名服务器的地址)
      • Name Serve域名服务器 会查询存储的域名和IP的映射关系,返回IP和TTL值;
      • LDNS缓存这个域名和IP的对应关系,缓存时间由TTL值控制;
      • 将解析结果返回给用户,缓存到本地;

[3]DNS域名解析协议是基于UDP的协议;

  • 不使用TCP的原因
    • TCP建立连接/释放连接要经历三次握手以及四次挥手(浪费网络资源)
    • DNS数据不是大的数据包
      • 不需要考虑分包(不担心UDP的丢包现象)

2.通过TCP协议建立连接

[1]建立连接时的三次握手

TCP 是一个全双工的协议

起初,两端都为 CLOSED 状态。在通信开始前,双方都会创建 TCB。 服务器创建完 TCB 后便进入 LISTEN 状态,此时开始等待客户端发送数据。

第一次握手

客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。

第二次握手

服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。

第三次握手

当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。

(1)为什么 TCP 建立连接需要三次握手,明明两次就可以建立起连接

------->为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误

情况:

  • 客户端发送了一个连接请求 A,但是因为网络原因造成了超时,这时 TCP 会启动超时重传的机制再次发送一个连接请求 B;
  • 请求B顺利到达服务端,服务端应答完就建立了请求,然后接收数据后释放了连接。
  • 假设这时候连接请求 A 在两端关闭后终于抵达了服务端,那么此时服务端会认为客户端又需要建立 TCP 连接,从而应答了该请求并进入 ESTABLISHED 状态。但是客户端其实是 CLOSED 的状态,那么就会导致服务端一直等待,造成资源的浪费

[2]断开连接时的四次挥手

TCP 是一个全双工的协议

第一次握手

若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。

第二次握手

B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。

第三次握手

B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。

PS:通过延迟确认的技术(通常有时间限制,否则对方会误认为需要重传),可以将第二次和第三次握手合并,延迟 ACK 包的发送。

第四次握手

A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。

3.发送接收数据

  • 客服端通过http/https协议发送请求;
  • 服务端接收请求,处理数据,结束请求,返回数据;

4.浏览器解析数据

  • 浏览器的渲染引擎会解析HTML,生成一个html的dom树;
    • 包含所有节点,包括隐藏节点;
  • 浏览器的渲染引擎解析css,生成css规则树;
  • 生成 DOM 树和 CSS规则 树以后,就需要将这两棵树组合为渲染树
    • 渲染树只会包括需要显示的节点和这些节点的样式信息,如果某个节点是 display: none 的,那么就不会在渲染树中显示;
  • 当浏览器生成渲染树以后,就会根据渲染树来进行布局(也可以叫做回流),然后调用 GPU 绘制,合成图层,显示在屏幕上;

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值