详细分析:当我们用浏览器访问一个网站到页面展示,背后经历了什

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战


当我们用浏览器访问一个网站到页面显示出来,身为用户我们只要用鼠标点点点就实现了页面展示,但是实际过程是有亿点点复杂。

大致过程为:

  1. 域名解析获取域名对应的IP地址
  2. 获得服务器的IP地址后与其建立TCP连接
  3. 客户机发送请求和接收资源

那么具体是怎样的过程的呢?


一、前提概要


1、网络分层模型


2、什么是IP地址?

  • IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
  • IP地址是32比特的全球唯一标识符
  • IP地址在整个因特网范围内是唯一的。

3、什么是域名?

  • 因特网采用层次树状结构的命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称, 即域名
    DomainDomain

    NameName

    )。

  • 域(
    DomainDomain

    ) 是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可以继续划分为子域的子域,这样就形成了顶级域、二 级域、三级域等。

  • 每个域名都由标号序列组成,而各标号之间用点(“.") 隔开。

4、什么是DNS

  • 域名系统(
    DomainDomain

    NameName

    SystemSystem

    DNSDNS

    ):因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名(如 www.baidu.com)转换为便于机器处理的

    IPIP

    地址。

  • DNS使用了大量的域名服务器,他们以层次方式组织
    1. 根域名服务器3
    2. 顶级域名服务器4
    3. 授权域名服务器(权限域名服务器)5
    4. 本地域名服务器6

二、漫漫取经之路就在脚下


1、域名解析

访问www.baidu.com时,需要将域名映射为对应的

IPIP

地址。即域名解析的过程。

  1. 首先由客户机向其本地域名服务器发出一个
    DNSDNS

    请求报文

  2. 本地域名服务器在收到请求后,先查询本地缓存中是否存在该记录,若没有,则以
    DNSDNS

    客户的身份向根域名服务器发出解析请求报文

  3. 根域名服务器根据收到的请求,判断该域名(
    www.baidu.comwww.baidu.com

    )属于

    .com.com

    域,将对应的顶级域名服务器

    dns.comdns.com

    IPIP

    地址返回到本地域名服务器

  4. 本地域名服务器在向顶级域名服务器
    dns.comdns.com

    发送解析请求报文

  5. 顶级域名服务器
    dns.comdns.com

    根据请求,判断该域名属于(

    baidu.combaidu.com

    )域,将授权域名服务器

    dns.baidu.comdns.baidu.com

    的IP地址返回给本地域名服务器

  6. 本地域名服务器在向授权域名服务器
    dns.baidu.comdns.baidu.com

    发送解析请求报文

  7. 授权域名服务器
    dns.baidu.comdns.baidu.com

    根据请求,判断域名属于(

    www.baidu.comwww.baidu.com

    )域,将查询结果(即域名

    www.baidu.comwww.baidu.com

    对应的IP地址)返回给本地域名服务器

  8. 本地域名服务器将域名
    www.baidu.comwww.baidu.com

    对应

    IPIP

    地址保存到本地缓存,并返回给客户机,至此域名解析完成

那么是怎么通过

TCP/IPTCP/IP

网络结构发送到域名服务器?

  1. 应用层发送一个

    DNSDNS

    请求报文,传送给传输层

  2. 传输层为

    UDPUDP

    请求报文加上

    UDPUDP

    请求头,形成

    UDPUDP

    数据报,传送给网络层

  3. 网络层在

    UDPUDP

    数据报的基础上添加

    IPIP

    请求头形成

    IPIP

    数据报,用

    ARPARP

    地址解析协议解析出下一跳的

    MACMAC

    地址

  4. 数据链路层为

    IPIP

    数据报加上帧头和帧尾,封装成帧

  5. 物理层将报文传输给下一跳,(这里下一跳即域名服务器,事实上应该会跳转多个路由器)传输到域名服务器,域名服务器的每层再对数据进行一个拆封的过程。

  6. 域名服务器查询到

    IPIP

    地址之后原路返回


2、建立TCP连接(三次握手)

  1. 服务器上会有一个进程一直在不断地监听
    TCPTCP

    80端口

  2. 客户机在获取到对应的
    IPIP

    地址之后,客户机向服务器发送一个连接请求报文

  3. 服务器监听到连接请求报文之后,向客户机返回一个确认报文,并为此次
    TCPTCP

    连接分配缓存和变量

  4. 当客户机收到确认报文段后,再向服务器发出一个确认报文,并为此次连接分配缓存和变量
  5. 服务器再收到确认报文之后,
    TCPTCP

    连接就建立成功了


3、获取资源

设HTTP协议使用持久连接2:

  1. TCP连接建立成功之后,客户机向服务器通过TCP连接发送携带请求资源信息的HTTP请求报文
  2. 服务器收到HTTP请求报文之后,通过HTTP响应报文将客户机请求的资源发送给客户机
  3. 如需多个资源,重复以上操作即可

注:

实际上,客户机向服务器在建立TCP的第三次握手时发送的确认报文可以携带上HTTP请求报文


4、浏览器解释

  • 客户机在接收到服务器返回的资源后,对其进行解释,用超文本标记语言(
    HTMLHTML

    )将其显示在屏幕上


把握住今天,胜过两个明天。


  1. 最高层次的域名服务器
  2. 负责管理再该顶级域名服务器注册的所有二级域名
  3. 将管辖的主机名转换为该主机的IP地址
  4. 当主机发出DNS查询请求时,这个请求报文就发送给该主机的本地域名服务器
  5. 持久连接,是指万维网服务器在发送响应后仍保持这条连接,使同一个客户和服务器可以继续使用这条连接传送后续的HTTP请求与响应报文。
    HTTP/1.1HTTP/1.1

    支持