介绍
以太网交换机工作在第二层即数据链路层,用于在同一网络内部转发以太网帧。但是,当源和目的IP地址位于不同网络时,以太网帧必须发送给路由器。路由器负责在不同网络间传输报文,通过路由表来决定最佳转发路径。当主机将报文发送至不同IP地址时,由于主机无法直接与本地网络以外的设备通信,报文被转发至默认网关。默认网关就是数据流从本地网络路由至远端设备的目的地。它通常用来连接本地网与公共网。
更多信息
报文转发过程:
路由器在一个接口接收报文并将它从另一个接口转发出去,这一过程的关键步骤是为输出链路将报文封装在适当的数据链路帧中。路由器主要执行以下三个步骤:
- 将第二层的帧头和帧尾移除,解析出第三层报文。
- 检查IP报文的目的IP地址,在路由表中查找最佳路由。
- 如果路由器找到一条最佳路径,则将三层报文封装到新的二层帧中,并将帧转发到输出端
如下图所示:设备有三层IPv4地址,以太网接口有二层数据链路地址。例如PC 1的IPv4地址192.168.1.10,示例MAC地址0A-10。在报文从原设备传输至目的设备的过程中,三层IP地址不会改变。但是,每一跳随着报文在路由器中被解封装和重新封装,二层数据链路地址都会改变。很可能报文被封装成与接收时不同的另一种类型的二层帧。

发送报文:
PC 1发送报文给PC 2时,首先必须确定目的IPv4地址是否位于同一网络。PC 1通过将自己的IPv4地址与子网掩码做与操作,来判断PC 1所属的网段。接下来,PC 1对目的IPv4地址与PC1的子网掩码做同样的与操作。如果目的网络地址与PC 1网络相同,则PC 1不使用默认网关,而是在ARP缓存中查找目的IPv4地址的设备MAC地址。如果MAC地址不在缓存中,则PC1产生一个ARP请求来获取地址并将报文发给目的地址。如果目的网络地址位于另一网络,则PC 1将报文转发至默认网关。
要确定默认网关的MAC地址,PC 1在它的ARP表中查找默认网关的IPv4地址以及相应的MAC地址。如果ARP表中没有默认网关的对应表项,则PC 1发送ARP请求。路由器R1回复ARP响应。之后PC 1将报文转发至默认网关的MAC地址,即路由器R1的Fa0/0接口。
转发至下一跳
R1从PC 1接收到以太网帧后执行以下步骤:
- R1检查目的MAC地址,与接收端口FastEthernet 0/0相匹配,因此,将帧复制到buffer。
- R1识别以太网类型为0x800,意味着以太网帧的数据部分包含IPv4报文。
- R1解封装该以太网帧。
- 由于目的IPv4地址与R1直连的任何网络都不相符,R1在路由表中查找包含该目的IPv4地址主机的网络地址。本例中,路由表中有192.168.4.0/24网络的路由。目的IPv4地址为192.168.4.10,即该网络上的主机IPv4地址。
R1找到192.168.4.0/24路由的下一条IPv4地址为192.168.2.2以及输出端口FastEthernet 0/1,这意味着IPv4报文封装到一个新的以太网帧中,目标MAC地址是下一跳路由器的MAC地址。
由于下一个接口是在以太网上,所以R1必须用ARP解析出下一跳IPv4地址的MAC地址。
- R1在ARP cache中查找下一跳IPv4地址192.168.2.2。如果表项不在ARP cache中,R1会从FastEthernet 0/1 接口发送ARP请求,R2会返回ARP响应。R1之后在ARP cache中更新192.168.2.2的MAC地址。
- IPv4报文封装到新的以太网帧中并从R1的FastEthernet 0/1 接口转发出去。
到达目的地:
当帧到达R3时执行以下步骤:
- R3将数据链路帧复制到它的buffer。
- R3解封装该数据链路帧。
- R3在路由表中查找该目的IPv4地址。R3路由表中有直接连接到该网络的路由。这表示报文可直接发送到目的设备而无需发送至路由器。
由于输出接口是一个直连以太网,所以R3必须用ARP解析出目的IPv4地址的MAC地址。
- R3在它的ARP cache中查找目的IPv4地址,如果此ARP cache中没有此表项,R3会从FastEthernet 0/0 接口发送ARP请求。PC 2回复ARP响应告知它的MAC地址。R3之后在ARP cache中更新192.168.4.10的MAC地址。
- IPv4报文封装到新的以太网帧中并从R3的FastEthernet 0/0 接口发出。
- 当PC 2接收到该帧,检查帧的目的MAC地址,与网卡接收端口的MAC地址相匹配,PC 2于是将帧的剩余部分复制到自己的buffer。
- PC 2识别到以太网类型为0x800,也就是帧的数据部分包含IPv4报文。
- PC 2解封装以太网帧,将IPv4报文传递给操作系统的IPv4进程。
路由表:
路由表存储的信息包括:
- 直连路径:来自活动路由接口的路径。当接口为活动状态并配置了IP地址时,路由器添加一条直连路径。
- 远端路径:远端的网络连接到其他路由。通过静态配置或动态路由协议到达该网络。
路由表是存储在RAM中的一份数据文件,用于存储直连以及远端网络的路由信息。路由表中包含网络或下一跳地址的信息。这些信息告知路由器可以通过将报文发送至代表下一跳地址的路由器以最佳路劲到达目的地址。下一跳信息也可以是到下一个目的地的输出接口。
路由表内容:
Cisco IOS路由器可用show IP route命令显示IPv4路由表。路由器还提供一些额外的路由信息,包括路径是怎样学习到的,路径在表中有多长时间,使用哪一接口去到达预定义的目的地。
路由表中的表项可作为以下内容添加:
- 本地路径接口:当接口配置并激活时添加。
- 直连接口:当接口配置并激活时添加。
- 静态路径:当手动配置路径并且输出接口激活时。
- 动态路由协议:当路由协议动态学习到网络时添加,如EIGRP或OSPF。
路由表项的来源通过代码来标识,代码表明路径是怎样学习到的。例如,常用代码包括:
L:路由器接口地址。当路由器接收到报文时发送至本地接口而无需转发。
C:直连网段。
O:通过OSPF从另一个路由器动态学习到的网络。
D:通过EIGRP从另一个路由器动态学习到的网络。
下图显示了R1的路由表:

远端网络路由表项:
下图显示了R1到远端网络10.1.1.0的表项:

- Route source:路径是怎样学习到的。
- Destination network:远端网络地址。
- Administrative distance:路由来源的可信度。较低值表明优先选择。
- Metric:是路由算法用以确定到达目的地的最佳路径的计量标准。较低值表明优先选择。
- Next hop:转发报文的下一个路由器的IP地址。
- Route timestamp:自学习到路径以来过了多少时间。
- Outgoing interface:用以转发报文的输出接口。
直连路由表项:
下图显示了R1到直连网络192.168.10.0的路由表项:

在一个接口状态为up/up并添加到IPv4路由表之前,接口必须:
- 指定有效的IPv4或IPv6地址。
- 通过no shutdown命令激活。
- 从另一设备(路由器,交换机,主机等)接收到载体信号。
当接口up之后,该接口的网络作为直连网络添加到路由表中。
静态路由:
静态路由是指由网络管理员手动配置在路由器上的表项。对于特定的目标地址,以及在小型或稳定的网络环境,手动配置静态路由可以非常成功地应用。通过使用静态路由,网络管理员确定了通向一目标网络的路径。
一个重要的概念是:路由的核心在于下一跳。下一跳是一个特定路由器的角度来看,距离目标地址更近一步的路由器。下图显示了一个中型路由拓扑。从R1的角度来看,R2同时是到达192.168.3.0以及192.168.4.0的下一跳。

初始状态下,除了已经启动的接口和给定的IP地址以外,什么都没有配置。路由器的路由表只会包含直连路由。每一个路由器只知道它接口相连的两个网络。下表显示了这一时刻的路由表。

从上表可以看出,路由器不知道整个网络的情况。例如,Node A连接到Switch 1尝试访问Switch 4的Node B。经过主机路由表处理后,A将数据转发至R1的默认网关(192.168.1.254),R1查询自己的路由表并发现没有目标网络的相关信息。于是R1发送ICMP destination unreachable消息。
这个问题怎么解决呢?像这样的小型网络,网络管理员可以在路由器输入路由命令,配置额外的转发信息:

例如,以下命令告知R1怎样到达192.168.3.0以及192.168.4.0:
ip route 192.168.3.0 255.255.255.0 192.168.2.254 ip route 192.168.4.0 255.255.255.0 192.168.2.254
R1上输入命令之后,路由表更新如下所示:

现在R1理解到达这些网络需要经过R2,但是R2接下来怎么办呢?由于192.168.3.0直接连接到R2,R2可以直接ARP主机。但对于192.168.4.0,R2需要管理员以下命令来协助:
ip route 192.168.4.0 255.255.255.0 192.168.3.254
路由表相应更新:

目前只成功了一半,报文需要返回。查看R3的路由表,发现路由器不知道怎么找到192.168.1.0。Node A的报文到达之后,Node B尝试回复,但是会从R3收到ICMP destinationunreachable的消息。在Node A看来,好像传输从未收到回复。要完成这一过程,需要在所有路由器上对于所有未知网络输入ip route命令来更新路由表。

R2真正的路由表以及在R2上输入的ip route命令如下图所示:

动态路由:
路由协议允许路由器动态共享远端网络的信息以及自动将这信息添加到自己的路由表中。动态路由协议的一大好处在于当拓扑变更时,路由器会交换路由信息,从而能够自动学习新增网络,并且在链路故障时,找到替换路径。
路由协议完成这一功能的方式取决于它所使用的算法以及此协议的操作特性。通常来说,动态路由协议的执行过程如下:
- 路由器在端口发送和接收路由消息。
- 路由器与其他使用相同路由协议的路由器共享路由信息。
- 路由器交换路由信息来学习远端网络。
- 当路由器检测到拓扑变化时,路由协议将这一变化通知其他路由器
网络发现
例如,R1,R2,R3之间的拓扑:

R1:发送10.1.0.0以及10.2.0.0的更新;从R2接收10.3.0.0的信息,跳数加1;在路由表中存储10.3.0.0的信息,metric设为1。
R2:发送10.3.0.0以及10.2.0.0的更新;从R1接收10.1.0.0的信息,跳数加1;在路由表中存储10.1.0.0的信息,metric设为1。从R3接收10.4.0.0的信息,跳数加1;在路由表中存储10.4.0.0的信息,metric设为1。
R3:发送10.3.0.0以及10.4.0.0的更新;从R2接收10.2.0.0的信息,跳数加1;在路由表中存储10.2.0.0的信息,metric设为1。
交换路由信息
路由器周期性的更新信息。在最初的网络发现结束后,每个路由器通过发送和接收以下更新来继续收敛的过程:

R1:发送10.1.0.0,10.2.0.0以及10.3.0.0的更新;从R2接收10.4.0.0的信息,跳数加1;在路由表中存储10.4.0.0的信息,metric设为2;从R2收到相同的10.3.0.0的更新,metric为1,不作更新。
R2:发送10.1.0.0,10.2.0.0,10.3.0.0以及10.4.0.0的更新;从R1接收10.1.0.0的信息,不作更新;从R3接收10.4.0.0的信息,不作更新。
R3:发送10.2.0.0,10.3.0.0以及10.4.0.0的更新;从R2接收10.1.0.0的信息,跳数加1;在路由表中存储10.1.0.0的信息,metric设为2;从R2收到相同的10.2.0.0的更新,metric为1,不作更新。
距离矢量路由协议切断了邻居路由之间的环路,也称为水平分割。水平分割阻止信息从同一端口接收之后再发送出去。例如,R2不会从Serial 0/0/0端口发送网络10.1.0.0的信息,因为R2从Serial 0/0/0学习了10.1.0.0。
网络中的路由器收敛了信息之后,路由器可以使用路由表来决定到达目的地的最佳路径。不同的路由协议有不同的计算最佳路径的方法。
路由收敛
当所有路由器对于整个网络有准确的更新之后,达到路由收敛状态,如下图所示:

收敛时间是路由器分享信息,计算最佳路径,更新路由表的时间。收敛同时是协作并且独立的。路由器相互之间共享信息但是必须各自独立的计算自己路由拓扑改变所带来的影响。 由于它们各自独立地关于新的拓扑达成一致,于是说它们收敛于这种一致。
发表回复