一个Web请求的例子,相当于TCP/IP协议栈的总结,涉及了一个新主机从入网被分配IP地址到最终发送HTTP请求得到Web页面的流程
以下描述基于下图所示网络模型:
1.获取IP地址
当一台新主机A(MAC地址 AA:AA:AA:AA:AA:AA)于网络连接时,必须首先获取一个IP地址才能与外部网络通信
-
1.主机A生成一个
DHCP请求报文
(其实DHCP共有四个步骤,这里省去了DHCP发现和DHCP服务器提供),将这个报文放入目的端口67
和源端口68
的UDP
报文段 -
2.UDP报文段被放在具有
广播
IP目的地址(255.255.255.255)和源地址0.0.0.0
的IP数据报中 -
3.IP数据报被放在具有
广播
MAC目的地址(FF:FF:FF:FF:FF:FF)和源MAC地址(AA:AA:AA:AA:AA:AA)的以太网帧中 -
4.以太网帧到达链路层交换机,交换机在
交换机表
中绑定主机A的MAC地址和交换机的此时的入端口
,并在在所有出端口
广播该帧 -
5.路由器与链路层交换机的一个出端口相连,所以它收到链路层帧,并抽取出IP数据报,这里假设DHCP服务器
运行在路由器
中(或者路由器作为一个中继将数据报转发到DHCP服务器) -
6.IP数据报中的广播IP目的地址表示该IP数据报应该由高层协议处理,所以从IP数据报中抽取出UDP报文,得到DHCP请求报文
-
7.DHCP服务器以CIDR块11.11.11.0/24分配IP地址,且家庭网络位于
Homeset的地址块
中,假设DHCP分配11.11.11.111给主机A,DHCP将生成包含该分配的地址11.11.11.111
、DNS服务器的地址11.11.12.123
、默认网关路由器的IP地址11.11.11.1
以及子网块11.11.11.0/24
的一个DHCP ACK报文,依次放入UDP报文段、IP数据报和以太网帧中,以太网帧的源地址是路由器接口的MAC地址AA:AA:AA:AA:AA:BB,目的地址是主机A的MAC地址AA:AA:AA:AA:AA:AA -
8.包含DHCP ACK的以太网帧到达链路层交换机,此时交换机表中已经有了主机A的信息,所以该帧将被转发到主机A
-
9.主机A收到包含DHCP ACK的帧,并逐层抽取出IP数据报、UDP报文、DHCP ACK报文,记录下他自己的
IP地址
和DNS服务器的IP地址
,并在IP转发表
中设置默认网关路由器的IP地址,此后主机A将向网关转发子网11.11.11.0/24之外的所有数据包
2.DNS和ARP
此时主机A已经具备了访问Web服务器的能力,但是为了建立TCP连接,它还需要得知Web服务器的IP地址
假设Web服务器的域名为www.Webserver.com
-
10.主机A生成一个DNS查询报文,将www.Webserver.com放入报文的
问题段
中,并将该报文放在53
目的端口的UDP
报文段中 -
11.UDP报文段被放在目的IP地址为
11.11.12.123
(前面DHCP返回的DNS服务器地址),源地址为11.11.11.111
的IP数据报中发送 -
12.IP数据报被放在以太网帧中,他需要发送到网关路由器,但此时主机A只通过DHCP ACK报文得知了网关路由器的IP地址,并不知道它的MAC地址,所以还需要使用ARP来查询网关路由器的MAC地址
-
13.主机A生成一个目的IP地址为11.11.11.1(网关路由器)的
ARP查询报文
,并放在具有广播MAC目的地址的以太网帧中,该帧经由交换机能够被发送到网关路由器 -
14.网关路由器接收到ARP查询报文,发现其中的目的IP地址与自身匹配,所以将发送给一个
ARP回答
,指示该IP地址对应的MAC地址为AA:AA:AA:AA:AA:BB,并封装在目的MAC地址为AA:AA:AA:AA:AA:AA的以太网帧中,经由交换机到达主机A -
15.主机A接收到ARP回答,从中得到网关路由器的MAC地址
-
16.此时主机A可以通过网关路由器向DNS服务器进行DNS查询,DNS查询中,目的IP地址是
DNS服务器的IP地址
11.11.12.123,而目的MAC地址是网关路由器的MAC地址
AA:AA:AA:AA:AA:BB -
17.网关路由器接收到包含DNS查询到帧并提取出IP数据报,并查询其转发表得到应该转发到路由器-1,然后将IP数据报封装在链路层帧中,转发给路由器-1
-
18.路由器-1收到帧,抽取出IP数据报,并根据转发表确定出接口,向DNS服务器转发数据报(这个转发表是根据Homeset中的
域内协议如OSFP
和BGP
协议所填写) -
19.包含DNS查询的IP数据报到达DNS服务器,它抽取出DNS查询报文,在它的DNS数据库中查找www.Webserver.com的IP地址的
DNS源记录
(如果没有缓存,则需要按照根DNS服务器、顶级域DNS服务器权威DNS服务器的顺序进行查询),然后生成包含域名到IP地址映射的DNS回答报文
,依次放入UDP报文段
、IP数据报中,通过Homeset网络转发到家庭网络的网关路由器,并经以太网交换机到达主机A -
20.主机A在DNS回答报文中得到了www.Webserver.com的IP地址
3.Web交互:TCP和HTTP
-
21.主机A通过自身的IP地址和Web服务器的IP地址生成
TCP套接字
,用于向www.Webserver.com发送HTTP GET报文
,而生成TCP套接字时,首先要通过TCP三次握手
建立连接,主机A生成一个目的端口为80
的TCP SYN
报文段,放在目的地址为22.22.23.234的IP数据报中,然后放在目的MAC地址为AA:AA:AA:AA:AA:BB的以太网帧中 -
22.经过一系列域内协议和BGP协议,最包含TCP SYN的数据报到达www.Webserver.com,它抽取出TCP SYN报文段,并
分解
到端口80产生相联系的欢迎套接字,然后服务器对主机A生成一个连接套接字,产生一个TCP SYNACK
报文段,放入以11.11.11.111为目的地址的IP数据报中 -
23.包含TCP SYNACK的IP数据报到达主机A,提取出TCP SYNACK报文段,分解到上一步生成的TCP套接字,进入连接状态
-
24.此时可以生成一个HTTP GET报文,将该报文写入TCP套接字,作为TCP报文段的载荷,并依次向下封装,进行发送
-
25.www.Webserver.com从TCP套接字读取HTTP GET报文,生成
HTTP响应报文
,并将请求的页面内容放入响应体中,将HTTP报文发送到TCP套接字中 -
26.最终HTTP响应报文到达主机A,主机A的浏览器从报文中提取页面内容并响应
参考文献:《计算机网络:自顶向下方法》