浏览器输入url到网页展示过程

发布时间 2023-10-21 16:21:24作者: 桂洛克船长

总图:
简单的网络模型

1.解析URL

​ 浏览器的第一步工作是解析url,从而生成发送给web服务器的请求信息。

​ URL组成如图:

URL 解析

如果上图中表示数据的源的路径名为空呢?这时浏览器会默认访问根目录下的/index.html或者/default.html文件,当对URL解析完成后,浏览器就会开始构造HTTP请求消息

HTTP 的消息格式

2.DNS查询

​ 当浏览器解析URL并生成请求消息后就需要借助操作系统将这个请求发给web服务器,但在发送之前,还有一项工作需要完成那就是查询服务器域名对应的IP地址,因为操作系统发送消息时,必须提供对方的IP地址,相关域名的知识自行百度。

​ 域名解析流程:

​ 以www.server.com举例:

​ (1) 客户端首先向本地域名服务器发送DNS请求查询www.server.com的IP是啥,本地DNS如果缓存里的表格能找到,则直接返回查到的IP,如果没有则向根域名服务器查询;

​ (2)根DNS收到本地DNS的请求后,发现是.com结尾的,会将.com域名的顶级域名服务器地址返回;

​ (3)本地DNS收到地址后,发起请求查询,顶级域名服务器发回负责www.server.com的权威域名地址DNS地址;

​ (4)本地DNS转向权威DNS服务器查询,权威服务器返回www.server.com对应的IP地址;

​ (5)本地DNS再将IP返回给客户端,客户端和目标建立连接。

至此,完成DNS的解析过程。

域名解析的工作流程

​ 注意:不是每次查询都要从头开始查询,因为有缓存这个东西,浏览器首先会看自己的缓存有没有这个域名对应的IP,如果没有再去问操作系统,操作系统也没有,再去hosts文件看,最后才会去本地DNS查询,然后执行以上过程。

3.协议栈

​ 在获取到目标IP后,就可以把HTTP的传输工作交给操作系统中的协议栈。

​ 协议栈位置及组成如图:

img

​ 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

​ 此外 IP 中还包括 ICMP 协议和 ARP 协议。

  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。

​ IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

TCP:

​ 关于TCP的相关知识这里不在详细介绍,自行百度。

​ 在HTTP传输数据之前,需要先建立连接,而TCP的连接,通常称之为三次握手

TCP 三次握手

  • 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。

  • 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。

  • 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。

  • 客户端收到服务端发送的 SYNACK 之后,发送对 SYN 确认的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。

  • 服务端收到 ACKACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

    TCP封装端口

​ 三次握手的目的是保证双方都有发送和接收的能力

​ 经过TCP层的封装后结果如图:

TCP 层报文

IP:

IP层大概作用是确定封装IP

​ 封装完成后数据包如图:

IP 层报文

MAC:

​ 紧接着是封装MAC地址,自己的MAC地址容易获取(网卡生产时就已经确定),那么怎么获取对方的MAC地址呢?此时就需要 ARP 协议帮我们找到路由器的 MAC 地址。ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。

得到对方MAC地址后封装到MAC头部里结果如图:

MAC 层报文

4.网卡

​ 网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。

​ 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序

​ 网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

数据包

5.交换机

​ 交换机的 MAC 地址表主要包含两个信息:

  • 一个是设备的 MAC 地址,

  • 另一个是该设备连接在交换机的哪个端口上。

    交换机的 MAC 地址表

​ 举个例子,如果收到的包的接收方 MAC 地址为 00-02-B3-1C-9C-F9,则与图中表中的第 3 行匹配,根据端口列的信息,可知这个地址位于 3 号端口上,然后就可以通过交换电路将包发送到相应的端口了。

所以,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口

​ 当然了如果找不到的话对应的端口的话,交换机就会以广播的形式向所有端口发送。

6.路由器

路由器的基本原理:

​ 路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。

​ 当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

路由器的包接收操作:

​ 首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。

​ 如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

​ 总的来说,路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。

查询路由表确定输出端口:

​ 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。

MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃

​ 接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。

​ 转发操作分为几个阶段,首先是查询路由表判断转发目标。

路由器转发

在互联网中经过多层路由器转发,终于到了目标地址......

7.到达服务器端

​ 解析数据包:

网络分层模型

当初怎么封装包的,现在就怎么解封包,像拿快递一样。

最后服务器端拿到客户端请求的资源,然后构造响应消息,再发回去,浏览器解析渲染展示网页,然后客户端断开连接,TCP四次挥手,结束。