zoukankan      html  css  js  c++  java
  • 从输入URL 到页面加载完成的过程

    从输入URL 到页面加载完成的过程

    根据 URL 请求页面过程

    说实话,这类文章网上一抓一大把,而我仍想写这篇博客,一方面是想再仔细缕一下这个过程,另一方面是希望用清晰的语言和结构来解释,也算是小小地挑战一下自己。

    过程概述

    1. 浏览器查找域名对应的 IP 地址;

    2. 浏览器根据 IP 地址与服务器建立 socket 连接;

    3. 浏览器与服务器通信: 浏览器请求,服务器处理请求;

    4. 浏览器与服务器断开连接。

    根据域名查找 IP 地址

    概念解释

    • IP 地址:IP 协议为互联网上的每一个网络和每一台主机分配的一个逻辑地址。IP 地址如同门牌号码,通过 IP 地址才能确定一台主机位置。服务器本质也是一台主机,想要访问某个服务器,必须先知道它的 IP 地址;

    • 域名( DN ):IP 地址由四个数字组成,中间用点号连接,在使用过程中难记忆且易输入错误,所以用我们熟悉的字母和数字组合来代替纯数字的 IP 地址,比如我们只会记住 www.baidu.com(百度域名) 而不是 220.181.112.244(百度的其中一个 IP 地址);

    • DNS: 每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址。

    知道了上面的概念,大概就知道了想要获得服务器的门牌号码,需要先将域名转换成 IP 地址。转换过程如下(以查询 www.baidu.com 的 IP 地址为例,其中2、3、4步均在上一步未

    查询成功的情况下进行):

    查找过程

    1. 浏览器搜索自己的 DNS 缓存(维护一张域名与 IP 地址的对应表);

    2. 搜索操作系统中的 DNS 缓存(维护一张域名与 IP 地址的对应表);

    3. 搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);

    4. 操作系统将域名发送至 LDNS(本地区域名服务器,如果你在学校接入互联网,则 LDNS 服务器就在学校,如果通过电信接入互联网,则 LDNS 服务器就在你当地的电信那里。)LDNS 查询 自己的 DNS 缓存(一般查找成功率在 80% 左右),查找成功则返回结果,失败则发起一个迭代 DNS 解析请求;

      1. LDNS 向 Root Name Server (根域名服务器,其虽然没有每个域名的的具体信息,但存储了负责每个域,如 com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,Root Name Server 返回 com 域的顶级域名服务器的地址;

      2. LDNS 向 com 域的顶级域名服务器发起请求,返回 baidu.com 域名服务器地址;

      3. LDNS 向 baidu.com 域名服务器发起请求,得到 www.baidu.com 的 IP 地址;

    5. LDNS 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;

    6. 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;

    7. 至此,浏览器已经得到了域名对应的 IP 地址。

    补充说明

    • 域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置,例如,segmentfault.com 是 SF 的域名,根据这个域名可以找到 SF 的服务器, segmentfault.com/a/1190000003829539 是 URL ,可以根据这个 URL 定位我写的第一篇博客;

    • IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;

    建立连接--三次握手

    知道了服务器的 IP 地址,下面便开始与服务器建立连接了。

    通俗地讲,通信连接的建立需要经历以下三个过程:

    1. 主机向服务器发送一个建立连接的请求( 您好,我想认识您 );

    2. 服务器接到请求后发送同意连接的信号( 好的,很高兴认识您 );

    3. 主机接到同意连接的信号后,再次向服务器发送了确认信号( 我也很高兴认识您),自此,主机与服务器两者建立了连接。

    补充说明

    • TCP 协议:三次握手的过程采用 TCP 协议,其可以保证信息传输的可靠性,三次握手过程中,若一方收不到确认信号,协议会要求重新发送信号。

    网页请求与显示

    当服务器与主机建立了连接之后,下面主机便与服务器进行通信。网页请求是一个单向请求的过程,即是一个主机向服务器请求数据,服务器返回相应的数据的过程。

    1. 浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;

    2. 服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;

    3. 服务器将得到的 HTML 文件发送给浏览器;

    4. 在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;

    5. 在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、CSS、JavsScript等文件,过程同请求 HTML ;

    断开连接--四次挥手

    1. 主机向服务器发送一个断开连接的请求( 不早了,我该走了 );

    2. 服务器接到请求后发送确认收到请求的信号( 知道了 );

    3. 服务器向主机发送断开通知( 我也该走了 );

    4. 主机接到断开通知后断开连接并反馈一个确认信号( 嗯,好的 ),服务器收到确认信号后断开连接;

    孜孜不倦,必能求索;风尘仆仆,终有归途。
  • 相关阅读:
    <BackTracking> dfs: 39 40
    <Tree> 110 124
    <Tree.PreOrder> DFS 113, 129
    <Math> 50 367
    <String> 49 87
    Haproxy配置Rabbitmq集群负载均衡
    Rabbitmq镜像集群的搭建
    rabbitmq常用命令
    Linux安装rabbitmq
    Docker自定义网络
  • 原文地址:https://www.cnblogs.com/liyuspace/p/7699603.html
Copyright © 2011-2022 走看看