学习笔记——路由网络基础——路由转发

news2024/11/26 17:48:55

六、路由转发

1、最长匹配原则

最长匹配原则 是支持IP路由的设备默认的路由查找方式(事实上几乎所有支持IP路由的设备都是这种查找方式)。当路由器收到一个IP数据包时,会将数据包的目的IP地址与自己本地路由表中的表项进行逐位(Bit-By-Bit)的逐位查找,直到找到匹配度最长的条目,这叫最长匹配原则。

这里有几个概念要先搞清楚:

上图,这是一个形象化的二维空间图。深灰色的空间 172.16.0.0/16,这个网络号我们称为主类网络号

主类网络号:意思是该网络号按照其所属的IP地址类别区分后,对应上的默认的子网掩码长度后得到的网络号。

如:172.16.0.0 这是一个B类地址,B类地址的默认子网掩码长度是16位,因此 172.16.0.0/16 本身就是一个主类网络号

如:10.1.12.0/24,首先10开头的,这是一个A类地址A类地址默认的掩码是 255.0.0.0,因此10.1.12.0/24 它的主类网络号是 10.0.0.0/8

上图,从172.16.0.0/16开始往上走,下一个网络号是172.16.10.0/24,很明显是应用了(VLSM)可变长子网掩码之后,得到的一个172.16.0.0/16这个主类网络的一个子网。

子网(subnet):可以理解为是在网络号所属类别的默认掩码长度的基础上,将掩码“拉长”或者向主机位借位从而得到的一个子网络号。

实际上172.16.0.0/16 是将172.16.10.0/24 囊括在内的一个区间。那么在这里,如果我们有一个IP 172.16.10.1,实际上这个IP既可以理解为在172.16.0.0/16网络内,也是在172.16.10.0/24 网络内,当然,这里我们能看出来,谁更能精确匹配172.16.10.1 这个IP呢?很明显是 172.16.10.0/24 更精确,我们说,它的匹配长度相比172.16.0.0 更长。

当然子网172.16.10.0/24还可以进一步划分子网,得到172.16.10.0/30,甚至172.16.10.1/32,那么如果这些前缀都存在的情况下,当我要去查找172.16.10.1,谁的匹配度最高呢?很明显,是 172.16.10.1/32 这条主机前缀,或者说,主机路由,对吧?这就是最长匹配原则。

回到 172.16.0.0/16 这个主类网络号,然后我们向下走,看上图。172.0.0.0/8 实际上是将这个B类地址的掩码向左移了8bits,这样一来得到的这个网络号实际上是囊括了 172.16.0.0/16 在内的一个大的网络号,我们称其为 超网

下面我们通过一个具体的例子来深入理解最长匹配原则:

路由表一共有三个条目:172.16.1.0/24、172.16.2.0/24、 172.16.0.0/16,这三个路由条目分别指向不同的出接口。那么当路由器收到一个数据包,去往172.16.2.1的时候,它怎么做决策呢?  

很简单,把三个路由条目都写成二进制,对应上路由条目各自的掩码(前缀长度),掩码为1的位是需要严格匹配的,掩码为0的位则无所谓(图中标识x的位)。

然后把数据包的目的IP地址:172.16.2.1也写成二进制,接下去就是从左往后的逐位匹配。剔除不匹配的路由条目1,剩下路由条目2和3,由于目的地址172.16.2.1和路由条目172.16.2.0/24的匹配长度最长,因此路由条目2胜出,最终数据包被从接口S1转发出去。这就是最长匹配原则。

最长匹配示例

下面看几个宏观的例子:

 上图,当R1收到一个数据包,去往172.16.1.1,数据包将命中那一条路由呢?那么实际上,172.16.1.1是“掉落”在172.16.1.0/24及172.16.0.0/16网络中的,两者貌似皆可,但是172.16.1.0/24显然,匹配度要更长,因此,最终这个数据包根据路由条目“172.16.1.0/24”的指示被转发给了R2。

同理若有数据包去往172.16.2.1呢?首先路由表中172.16.1.0/24这条前缀肯定是不匹配的,最后172.16.2.0/24这个条目匹配度最高,因此数据被从S1口扔给了R3。

  而当有数据包去往172.17.1.1时,由于172.16.1.0/24及172.16.0.0/16这两条路由均不匹配,于是数据只能“求助于”0.0.0.0/0这条缺省路由,从S2口转发给R4。

下面我们总结一下路由器关于路由查找的几个重点内容:

不同的路由前缀(注意路由前缀包含网络号+掩码,缺一不可),在路由表中属于不同的路由。

相同的路由前缀,通过不同的协议获取,先比优先级,优选优先级小的,后比cost。这是一般情况,当然有二般情况,这就要看特定的环境和特定的路由协议了。

默认采用最长匹配原则,匹配,则转发;无匹配,则找默认路由,默认路由都没有,则丢弃。

路由器的行为是逐跳的,到目标网络的沿路径每个路由器都必须有关于目的地的路由。

数据是双向的,考虑流量的时候,要关注流量的往返。

     

根据最长匹配原则进行匹配,能够匹配192.168.2.2 的路由存在两条,但是路由的掩码长度中,一个为16 bit,另一个为24 bit,掩码长度为24 bit的路由满足最长匹配原则,因此被选择来指导发往192.168.2.2的报文转发。

根据最长匹配原则匹配,能够匹配到192.168.3.2的路由只有一条,此路由为最终转发依据。

路由器查找FIB表时,将报文的目的IP地址和FIB表中各表项的掩码进行按位“逻辑与”,得到的地址符合FIB表中的网络地址则匹配。最终选择一个掩码最长的FIB表项转发报文。

FIB表信息查看命令display fib【slot-id】

slot-id:显示指定槽位号的FIB表信息。整数形式,取值范围请根据设备实际配置选取.

FIB表中的字段说明:

Total number of Routes:路由表总数。     Destination/Mask:目的地址/掩码长度。

Nexthop:下一跳。

Flag:当前标志,G、H、U、S、D、B的组合。

G(Gateway):网关路由,表示下一跳是网关。

H(Host):主机路由,表示该路由为主机路由。

U(Up):可用路由,表示该路由状态是Up。

S(Static):静态路由。

D(Dynamic):动态路由。

B(Black Hole)黑洞路由,表示下一跳是空接口。

TimeStamp时间戳,表示该表项存在的时间,单位是秒。

Interface到目的地址的出接口。

TunnellD:表示转发表项索引。该值不为0时,表示匹配该项的报文通过隧道转发(如:MPLS隧道转发)。该值为0时,表示报文不通过隧道转发。

如果一个数据包的目的IP地址是10.3.3.3,路由器将会把这个数据包从哪个接口转发出去呢?

FIB表中每条转发项都指明到达某网段或某主机的报文应通过路由器的哪个物理接口或逻辑接口发送,然后就可到达该路径的下一个路由器,或者不再经过别的路由器而传送到直接相连的网络中的目的主机。

2、路由转发流程

1、来自10.0.1.0/24网段的IP报文想要去往40.0.1.0/24网段,首先到达网关。

2、网关查找路由表项,确定转发的下一跳、出接口,之后报文转发给R2。

3、报文到达R2之后,R2通过查找路由表项转发给R3。

4、R3收到后查找路由表项,发现IP报文目的IP属于本地接口所在网段,直接本地转发。最终该报文被发往目的主机。

IP路由表小结

当路由器从多种不同的途径获知到达同一个目的网段的路由(这些路由的目的网络地址及网络掩码均相同)时,会选择路由优先级值最小的路由;如果这些路由学习自相同的路由协议,则优选度量值最优的。总之,最优的路由加入路由表。

当路由器收到—个数据包时,会在自己的路由表中查询数据包的目的IP地址。如果能够找到匹配的路由表项,则依据表项所指示的出接口及下一跳来转发数据;如果没有匹配的表项,则丢弃该数据包。

路由器的行为是逐跳的,数据包从源到目的地沿路径每个路由器都必须有关于目标网段的路由,否则就会造成丢包。

数据通信往往是双向的,因此要关注流量的往返(往返路由)。

3、如何根据掩码来确定IP地址网段

  如何确定子网掩码和判断IP地址的网段。通常我们在划分vlan的时候会使用以下例子:

  创建vlan1:IP地址:192.168.1.1   子网掩码:255.255.255.0

  创建vlan2: IP地址:192.168.2.1   子网掩码:255.255.255.0

那么他们是不是在同一个网段呢?平时配置IP地址较多的朋友,可以直观的判断,他们并不是属于同一个网段,那么如何计算呢?要想判断两个IP地址是不是在同一个网段,只需将IP地址与子网掩码做与运算,如果得出的结果一样,则这两个IP地址是同一个子网当中。

详细计算

  将ip地址192.168.1.1转换为二进制             将子网掩码255.255.255.0转换成二进制

  11000000 10101000 00000001 00000001       11111111.11111111.11111111.00000000

将两者相“与(and)"运算:

  11000000 10101000 00000001 00000001

  11111111.11111111.11111111.00000000

然后得到:

  11000000 10101000 00000001 00000000      转换成网络号就是:192.168.1.0

  将ip地址192.168.2.1转换为二进制             将子网掩码255.255.255.0转换成二进制

  11000000 10101000 00000010 00000001         11111111.11111111.11111111.00000000

然后将两者相“与(and)"运算:

  11000000 10101000 00000010 00000001

  11111111.11111111.11111111.00000000

然后得到:

  11000000 10101000 00000010 00000000       转换成网络号就是:192.168.2.0

  很明显,二者的结果是不一样的,一个是网段192.168.1.0,一个是网段192.168.2.0,所以不是一个网段。

案例2

  IP地址1:192.168.1.1 子网掩码:255.255.252.0

  IP地址2:192.168.2.1 子网掩码:255.255.252.0

  很明显,我们这个和上面例1的IP地址是一样的,只是子网掩码不一样,如果不看子网掩码,首先可能就判断他们不是同一个网段。

  这里面和上面例1中唯一变化就是子网掩码从255.255.255.0换成了255.255.252.0了,那我们来看下,他们是否属于同一个网段。

详细计算

  将ip地址192.168.1.1转换为二进制           将子网掩码255.255.252.0转换成二进制

  11000000 10101000 00000001 00000001       11111111.11111111.11111100.00000000

然后将两者相“与(and)"运算:

  11000000 10101000 00000001 00000001

  11111111.11111111.11111100.00000000

然后得到:11000000 10101000 00000000 00000000    转换成网络号就是:192.168.0.0

将ip地址192.168.2.1转换为二进制        将子网掩码255.255.252.0转换成二进制

  11000000 10101000 00000010 00000001       11111111.11111111.11111100.00000000

然后将两者相“与(and)"运算:

  11000000 10101000 00000010 00000001

  11111111.11111111.11111100.00000000

然后得到:11000000 10101000 00000000 00000000    转换成网络号就是:192.168.0.0

  很明显,二者的结果是一样的,都是属于192.168.0.0网段,所以他们是同属于一个网段。

当然,如果对子网较熟了就不需要经过这些运算了,大部分的网段可以通过分析子网掩码与IP地址就可以判断出来是否属于网一网段,但前提是你需要熟悉网段的原理与运算的方法。

4、如何根据ip地址推算子网掩码

  确定IP地址子网掩码,大部分的情况下,我们网络中只要不超过254台主机的的话,子网掩码都可以设置成255.255.255.0。那么超过了254台主机的话怎么办呢?

  可以划分vlan,也可以设置成一个大网段,划分vlan我们就不说了,上面有例子,设置成一个大网段就有一个难点,如何确定这个大网段里面的子网掩码呢?

  例如:假设监控网络中有600个点位,我们现在也不想把它划分vlan(实际项目中大部分是会划分vlan的),假设只想用一个大网段把这600个点位分配IP地址,如何设置IP地址,如何确实子网掩码?

  分析:首先我们知道600个点位,可以使用3个254个IP地址段来分配。可以使用

  IP段一:192.168.0.1——192.168.0.254

  IP段二:192.168.1.1——192.168.1.254

  IP段三:192.168.2.1——192.168.2.254  每个网段有254个IP地址,完全够600个点位用的。

  那么问题来了,如果要使这三个IP段在同一个网段内,那么这个大网段共同的子网掩码是多少呢?我们来分析下:

  将IP地址192.168.0.1转换为二进制       11000000 10101000 00000000 00000001

  将IP地址192.168.1.1转换为二进制       11000000 10101000 00000001 00000001

将IP地址192.168.2.1转换为二进制       11000000 10101000 00000010 00000001

  转换成了二进制,可以看得出,三个IP段的二进制前面22位的是不变的,那么可以将他们表示成:

  IP段一:192.168.0.1/22  IP段二:192.168.1.1/22      IP段三:192.168.2.1/22

  这种192.168.2.x/22形式的IP地址相信大家平时都见过,就是已经告诉了子网掩码了。也就是说他们共同的子网掩码二进制前面22个都是1。

  11111111 11111111 11111100 00000000

  转换成十进制,那就是255.255.252.0,所以他们共同的子网掩码就是255.255.252.0。

  当然在实际项目中,与网络接触较多的人不需要通过一系列的换算,直接可以通过简单的判断估算出来这个大网段的子网掩码,因此,今天是讲原理,方便大家理解,所以所有的换算都是通过运算出来的。


整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun    暗号:CSDN】

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

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

相关文章

HCIP--OSPF(笔记3)

OSPF扩展配置 手工认证 【1】接口认证 -- 直连的邻居间,设定认证口令,进行身份核实,同时对双方交互的数据进行加密保护 [r9-GigabitEthernet0/0/1]ospf authentication-mode md5 1 cipher 123456 邻居间认证模式、编号、密码必须完全一致 【…

【UML用户指南】-20-对基本行为建模-交互图

目录 1、概述 2、顺序图 2.1、两个不同于通信图的特征: 2.1.1、顺序图有对象生命线 2.1.2、顺序图有控制焦点 2.2、结构化控制 2.2.1、可选执行opt 2.2.2、条件执行alt 2.2.3、并行执行par 2.2.4、循环迭代执行loop 2.3、嵌套活动图 3、通信图 3.1、两…

Selenium WebDriver - 网络元素

本文翻译整理自:https://www.selenium.dev/documentation/webdriver/elements/ 文章目录 一、文件上传二、定位策略1、传统定位器2、创建定位器3、类名4、CSS选择器5、id6、NAME7、链接文本8、部分链接文本9、标签名称10、xpath11、相对定位器它是如何工作的可用相对…

java中Object和json相互转换的方式

1.org中jackson转换json,springboot中内置jackson ObjectMapper onew ObjectMapper(); List<>listnew ArrayList(); String jonso.writeAsValueString(list); 2.alibaba中fastjson转换成json GetMapping("/test")public TbUser testHttpClient(){String url…

Python 函数注解,给函数贴上小标签

目录 什么是函数注解? 为什么使用函数注解? 如何编写函数注解? 实战演练 与类型提示(Type Hints)的关系 类型安全的运算器 什么是函数注解? 函数注解(Function Annotations)是Python 3中新增的一个特性,它允许为函数的参数和返回值指定类型。 这些注解不会改变…

大学食堂管理系统

摘 要 随着信息技术的飞速发展和高校规模的不断扩大&#xff0c;大学食堂作为高校日常运营的重要组成部分&#xff0c;其管理效率和服务质量直接影响到师生的日常生活和学习。传统的食堂管理方式&#xff0c;如手工记录、纸质菜单、人工结算等&#xff0c;不仅效率低下&#x…

FFmpeg编译4

CPUx86-64 TOOLCHAIN N D K / t o o l c h a i n s / x 8 6 6 4 − 4.9 / p r e b u i l t / l i n u x − x 8 6 6 4 S Y S R O O T NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64 SYSROOT NDK/toolchains/x866​4−4.9/prebuilt/linux−x866​4SYSROOTNDK/platforms/and…

2024-06-23 操作系统实验5——模拟页式存储管理

文章目录 一、实验目的二、实验内容三、实验过程四、结果测试五、实验总结和说明 补录与分享本科实验&#xff0c;以示纪念。 一、实验目的 通过编写和调试请求页式存储管理的模拟程序以加深对请求页式存储管理方案的理解。 二、实验内容 页面淘汰算法可采用FIFO置换算法&a…

React+TS前台项目实战(十五)-- 全局常用组件Table封装

文章目录 前言Table组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 在这篇文章中&#xff0c;我们将对本系列项目中常用的表格组件Table进行自定义封装&#xff0c;以提高性能并适应项目需求。后期也可进行修改和扩展&#xff0c;以满足项目的需求。 Table组…

Windows 11 安装hp 1020 plus 打印机驱动 (Ubuntu 20.04.3 LTS 部署cups局域网共享打印服务器)

1 win11 下载HP laserjet 1020 plus驱动,可以官网下载哦 链接下载 2 手动添加hp laserjet 1020驱动: 控制面板-->查看设备和打印机-->打印机和扫描仪-->添加设备-->我需要的打印机不在列表中-->通过手动添加-->按名称选择共享打印机 如果找不到&#xff0…

论文《Tree Decomposed Graph Neural Network》笔记

【TDGNN】本文提出了一种树分解方法来解决不同层邻域之间的特征平滑问题&#xff0c;增加了网络层配置的灵活性。通过图扩散过程表征了多跳依赖性&#xff08;multi-hop dependency&#xff09;&#xff0c;构建了TDGNN模型&#xff0c;该模型可以灵活地结合大感受场的信息&…

简易部署的设备日志采集工具

永久免费: Gitee下载 最新版本 使用说明: Moretl 企业级采集文件工具 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

OPENCV中0x00007FFE5F35F39C发生异常

原因&#xff1a;读取图片时已经为灰度图像&#xff0c;又进行了一次灰度处理cvtColor 解决方法&#xff1a;如上图所示&#xff0c;将cv::imread的第二个参数改为cv::IMREAD_COLOR&#xff1b;或者保留cv::IMREAD_GRAYSCALE&#xff0c;删去后面的cv::cvtColor

高通安卓12-OTA 升级

1.OTA介绍 OTA 英文全称是 Over-the-Air Technology&#xff0c;即空间下载技术的意思。 OTA 升级是 Android 系统提供的标准软件升级方式。它功能强大&#xff0c;可以无损失升级系统&#xff0c;主 要通过网络[例如 WIFI、3G]自动下载 OTA 升级包、自动升级&#xff0c;但…

仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮

, mWidth - mCircleWidth, mHeight - mCircleWidth); canvas.drawRoundRect(rectF, mHintBgRoundValue, mHintBgRoundValue, mHintPaint); //前景文字 mHintPaint.setColor(mHintFgColor); // 计算Baseline绘制的起点X轴坐标 int baseX (int) (mWidth / 2 - mHintPaint.m…

新闻管理与推荐系统Python+Django+协同过滤推荐算法+管理系统

一、介绍 新闻管理与推荐系统。本系统使用Python作为主要开发语言开发的一个新闻管理与推荐的网站平台。 网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求&#xff0c;并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后…

mayavi pyqt 实例

目录 安装&#xff1a; 示例代码&#xff1a; 生成3d检测框&#xff1a; 安装&#xff1a; pip install pyqt5 mayavi traits traitsui 示例代码&#xff1a; import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton from …

区块链中nonce是什么,什么作用

目录 区块链中nonce是什么,什么作用 区块链中nonce是什么,什么作用 Nonce在以太坊中是一个用于确保交易顺序性和唯一性的重要参数。以下是对Nonce的详细解释: 定义 Nonce是一个scalar值,它等于从该地址发送的交易数量,或在具有关联代码的账户的情况下,由该账户创建的合…

【Flutter 专题】112 图解自定义 ACEPieWidget 饼状图 (一)

类别选项球&#xff1b;切割绘制饼状图&#xff1b;饼状图中绘制文字&#xff1b; 1. 类别选项球 对于两侧不同颜色类别选项卡&#xff0c;仅需要简单设置一下 Container 的 decoration 装饰器即可&#xff0c;只是方便用户查看饼状图分类而已&#xff1b; return Container…

不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频

首先&#xff0c;打开window系统中的cmd命令行工具&#xff0c;或者powershell&#xff0c;安装腾讯云tencentcloud的Python库 pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python 然后&#xff0c;开通腾讯云的对象存储COS服务&…