Web页面请求历程
OSI七层参考模型
访问www.google.com过程
计算机通过以太网电缆连接到学校的以太网交换机,交换机与学校的路由器相连。学校的路由器与一个ISP连接(comcast.net),DNS服务器驻留在comcast网络中。
1️⃣计算机上的操作系统生成一个DHCP请求报文,并将这个报文放入具有目的端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段,该报文段被放在一个具有广播IP目的地址(255.255.255.255
)和源IP地址(0.0.0.0
)的IP数据报中。
UDP 报文段
IP 数据报
2️⃣包含DHCP请求报文的IP数据报则被放置在以太网帧中,该以太网帧具有目的MAC地址 FF:FF:FF:FF:FF:FF
,使该帧将广播到交换机连接的所有设备(如果顺利的话也包括DHCP服务器),该帧的源MAC地址
00:16:D3:23:68:8A
以太网帧
3️⃣包含DHCP请求的广播以太网帧是第一个由计算机发送到以太网交换机的帧,该交换机在所有出口广播该帧,包括连接到路由器的端口
4️⃣路由器在它的具有MAC地址00:22:6B:45:1F
的接口接收到该广播以太网帧,该帧中包含DHCP请求,并且从该以太网帧中抽取出IP数据报。该数据库的广播IP地址表明该IP数据报应当由在该节点的高层协议处理,因此该数据报的载荷(一个UDP报文段) 被分解向上到达UDP,DHCP请求报文从此UDP报文段中抽取出来,此时DHCP服务器有了DHCP请求报文。
5️⃣路由器中的DHCP服务器能以CIDR块68.95.2.0/24
分配IP地址。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
)
6️⃣包含DHCP ACK的以太网由路由器发送给交换机。因为交换机是自学习的,并且先前从计算机收到以太网帧,所以该交换机知道寻址到00:16:D3:23:68:8A
的帧仅从通向计算机的输出端口转发
7️⃣计算机接收到包含到DHCP ACK的以太网帧,从该以太网帧中抽取IP数据报,从IP数据报中抽取UDP报文段,从UDP报文段中抽取DHCP ACK报文。计算机的客户则记录下它的IP地址和它的DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。
8️⃣计算机上的操作系统生成DNS查询报文,将字符串www.google.com
放入DNS报文的问题段中。该DNS报文段被放置在一个具有53号目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址68.87.71.226
和源地址68.85.2.101
的IP数据报中。
9️⃣计算机将包含DNS请求报文的数据报放入一个以太网帧中,该帧发送到学校的路由器(通过ARP协议获得该网关路由器的MAC地址)
1️⃣0️⃣计算机生成具有目的IP地址68.85.2.1
的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF
)的以太网帧中,由交换机发送
1️⃣1️⃣网关路由器接收到ARP查询报文,因此准备ARP回答,指示它的MAC地址00:22:6B:45:1F:1B
对应的IP地址68.85.2.1
1️⃣2️⃣计算机接收包含ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址.
1️⃣3️⃣计算机发送包含DNS查询的以太网帧寻址到网关路由器的MAC地址
1️⃣4️⃣网关路由器接收该帧并抽取包含DNS查询的IP数据报.路由器查找该数据报的目的地址,并根据其转发表决定该数据报应当发送到comcast网络最左边的路由器.
1️⃣5️⃣在comcast网络最左边的路由器接收到该帧,抽取IP数据报,检查该数据报的目的地址,并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,而转发表已根据comcast的域内协议(RIP,OSPF,IS-IS)以及因特网的域间协议BGP所填写
1️⃣6️⃣DNS服务器收到包含DNS查询的IP数据报后,抽取出DNS查询报文,在它的DNS数据库中查找名字www.google.com
,找到包含对应www.google.com
的IP地址的DNS源纪录(存于google.com的权威DNS服务器).DNS服务器形成包含主机名到IP映射的DNS回答报文返回给计算机.
1️⃣7️⃣计算机根据获取的IP地址,生成套接字,用于向www.google.com
发送HTTP GET报文,计算机中的TCP先与www.google.com
中的TCP三次握手,计算机生成一个具有目的端口80的TCP SYN报文段,将该TCP报文段放入64.233.169.105
(www.google.com
)的IP数据报中,将该数据报放置在MAC地址为网关路由器地址的帧中,并向交换机中发送该帧
1️⃣8️⃣生成套接字时,首先需要与google.com服务器进行TCP三次握手,建立TCP连接。
TCP SYN请求报文段:几番周折到达google.com
TCP SYN ACK:来自服务器端的应答
TCP SYN再次请求,表示我要开始了
1️⃣9️⃣建立TCP连接之后,就可以开始发送请求了。HTTP GET请求报文段被放入套接字,然后移交给运输层、网络层、数据链路层,经过以太网的路由转发到达google.com服务器。
2️⃣0️⃣google.com服务器,发送响应报文到达计算机,然后就有网页显示了。