操作系统生成一个 DHCP 请求报文,该请求报文被放到 UDP 报文段中,然后再放到 IP 数据报中,再放到以太网帧中。
以太网帧的目的 MAC 地址为 FF:FF:FF:FF:FF:FF ,可以广播到和交换机连接的所有设备。
路由器接收到该广播帧,并从中抽取 IP 数据报,再从中抽出 UDP 报文段,最后得到 DHCP 请求报文,至此,DHCP 服务器得到了 DHCP 请求报文。
DHCP 服务器分配了一个 IP 地址,生成包含该 IP 地址以及 DNS 服务器 IP 地址、默认网关路由器的 IP 地址和子网块(网络掩码)的一个 DHCP ACK 报文。该 DHCP 报文被放到一个 UDP 报文段中,再放到 IP 数据报,再放到以太网帧中,帧的目的 MAC 地址是我们本机的 MAC 地址。
本机收到包含 DHCP ACK 的以太网帧,从中抽取 IP 数据报,抽出 UDP 报文段,抽出 DHCP ACK 报文。本机的 DHCP 客户记录下得到的 IP 地址以及 DNS 服务器的 IP 地址,并且在 IP 转发表中安装默认网关的地址。
至此,本机 IP 地址已经得到,网络组件的准备工作完成。
开始键入 URL:
首先 Web 浏览器生成一个 TCP 套接字,该套接字被用来向 www.google.com 发送 HTTP 请求,为了生成该套接字,需要知道 www.google.com 的 IP 地址,此时需要使用到 DNS 协议来讲域名转换为 IP 地址。
本机首先产生一个 DNS 查询报文,将字符串 www.google.com 放到 DNS 报文的问题段中,然后再放到 UDP 报文段中,再放到 IP 数据报中,再放到以太网帧中。
该帧发送给网络中的网关路由器(在链路层进行寻址),但是此时只知道网关路由器的 IP 地址,还不知道其 MAC 地址,此时需要使用 ARP 协议。
本机生成一个 ARP 查询报文,其目的 IP 为网关路由器 IP,该 ARP 报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧发送给所有的设备,其中包括网关路由器。
网关路由器接收到包含该 ARP 查询报文的帧,发现该报文中的目标 IP 地址是和其接口的 IP 地址是相匹配的,此时网关路由器便准备一个 ARP 回答,其中包含了其对应的 MAC 地址,该 ARP 回答也放在一个以太网帧中,目的 MAC 地址为本机。该帧由由网关路由器向交换机发送,交换机再向本机发送。
本机收到 ARP 回答报文的帧,从中抽取出网关路由器的 MAC 地址。
此时得到了网关路由器的 MAC 地址,本机可以将包含 DNS 查询的以太网帧顺利地发送给网关路由器,需要注意的是,此时该帧中的 IP 数据报里的 IP 目的地址是 DNS 服务器的 IP 地址,而该帧具有的目的 MAC 地址为网关路由器的 MAC 地址。本机向交换机发送该帧,交换机将该帧交付给网关路由器。
网关路由器接收到该帧,从中抽取出包含 DNS 查询的 IP 数据报,路由器查找该数据报的目的地址,并根据其转发表来转发该数据报。
路由器接收到该帧后,抽取 IP 数据报,检查该数据报的目的地址,根据其转发表确定出接口,经过出接口向 DNS 服务器转发数据报,其中转发表根据域内协议(如 RIP,OSPF 或 IS-IS)以及 因特网的域间协议 BGP 所填写。
最终,包含 DNS 查询的 IP 数据报到达了 DNS 服务器,DNS 服务器抽取出 DNS 查询报文,在其 DNS 数据库中查找名字 www.google.com,找到其对应的 IP 地址的 DNS 源记录。然后 DNS 服务器形成一个包含这种主机名到 IP 地址映射的 DNS 回答报文,将该 DNS 回答报文放到 UDP 报文段中,再放到 IP 数据报中,反向转发回学校的路由器,再通过以太网交换机回到本机。
此时本机从 DNS 报文中抽取 www.google.com 对应的 IP 地址。
Web 客户-服务器交互:
此时本机已经有了 www.google.com 的 IP 地址,便可以生成 TCP 套接字,该套接字用来向 www.google.com 发送 HTTP GET 报文。本机生成 TCP 套接字时,本机的 TCP 必须首先与 www.google.com 中的 TCP 执行三次握手。
本机首先生成一个目的端口为 80 (HTTP)的 TCP SYN 报文段,该 TCP 报文段放到 IP 数据报中,再放到目标 MAC 地址为网关路由器 MAC 地址的帧中,向交换机发送该帧。
网络中的路由器将该帧向 www.google.com 转发,最终,包含 TCP SYN 的数据报到达 www.google.com,从数据报中抽出 TCP SYN 报文并分解到与端口 80 相联系的欢迎套接字。对于谷歌 HTTP 服务器和本机之间的 TCP 连接生成一个连接套接字,产生一个 TCP SYNACK 报文段,并将其放入数据报中,再放入链路层帧中。