TCP/IP详解 卷一 IP选路
发表于:2025-10-09 | 分类: 学习
IP选路

概述

选路是IP最重要的功能之一。需要进行选路的数据报可以由本地主机产生,也可以由其他主机产生。在后一种情况下,主机必须配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机就要被丢弃

下图是IP层处理过程的简单流程:

选路的原理

开始讨论IP选路之前,首先要理解内核是如何维护路由表的。路由表中包含的信息决定了IP层所做的所有决策。

IP搜索路由表的几个步骤:

  1. 搜索匹配的主机地址;
  2. 搜索匹配的网络地址;
  3. 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为 0)。

匹配主机地址步骤始终发生在匹配网络地址步骤之前。

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

对于一个给定的路由器,可以打印出五种不同的标志( flag):

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

标志G是非常重要的,因为由它区分了间接路由和直接路由(对于直接路由来说是不设置标志G的)。其区别在于,发往直接路由的分组中不但具有指明目的端的 I P地址,还具有其链路层地址

当分组被发往一个间接路由时, IP地址指明的是最终的目的地,但是链路层地址指明的是网关(即下一站路由器)。

理解G和H标志之间的区别是很重要的。 G标志区分了直接路由和间接路由,如上所述。但是H标志表明,目的地址( netstat命令输出第一行)是一个完整的主机地址。没有设置H标志说明目的地址是一个网络地址(主机号部分为 0)。

主机路由表的复杂性取决于主机所在网络的拓扑结构。

  1. 最简单的(也是最不令人感兴趣的)情况是主机根本没有与任何网络相连。 TCP / IP协议仍然能用于这样的主机,但是只能与自己本身通信!这种情况下的路由表只包含环回接口一项。
  2. 主机连在一个局域网上,只能访问局域网上的主机。这时路由表包含两项:一项是环回接口,另一项是局域网(如以太网)。
  3. 如果主机能够通过单个路由器访问其他网络(如 Internet)时,那么就要进行下一步。一般情况下增加一个默认表项指向该路由器。
  4. 如果要新增其他的特定主机或网络路由,那么就要进行最后一步。
初始化路由表

每当初始化一个接口时(通常是用ifconfig命令设置接口地址),就为接口自动创建一个直接路由。对于点对点链路和环回接口来说,路由是到达主机(例如,设置 H标志)。对于广播接口来说,如以太网,路由是到达网络。

到达主机或网络的路由如果不是直接相连的,那么就必须加入路由表

ICMP主机与网络不可达差错

当路由器收到一份 IP数据报但又不能转发时,就要发送一份 ICMP“主机不可达”差错报文。

ICMP重定向差错

当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送 ICMP重定向差错报文给IP数据报的发送端。

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

ICMP路由器发现报文

一般认为,主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。

ICMP路由器请求报文的格式如图:

ICMP路由器通告报文的格式如图:

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

接下来是一对或多对 IP地址和优先级。 IP地址必须是发送路由器的某个地址。优先级是一个有符号的32 bit整数,指出该IP地址作为默认路由器地址的优先等级,这是与子网上的其他路由器相比较而言的。值越大说明优先级越高。优先级为 0x80000000说明对应的地址不能作为默认路由器地址使用,尽管它也包含中通告报文中。优先级的默认值一般为 0。

路由器发现报文一般由用户进程(守护程序)创建和处理。

上一篇:
TCP/IP详解 卷一 动态路由选路协议
下一篇:
TCP/IP详解 卷一 Tranceroute程序