Web请求流程

 

一个Web请求的例子,相当于TCP/IP协议栈的总结,涉及了一个新主机从入网被分配IP地址到最终发送HTTP请求得到Web页面的流程

一个Web请求的例子,相当于TCP/IP协议栈的总结,涉及了一个新主机从入网被分配IP地址到最终发送HTTP请求得到Web页面的流程

以下描述基于下图所示网络模型:

1.获取IP地址

当一台新主机A(MAC地址 AA:AA:AA:AA:AA:AA)于网络连接时,必须首先获取一个IP地址才能与外部网络通信

  • 1.主机A生成一个DHCP请求报文(其实DHCP共有四个步骤,这里省去了DHCP发现和DHCP服务器提供),将这个报文放入目的端口67和源端口68UDP报文段

  • 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中的域内协议如OSFPBGP协议所填写)

  • 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生成一个目的端口为80TCP 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的浏览器从报文中提取页面内容并响应

参考文献:《计算机网络:自顶向下方法》