1、在浏览器中输入url地址到显示主页的过程?
1. 输入 URL 并解析
当用户在浏览器的地址栏中输入 URL(如http://www.xxx.com
)并按下回车键时,浏览器开始处理该请求。
2. DNS 解析
浏览器首先需要将域名(如www.example.com
)解析为 IP 地址。这个过程包括以下步骤:
- 浏览器查找 DNS 缓存,看看是否已经缓存了该域名的 IP 地址。
- 如果浏览器缓存中没有找到,操作系统会查找其本地 DNS 缓存。
- 如果操作系统缓存中也没有找到,操作系统会向配置的 DNS 服务器发送查询请求。
- DNS 服务器查询解析链路,最终将域名解析为 IP 地址,并返回给操作系统。
- 操作系统将 IP 地址返回给浏览器。
3. 建立 TCP 连接
有了 IP 地址后,浏览器与服务器建立 TCP 连接。这个过程包括三次握手(Three-way handshake):- 浏览器发送一个 SYN 包(同步序列编号)到服务器。
- 服务器响应一个 SYN-ACK 包(同步确认)。
- 浏览器发送一个 ACK 包(确认),TCP 连接建立。
4. 发送 HTTP 请求
TCP 连接建立后,浏览器会向服务器发送一个 HTTP 请求。5. 服务器处理请求并返回响应
服务器接收到请求后,处理请求,生成响应内容,并返回给浏览器。响应内容包括 HTTP 状态码、响应头和响应主体。6. 浏览器接收响应并开始渲染
浏览器接收 HTTP 响应后,开始渲染页面。这个过程包括以下步骤:- 解析 HTML:浏览器解析 HTML 内容,构建 DOM 树。
- 解析 CSS:如果 HTML 中包含 CSS 文件或内嵌样式,浏览器会解析 CSS 内容,构建 CSSOM 树(CSS 对象模型)。
- 解析 JavaScript:如果 HTML 中包含 JavaScript 文件或内嵌脚本,浏览器会解析并执行 JavaScript 代码,可能会修改 DOM 树或 CSSOM 树。
- 构建渲染树:根据 DOM 树和 CSSOM 树,浏览器构建渲染树(Render Tree),这是一种表示页面布局和样式的内部表示。
- 布局(Layout):根据渲染树计算每个节点在屏幕上的位置和大小。这一步称为布局或回流(Reflow)。
- 绘制(Painting):将渲染树的每个节点绘制到屏幕上,这一步称为绘制或重绘(Repaint)。
7. 显示主页
经过上述步骤后,浏览器将渲染的页面内容显示给用户,用户可以看到主页。2、为什么要三次握手?二次握手或者四次握手会怎么样?
三次握手
三次握手在建立连接之前,Client处于CLOSED状态,而Server处于LISTEN的状态。
- 第一次握手(SYN-1):
- 客户端发送一个带有 SYN 标志的 TCP 报文段给服务器,表示客户端请求建立连接。
- 客户端选择一个初始序列号(ISN)并将其放入报文段中,进入 SYN_SENT 状态。
- 第二次握手(SYN + ACK):
- 服务器收到客户端发送的 SYN 报文段后,如果同意建立连接,会发送一个带有 SYN 和 ACK 标志的报文段给客户端,表示服务器接受了客户端的请求,并带上自己的 ISN。
- 服务器进入 SYN_RCVD 状态。
- 第三次握手(ACK):
- 客户端收到服务器发送的 SYN+ACK 报文段后,会发送一个带有 ACK 标志的报文段给服务器,表示客户端确认了服务器的响应。
- 客户端和服务器都进入 ESTABLISHED 状态,连接建立成功,可以开始进行数据传输。
为什么需要三次握手?
- 确保双方都能发送和接收数据:
- 第一次握手确认客户端的发送能力和服务器的接收能力。
- 第二次握手确认服务器的发送能力和客户端的接收能力。
- 第三次握手确认客户端的发送能力和服务器的接收能力。
- 防止旧的连接请求误导双方:
- 通过三次握手,双方都能确认对方的状态是最新的,有效避免了网络中的旧的、延迟的SYN包造成的错误连接。
- 防止重复数据包干扰:
- 三次握手确保双方都能有效处理重复的数据包,并建立一个唯一的连接。
二次握手的问题
如果采用二次握手(即省略第三次握手),可能会导致以下问题:- 旧的重复连接请求:旧的 SYN 包在网络中延迟传输,服务器可能误认为是新的连接请求,发送 SYN-ACK 包,但客户端不知道这个连接,可能导致连接建立异常。
- 无法确认客户端的接收能力:服务器在发送 SYN-ACK 包后,不知道客户端是否已成功收到,如果客户端未收到,服务器会一直等待 ACK 包,导致资源浪费。