Web页面请求过程
- DHCP配置主机信息
- 假设主机最开始没有IP地址以及其他信息, 那么就需要首先使用DHCP(动态主机配置协议))来获取.
- 主机生成一个DHCP请求报文, 并将这个报文放入具有目的端口67和源端口68的UDP报文段中.
- 该报文段被放入一个具有广播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的IP数据报中.
- 该数据报被放在MAC帧中, 改帧的目的地址为FF:FF:FF:FF:FF:FF, 将广播到与交换机连接的所有设备.
- DHCP服务器收到广播帧之后, 不断向上分解得到IP数据报, UDP报文段, DHCP请求报文, 然后生成DHCP ACK报文, 报文包含:IP地址, DNS服务器的IP地址, 默认网关路由器的IP地址子网掩码. 该报文被放在UDP报文段, UDP报文段被放在IP数据报中, 最后放在MAC帧中.
- 该帧的目的地址是请求主机的MAC地址. 因为交换机可以更新路由表, 之前主机发送了广播帧之后就记录了源发送的MAC地址到其转发接口的路由表项, 因此现在交换机就可以知道往哪个接口发送改帧.
- 主机收到该帧, 向上分解得到DHCP报文. 完成配置IP地址, 子网掩码, DNS服务器IP地址, 并在其IP转发表中安装默认网关.
- ARP解析MAC地址
- 主机通过浏览器生成一个TCP套接字, 套接字向HTTP服务器发送HTTP请求. 为了生成该套接字, 主机需要网站的对应IP地址.
- 主机生成一个DNS查询报文, 该报文具有53号端口, 因为DNS服务器的端口号是53.
- 该DNS查询报文被放入目的地址为DNS服务器IP地址的IP数据报中.
- 该IP数据报被放入一个以太网帧中, 该帧将发送到网关路由器.
- DHCP过程只知道网关路由器IP地址, 为了获取网关路由器的MAC地址, 需要使用ARP协议.
- 主机生成一个包含目的地址为网关路由器的IP地址的ARP查询报文, 将该ARP查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧, 并向交换机发送该以太网帧, 交换机将该帧转发给所有的连接设备, 包括网关路由器.
- 网关路由器接收到该帧后, 不断向上分解得到ARP报文, 发现其中的IP地址与其接口的IP地址匹配, 因此就发送一个ARP回答报文, 包含了他的MAC地址, 返回给主机.
- DNS解析域名
- 知道了网关路由器的MAC地址之后, 就可以继续DNS解析过程了.
- 网关路由器收到包含DNS查询报文的以太网帧后, 抽取出IP数据报, 并根据转发表决定该IP数据报应该转发给的路由器.
- 因为路由器具有内部网关协议(RIP, OSPF)和外部网关协议(BGP)这两种路由协议, 因此路由表已经配置了网关路由器到达DNS服务器的路由表项.
- 到达DNS服务器后, DNS服务器抽取出DNS查询报文, 并在DNS数据库中查找待解析的域名.
- 找到DNS记录后, 发送DNS回答报文, 将该回答报文放到UDP报文段, 然后放入IP数据报中, 通过路由器反向发回网关路由器, 并经过以太网交换到达主机.
- 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页面.