IP层工作流程


选路的原理

IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。IP执行选路机制,而路由守护程序则一般提供选路策略。

简单路由表

Flags含义:

  • U : 该路由可以使用
  • G : 该路由是到一个网关(路由器),如果没有设置该标志,说明目的地是直接相连的
  • H : 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址,如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网络号与子网号的结合
  • D : 该路由是由重定向报文创建的
  • M : 该路由已被重定向报文修改

 标志位G是非常重要的,因为由它区分了间接路由和直接路由(对于直接路由来说是不设置标志G的)。其区别在于,发往直接路由的分组中不但具有指明目的端的IP地址,还具有其链路层地址。当分组被发往一个间接路由时,IP地址指明的是最终的目的地址,但是链路层地址指明的是网关(即下一站路由器)。

 理解G和H标志之间的区别是很重要的。G标志区分了直接路由和间接路由,如上所述。但是H标志表明,目的地址(netstat命令输出第一行)是一个完整的主机地址。没有设置H标志说明目的地址是一个网络地址(主机号部分为0)。当为某个目的IP地址搜索路由表时,主机地址项必须与目的地址完全匹配,而网络地址项只需要匹配目的地址的网络号和子网号就可以了。另外,大多数版本的netstat命令首先打印出所有的主机路由表项,然后才是网络路由表项。


Internet上的5个顶层选路域

  • NSFNET主干网
  • 商业互联网交换(Commercial Internet Exchange : CIX)
  • NASA科学互联网(NASA Science Internet : NSI)
  • SprintLink
  • 欧洲IP主干网(EBONE)

ICMP重定向差错

重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项。一旦默认路由发生差错,默认路由器通知它进行重定向,并允许主机对路由表作相应的改动。ICMP重定向允许TCP/IP主机在进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端。


ICMP重定向报文的格式

有四种不同类型的重定向报文,使用不同的代码值
  • 0 : 网络重定向
  • 1 : 主机重定向
  • 2 : 服务类型和网络重定向
  • 3 : 服务类型和主机重定向
ICMP重定向报文的接收者必须查看3个IP地址
  • 导致重定向的IP地址(即ICMP重定向报文的数据位于IP数据报的首部)
  • 发送重定向报文的路由器的IP地址(包含重定向信息的IP数据报中的源地址)
  • 应该采用的路由器IP地址
ICMP重定向报文规则
  • 重定向报文只能由路由器生成,不能由主机生成
  • 重定向报文是为主机而不是为路由器使用的
  • 重定向报文不能让主机本身作为路由器
  • 被修改的路由必须是一个间接路由

路由器应该发送的只是对主机的重定向(代码1或3),而不是对网络的重定向。子网的存在使得难于准确指明何时应发送对网络的重定向而不是对主机的重定向。只当路由器发送了错误的类型时,一些主机才把收到的对网络的重定向当作对主机的重定向来处理。

ICMP路由器发现报文

ICMP路由器请求报文格式

ICMP路由器通告报文格式

 -地址数指的是报文中所含的地址数(路由器在一份报文中可以通告多个地址)。  -地址项大小指的是每个路由器地址32 bit字的数目,始终为2。  -生存期指的是通告地址有效的时间(秒数)。


路由器操作

 - 当路由器启动时,它随机(减少与其他路由器的冲突)在所有广播或多播接口发送通告报文,一般每两次通告间隔450秒和600秒,通告报文默认生命周期一般为30分钟。  - 当路由器上的某个接口被关闭时,路由器可以在该接口上发送最后一份通告报文,并把生命周期值设为0。  - 除了定期发送主动提供的通告报文以外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。  - 如果子网上有多台路由器,由系统管理员为每个路由器设置优先等级。


主机操作

 - 主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次。一旦接收到一个有效的通告报文,就停止发送请求报文。  - 主机也监听来自相邻路由器的请求报文。这些通告报文可以改变主机的默认路由器。另外,如果没有接收到来自当前默认路由器的通告报文,那么默认路由器会超时。  - 只要有一般的默认路由器,该路由器就会每隔10分钟发送通告报文,报文的生命周期是30分钟。这说明主机的默认表项是不会超时的,即使错过一份或两份通告报文。