概念

路由表

首先介绍路由表,每个表项包含:目的网络地址、子网掩码和下一跳地址.
这样就代表路由器通过目的网络地址和子网掩码来确定目的子网,若IP数据报中与其匹配,则将其发发到下一跳地址
于是得出结论:

  1. IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)
  2. 只有到达最后一个路由器时,才试图向目的主机进行直接交付

特定主机路由

虽然因特网所有的分组转发都是基于目的主机所在网络,但是存在特例,即对特定的目的主机指明一个路由,这种路由叫做特定主机路由。
应用场景:

  1. 该方式可使网络管理人员更方便的控制网络和测试网络,
  2. 同时也可在需要考虑某种安全问题时采用该方式。
  3. 在对网络的链接或路由器进行排错时

默认路由(即网关)

路由器可采用默认路由以减少路由表所占用的空间和搜索路由表所用时间。
这种转发方式在只有很少的对外连接时时很有效的。实际上,默认路由在主机发送IP数据报时往往更能显示出它的好处。我们在ICMP的路由重定向报文中介绍过,主机在发送每一个IP数据报时都要查找自己的路由表,如果一个主机链接在一个小网络上,而这个网络只用一个路由器和因特网链接,那么这种情况下使用默认路由是十分合适的。

如下图所示,连接在N1上的任何一个主机的路由表只需要图中所示的三个项目即可

如何转发到下一跳路由的呢?

这里我们应当强调,IP数据报的首部中没有地方指出“下一跳路由的IP地址”,在IP数据报中的首部写的是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。
其实是在从路由表得出下一跳路由的IP地址后,不是将这个地址填入IP数据报,而是送交数据链路层的网络接口软件,它负责将下一跳路由的IP转换为MAC地址,填入数据报的MAC帧的首部中的目的MAC地址

结论

综上所述归纳出分组转发算法如下:

  1. 从收到的数据报的首部提取目的IP地址D
  2. 先判断是否为直接交付。对路由器直连的网络逐个检查是否与目的网络相匹配,若匹配则直接交付(当然路由器还需要把目的MAC重填为目的主机的MAC),否则就是间接交付,执行(3)
  3. 若路由表中有目的地址为D的特定主机路由,则将数据报传送给路由表中所指明的下一跳路由,否则执行(4)
  4. 对路由表中的每一行(目的网络地址、子网掩码和下一跳地址)进行检查是否与目的网络相匹配,若匹配,则把数据报传送给改行指明的下一跳路由器;否则执行(5)
  5. 若路由表中有一个默认路由,则将数据报传送给它;否则执行(6)
  6. 报告转发分组错误

三级路由的通信过程

本节举例说明一个三级路由的分组转发过程,本例中使用ping命令在源和目的主机之间传送ICMP报文,源主机位192.168.1.1,目的主机位192.168.2.1,并且路由器使用静态路由表已经保存了下一跳地址(本例重点不在路由选择协议),网络拓扑如下图所示:

  1. 源主机发送ping命令,因为进行不同网段之间通信,所以主机先找网关,但是一开始不知道网关的MAC地址,所以发送ARP广播数据包,数据包到达交换机之后对局域网中的所有主机广播数据包
  2. 网关(即Router0的左端)收到ARP包之后,确认是自己的IP,会给源主机返回一个确认包,之后主机的ARP缓存表中就把这个IP->MAC的映射记录下来,同时在路由器的ARP缓存表中也记录了源主机的映射;其他主机就丢弃这个ARP数据包
  3. 之后源主机重新发送ICMP报文,顺利到达Router0,但是他根据路由表寻找下一跳的时候,不知道下一跳的MAC,所以又发送了ARP广播,类似上一步,最后Router0保存了下一跳的ARP映射;导致第一次ping超时
  4. 源主机第二次发送ICMP报文,顺利到达第二级路由器Router1,和上一步类似,还是找不到下一跳的MAC,又广播ARP,最后第二级路由Router1也有了下一跳的ARP的映射;并且导致第二次ping超时
  5. 源主机第三次发送ICMP报文,顺利到达第三级路由Router2,此时由Router2的路由表可知该数据报已经可交付,但是找不到目标主机的MAC映射,于是发送ARP广播,最终在第三级路由器Router的MAC缓存中保存目的主机的映射;并且导致第三次ping超时
  6. 源主机最后一次发送ICMP报文,顺利到达目的主机