当前位置: 首页 > news >正文

《TCP/IP详解 卷1:协议》之第九章:IP选路

目录

一、IP选路之IP层工作流程

二、选路原理

三、路由表中的五种不同的标志(flag)

四、路由表的初始化

1、静态路由表初始化

①、手动配置

②、默认网关配置

2、动态路由表初始化

①、路由协议的作用

②、直接连接网络的自动发现

五、没有到达目的地的路由

六、ICMP重定向差错

七、ICMP路由器发现报文


一、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)1ICMP消息类型,值为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)和默认网关发现。

相关文章:

  • 项目管理进阶:详解华为研发项目管理(IPD流程管理)【附全文阅读】
  • 机器视觉开发-打开摄像头
  • Selenium:模拟真实用户的爬虫
  • Python与深度学习:自动驾驶中的物体检测,如何让汽车“看懂”世界
  • 前端函数防抖(Debounce)完整讲解 - 从原理、应用到完整实现
  • Arduino程序函数详解与实际案例
  • Qt二维码demo
  • vscode 的空格和 tab 设置 与 Rime 自建词库
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 18)
  • react学习笔记2——基于React脚手架与ajax
  • 数据可视化入门:画一只会动的星空折线图
  • 基于hr2管理系统的学习
  • 并发设计模式实战系列(11):两阶段终止(Two-Phase Termination)
  • 计算机操作系统知识集合
  • 【c++】【STL】queue详解
  • 小白如何入门Python爬虫
  • Qt connect第五个参数
  • 冒泡排序:从入门到入土(不是)的奇妙旅程
  • 【软件设计师:复习】上午题核心知识点总结(三)
  • GTA5(传承/增强) 13980+真车 超跑 大型载具MOD整合包+最新GTA6大型地图MOD 5月最新更新
  • 旅游特种兵们,这个五一“躲进”书吧
  • 孕妇乘坐高铁突发临产,广西铁路部门协助送医平安产子
  • 李铁案二审今日宣判
  • 打造沪派水乡的“湿意”,上海正在保护营造一批湿地空间
  • 逛了6个小时的上海车展。有些不太成熟的感受。与你分享。
  • 全球前瞻|王毅赴巴西出席金砖外长会,加拿大迎来“几十年来最重要大选”