文章目录
- 1. DNS解析
- 1.1 DNS域名结构
- 1.2 DNS域名解析的工作流程
- 2. TCP 连接
- 3. 发送 HTTP 请求
- 4. 服务器处理请求
- 5. 浏览器接收 HTTP 响应
- 6. 断开连接
这个过程包括多个步骤,涵盖了 DNS 解析、TCP 连接、发送 HTTP 请求、服务器处理请求并返回 HTTP 响应、浏览器处理响应并渲染页面等多个环节。
1. DNS解析
浏览器会发起一个 DNS 请求到 DNS 服务器,将域名解析为服务器的 IP 地址。
DNS的全称是Domain Name System(域名系统),它是互联网中用于将域名转换为对应IP地址的分布式数据库系统。DNS扮演着重要的角色,使得人们可以通过易记的域名访问互联网资源,而无需记住复杂的IP地址。
1.1 DNS域名结构
DNS 中的域名都是用句点
来分隔的,比如 www.server.com
,这里的句点代表了不同层次之间的界限。
在域名中,越靠右的位置表示其层级越高。
实际上域名最后还有一个点,比如 www.server.com.
,这个最后的一个点代表根域名。
也就是,.
根域是在最顶层,它的下一层就是 .com
顶级域,再下面是 server.com
。
所以域名的层级关系类似一个树状结构:
• 根 DNS 服务器(.)
• 顶级 DNS 服务器(.com)
• 权威 DNS 服务器(server.com)
根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。
因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。
1.2 DNS域名解析的工作流程
假设我们在浏览器地址栏里键入了www.baidu.com
:
- 开始:用户在浏览器中输入
www.baidu.com
并发起请求。 - 本地 DNS 解析
- 检查浏览器缓存 :浏览器首先会检查自身的缓存,查看是否已经缓存了
www.baidu.com
对应的IP
地址。如果找到对应的IP
地址,则直接使用缓存中的IP
地址进行访问,解析流程结束。 - 检查本地 DNS 服务器缓存 :如果浏览器缓存中没有找到对应的
IP
地址,则请求会发送到本地 DNS 服务器(如运营商提供的 DNS 服务器)。本地 DNS 服务器会先检查自己的缓存,查看是否缓存了www.bilibili.com
及其对应的IP
地址。如果找到,则返回给浏览器,解析流程结束。
- 检查浏览器缓存 :浏览器首先会检查自身的缓存,查看是否已经缓存了
- DNS 解析服务
如果本地 DNS 服务器缓存中也没有找到对应的 IP 地址,则开始进行 DNS 解析服务的递归查询过程:- 请求根服务器 :本地 DNS 服务器会向根服务器发送请求,询问
www.bilibili.com
所属的顶级域名服务器(com
域)的信息。根服务器会返回负责com
域的顶级域名服务器的地址。 - 请求顶级域名服务器 :本地 DNS 服务器收到根服务器返回的信息后,会向顶级域名服务器(
com
域)发送请求,询问www.bilibili.com
所属的权威域名服务器的信息。顶级域名服务器会返回负责bilibili.com
域的权威域名服务器的地址。 - 请求权威域名服务器 :本地 DNS 服务器收到顶级域名服务器返回的信息后,会向权威域名服务器(
bilibili.com
域)发送请求,询问www.bilibili.com
对应的 IP 地址。权威域名服务器会返回www.bilibili.com
对应的 IP 地址给本地 DNS 服务器。
- 请求根服务器 :本地 DNS 服务器会向根服务器发送请求,询问
本地 DNS 服务器收到权威域名服务器返回的 IP 地址后,会将该 IP 地址缓存起来,然后返回给浏览器。浏览器收到 IP 地址后,就可以使用该 IP 地址与服务器建立连接,访问 www.baidu.com
网站。
2. TCP 连接
浏览器通过解析得到的 IP 地址与服务器建立 TCP 连接。这一步涉及到 TCP 的三次握手,用于确保双方都已经准备好进行数据传输了。TCP三握四挥详情可戳 三握四挥
3. 发送 HTTP 请求
浏览器构建 HTTP 请求,包括请求行、请求头和请求体;然后将请求发送到服务器。
4. 服务器处理请求
服务器接收到 HTTP 请求后,根据请求的资源路径,经过后端处理,生成 HTTP 响应消息;响应消息包括状态行、响应头和响应体。
5. 浏览器接收 HTTP 响应
浏览器接收到服务器返回的 HTTP 响应数据后,开始解析响应体中的 HTML 内容;然后构建 DOM 树、解析 CSS 和 JavaScript 文件等,最终渲染页面。
6. 断开连接
TCP 四次挥手,连接结束。