一个web请求的艰辛历程

从链路层开始来探索一个主机接入网络后进行一个web请求的过程(计算机网络:自顶向下方法)
假定下面是有关的网络拓扑





链路层阶段

如上图所示, 假定Bob用他的主机接入到学校的以太网, 连接到一个以太网交换机, 该交换机同时连接到学校网络出口路由器, 该路由器与一个ISP(comcast.net)连接。comcast.net 为学校提供DNS服务。


1. Bob的主机操作系统生成一个DHCP请求报文, 并将此报文放入一个UDP报文段。该UDP报文段然后被放置在一个具有源IP :0.0.0.0 和 目的IP:255.255.255.255 的广播IP数据包中。


2. 包含上述DHCP请求报文的IP数据包则被放置在以太网帧中, 该以太网帧具有MAC地址: FF:FF:FF:FF:FF:FF, 该帧将被交换机广播到所有与交换机连接的设备。该帧的源MAC地址是Bob的主机上的网卡MAC地址


3. 交换机收到该帧, 由于交换机表中没有与Bob主机MAC相关的数据, 于是交换机再所有出端口广播该帧


4. 路由器收到了该广播帧, 从中抽取出IP数据报, 由于此IP数据报的目的地址是广播地址,根据IP数据报头部信息,上交给上层UDP, 然后DHCP请求报文从该UDP报文段中被取出来。


5. 运行在路由器中的DHCP服务器根据Bob发送来的DHCP请求报文, 生成一个DHCP ACK报文, 此报文包含: 1. 分配给 Bob的IP地址: 68.85.2.101

2. 默认网关路由器的IP地址 : 68.85.3.1

3. DNS服务器IP : 68.87.71.226

4. 子网掩码: 68.85.2.0/24

此报文被放到一个UDP报文段中, 再层层向下生成一个链路层帧, 该帧的源MAC地址为路由器MAC地址, 目的MAC地址为Bob的主机MAC地址


6. 包含DHCP ACK的帧被路由器发给交换机, 此时交换机由于自学习, 已将在交换机表中包含了有关Bob主机MAC地址的信息, 因此交换机直接将该帧转发到Bob的主机。


7. Bob 的主机收到 DHCP ACK 后提取其中的配置信息, 并配置好主机IP等信息。


DNS和ARP


此时Bob获取到了上网必须到IP地址, 将www.google.com输入浏览器地址框, 浏览器通过生成一个TCP套接字开始web请求。为了生成套接字, 必须知道 www.google.com 对应的IP地址, 因此该DNS上场了

8. Bob主机操作系统生成一个DNS查询报文, www.google.com 作为查询内容。 该查询报文被放在一个具有目的端口号为53(DNS服务器)的UDP报文段中。UDP报文段被放入一个IP数据包, 目的地址当然是DNS服务器的IP地址, 源地址自然是Bob主机的IP地址。

9. 包含有DNS请求报文的IP数据包被放入一个以太网帧中, 然而, 此时, Bob虽然知道DNS路由器的IP地址, 但不知道其MAC地址, 以太网帧无法到达路由器。为了获取路由器的MAC地址, 需要使用ARP协议

10. Bob 的主机生成一个以路由器IP为目的地址的ARP查询报文, 并以广播帧的形式发送出去。 交换机收到该广播帧, 将该帧广播出去, 路由器收到后生成一个包含自身MAC地址的ARP回答帧(注意是帧, 不是IP数据报), 经由交换机到达Bob的主句

11. 至此 Bob 终于得到了路由器的MAC地址, 可以向路由器发送以太网帧了。于是,在第8 步的DNS查询报文被放在一个以太网帧,帧目的地址是路由器的MAC地址, 发送出去, 交换机将该帧转发到路由器。

得到www.google.com对应的IP


12. 网关路由器收到11步的以太网帧, 抽取包含DNS查询的IP数据报, 查找IP地址, 根据转发表将该IP数据包转发到正确的链路。

13. comcast网络中的最左边路由器收到包含DNS查询的数据报, 根据转发表,转向DNS服务器

14. DNS服务器收到Bob发出的包含DNS查询的IP数据报, 根据DNS查询内容,在数据库中查找www.google.com所对应的IP地址, 没找到的话将向上级DNS服务器查询, 找到生成包含查询结果的DNS回答报文, 并将该回答报文放入UDP数据报, 发送给Bob

15. Bob收到DNS回答报文后提取出所查询的IP地址

开始上网


16. Bob的主机有了www.google.com的IP地址,因此能够生成TCP套接字,向google。com发送HTTP GET报文。为此先要进行3次握手。

17. 握手成功后, 浏览器生成HTTP GET报文, 该报文被写入TCP套接字, 形成TCP报文段。 然后TCP报文段被放入一个IP数据报 经过一系列路径到达google.com的服务器, 然后服务器将所请求的Web页面以同样的方式写入TCP套接字, 回复给Bob。然后Bob再从套接字中读取相应, 抽取Web页面内容, 由浏览器显示出来。

猜你喜欢

转载自blog.csdn.net/wy11933/article/details/72794759