spice and wolfspice and wolf Be the One you wanna Be

网络五层比较和总结

Web页面请求历程

我们以学生horo在校园网中请求一个Web页面为例,介绍一下各层协议的运作过程。首先基于horo的视角,会进行的操作包括打开浏览器,键入网址,按下回城键,等待网页响应,网页显示内容这几个步骤。这一整个过程可以分为以下几个阶段:

Web页请求的历程:网络环境和动作
  1. 主机接入校园网,获取IP地址。主机与网络交互时需要有IP地址,而在现代校园网中IP地址一般是动态分配的,这就离不开DHCP协议。首先我们需要了解的是,horo同学便携机与校园网的连接方式,一般会将便携机通过交换机与校园网相连,校园网则是通过路由器与一个ISP连接,本例中ISP为comcast.com;而在ISP中会配备DNS服务器以提供域名的IP寻址服务,并假设DHCP服务器运行在路由器中。当horo将便携机连入网络时,所采取一个网络相关的动作是运行DHCP协议,以从本地DHCP服务器获取一个IP地址以及其他信息:
    1. 广播DHCP请求报文。horo便携机操作系统生成一个DHCP请求报文,并将这个报文放入具有目的端口67(DHCP服务器)和源端口68(DHCP客户端)的UDP报文段;将该报文段放入一个具有广播IP地址(255.255.255.255)和源IP地址(0.0.0.0,因为便携机还没有一个IP地址)的数据报中;将该数据报封装在一个以太网帧中,该以太网帧的目的MAC地址为FF:FF:FF:FF:FF:FF,此目的地址为广播地址,使该帧广播到与交换机连接的所有设备(如果顺利的话也包括DHCP服务器),源MAC地址为将要发送该帧的以太网卡的MAC地址,假设为00:16:D3:23:68:8A。与便携机相连的交换机在所有的出端口广播入帧,包括连接到路由器的端口。
    2. DHCP服务器响应DHCP请求。路由器在具有MAC地址00:22:6B:45:1F的接口接收到该广播以太网帧,并从以太网帧中逐级抽取出IP数据报和UDP报文段,从中识别并确认DHCP的请求。现假设运行在路由器中的DHCP服务器能够以CIDR块68.85.2.0/24分配IP地址,并且DHCP服务器分配地址68.85.2.101给horo的便携机。DHCP服务器生成包含这个IP地址以及DNS服务器IP地址(68.85.2.226)、默认网关路由器的IP地址(68.85.2.1)和子网块(68.85.2.0/24)(等价为子网掩码)的一个DHCP ACK报文。该报文被放入一个UDP报文段中,UDP报文段被放入一个IP数据报中,数据报再被放入一个以太网帧中,该以太网帧的源MAC地址为路由器连接到归属网络的网卡的MAC地址(00:22:6B:45:1f:1B),目的MAC地址为horo便携机的MAC地址(00:16:D3:23:68:8A)。
    3. 交换机转发DHCP响应报文。因为交换机是自学习的,当交换机从与horo便携机的接口接收到DHCP请求报文后,交换机的映射表中就增加了相应的接口和MAC地址的映射关系,当DHCP的响应报文发送到交换机时,交换机会根据目的MAC地址和映射表决定转发的接口,将包含DHCP的响应报文的以太网帧转发给与便携机直接相连的接口。
    4. 接收DHCP响应报文。horo便携机从响应的以太网帧中逐步抽取出DHCP的响应报文,DHCP客户端记录下它的IP地址和它的DNS服务器的IP地址,并在其IP转发表中安装默认网关地址,便携机将向该默认网关发送目的地址为其子网68.85.2.0/24以外的所有数据报。此时,horo便携机已经初始化好它的网络组件,并准备开始处理Web网页获取。
  2. 在浏览器中键入域名www.baidu.com,基于DNS协议找到域名对应的IP地址。我们必须了解到从键入域名到浏览器响应经历了一个很复杂的过程,其中包括的各个软件和协议的通力合作。首先horo的Web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.baidu.com发送HTTP请求。而TCP套接字由一个四元组来标识的,为了生成套接字,我们需要www.baidu.com的IP地址,这就需要通过DNS协议获取到域名对应的IP地址了:
    1. horo便携机的操作系统生成一个DNS查询报文,将字符串www.baidu.com放入DNS报文的问题段中。该DNS报文则放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址68.87.71.226(DHCP ACK返回的DNS服务器地址)和源IP地址68.85.2.101的IP数据报中。再将IP数据报放入以太网帧中,准备发给学校的网关路由器,我们知道源MAC地址为IP便携机网卡MAC地址,但是网关路由器的MAC地址并不知道,所以就需要使用ARP协议。
    2. 获取学校网关路由器的MAC地址。horo便携机生成一个目的IP地址为68.85.2.1(默认网关)的ARP查询报文,将该ARP报文放置在一个目的MAC地址为FF:FF:FF:FF:FF:FF(广播地址)的以太网帧中,并向交换机发送此以太网帧,交换机会将该帧发送给所有连接设备,包括默认路由。网关路由接收到该帧后,发现ARP查询报文中的目的IP地址与其IP地址匹配,遂生成一个ARP响应分组,该分组中包含网关路由IP和MAC的地址的映射,并向交换机发送该帧,交换机会将该帧转发给horo的便携机。
    3. 转发DNS查询报文至第一跳路由。现在horo的便携机已知ISP的DNS服务IP地址和学校网关路由MAC地址,会将DNS查询报文封装在UDP报文段中,并将该报文段封装在IP数据报中,目的IP地址为DNS服务器的IP地址,源IP地址为便携机IP地址,然后将该IP数据报放入以太网帧中,源MAC地址为便携机网卡MAC地址,目的MAC地址为网关路由器与交换机相连的网卡的MAC地址。此时DNS查询报文完成了校园局域网内的转发工作。
    4. 域内路由选择到DNS服务器。
      1. 网关路由将DNS查询报文转发给ISP边缘路由器。当校园网关路由器接收到以太网帧后,会从中抽取出目的IP地址(68.87.71.226),并由路由的转发表确定转发输出端口(确定为与Comcast网络连接的路由器,即图中的最左侧路由器)。
      2. 根据控制平面确定的转发表转发DNS查询报文。在查询报文到达ISP网内时,控制平面会根据目的IP地址、源MAC地址等协议属性确定转发表,并基于转发表转发DNS查询报文。
    5. DNS服务器响应查询报文。最终DNS服务器收到带有DNS查询报文的以太网帧,并抽取出DNS查询报文,在域名和IP地址的映射表中查询相应的映射记录,如果缓存中存在对应的记录则直接返回DNS响应报文;如果缓存中不存在对应的记录,则根据链式查询或迭代查询向上级DNS服务器获取映射结果。将DNS响应报文逐级封装进以太网帧中,并根据控制平面确定的路由转发路径进行转发,最终转发到horo的便携机。
    6. 接收DNS响应报文。horo便携机接收到转发报文后,根据DNS响应报文获取到www.baidu.com对应的IP地址。
  3. 建立TCP连接。至此,horo便携机终于获得了www.baidu.com的IP地址,horo便携机就能够生成TCP套接字,该套接字将用于项www.baidu.com发送HTTP GET报文。当horo便携机生成套接字时,便携机中的TCP必须和www.baidu.com的TCP执行三次握手:
    1. 发送TCP SYN报文段。horo便携机首先生成一个具有目的端口80的TCP SYN报文段,并将报文段封装在目的IP地址为64.233.169.105(www.baidu.com)的IP数据报中,再将数据报封装在目的MAC地址为00:22:6B:45:1F:1B的帧中,并向交换机发送该帧。报文经由学校网络、Comcast网络和百度网络,根据BGP协议确定路由器转发表项,向目的地址一路转发过去。最终TCP SYN数据报到达www.baidu.com。
    2. 接收TCP SYN报文段,并响应TCP SYNACK报文段。目的主机接收到报文段后,从报文段中获取到TCP SYN报文并分解到与端口80相联系的欢迎套接字。对于百度HTTP服务器和horo便携机之间的TCP连接生成一个连接套接字。并生成一个TCP SYNACK报文段,将其放入向horo便携机寻址的一个数据报中,返回给horo。
    3. 接收TCP SYNACK报文段,并发送HTTP GET请求。数据报被分解到horo便携机的套接字中,从而进入连接状态;horo便携机浏览器网页请求的GET报文,并作为在和通过套接字封装进TCP报文段中,最终封装在以太网帧中发送给www.baidu.com。
    4. 响应HTTP请求。www.baidu.com接收到HTTP请求后,生成HTTP响应报文,将网页放入响应体中,通过套接字封装在TCP报文段中,发送给horo便携机。
    5. 获取HTTP响应报文,将页面显示到浏览器上。horo便携机收到响应报文后,通过套接字将HTTP的响应体中的内容取出,并显示在Web网页上。

各层的作用

  1. 应用层。为用户提供各种服务,换句话说各类网络协议及框架的存在意义也仅是为网络应用提供合适的运营环境。
  2. 运输层。提供进程间通信。
  3. 网络层。提供主机间通信。
  4. 链路层。提供透明的数据传输服务。
  5. 物理层。为设备提供数据传输的通路。

各层的分组名称

  1. 应用层:报文
  2. 运输层:报文段
  3. 网络层:数据报
  4. 链路层:帧
  5. 物理层:比特流

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Press ESC to close