【面试】常问考点:如果我要访问一个网址,那么在网络中会有哪些过程?

        当你要访问一个网址时,在网络中会经历一系列复杂而有序的过程。这些过程主要涉及DNS解析、TCP连接的建立、HTTP请求的发起与响应、浏览器渲染,以及TCP连接的关闭等。        

一  DNS解析

        DNS(Domain Name System)解析是访问网址的第一步。当用户在浏览器中输入一个网址(如www.baidu.com)时,计算机需要将这个域名转换为IP地址才能找到目标服务器。这个转换的过程就是DNS解析。

        具体过程:

  1. 浏览器首先会检查本地缓存(如浏览器缓存、系统缓存)中是否有该域名的IP地址记录。
  2. 如果没有找到,浏览器会向本地DNS服务器发起查询请求。
  3. 本地DNS服务器会在其缓存中查找,如果仍未找到,则会向根域名服务器发起查询,逐级向下查找,直到找到目标域名对应的IP地址。
  4. 本地DNS服务器将查询到的IP地址返回给浏览器。

二 建立TCP连接

        TCP(Transmission Control Protocol)是一种可靠的传输协议,通过三次握手建立连接,确保数据的可靠传输。

        具体过程:

  1. 第一次握手:客户端(如浏览器)发送一个SYN(同步序列编号)包到服务器,并进入SYN_SENT状态,等待服务器确认。
  2. 第二次握手:服务器收到SYN包后,会发送一个SYN+ACK(同步序列编号+确认)包给客户端,同时自己也进入SYN_RCVD状态。
  3. 第三次握手:客户端收到服务器的SYN+ACK包后,会发送一个ACK(确认)包给服务器,此包发送完毕,客户端和服务器均进入ESTABLISHED(连接已建立)状态,完成三次握手。

三 发起HTTP请求

        一旦TCP连接建立,浏览器就会通过HTTP(HyperText Transfer Protocol)协议向服务器发送请求。

        请求内容:

  1. 请求行包含了请求方法(如GET、POST)、URL和HTTP协议版本;
  2. 请求头部由关键字/值对组成,通知服务器有关客户端请求的信息;
  3. 空行用于分隔请求头部和请求包体;
  4. 请求包体(对于GET请求通常为空)包含要提交的数据。

四 服务器处理请求

        服务器接收到客户端的HTTP请求后,会根据请求的内容进行相应的处理。这可能包括查询数据库、执行服务器端代码、读取文件等。服务器的处理过程取决于请求的性质和服务器端的配置。

五 服务器响应

        服务器处理完请求后,会将结果封装在HTTP响应报文中,并发送回浏览器。HTTP响应报文包含状态行、响应头部、空行和响应包体四个部分。状态行由协议版本、状态码及其描述组成;响应头部用于描述服务器的基本信息和数据的描述;响应包体包含实际的数据,如HTML内容、图片数据等。

六 浏览器渲染

        浏览器接收到服务器的响应后,会开始解析HTML文档,并应用CSS样式、执行JavaScript代码等,最终将页面渲染出来呈现给用户。

七 关闭TCP连接

        在数据传输完毕后,浏览器和服务器会进行TCP连接的关闭。这个过程通常涉及四次挥手,以确保双方都能正确地释放资源。

        具体过程:

  1. 客户端发送一个FIN(结束)包给服务器,并进入FIN_WAIT_1状态。
  2. 服务器收到FIN包后,发送一个ACK包给客户端,并进入CLOSE_WAIT状态。
  3. 服务器也发送一个FIN包给客户端,并进入LAST_ACK状态。
  4. 客户端收到服务器的FIN包后,发送一个ACK包给服务器,并进入TIME_WAIT状态。等待一段时间后(通常是2MSL,即两倍的最大报文段寿命),客户端进入CLOSED状态,TCP连接关闭完成。

 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 11:02:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 11:02:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 11:02:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 11:02:01       55 阅读

热门阅读

  1. 关于限定视频码率的问题

    2024-07-21 11:02:01       14 阅读
  2. 如何进行结构化编程:结合代码的实践指南

    2024-07-21 11:02:01       16 阅读
  3. LeetCode 150, 112, 130

    2024-07-21 11:02:01       17 阅读
  4. 《李彦宏在世界人工智能大会发言的深度洞察》

    2024-07-21 11:02:01       11 阅读
  5. 录入学生信息

    2024-07-21 11:02:01       17 阅读
  6. 分布式ID是什么?有哪些解决方案?

    2024-07-21 11:02:01       16 阅读
  7. 【c++】c++新概念“列表”

    2024-07-21 11:02:01       13 阅读