常见问题

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):
  1. 浏览器发送一个 SYN 包(同步序列编号)到服务器。
  2. 服务器响应一个 SYN-ACK 包(同步确认)。
  3. 浏览器发送一个 ACK 包(确认),TCP 连接建立。

4. 发送 HTTP 请求

TCP 连接建立后,浏览器会向服务器发送一个 HTTP 请求。

5. 服务器处理请求并返回响应

服务器接收到请求后,处理请求,生成响应内容,并返回给浏览器。响应内容包括 HTTP 状态码、响应头和响应主体。

6. 浏览器接收响应并开始渲染

浏览器接收 HTTP 响应后,开始渲染页面。这个过程包括以下步骤:
  1. 解析 HTML:浏览器解析 HTML 内容,构建 DOM 树。
  2. 解析 CSS:如果 HTML 中包含 CSS 文件或内嵌样式,浏览器会解析 CSS 内容,构建 CSSOM 树(CSS 对象模型)。
  3. 解析 JavaScript:如果 HTML 中包含 JavaScript 文件或内嵌脚本,浏览器会解析并执行 JavaScript 代码,可能会修改 DOM 树或 CSSOM 树。
  4. 构建渲染树:根据 DOM 树和 CSSOM 树,浏览器构建渲染树(Render Tree),这是一种表示页面布局和样式的内部表示。
  5. 布局(Layout):根据渲染树计算每个节点在屏幕上的位置和大小。这一步称为布局或回流(Reflow)。
  6. 绘制(Painting):将渲染树的每个节点绘制到屏幕上,这一步称为绘制或重绘(Repaint)。

7. 显示主页

经过上述步骤后,浏览器将渲染的页面内容显示给用户,用户可以看到主页。

2、为什么要三次握手?二次握手或者四次握手会怎么样?

三次握手

 

三次握手在建立连接之前,Client处于CLOSED状态,而Server处于LISTEN的状态。
  1. 第一次握手(SYN-1):
    • 客户端发送一个带有 SYN 标志的 TCP 报文段给服务器,表示客户端请求建立连接。
    • 客户端选择一个初始序列号(ISN)并将其放入报文段中,进入 SYN_SENT 状态。
  2. 第二次握手(SYN + ACK):
    • 服务器收到客户端发送的 SYN 报文段后,如果同意建立连接,会发送一个带有 SYN 和 ACK 标志的报文段给客户端,表示服务器接受了客户端的请求,并带上自己的 ISN。
    • 服务器进入 SYN_RCVD 状态。
  3. 第三次握手(ACK):
    • 客户端收到服务器发送的 SYN+ACK 报文段后,会发送一个带有 ACK 标志的报文段给服务器,表示客户端确认了服务器的响应。
    • 客户端和服务器都进入 ESTABLISHED 状态,连接建立成功,可以开始进行数据传输。

为什么需要三次握手?

  1. 确保双方都能发送和接收数据
    • 第一次握手确认客户端的发送能力和服务器的接收能力。
    • 第二次握手确认服务器的发送能力和客户端的接收能力。
    • 第三次握手确认客户端的发送能力和服务器的接收能力。
  2. 防止旧的连接请求误导双方
    • 通过三次握手,双方都能确认对方的状态是最新的,有效避免了网络中的旧的、延迟的SYN包造成的错误连接。
  3. 防止重复数据包干扰
    • 三次握手确保双方都能有效处理重复的数据包,并建立一个唯一的连接。

二次握手的问题

如果采用二次握手(即省略第三次握手),可能会导致以下问题:
  1. 旧的重复连接请求:旧的 SYN 包在网络中延迟传输,服务器可能误认为是新的连接请求,发送 SYN-ACK 包,但客户端不知道这个连接,可能导致连接建立异常。
  2. 无法确认客户端的接收能力:服务器在发送 SYN-ACK 包后,不知道客户端是否已成功收到,如果客户端未收到,服务器会一直等待 ACK 包,导致资源浪费。

四次握手的问题

如果采用四次握手(即增加额外的确认步骤),虽然能增加连接建立的可靠性,但也会带来额外的开销和复杂性,增加连接建立的延迟。TCP 设计中,三次握手已经足够确保连接的可靠性和双方通信的能力,再增加步骤则显得不必要且低效。
posted @   三三得九86  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示