ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Web页面请求的历程(从应用层到链路层)

2022-01-11 22:03:11  阅读:162  来源: 互联网

标签:Web 主机 报文 DNS DHCP bob 应用层 链路层 路由器


Web页面请求的历程

前面从应用层到数据链路层都详细讲过了,现在回顾总结一下一个简单请求背后隐藏的秘密细节。下面假定一名学生bob下载web页面(www.baidu.com)如下图

在这里插入图片描述

1.准备:DHCP、UDP、IP和以太网

假定bob启动它的主机,然后用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连,学校的这台路由器又与一个ISP相连,本例中ISP未connect.net,它为学校提供了DNS服务,所以DNS服务器驻留在Comcast网络中而不是学校中,我们假设DHCP服务器运行在路由器中。

首先bob将主机与网络连接,因为没有ip地址他无法做任何事情,所以,bob的主机采取的一个网络相关动作是运行DHCP协议,从本地DHCP服务器获得一个IP地址以及其他信息。

  1. bob主机上的操作系统生成一个DHCP请求报文,并将这个报文放入一个具有目的端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段,该UDP报文则被放置在一个具有广播IP目的地址(255.255.255.255)和源IP地址0.0.0.0的IP数据报中,因为此时bob主机还没IP地址。

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

  3. 包含DHCP请求的广播以太网帧是第一个由bob主机发送到以太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口。

  4. 路由器在它具有MAC地址的接口接收到该广播以太网帧,该帧中含有DHCP请求,并且从该以太网帧中抽取出IP数据报。该数据报的广播IP目的地址指示了这个IP数据包应当由在该节点的高层协议处理,因此该数据报的载荷被分解,向上到达UDP,DHCP请求报文从此UDP报文段中抽取出来,此时DHCP服务器有了DHCP请求报文。

  5. 假设运行在路由器中的DHCP服务器能够以CIDR分配IP地址,所以本例中,学校的IP地址都是在Comcast的地址块中。当DHCP服务器分配IP地址给bob主机。DHCP服务器生成包含这个IP地址以及DNS服务器的IP地址、默认网关路由器的IP地址和子网块的一个DHCP ACK报文,该DHCP报文被放入一个UDP报文段中,UDP报文被放入一个IP数据报中,IP数据报再被放入一个以太网帧中,这个以太网帧的源MAC地址是路由器连到归属网络时的接口的MAC地址,目的MAC地址是bob主机的MAC地址。

  6. 包含DHCP ACK的以太网帧由路由器发送给交换机。因为交换机是自学习的,并且先前从bob主机收到以太网帧,所以该交换机知道寻址到bob主机MAC地址的帧从通向bob主机的端口转发。

  7. bob主机收到包含DHCP ACK的以太网帧,从该以太网帧中抽取IP数据包,从IP数据包中抽取出UDP报文段,从UDP报文段抽取出DHCP ACK报文,bob的DHCP客户则记录下它的IP地址和它的DNS服务器的IP地址,他还在IP转发表中安装默认网关的地址,bob主机向该默认网关发送目的地址为其子网以外的所有数据报。此时bob主机已经初始化好它所有的网络组件,并可以准备开始处理web网页获取。

2.仍在准备:DNS和ARP

当bob将www.baidu.com的URL键入其web浏览器时,它开启了一长串事件,这将导致百度主页最终显示在其web浏览器上,bob的web浏览器通过生成一个TCP套接组开始了这个过程,套接字用于向www.baidu.com发送HTTP请求,为了生成该套接字,bob主机需要知道www.baidu.com的IP地址,现在使用DNS协议提供这种名字到IP地址的转换。

  1. bob主机上的操作系统生成一个DNS查询报文,将字符串www.baidu.com放入DNS报文的问题段中,该DNS报文则放置在一个具有53号(DNS服务器)目的端口的UDP报文段中,该UDP报文段则被放入具有IP目的DNS服务器地址和源地址的IP数据报中。

  2. bob主机则将包含DNS请求报文的数据包放入一个以太网帧中,该帧将发送到bob学习网络中的网关路由器,然而,即使bob主机经过上述的DHCP ACK报文知道了学习网关路由器的IP地址,但仍不知道该网关路由器的MAC地址,为了获得该网关路由器的MAC地址,bob主机需要使用ARP协议。

  3. bob主机生成具有目的ip地址的ARP查询报文,将该ARP报文放置在一个具有广播地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该以太网帧交付给所有连接设备,包括网关路由器。

  4. 网关路由器在通往学习网络的接口上收到包含该ARP查询报文帧,发现在ARP报文中目的IP地址匹配其接口IP地址。网关路由器因此准备一个ARP回答,指示它的MAC地址对应IP地址,它将ARP回答放在一个以太网帧其目的地址为bob主机,并向交换机发送该帧,再由交换机将帧交付给bob主机。

  5. bob主机接收包含ARP回答报文的帧。并从ARP回答报文中抽取网关路由器的MAC地址。

  6. bob主机现在能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。现在该帧中的IP数据报具有IP目的地址(DNS服务器),而该帧具有目的地址(网关路由器)。bob主机向交换机发送该帧,交换机将该帧交付给网关路由器。

3.还是在准备:域内路由选择到DNS服务器

  1. 网关路由器接收该帧并抽取包含DNS查询的IP数据报,路由器查找该数据报的目的地址(DNS服务器),并根据其转发表决定该数据报应当发送到图中的Comcast网络中最左边的路由器,IP数据报放置在链路层帧中,该链路适合将学校路由器连接到最左边的Comcast路由器,并且将帧经这条链路转发。

  2. 在Comcast网络中最左边的路由器接收到该帧,抽取IP数据报,检测该数据报的目的地址(DNS服务器),并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,而转发表已根据Comcast的域内协议(如:RIP、OSPF)以及因特网的域间协议(BGP)所填写。

  3. 最终包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽取出DNS查询报文,在它的DNS数据库中查找到www.baidu.com。找到对应的IP地址的DNS源记录。该DNS服务器形成了一个包含这种主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,该报文段放入寻址到BOB主机的IP数据报中,该数据报通过Comcast网络反向转发到学校路由器,并从这里经过以太网交换机到达bob主机。

  4. bob主机从DNS报文抽取出服务器www.baidu.com的IP地址,最终,bob主机此时准备接触www.baidu.com服务器。

4.Web客户-服务器交互:TCP和HTTP

  1. 现在已经有啦www.baidu.com的IP地址,它能够生成TCP套接字,该套接字将用于向www.baidu.com发送HTTP GET报文,当bob生成TCP套接字时,在bob主机中的TCP必须先与www.baidu.com中的TCP进行三次握手。bob主机因此先生成一个具有目的端口80的TCP SUN报文段,将该TCP报文段放置在具有目的IP地址www.baidu.com的IP数据报中,将该数据报放置在网关路由器的MAC地址的帧中,将向交换机发送该帧。

  2. 在学校网络、Comcast网络和百度网络中的路由器朝着www.baidu.com转发TCP SYNC的数据报,使用每台路由器中的转发表,转发表由BGP决定。

  3. 最终,白喊TCP SYNC的数据报到达www.baidu.com。从数据报抽取出TCP SYN报文并分解到与端口80相联系的套接字。对于百度HTTP服务器和bob主机之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK报文段,将其放入向BOB主机寻址的一个数据报中,最后放入链路层帧中,该链路适合将www.baidu.com连接到第一跳路由器。

  4. 包含TCP SYNACK报文段的数据报通过百度、Comacast、和学习网络,最终到达bob主机的以太网啊,数据吧在操作系统中分解 到步骤18生成的TCP套接字,从而进入连接状态。

  5. 借助于bob主机上的套接字,现在终于向www.baidu.com发送字节了,bob的浏览器生成包含要获取的URL的HTTP GRT报文。HTTP GRT报文写入套接字,其中GET报文成为一个TCP报文段的载荷。该TCP报文段放置进入一个数据报中,并交付给www.baidu.com。

  6. 在www.baidu.com的HTTP服务器从TCP套接字读取HTTP GET报文,生成一个HTTP响应报文,将请求的web页放入HTTP响应体中,并将报文发送进TCP套接字中。

  7. 包含HTTP回答报文的数据报通过百度、Comcast、学校网络转发。到达bob主机,bob的web浏览器程序从套接字读取HTTP响应,从HTTP响应中抽取出WEB页面的HTML。最终显示网页。

标签:Web,主机,报文,DNS,DHCP,bob,应用层,链路层,路由器
来源: https://blog.csdn.net/qq_34934140/article/details/122442516

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有