路由表与IP数据报转发:基础小白指南

目录

1. 路由表的基本概念

2. 路由表中的默认路由

3. IP数据报的转发流程

4. 路由聚合

5. 最长前缀匹配

总结


在网络世界中,IP数据报的转发是如何进行的? 这篇文章将带你深入了解路由表的基本概念和IP数据报的转发流程。我们会用简洁明了的语言和实际例子,帮助你快速掌握这一重要的网络知识。


1. 路由表的基本概念

什么是路由表?
路由表是路由器用来决定如何转发IP数据报的核心。一个IP路由表通常包含以下主要信息:

  • 目的网络地址:表示数据报要到达的目标网络。
  • 地址掩码:用于确定目的网络的范围。
  • 下一跳路由器:数据报需要转发到的下一个路由器的地址。
  • 接口:数据报通过哪个接口发送。

图示例
图4—23(a)展示了一个简单的路由表例子,有四个网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。可以想象,若按目的地址来制作路由表,则所得出的路由表就会过于庞大(如果每一个网络有1万台主机,四个网络就有4万台主机,因而每一个路由表就有4万个项目)。但若按目的主机所在网络的地址来制作路由表,那么每一个路由器中的路由表就只包含4个项目。

以路由器R2的路由表为例,由于R2同时连接在网络2和网络3上,因此只要目的主机在这两个网络上,就可通过接口0或接口1由路由器R2直接交付,不需要下一跳路由器的地址。若目的主机在网络1中,则下一跳路由器应为R1,其IP地址为128.0.2.7。同理,若目的主机在网络4中,则路由器R2应把分组转发给IP地址为128.0.3.1的路由器R3。

注意
用一个IP地址并不能准确标识一个网络,因此路由表中除了目的网络地址外还要有一个地址掩码(合起来等价于一个网络前缀)。

图4—23(a)所示的整个网络拓扑可简化为图4—23(b)所示的链路。使用这样的简化图,可以使我们不用关心某个网络内部的具体拓扑及有多少台计算机连接在该网络上,因为这些与分组转发问题并没有什么关系。这样的简化图强调了在互联网上转发数据报时,是从一个路由器转发到下一个路由器。

总结
由于路由器是根据路由表中的目的网络地址来确定下一跳路由器的,因此有以下结论:

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

2. 路由表中的默认路由

什么是默认路由?
默认路由是一种特殊的路由条目,用于减少路由表的大小和查找时间。当一个网络只有少量的对外连接时,默认路由非常有用。

示例
在图4—24中,主机H的路由表只需要三个项目:到本网络的路由、到网络N的路由和默认路由

默认路由的优势

  1. 减少路由表的大小:默认路由可以避免为每个可能的目的地址添加一条路由条目,从而简化路由表。
  1. 提高查找效率:使用默认路由可以加快路由查找的速度,尤其在网络边缘或主机发送数据报时。

具体例子
在图4—24所示的例子中,连接在网络N上的主机H的路由表只需要3个项目。第一个项目就是到本网络主机的路由,其目的网络就是本网络N,因而不需要路由器转发,而是直接交付。第二个项目是到网络N的路由,对应的下一跳路由器是R2。第三个项目就是默认路由,只要目的网络不是N1和N2,就一律选择默认路由,把数据报先间接交付路由器R1,让R1再转发给下一个路由器,一直转发到目的网络上的路由器,最后进行直接交付。


3. IP数据报的转发流程

IP数据报是如何转发的?
我们用一个例子来说明IP数据报的转发过程。

例4—5
主机H1发送一个IP数据报,其目的地址是128.30.33.138。路由器R收到此数据报后,会依次查找路由表,找到匹配的条目并进行转发。

步骤

  1. 提取目的IP地址D
  1. 判断是否为直接交付
    • 对与路由器直接相连的网络逐个进行检查:用各网络的掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束;否则间接交付。
  1. 间接交付
    • 对路由表中的每一行(目的网络地址、掩码、下一跳、接口),用其中的掩码和D逐位相“与”,其结果为N。若N与该行的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则继续查找。
  1. 使用默认路由
    • 若路由表中有一条默认路由,则把数据报传送给路由表中所指明的默认路由器;否则报告转发错误。
  1. 报告错误
    • 若没有默认路由,则报告转发数据报出错。

总结
IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”。在IP数据报的首部写上的IP地址是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样找到下一跳路由器呢?当路由器收到一个待转发的数据报时,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交下层的网络接口软件。


4. 路由聚合

什么是路由聚合?
路由聚合(Route Aggregation)是一种将多个相同路由的表项合并为一个表项的技术,能够有效减少路由表的大小。

示例
图4—26展示了如何将四个网络的路由合并为一个CIDR地址块,减少路由表的表项数量。

路由聚合的优势

  1. 减少路由表的大小:通过将多个相同路由的表项合并为一个表项,可以显著减少路由表的大小。
  1. 提高查找效率:减少表项数量有助于提高路由查找的效率。
  1. 优化网络资源:路由聚合能有效利用网络资源,减少不必要的路由信息传递。

具体操作
对于路由器R来说,到网络1、网络2、网络3和网络4的下一跳路由器都是R1,而这四个网络的地址空间正好可以合并成一个CIDR地址块,因此在路由表中完全可以用一个网络前缀140.23.7.0/24来指示这四个网络的路由。

持续优化
实际上这种地址聚合可以不断进行下去,多个路由相同的小的CIDR地址块可以聚合成大的地址块,大的地址块还可以聚合成更大的地址块,如图4—26中的R路由表。


5. 最长前缀匹配

什么是最长前缀匹配?
在使用CIDR时,路由表中可能存在多个有包含关系的地址块前缀。最长前缀匹配(Longest-Prefix Matching)是指在这些匹配结果中选择具有最长网络前缀的路由。

示例
在图4—26中,若存在一条直接到网络4的链路,则应选择该链路中的最长前缀匹配项进行数据报的转发。

最长前缀匹配的优势

  1. 更具体的路由选择:由于网络前缀越长,其地址块就越小,因此最长前缀匹配能够选择更加具体的路由。
  1. 实现特定主机路由:通过最长前缀匹配,可以方便地实现特定主机路由,只需在路由表中加入一条前缀为“特定主机IP地址/32”的表项即可。
  1. 实现默认路由:默认路由可以用网络前缀0.0.0.0/0来表示,因为该网络前缀的长度为0,任何IP地址都能和它匹配。

缺点

  • 查找时间变长:由于需要遍历整个路由表才能找到最长匹配的前缀项,因此查找路由表的时间会变长。

总结

路由表与IP数据报转发的关键点

  1. 路由表:包含目的网络地址、地址掩码、下一跳和接口等信息。
  1. 默认路由:可以减少路由表的大小和查找时间,特别适用于网络边缘或主机发送数据报时。
  1. IP数据报的转发流程:包括直接交付、间接交付和使用默认路由等步骤。
  1. 路由聚合:能够有效减少路由表的大小,提高查找效率,优化网络资源。
  1. 最长前缀匹配:在使用CIDR时选择具有最长网络前缀的路由,提供更具体的路由选择,方便实现特定主机路由和默认路由。

通过这篇文章,你应该对路由表和IP数据报的转发有了一个基础的了解。希望这些知识能帮助你更好地理解网络世界的运作。如果有任何疑问或建议,欢迎在评论区留言讨论。

图文来源:《计算机网络教程》第六版微课版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000

nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000,截图如下: 解决方法 在管理员权限下打开 CMD(命令行)并运行: net stop winnatnet start winnat 执行完成后在此通过nodejs启动项目即可…

centos系统mysql数据库差异备份与恢复

文章目录 差异备份mysql数据一、 安装 Percona XtraBackup数据库中创建一些数据三、创建全备份四、创建差异备份1. 在数据库中添加数据,让数据发生一些改变2. 创建第一个差异备份3. 数据库中再次添加一些数据4. 创建第二个差异备份 五、模拟数据丢失,删库…

【测开能力提升-Javascript】JavaScript介绍+数值类型

注释: 作为一名合格的测试,首先得会一些基础的后端语言,当然我选择了python,作为测试开发,对代码运行效率要求并不是很高,以及python强大的第三方库,如上一家公司,处理rtcm数据&…

minio 服务docker配置

用minio docker配置了一个服务,分享链接始终是127.0.01开始的, 改成docker的host的ip则提示签名不匹配, 好在这个文件主要是用来下载的,所以可以通过设置bucket的匿名访问权限来实现下载; 这样不需要后面的地址参数就…

UM960硬件设计,最小系统推荐设计

备注: l L1:推荐使用 0603 封装的 68 nH 射频电感l C1:推荐使用 100 nF 100 pF 两个电容并联l C2:推荐使用 100 pF 电容l C3:推荐使用 n 10 μF 1 100 nF 电容并联,总容值不小于 30 μFl R1&#xff1…

Mysql sql技巧与优化

1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话,使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…

AI智能名片微信小程序在品牌战略与私域流量构建中的应用与深度探索

摘要:在数字经济时代,私域流量的价值日益凸显,成为企业和个人实现可持续增长的重要驱动力。品牌,作为私域流量的核心,其稳定性和影响力直接关系到流量的质量与转化效率。AI智能名片微信小程序,作为数字营销…

为什么样本方差(sample variance)的分母是 n-1?

样本均值与样本方差的定义 首先来看一下均值,方差,样本均值与样本方差的定义 总体均值的定义: μ 1 n ∑ i 1 n X i \mu\frac{1}{n}\sum_{i1}^{n} X_i μn1​i1∑n​Xi​ 也就是将总体中所有的样本值加总除以个数,也可以叫做总…

倚天屠龙记高手排名

张无忌:其武功配置堪称无双,乾坤大挪移、完全版九阳神功、太极拳剑,再加上后来习得的降龙十八掌,使他成为当之无愧的武林至尊。九阳神功的内力绵绵不绝,使他连拍一千招降龙十八掌也不觉疲累,其威力甚至超过…

vuepress搭建个人文档

vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录&#xff1a;项目研究创建时间&#xff1a;2024/7/23作者&#xff1a;星云<Xing…

git配置代理

git配置代理 添加全局代理&#xff1a; #我在本地7890端口配置了代理&#xff0c;通过该端口转发&#xff0c;这里转发的地址和端口可根据自己的实际情况进行配置 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7…

Java毕业设计 基于SSM和Vue的跑腿系统小程序

Java毕业设计 基于SSM和Vue的跑腿系统小程序 这篇博文将介绍一个基于SSM框架和Vue开发的跑腿系统微信小程序&#xff0c;适合用于Java毕业设计。 功能介绍 跑腿员 登录 注册 忘记密码 首页 图片轮播 校友动态 校友动态详情 任务 在线接单 任务订单 我的 我的收藏 联系客…

WEB安全-SQL注入

1 需求 SQL注入分类&#xff1a; 根据参数类型&#xff1a;字符型&#xff0c;数字型、搜索型 根据提交方式&#xff1a;POST注入&#xff0c;GET注入&#xff0c;HTTP HEAD注入 根据有无回显&#xff1a;联合注入&#xff0c;报错注入&#xff0c;布尔盲注&#xff0c;延时注入…

栈和队列(C语言)

栈的定义 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;…

Elasticsearch:Golang ECS 日志记录 - zerolog

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。在本教程中&#xff0c;我将详述如何 编码器以 JSON 格式记录日志&#xff0c;并以 ECS 错误格式处理错误字段的记录。 默认情况下&#xff0c;会添加以下字段&…

【算法】深入理解并优化算法:提升软件开发效率与质量

目录 一、算法的基本概念 输入 输出 确定性 有限性 有效性 二、常见算法类型 1. 排序算法 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Mer…

Langchain核心模块与实战[7]:专业级Prompt工程调教LLM[输入输出接口、提示词模板与例子选择器的协同工程]

Langchain核心模块与实战[7]:专业级Prompt工程调教LLM[输入输出接口、提示词模板与例子选择器的协同工程] 1. 大模型IO接口 任何语言模型应用的核心元素是…模型的输入和输出。LangChain提供了与任何语言模型进行接口交互的基本组件。 提示 prompts : 将模型输入模板化、动态…

云原生周刊:Kubernetes v1.31 中的移除和主要变更|2024.7.22

开源项目 Argo Rollouts Argo Rollouts 是一个 Kubernetes 控制器和一组自定义资源定义&#xff08;CRDs&#xff09;&#xff0c;提供高级部署功能&#xff0c;例如蓝绿部署、金丝雀部署、金丝雀分析、实验以及渐进式交付功能给 Kubernetes。 Argo Rollouts 可选地集成了 I…

MATLAB--文件操作相关指令

文章目录 文件操作相关指令前言 M文件创建MATLAB文件操作指令MATLAB文件流控制 文件操作相关指令 前言 记录一下M文件创建、操作、获取信息等相关资料。   MATLAB的M文件是用来代替MATLAB命令行窗口输入指令的文件。因此所有的MATLAB指令都可以再MATLAB的M文件中调用. M文件…

python 读取excel 并处理被合并单元格的数据

业务需求是 读取excel数据 并按指定规则拼接数据保存到 md文件中 遇到的问题&#xff0c;大量空列和空行 造成读取数据卡住&#xff0c;或者逐行 逐单元格遍历 过慢。&#xff08;例如&#xff1a;实际可用数据 一千 行&#xff0c;ws.max_row 读取到的有效行是十万 &#xff…