概要
一个 Web 请求网页的过程大致分为四个阶段:DHCP 配置主机信息、ARP 解析 MAC 地址、DNS 解析域名、HTTP 请求页面。接下来对这四个阶段进行简要的分析。
过程
DHCP 配置主机信息
- 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
- 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。
- 交换机的 DHCP 服务器收到广播帧之后,分解得到 IP 数据报、DHCP 请求报文等。之后生成 DHCP ACK 报文并放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。
- 主机收到该 MAC 帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。
ARP 解析 MAC 地址
DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,我们需要使用 ARP 协议:
- 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
- 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 响应报文,包含了它的 MAC 地址,发回给主机。
DNS 解析域名
- 浏览器首先搜索浏览器自身缓存的 DNS 记录。浏览器自身会缓存 DNS,chrome 缓存 1000 条 DNS 解析结果,缓存时间大约 1min。
- 如果浏览器缓存中没有找到需要的记录或者记录已经过期,需要搜索 hosts 文件和操作系统缓存。通过 hosts 文件,你可以手动指定一个域名和其对应的 IP 解析结果,并且该结果一旦被使用,同样会被缓存到操作系统缓存中。
- 如果 hosts 文件和操作系统的缓存中也没有记录或者记录已经过期,则向域名解析服务器发送解析请求。
- 如果 DNS 解析服务器也没有域名的记录,就开始递归 + 迭代解析。
HTTP 请求页面
- 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。
- 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。
- HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。
- 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。
- HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。
- 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。