从URL到浏览器页面的完整过程
Peng's Blog 只记录和技术相关的东西

从URL到浏览器页面的完整过程


关于这个问题.. 当时学计算机网络的时候,记得文鸿老师说过这样一句话:“只要你搞懂了从URL到页面的完整过程,计算机网络这门课你就学得差不多了”

在实验课结束的那次答辩的时候,他也问过我这个问题。当时回答的还算不错,得了一个优秀.. 但现在已经过去半年多了,都忘记当时是怎么在他面前装B的了.. 所以,继续学习一遍。

流程

1、浏览器端输入URL

2、DNS域名解析,找出IP地址

3、根据IP地址,建立Socket连接。三次握手

4、浏览器和服务器之间通信,传输数据

5、四次握手,断开连接


浏览器输入URL

URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上的资源,实际上就是网站网址。url的格式一般为:

协议类型://<主机名>:<端口>/<路径>/文件名


DNS域名解析,找出IP地址

关于IP地址、DNS、域名那些是啥,我就不详细解释了。不知道的去翻课本。

查找过程大致如下:

  • 浏览器搜索自己的DNS缓存(它有维护一张域名与IP地址的对应表)
  • 搜索操作系统中的DNS缓存(同上)
  • 搜索操作系统的hosts文件,可能里面也有那域名IP对应表
  • 操作系统将域名发送至LDNS(本地区域名服务器),LDNS查询自己的DNS缓存(一般成功率为80%),成功则返回,失败则发起一个迭代DNS解析请求。


建立Socket连接

详细说明请看我以前整理的一篇文章:三次握手

简单描述一下的话,

1、浏览器先主动发送建立连接的请求。(你好,我想认识你)

2、服务器收到请求后回复同意连接的信号。(好的,很高兴认识你)

3、主机收到同意连接的信号之后,再次确认。(我也很高兴认识你)

为什么会有三次握手呢?因为.. 方式超时的信息,在最后又到了服务器。那样就非常尴尬了。所以需要第三次握手来再次确认。


浏览器和服务器之间传输数据

简单的说就是各种发送数据包。这里的话,可以理解成URL指定的文件,一般是一些HTML文件。

那浏览器怎么显示呢?

浏览器在还没完全接收HTML文件时就开始渲染和显示网页了

在执行HTML中代码时,根据需要,浏览器会继续请求图片、CSS、JS等文件。这过程又是一次请求HTML了。

至于怎么渲染,这是浏览器解析HTML的事.. 这个问题的关注点不在这里。


断开连接

详细说明请看我以前整理的一篇文章:四次握手

过程图:

四次握手

  1. 主机向服务器发送一个断开连接的请求(不早了,我该走了);
  2. 服务器接到请求后发送确认收到请求的信号(知道了);
  3. 服务器向主机发送断开通知(我也该走了);
  4. 主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接;

这时候问题又来了,为啥要这么麻烦呢?四次握手才断开。原因是,因为服务器收到断开连接的请求的时候,可能仍然有数据没传送完。(在 知道了 和 我也该走了 之间传)。

还有个考点,主机发送确认信号之后并没有马上断开连接,而是等待了两个报文传送周期之后才断。原因的话是因为,如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期。


参考资料

1、从url到页面展现,这之中发生了什么?

2、从输入 URL 到页面加载完成的过程中都发生了什么


下一篇 容器深入研究

Comments

评论功能暂停使用,如需跟作者讨论请联系底部的GitHub