Web页面请求的过程
一名学生鲍勃将他的计算机与学校的以太网交换机相连,下载一个Web页面(比如说www.google.com的主页)。
准备:DHCP、UDP、IP和以太网
假定鲍勃启动他的计算机,然后将其用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连。如图所示。学校的这台路由器与一个ISP
连接,本例中ISP
为comcast.net
。在本例中,comcast.next
为学校提供了DNS
服务;所以,DNS
服务器驻留在Comcast
网络中而不是学校网络中。我们假设DHCP
服务器运行在路由器中。
当鲍勃首先将计算机与网络连接时,没有IP
地址不能做任何事情。所以,鲍勃的计算机所采取的一个网络相关的动作就是运行DHCP
协议,从本地DHCP
服务器获得一个IP
地址以及其他信息。
- 鲍勃计算机上的操作系统生成一个
DHCP
请求报文,并将这个报文放入具有目的端口67(DHCP
服务器)和源端口68(DHCP
客户)的UDP
报文段,该UDP
报文段则被放置在一个具有广播IP
目的地址255.255.255.255
和源IP
地址0.0.0.0
的IP
数据报中,因为鲍勃的计算机还没有一个IP
地址。 - 包含
DHCP
请求报文的IP
数据包则被放置在以太网帧中。该以太网帧具有目的MAC
地址FF:FF:FF:FF:FF:FF
,使该帧将广播到与交互机连接的所有设备(如果顺利的话也包括DHCP
服务器);该帧的源MAC
地址是鲍勃计算机的MAC
地址00:16:D3:23:68:8A
。 - 包含
DHCP
请求的广播以太网帧是第一个由鲍勃发送到以太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口。 - 路由器在它的具有
MAC
地址00:22:6B:45:1F
的接口接收到该广播以太网帧,该帧中包含DHCP
请求,并且从该以太网帧中抽取出IP
数据报。该数据报的广播IP
目的地址指示了这个IP
数据包应当由在该结点的高层协议处理,因此该数据报的载荷(一个UDP
报文段)被分解向上到达UDP
,DHCP
请求报文从此UDP
报文段中抽取出来。此时DHCP
服务器有了DHCP
请求报文。 - 我们假设运行在路由器中的
DHCP
服务器能够以CIDR
块68.85.2.0/24
分配IP
地址。所以本例中,在学校内使用的所有IP
地址都在Comcast
的地址块中。我们假设DHCP
服务器分配地址68.85.2.101
给鲍勃的计算机。DHCP
服务器生成包含这个IP
地址以及DNS
服务器的IP
地址68.87.71.226
,默认网关路由器的IP
地址68.85.2.1
和子网块68.85.2.0/24
的一个DHCP ACK
报文。该DHCP
报文被放入一个UDP
报文段中,UDP
报文段被放入一个IP
数据报中,IP
数据报再被放入一个以太网帧中。这个以太网帧的源MAC
地址是路由器连到归属网络时接口的MAC
地址00:22:6B:45:1F:1B
,目的MAC
地址是鲍勃计算机的MAC地址00:16:D3:23:68:8A
。 - 包含
DHCP ACK
的以太网帧由路由器发送给交换机。因为交换机是自学习的,并且先前从鲍勃计算机收到以太网帧,所以该交换机知道寻址到00:16:D3:23:68:8A
的帧仅从通向鲍勃计算机的输出端口转发。 - 鲍勃计算机接收到包含
DHCP ACK
的以太网帧,从该以太网帧中抽取IP
数据报,从IP
数据报中抽取UDP
报文段,从UDP
报文段抽取DHCP ACK
报文。鲍勃的DHCP
客户则记录下它的IP
地址和它的DNS
服务器IP
地址。它还在其IP
转发表中安装默认网关的地址。鲍勃计算机将向该默认网关发送目的地址为其子网68.85.2.0/24
以外的所有数据报。此时,鲍勃计算机已经初始化好他的网络组件,并准备开始处理Web网页获取。
仍在准备:DNS和ARP
当鲍勃将www.google.com的URL键入其Web浏览器时,他开启了一长串时间,这将导致谷歌主页最终显示在其Web浏览器上。鲍勃的Web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.google.com发送HTTP请求。为了生成该套接字,鲍勃计算机将需要知道www.google.com的IP地址,使用DNS协议提供这种名字到IP地址的转化服务。
- 鲍勃计算机上的操作系统生成一个DNS查询报文,将字符串www.google.com放入到DNS报文的问题段中。该DNS报文则放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址
68.87.71.226
(第5步中DHCP ACK返回的DNS服务器地址)和源IP地址68.85.2.101
的IP数据报中。 - 鲍勃计算机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送到鲍勃学校网络中的网关路由器。然而,即使鲍勃计算机经过上述第5步中的DHCP ACK报文知道了学校网关路由器的IP地址
68.85.2.1
,但仍不知道该网关路由器的MAC地址。为了获得该网关路由器的MAC地址,鲍勃计算机将需要使用ARP协议。 - 鲍勃计算机生成一个具有目的IP地址
68.85.2.1
(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址FF:FF:FF:FF:FF:FF
的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器。 - 网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧,发现在ARP报文中目标IP地址68.85.2.1匹配其接口的IP地址。网关路由器因此准备一个ARP回答,指示它的MAC地址
00:22:6B:45:1F:1B
对应IP地址68.85.2.1
,它将ARP回答放在一个以太网帧中,其目的地址为00:16:D3:23:68:8A
,并向交换机发送该帧,再由交换机将帧交付给鲍勃计算机。 - 鲍勃计算机接收包含ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址
00:22:6B:45:1F:1B
- 鲍勃计算机现在能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。注意到该帧中的IP数据报具有IP目的地址
68.87.71.226
(DNS服务器),而该帧具有目的地址00:22:6B:45:1F:1B
(网关路由器)。鲍勃计算机向交换机发送该帧,交换机将该帧交付给网关路由器。
仍在准备:域内路由选择到DNS服务器
- 网关路由器接收该帧并抽取包含DNS查询的IP数据报。路由器查找该数据报的目的地址
68.87.71.226
,并根据其转发表决定该数据报应当发送到图6-32的Comcast网络中最左边的路由器。IP数据报放置在链路层帧中,该链路适合将学校路由器连接到最左边Comcast路由器,并且该帧经过这条链路发送。 - 在Comcast网络中最左边的路由器接收到该帧,抽取IP数据报,检查该数据报的目的地址
68.87.71.226
,并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,而转发表已根据Comcast的域内协议以及因特网的域间协议BGP所填写。 - 最终包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽取出DNS查询报文,在它的DNS数据库中查找名字www.google.com,找到包含对应www.google.com的IP地址
64.233.169.105
的DNS源记录(假设它当前缓存在DNS服务器中)。该DNS服务器形成了一个包含这种主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,该报文段放入寻址到鲍勃计算机的IP数据报中。该数据报将通过Comcast网络反向转发到学校的路由器,并从这里经过以太网交换机到鲍勃计算机。 - 鲍勃计算机从DNS报文抽取出服务器www.google.com的IP地址。最终,在大量工作后,鲍勃计算机此时准备接触www.google.com服务器。
Web客户——服务器交互:TCP和HTTP
- 既然鲍勃计算机有了www.google.com的IP地址,它能够生成TCP套接字,该套接字将用于向www.google.com发送HTTP GET报文。当鲍勃生成TCP套接字时,在鲍勃计算机中的TCP必须首先与www.google.com中的TCP执行三次握手。鲍勃计算机因此首先生成一个具有目的端口80(针对HTTP的)的TCP SYN报文段。将该TCP报文段放置在具有目的IP地址
64.223.169.105
的IP数据报中,将该数据报放置在MAC地址为00:22:6B:45:1F:1B
的帧中,并向交换机发送该帧。 - 在学校网络,Comcast网络和谷歌网络中的路由器朝着www.google.com转发包含TCP SYN的数据报,使用每台路由器中的转发表。如前面步骤14~16那样。前面讲过支配分组经Comcast和谷歌网络之间域间链路转发的路由器转发表项,是由BGP协议决定的。
- 最终,包含TCP SYN的数据报到达www.google.com。从数据报抽取出TCP SYN报文并分解到与端口80相联系的欢迎套接字。对于谷歌HTTP服务器和鲍勃计算机之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK报文段,将其放入向鲍勃计算机寻址的一个数据报中,最后放入链路层帧中,该链路适合将www.google.com连接到其第一跳路由器。
- 包含TCP SYNACK报文段的数据报通过谷歌,Comcast和学校网络,最终到达鲍勃计算机的以太网卡。数据报在操作系统中分解到步骤18生成的TCP套接字,从而进入连接状态。
- 借助于鲍勃计算机上的套接字,现在准备向www.google.com发送字节了,鲍勃的浏览器生成包含要火起的URL的HTTP GET报文。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段载荷。该TCP报文段放置进一个数据报中,并交付到www.google.com,如前面步骤18~20所述。
- 在www.google.come的HTTP服务器从TCP套接字读取HTTP GET报文,生成一个HTTP相应报文,将请求的Web页内容放入HTTP响应体中,并将报文发送进TCP套接字中。
- 包含HTTP回答报文的数据报通过谷歌,Comcast和学校网络转发,到达鲍勃计算机。鲍勃的Web浏览器程序从套接字读取HTTP相应,从HTTP响应体中抽取Web网页的HTML,并最终显示了Web网页。