从网络的角度来看,用户输入网址到网页显示,期间发生了什么?

步骤(总体来看)

  1. 浏览器根据输入网页的URL进行解析,解析出对应的请求方式、URL、端口等,生成HTTP请求报文。
  2. 浏览器查询缓存,检查缓存是否已经存在该URL的资源,如果缓存命中中直接读取并显示,比如相同的GET请求就会进行缓存。
  3. 缓存未命中,浏览器通过DNS协议获取域名对应的IP地址。
  4. 浏览器根据IP地址和端口号,向目标服务器发起一个TCP连接请求(TCP三次握手)。如果是HTTPS请求,则会在TCP三次握手后加一个SSL四次握手,发布SSL证书,确保连接的安全性。
  5. 若连接成功,则浏览器向服务器发送一个HTTP请求报文,请求获取网页的内容。
  6. 浏览器发送的HTTP请求报文经传输层被封装进TCP数据包,添加TCP头部信息,包括源端口、目标端口、序号等信息。
  7. 每个TCP数据包会经过网络层被封装成IP数据包,添加IP头部,包括源IP地址和目标IP地址,再进行路由的分组和转发。
  8. 网络接口层将IP数据包封装成数据帧,在数据链路层添加头部和尾部,包括源MAC地址和目标MAC地址(MAC地址是网络层的ARP协议根据IP地址查询出来的),数据帧在物理层通过物理介质(光纤、网线等)以比特流的形式进行传输。
  9. 服务器接收到比特流后,根据物理层、数据链路层、网络层、传输层和应用层的顺序将数据进行反向解析,得到最终只含有应用数据的信息,根据端口信息交由具体的程序进行处理。
  10. 服务器将请求处理结果,构建成一个HTTP响应报文,包含状态码(例如200,OK)、响应头和响应体(网页的HTML内容等),返回给浏览器。
  11. 浏览器接收服务器返回结果的流程同服务器接收结果的流程。
  12. 浏览器解析HTTP响应报文并进行渲染和解析,得到用户可以看到的页面。

步骤(从涉及到的协议来看)

        HTTP(或HTTPS)-> DNS -> TCP -> IP -> ARP

        HTTP用于发送含有请求内容和服务器信息的请求报文,DNS用于将域名解析成IP地址,TCP用于建立连接,IP用于路由的分组和转发,ARP用于查询MAC地址,为物理层的比特流的传输找到物理地址。

每一层的封装格式:

细节部分

1. 浏览器根据输入的网址解析请求

  • 用户在浏览器中输入一个网址(例如:https://www.example.com/index.html)。
  • 浏览器将 URL 分解为几个部分:协议(https)、域名(www.example.com)、路径(/index.html)、端口(默认HTTP为80,HTTPS为443)等。
  • 生成对应的 HTTP 请求报文,准备向目标服务器发起请求。

2. 浏览器查询缓存

  • 浏览器首先会检查本地缓存(如浏览器缓存、CDN缓存等)是否已存有该资源。
  • 如果缓存命中,浏览器直接使用缓存的数据,避免重复请求,提高页面加载速度。缓存的条件通常基于 HTTP 头部中的 Cache-Control 或 ETag 等字段。

3. 缓存未命中,DNS 查询域名

  • 如果缓存中没有需要的资源,浏览器会进行 DNS 查询。
  • 浏览器使用 DNS 协议 查询 www.example.com 域名对应的 IP 地址。
  • DNS 查询可以是本地缓存查询、操作系统缓存查询,若本地没有结果,则会通过配置的 DNS 服务器发送查询请求。

4. 浏览器与服务器建立 TCP 连接

  • 获取到 IP 地址后,浏览器通过该地址和目标服务器建立 TCP 连接。
  • TCP三次握手:浏览器和服务器之间通过 三次握手 过程建立连接:
    1. 客户端 发送 SYN(同步)报文。
    2. 服务器 收到 SYN 报文后,返回 SYN-ACK(同步-确认)报文。
    3. 客户端 再次发送 ACK(确认)报文,连接建立成功。
  • 如果是 HTTPS 请求,在TCP连接建立之后,浏览器会通过 SSL/TLS 握手 来确保数据传输的安全性。这个过程涉及证书交换、加密算法协商和生成共享密钥等步骤。

5. 浏览器发送 HTTP 请求报文

  • TCP连接建立成功后,浏览器发送 HTTP 请求报文,请求目标网页的内容。
  • 这个报文通常包含请求方法(GET、POST等)、请求头(如 User-Agent、Accept、Host 等)和请求体(如果是POST请求的话)等。

6. HTTP 请求通过传输层封装为 TCP 数据包

  • HTTP请求会被传输层(TCP协议)封装成一个 TCP 数据包。
  • 传输层会添加头部信息,包括源端口、目标端口、序列号、确认号等,用于保证数据的可靠传输。

7. TCP 数据包通过网络层封装为 IP 数据包

  • 接下来,TCP 数据包会被 网络层 封装成 IP 数据包。
  • 网络层会在数据包中添加 IP 头部,其中包含源 IP 地址和目标 IP 地址。IP 数据包将根据目标 IP 地址进行 路由,通过多个路由器转发,直到到达目标服务器。

8. 数据包通过数据链路层发送到物理层

  • 在网络接口层(数据链路层),IP 数据包被进一步封装为 数据帧,添加源和目标 MAC 地址(通过 ARP 协议 获取)。
  • 数据帧最终在物理层通过物理介质(例如光纤、网线等)以比特流形式进行传输。

9. 服务器接收到数据后进行反向解析

  • 目标服务器接收到来自客户端的比特流后,从物理层、数据链路层、网络层、传输层、应用层逐层解析。
  • 最终,服务器提取出 HTTP 请求报文,并将请求中的 目标端口 信息交给对应的 Web 服务程序(如 Apache、Nginx、Tomcat 等)进行处理。

10. 服务器构建 HTTP 响应报文

  • 服务器根据请求处理结果(如读取网页内容、执行数据库查询等),构建一个 HTTP 响应报文。
  • 响应报文通常包含 响应状态码(如 200 OK、404 Not Found 等)、响应头(如 Content-Type、Content-Length 等)以及响应体(网页内容、图片等)。

11. 服务器将 HTTP 响应发送回客户端

  • 构建好的 HTTP 响应报文 被服务器通过传输层封装为 TCP 数据包,并通过网络层、数据链路层、物理层逐步传输回客户端。

12. 浏览器接收响应并显示页面

  • 客户端浏览器接收到 HTTP 响应报文后,开始解析并呈现网页内容。
  • 如果响应中包含 HTML、CSS、JavaScript 文件,浏览器会继续发送请求来获取这些资源。
  • 最终,浏览器会将所有资源渲染为用户可以看到的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值