输入URL后发生了什么

搜索框输入一个url后发生了什么

1. 解析 URL

URL 各元素的组成如下

img

这个url请求服务器上的路径就是

img

首先,浏览器做的第一步就是解析 URL 得到里面的参数,将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源等等。

2. 浏览器封装 HTTP 请求报文

URL 进行解析之后,浏览器确定了目标服务器和文件名,接下来就需要根据这些消息封装成一个 HTTP 请求报文发送出去

3. DNS 域名解析获取 IP 地址

封装好 HTTP 请求报文后,还有一项准备工作没有做,那就是获取目标服务器的 IP 地址。

虽然解析得到了域名,理论浏览器已经知道目标服务器是谁了。但是实际上,域名并不是目标服务器真正意义上的地址,互联网上每一台计算机都被全世界唯一 IP 地址标识着,但是 IP 地址并不方便记忆,所以才设计出了域名。

那么就需要解析域名获取目标服务器的 IP 地址。不然空有一个方便记忆的域名咋知道这个请求到底发送到哪里去呢。

1)首先搜索浏览器的 DNS 缓存,缓存中维护着一张域名与 IP 地址的对应表;

2)若没有命中,则继续搜索操作系统的 DNS 缓存;

3)若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的 DNS 缓存,查找成功则返回结果;

4)若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行查询:

5)如果命中,则递推回去保存在各个服务器的DNS缓存中

img

DNS 使用的是 UDP 协议,也就是说上面各种请求的转发,都是基于 UDP 这个无连接协议的。

4. 建立 TCP 连接

获取到了目标服务器的 IP 地址之后,浏览器就知道我等下请求要发给谁了,这个时候就可以开始发送封装好了的 HTTP 请求报文了,那么既然需要发送请求,必然就需要 TCP 通过三次握手为浏览器和服务器之间建立可靠的连接,保证双方都具有可靠的接收和发送能力

三次握手流程如下

img

5. 浏览器发送请求

TCP 三次握手完成后,浏览器与目标服务器之间就建立了一个可靠的虚拟通道,于是浏览器就可以发送自己的 HTTP 请求了。

6. 负责传输的 IP 协议

实际上,TCP 在三次握手建立连接、四次握手断开连接、以及连接建立过程中的收发数据(TCP 报文段)等各阶段操作时,都是通过 IP 协议进行传输的,IP 协议将这些阶段的数据添加 IP 首部封装成 IP 数据报再进行传输。

IP 数据报的首部存有源 IP 地址和 目标 IP 地址。所谓源 IP 地址 就是发送方的 IP 地址;目标 IP 地址就是通过 DNS 域名解析得到的目标服务器的 IP 地址。

7. 使用 ARP 协议凭借 MAC 地址通信

IP 协议的作用是把各种数据包传送给对方,而要保证确实传送到对方那里,则需要满足各类条件,其中必要的两个就是 IP 地址 和 MAC 地址。

MAC 地址是用来唯一标识一个接入互联网的设备的。

那么,将 IP 地址转化为 MAC 地址,从而在数据链路层精确的传输数据的协议就是 ARP 协议

ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。并且每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表

比如下图所示,假定主机 A 向同一链路上的主机 B 发送 IP 数据报,已知主机 A 和主机 B 的 IP 地址,它们互不知道对方的 MAC 地址:

img

1)首先,主机 A 为了获得主机 B 的 MAC 地址,它会先去查询自己的 ARP 高速缓存中有没有主机 B 的相关记录;

2)如果主机 A 的 ARP 高速缓存中没有主机 B 的 IP 地址到 MAC 地址的映射,主机 A 就会通过广播的方式发送 ARP 请求包(该包携带自己的 IP 地址 和 MAC 地址 以及 目标主机的 IP 地址),表明自己想要获得主机 B 的 MAC 地址;

3) 由于广播请求可以被同一个链路上的所有主机或路由器接收,因此如果这条链路上某个主机或路由的 IP 地址与这个 ARP 请求包中包含的目标主机的 IP 地址相同,那么这个节点就将自己的 MAC 地址塞入 ARP 响应包中返回给主机 A;

4)主机 A 在收到主机 B 发过来的 ARP 响应包后,向其 ARP 高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。

img

8. 服务器响应请求

浏览器的 HTTP 请求报文通过 TCP 三次握手建立的连接通道被切分成若干报文段分别发送给服务器,服务器在收到这些报文段后,按照序号以原来的顺序重组 HTTP 请求报文。然后处理并返回一个 HTTP 响应。当然,HTTP 响应报文也要经过和 HTTP 请求报文一样的过程。

9. 断开 TCP 连接

浏览器和服务器都不再需要发送数据后,四次挥手断开 TCP 连接

10. 浏览器显示界面

浏览器接收到服务器返回的数据包,根据浏览器的渲染机制对相应的数据进行渲染

总结

应用层:

浏览器封装 HTTP 请求报文
DNS 解析域名获得目标服务器地址
传输层:

TCP三次握手建立连接
把应用层传过来的 HTTP 请求报文进行分割,并在各个报文上打上标记序号及端口号转发给网络层
网络层:

利用 ARP 协议根据 IP 地址获取作为通信目的地的 MAC 地址后转发给链路层
服务端在链路层收到数据,按序往上层发送,一直到应用层接收到浏览器发送来的 HTTP 请求报文,然后处理该请求并返回 HTTP 响应报文,浏览器接收到响应报文之后解析渲染界面。最后 TCP 断开连接。

点赞
  1. 说道:
    WebView Android 12
    看不懂,可以吃吗

发表回复

电子邮件地址不会被公开。必填项已用 * 标注