从输入URL网址到页面呈现发生了什么

风格不统一 提交于 2020-03-01 19:56:01

从两方面分析:网络通信+页面渲染

如果想要了解TCP/IP推荐两篇:TCP/IP&&TCP/IP

DNS(域名系统【Domain Name System

网络通信部分

第一步:DNS解析URL对应的IP(输入URL,可能为域名,可能为IP,如果是域名,要进行DNS解析,解析为该域名对应的IP地址);

DNS解析:

  1. 客户端先检查host文件里是否有这个网址映射关系,有,结束完成解析,进行第二步,没有继续查找
  2. 查找本地DNS解析器缓存是否有这个网址映射关系,有,结束完成解析,进行第二步,没有继续查找
  3. 查找本地DNS服务器,如果要查询的域名,包含在本地配置区域资源中,结束完成解析,进行第二步,没有由本地域名服务器向根域名服务器发起查询(迭代查询)
  4. 迭代查询,按根域服务器 ->顶级域,.cn->第二层域,hb.cn ->子域,www.hb.cn的顺序找到IP地址。

 

第二步:获取到IP之后,建立TCP链接,三次握手。

TCP的三次握手:

第一次握手:客户端A将标志位SYN置为1,随机产生一个值为seq=J(J的取值范围为=1234567)的数据包到服务器,客户端A进入SYN_SENT状态,等待服务端B确认;

第二次握手:服务端B收到数据包后由标志位SYN=1知道客户端A请求建立连接,服务端B将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端A以确认连接请求,服务端B进入SYN_RCVD状态。

第三次握手:客户端A收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务端B,服务端B检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端A和服务端B进入ESTABLISHED状态,完成三次握手,随后客户端A与服务端B之间可以开始传输数据了。

第三步:向服务器发送HTTP请求。HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。

第四步:服务器处理请求。

第五步:浏览器接收HTTP响应。根据不同的状态码处理请求。成功进行第六步。

至此,网络通信部分结束,进行页面渲染

第六步:渲染页面,在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,会再次发送请求,请求过程是异步的,并不会影响html文档进行加载

第七步:关闭TCP连接(四次挥手)

  • 第一次挥手:客户端想分手,发送消息给服务器;
  • 第二次挥手:服务器通知客户端已经接受到分手请求,但还没做好分手准备;
  • 第三次挥手:服务器已经做好分手准备,通知客户端;
  • 第四次挥手:客户端发送消息给服务器,确定分手,服务器关闭连接。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!