目录
一、IP选路之IP层工作流程
IP层工作流程如下图所示:

1、当收到一个IP分组后,送到IP输入队列,在不考虑指定源站选路的情况下,会判断IP地址是不是为本机地址或者广播地址,如果是则送入本机的上层协议栈(如TCP、UDP)进行处理;如果不是则送入转发处理模块处理,根据路由决策判断是否进行相应的转发。
如果收到的是 ICMP IP重定向,则更新路由表中的路由策略。
二、选路原理
搜索路由表的基本操作为:
1、搜索匹配的主机地址;
2、搜索匹配的网络地址;
3、搜索默认表项;
值得一提的是,IP层进行的选路实际上是一种选路机制 ,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。
IP执行选路机制,而路由守护程序则一般提供选路策略。
三、路由表中的五种不同的标志(flag)

五种标志代表的含义:
U :该路由可以使用。
G :该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。
H :该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网络号与子网号的组合。
D :该路由是由重定向报文创建的。
M:该路由已被重定向报文修改。
特别地对G、H这两种标志进行补充说明。
1、当设置了G标志时,说明这是一个间接路由。采用这一项路由的分组其IP地址是最终的目的,但是其链路层地址必须对应于路由器IP地址。
2、当设置了H标志时,表明目的地址是一个完整的主机地址。(而不是一个网络地址)
四、路由表的初始化
1、静态路由表初始化
①、手动配置
网络管理员根据网络拓扑结构和需求,手动输入路由信息到路由表中。这种方式适用于网络结构相对简单且稳定的情况。
②、默认网关配置
在计算机或一些简单的网络设备上,通常会配置一个默认网关地址。默认网关可以看作是一种特殊的静态路由。
例如,在一个家庭网络环境中,计算机的网络设置中会指定一个默认网关地址,通常是路由器的IP地址。当计算机要访问外部网络(如互联网)时,它会将数据包发送到默认网关。默认网关会根据自己的路由表来转发数据包。
在计算机的路由表中,会有一条默认路由(目标网络为0.0.0.0/0,下一跳为默认网关地址),指示所有未知目的地的数据包都发送到默认网关。
2、动态路由表初始化
①、路由协议的作用
动态路由表是通过运行路由协议自动构建的。常见的路由协议有RIP (Routing Information Protocol)、OSPF (Open Shortest Path First)、BGP(Border Gateway Protocol)等。这些协议可以让路由器之间自动交换路由信息,从而动态地更新路由表。
②、直接连接网络的自动发现
当路由器的接口被激活并且配置了IP地址后,路由器会自动将直接连接的网络添加到路由表中。
例如,路由器的一个接口被配置为192.168.1.1/24,那么这个路由器会自动在路由表中添加一条直连路由,目标网络为192.168.1.0/24,接口为该接口。这是因为路由器可以通过本地接口直接访问这个子网,无需通过其他路由器转发。
五、没有到达目的地的路由
当没有到达目的地的路由时,会返回一个ICMP差错报文。
1、当数据报是由本地主机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是"主机不可达差错"或者是"网络不可达差错"。
2、如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。
六、ICMP重定向差错
ICMP重定向报文是ICMP的一种消息类型,用于优化网络路径。当一个路由器发现数据包可以通过另一条更优的路径到达目的地时,它会向发送数据包的主机发送ICMP重定向报文,提示主机更新其路由表,从而直接使用更优路径。
①、ICMP重定向报文格式如下
字段 | 长度(字节) | 含义 |
---|---|---|
类型(Type) | 1 | ICMP消息类型,值为5,表示重定向报文 |
代码(Code) | 1 | 重定向的具体类型: 0 = 对网络重定向 1 = 对主机重定向 2 = 对服务类型和网络重定向 3 = 对服务类型和主机重定向 |
校验和(Checksum) | 2 | 用于检验ICMP报文的完整性和正确性 |
网关地址(Gateway Internet Address) | 4 | 新的下一跳地址,即建议主机使用的更优网关地址 |
原始IP头和数据部分前64比特(8字节) | 可变 | 包含触发重定向的原始IP数据报的IP头和数据部分的前64比特,用于主机匹配和识别 |
-
类型(Type):固定为5,表示这是一个ICMP重定向报文。
-
代码(Code):根据重定向的范围和对象不同,分为对网络、对主机、对服务类型和网络、对服务类型和主机的重定向。
-
网关地址(Gateway Internet Address):这是ICMP重定向报文的核心字段,告诉发送方主机一个新的、更优的下一跳地址。
-
原始IP头和数据部分前64比特:这部分信息用于帮助主机识别是哪个数据报触发了重定向,以便正确更新路由表。
注:ICMP重定向报文的接收者必须查看三个IP地址
1、从原始IP头获取得到的:源 IP 地址
2、从原始IP头获取得到的:目的 IP 地址
3、从网关地址获取得到的:新的下一跳 IP 地址
七、ICMP路由器发现报文
ICMP路由器发现(Router Discovery)报文是基于ICMP协议的一种机制,用于主机发现网络中的默认网关(路由器)。它有两种主要类型的报文:路由器通告(Router Advertisement) 和 路由器请求(Router Solicitation)。
-
IPv4路由器发现:虽然IPv4中定义了路由器发现机制,但在实际应用中,大多数主机通过静态配置或DHCP获取默认网关。
-
IPv6路由器发现:IPv6中,路由器发现是邻居发现协议的一部分,广泛应用于无状态地址自动配置(SLAAC)和默认网关发现。