目录

二层、三层转发

二层转发中二层指的是OSI七层模型中的第二层(数据链路层),二层转发是指在同一网段中,基于MAC地址转发数据包。

  1. ARP
  • 概述:ARP(Address Resolution Protocol),即地址解析协议,主要作用是把IP地址解析成MAC地址。主机或三层转发设备上维护有ARP表。

  • 工作原理:主机在给目的主机发送数据包时,需要先查询本机ARP表,找出与目的IP地址匹配的IP-MAC表项,把表项中的MAC地址填入以太网帧的目的MAC域,然后进行发送。若表中没有匹配项,则发送ARP请求广播报文,等待目的主机响应并发回ARP应答报文,主机在接收到应答报文后学习目的主机的MAC地址并记录到ARP表中。

  • ARP表:

      | IP地址 | MAC地址 | 类型 | VLAN | 端口 |
      | ------------ | ------------ | ------------ | ------------ | ------------ |
      | 192.168.1.10 | 0x1010-1010-1010 | Dynamic | 100 | 1 |
      | 192.168.1.20 | 0x2020-2020-2020 | Static | 100 | 1 |
    
       - IP地址:目的主机的IP地址
       - MAC地址:目的主机的MAC地址
       - 类型:ARP表项类型,动态,主机自主学习,可被更新或老化;静态,主机管理者手动配置,不会被更新或老化
       - VLAN:ARP表项所属VLAN(跨网段ARP表项VLAN字段为空)
       - 端口:ARP表项出接口
    
  • 以太网帧格式:

+------------------+------------------+------------------+------------------+
| 目的MAC地址 (6B) | 源MAC地址 (6B)   | 帧类型 (2B)      | ARP报文 (N字节)  |
+------------------+------------------+------------------+------------------+
		 - 帧类型 (EtherType): 2字节,表示以太网帧的上层协议类型。对于ARP报文,值通常为0x0806。
  • ARP报文以太帧格式:
+------------------+------------------+------------------+------------------+
| 硬件类型 (2B)    | 协议类型 (2B)    | 硬件地址长度 (1B) | 协议地址长度 (1B) |
+------------------+------------------+------------------+------------------+
| 操作码 (2B)      | 源硬件地址 (6B)  | 源协议地址 (4B)  | 目的硬件地址 (6B) |
+------------------+------------------+------------------+------------------+
| 目的协议地址 (4B) |
+------------------+

		 - 硬件类型 (HTYPE): 2字节,表示硬件类型(例如,以太网)。
		 - 协议类型 (PTYPE): 2字节,表示上层协议类型(例如,IPv4)。
		 - 硬件地址长度 (HLEN): 1字节,表示硬件地址的长度(例如,以太网MAC地址的长度)。
		 - 协议地址长度 (PLEN): 1字节,表示协议地址的长度(例如,IPv4地址的长度)。
		 - 操作码 (OPER): 2字节,表示ARP报文的操作类型(1 请求,2 应答)。
		 - 源硬件地址 (SHA): 6字节,表示发送者的MAC地址。
		 - 源协议地址 (SPA): 4字节,表示发送者的IP地址。
		 - 目的硬件地址 (THA): 6字节,表示目标设备的MAC地址(在请求中通常是全零)。
		 - 目的协议地址 (TPA): 4字节,表示目标IP地址。
  1. MAC地址表
  • 概述:交换机中保存的一张表,用于记录到达交换机的报文的发送方的MAC地址、接收端口以及所属VLAN

  • MAC地址表:

      | MAC地址 | VLAN | 端口 |
      | ------------ | ------------ | ------------ | ------------ |
      | 0x1010-1010-1010 | 100 | 1 |
      | 0x2020-2020-2020 | 200 | 2 |
    
    • 学习机制:当交换机接收到一个数据包时,就会对该数据包的源MAC地址进行学习

    • 当表中没有与源MAC地址匹配的表项时,增加一条新的表项,记录MAC地址以及对应的VLAN和端口

    • 当表中有与源MAC地址匹配的表项,但信息不一致时,则以数据包信息为准,更新表项

    • 当表中有与源MAC地址匹配的表项并且信息一致时,刷新表项的老化时间

    • 老化机制: 当交换机MAC地址表中某个表项的生存时间结束,并且在结束之前没有再接收到该表项所对应主机发出的数据包,则把该表项删除,等待该主机下次发送数据包时再重新学习。

以下图局域网模型中Host A首次给Host C发送数据包为例说明二层转发过程。 图1-1

  1. 查询 ARP 表
    IP地址 MAC地址
    192.168.1.20 0x2020-2020-2020
    表中没有与Host C的 IP 地址匹配的表项
  2. 发送 ARP 广播报文获取目的地址
    目的MAC地址 源MAC地址 帧类型 OPER 源MAC地址 源IP地址 目的MAC地址 目的IP地址
    0xFFFF-FFFF-FFFF 0x1010-1010-1010 0x0806 1 0x1010-1010-1010 192.168.1.10 0x0000-0000-0000 192.168.1.40
  3. 更新 MAC 地址表项
  • 交换机接收到该广播报文后,先学习Host A的MAC地址,新增或更新MAC地址表的表项,然后把该报文转发给Host BHost CHost D
  • Host BHost D接收到 ARP 请求后,判断目的IP地址与自身IP地址不一致,则丢弃报文,不做回应
  • Host C接收到ARP请求后,判断报文中目的IP地址与自身IP地址一致,则先学习报文中Host A的地址信息,在Host C的ARP表中新增Host A的IP-MAC对应关系表项 图1-2
  1. 发送 ARP 应答报文
    目的MAC地址 源MAC地址 帧类型 OPER 源MAC地址 源IP地址 目的MAC地址 目的IP地址
    0x1010-1010-1010 0x4040-4040-4040 0x0806 2 0x4040-4040-4040 192.168.1.40 0x1010-1010-1010 192.168.1.10
  2. 转发报文
  • 交换机接收到Host C的ARP应答报文后,通过该报文学习Host C的MAC地址
  • 根据第3步中记录的Host A的MAC,找到对应端口并转发该报文 图1-3

主要的区别在于ARP广播报文的广播域受到了VLAN的限制,如下图所示,Host A在发送ARP广播报文时,只有同属于一个VLAN的Host B才会收到ARP请求,Host CHost D因为不在同一个VLAN,因此无法收到ARP请求。那么此时Host AHost C就没法进行通信,若Host A确实需要给Host C发信息,那么就要使用到三层转发技术。 图1-4

三层指OSI七层模型中的第三层(网络层),主要用于不同网段间的通信。

  1. 路由表(RIB) 路由器中存储的一张表,记录跨网段路由跳转路径,并挑选最佳路由跳转路径下载到转发表中。 路由表主要作用是路由路径的决策,即挑选最优的路径(优先级高,开销小),不会直接指导路由转发。

    Destination Mask Pre Cost NextHop Interface
    10.10.10.0 24 0 0 10.10.10.10 1

    • Destination:目的网络或目的地址
    • Mask:目的网络或目的地址的子网掩码
    • Pre:路由优先级
    • Cost:路径开销,一条路径需要跳转节点越多,则开销越大,路由决策时优先级低
    • NextHop:路由下一跳节点
    • Interface:路由器转发出接口
  2. 转发表(FIB) 转发表是直接指导路由跳转的表,从路由表中下载最优跳转路径,路由器根据最长匹配原则,从转发表中选择匹配的表项, 把报文从对应接口转发出去。

    Destination/Mask Flag NextHop Interface
    10.10.10.0/24 U 10.10.10.10 1

    • Flag:对转发消息性质的描述
    • U:路由UP,可用
    • G/H:网关路由/本机路由
    • B:黑洞路由
    • D/S:动态路由/静态路由
    • R:被拒绝路由,不可用
    • E:多路径等价路由
    • L:ARP或ESIS生成的路由
    • NextHop:路由下一跳节点
    • Interface:路由器转发出接口

图2-1

以上图Host AHost C发送数据包为例说明三层转发过程,图中Host AHost BInterface 1都属于VLAN100Host CHost DInterface 2都属于VLAN200Host AHost C属于跨VLAN、跨网段通信。

一个三层设备(如三层交换机或路由器)可以充当网关。网关的概念不仅是物理的,也包括逻辑上的功能。若一个三层设备下连接了多个网段,它实际上在逻辑上充当多个网关。每个网段都有一个对应的虚拟接口(如SVI或子接口),每个接口充当那个网段的默认网关。

  1. Host AHost C的IP地址与本机的IP地址和子网掩码进行比较,采用IP地址与子网掩码二进制按位与逻辑计算获取网段地址,根据计算得出Host AHost C不在同一网段,Host A采取路由代理转发的策略。

    Host A Host C
    IP地址 11000000.10101000.00000001.00001010 11000000.10101000.00000010.00001010
    子网掩码 11111111.11111111.11111111.00000000 11111111.11111111.11111111.00000000
    网段地址 11000000.10101000.00000001.00000000 11000000.10101000.00000010.00000000
  2. Host A需要把数据包发送给默认网关(Interface 1),首先查找本机ARP表,获取网关的MAC地址,若表中没有网关的IP-MAC对应关系表项,则需要发送ARP广播获取默认网关的MAC地址,此过程为VLAN 100内的二层转发过程,具体执行过程和原理可参考二层转发。

  3. Host A已获取默认网关的MAC地址,随后封装一个数据包发送给默认网关(Interface 1),数据包以太帧头部如下表1,目的MAC地址是默认网关的MAC地址,IP头部源IP地址和目的IP地址如下表2,目的IP地址是Host C的IP地址。

表 1
+------------------+------------------+------------------+
| 目的MAC地址 (6B) |  源MAC地址 (6B)  |    帧类型 (2B)   |
+------------------+------------------+------------------+
| 0x0012-0012-0012 | 0x0001-0001-0001 |      0x0800      |
+------------------+------------------+------------------+
表 2
+------------------+------------------+
|   源IP地址 (4B)  |  目的IP地址 (4B) |
+------------------+------------------+
|   192.168.1.10   |   192.168.2.10   |
+------------------+------------------+
  1. Interface 1接收到数据包后,判断数据包中以太帧头部目的MAC地址是否和自身MAC地址一致,一致则走三层转发;不一致则走二层转发。当前数据包的MAC与Interface 1的MAC地址一致,因此走三层转发。Interface 1查询Route的FIB表(转发表),根据最长匹配原则选择Interface 2转发数据包。
+------------------+------------------+------------------+
| 目的地址/子网掩码 |      下一跳      |       接口      |
+------------------+------------------+------------------+
| 192.168.1.0/24   |    192.168.1.1   |   Interface 1    |
+------------------+------------------+------------------+
| 192.168.2.0/24   |    192.168.2.1   |   Interface 2    |
+------------------+------------------+------------------+
  1. Interface 2接收到数据包后,根据IP头部的目的IP地址(Host C的IP地址),查询自身ARP表是否存在匹配的IP-MAC映射关系表项,若没有则进行ARP广播,通过Switch 2进行二层转发,最终获取到Host C的MAC地址(0x0003-0003-0003)。随后Interface 2Host A出发的数据报包进行重新封装,以太帧头部目的MAC改为Host C的MAC地址,源MAC地址改为自身的MAC地址IP头部不变。
表 1
+------------------+------------------+------------------+
| 目的MAC地址 (6B) |  源MAC地址 (6B)  |    帧类型 (2B)   |
+------------------+------------------+------------------+
| 0x0003-0003-0003 | 0x0034-0034-0034 |      0x0800      |
+------------------+------------------+------------------+
  1. Interface 2发出数据包,通过Switch 2进行二层转发,数据包最终到达Host C