浏览器输入 URL 请求的全过程

浏览器输入 URL 请求的全过程


1. DNS 解析

按照一下顺序进行 DNS 解析:

  • Browser cache
  • OS cache
  • Router cache
  • ISP DNS cache
  • Recursive search

DNS Recursive search

2. 封装 HTTP 请求

按照 HTTP 报文的格式 封装 HTTP 请求

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
...

3.建立 TCP 连接

利用操作系统提供的套接字接口(socket API),和服务端建立连接,这一过程之前已经描述过。这里说明一下套接字的作用,套接字实现了传输层的多路复用和多路分解。注意 TCP 层的头部只有端口(指明了哪一个主机的进程),不包括 IP 地址(指明了包应该怎么在网络中路由),将封装了 TCP 头的 segment 传递给网络层

4. 封装 IP 头

按照 IP 头的格式 在 网络层 封装 IP 头,包括了版本,源 IP 地址,目的 IP 地址等(用于之后在网络中路由寻址),TTL(封装之后的 packet 在网络中路由选择是逐跳(hop-to-hop)进行的,每一跳会将生存时间 TTL 减一)等,将 packet 传递给数据链路层 (具体的路由过程待补充)

5. 封装 MAC 地址

光靠 IP 地址是无法进行通信的,因为 IP 地址并不和某台设备绑定,比如你的笔记本的 IP 在家中是 192.168.1.1,但到公司就变成 172.22.22.22 了,所以在底层通信时需要使用一个固定的地址,这就是 MAC(media access control) 地址,每个网卡出厂时的 MAC 地址都是固定且唯一的。当一台电脑加入网络时,需要通过 ARP 协议告诉其它网络设备它的 IP 及对应的 MAC 地址是什么,这样其它设备就能通过 IP 地址来查找对应的设备了。 (ARP 协议和本地网络转换待补充)

6.网络路由

解包到网络层,在经过 NAT/PAT 路由器的时候,会更改 IP 地址为公网 IP,并且会在路由器中记下 NAT 映射,在广域网中路由时,只更改 TTL 和 checksum

7. 服务端解包

自底向上解包,套接字进程会进行多路分解,根据目的端口,将请求传递给对应的进程,线程池处理请求,产生应答的 HTTP 报文,又经过一层层的封装,一跳跳的传输到达源主机

8. 关闭连接

之前已经描述够四次挥手

Ref:

浏览器输入 URL 请求的全过程的相似文章

凛冬将至什么水平,2022凛冬之时三年经验前端面经分析理解vue中的diff算法,Vue原理解析(八):一起搞明白令人头疼的diff算法分析Vue 的生命周期之间到底做了什么事清?(源码详解,带你从头梳理组件化流程)分析金三银四,我先面为敬了(腾讯、美团、商汤科技等七家大厂面试有感)分析浏览器的渲染原理及优化方式,浏览器层合成与页面渲染优化分析 连八股文都不懂还指望在前端混下去么分析【7k长文,一次到位】前端八股文再来一遍🧐(图解 + 总结)分析2021年前端各大公司都考了那些手写题(附带代码)分析vue中$router与$route的区别,可能比文档还详细--VueRouter完全指北分析【建议👍】再来40道this面试题酸爽继续(1.2w字用手整理)分析