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

六、路由转发

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.mfbz.cn/a/735060.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实战篇:GY-906红外测温模块 + 万年历(定时器计数中断版本) -STM32篇

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布: https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

Attention系列总结-粘贴自知乎

1. 梦想做个翟老师:阿里:Behavior Sequence Transformer 解读48 赞同 7 评论文章 优点:捕捉用户行为历史序列中的顺序信息。w2v也是捕捉用户序列信息的,本质差异在于啥? 添加图片注释,不超过 140 字(可选&#xff0…

如何在 Ubuntu 12.04 VPS 上安装和配置基本的 LDAP 服务器

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 LDAP(轻量级目录访问协议)是一种通过文件和目录层次结构管理相关信息的协议,它可以从集中位置管…

Vue72-路由传参1

一、需求 点击哪个消息,就展示哪个消息的详情 这是一个三级路由! 给路由组件:detail.vue传递消息数据。 二、代码步骤 2-1、编写路由组件 从$route.query属性里面获取传参 2-2、编写路由规则 2-3、编写路由标签,传参 1、to的字…

三大交易所全面恢复 IPO 申请

6月21日晚间,北交所受理了3家企业的IPO申请,这是北交所时隔3个月之后恢复IPO受理。6月20日晚间,沪深交易所各受理了1家IPO申请,这是沪深交易所时隔半年后再次受理IPO。这也意味着,三大交易所IPO受理全部恢复。 6月21日…

AIGC时代的英语教育:人工智能会取代英语老师吗?

在当前AIGC(Artificial Intelligence Generated Content)时代,人工智能技术正在迅速发展并渗透到各个领域,其中包括英语教育。面对这一趋势,许多人担心人工智能会取代传统的英语教师。然而,本文将探讨人工智…

C# Winform中制作精美控件(2)

仓库温度监控系统重有个控件,就是温度监控,还是比较精美的,那么我们来看看制作的要点有哪些。 前面我们讨论过布局和圆角按钮。这节主要关注温度计控件 1. 布局: 两个Panel将界面分位上下两个部分,Dock.Top Dock.Fil…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压,创…

【单片机毕业设计选题24024】-房间自动除湿控制系统

系统功能: 系统分为手动和自动模式,上电默认为自动模式。自动模式下如果获取到湿度 值大于设定的湿度值则自动打开风扇,手动模式下手动开关风扇。 系统上电后显示“欢迎使用除湿控制系统请稍后”,两秒钟后进入主页面显示。 第一行显示系统…

[FreeRTOS 功能应用] 互斥访问与回环队列 功能应用

文章目录 一、基础知识点二、代码讲解三、结果演示四、代码下载 一、基础知识点 [FreeRTOS 基础知识] 互斥访问与回环队列 概念 [FreeRTOS 内部实现] 互斥访问与回环队列 [FreeRTOS 内部实现] 创建任务 xTaskCreate函数解析 本实验是基于STM32F103开发移植FreeRTOS实时操作系…

A bug‘s life 虫子的生活(带权并查集)

题目链接: 2492 -- A Bugs Life (poj.org) 题目描述: 思路: 带权并查集,处理方法基本与食物链(http://t.csdnimg.cn/fSnRr)相同,没什么思维创新 但是一开始WA了几次,有些细节没有注意好,还是需要静下心来,好好分析问…

LabVIEW程序闪退问题

LabVIEW程序出现闪退问题可能源于多个方面,包括软件兼容性、内存管理、代码质量、硬件兼容性和环境因素。本文将从这些角度进行详细分析,探讨可能的原因和解决方案,并提供预防措施,以帮助用户避免和解决LabVIEW程序闪退的问题。 1…

数据结构与算法笔记:基础篇 - 初始动态规划:如何巧妙解决“双十一”购物时的凑单问题?

概述 淘宝的 “双十一” 购物节有各种促销活动,比如 “满 200 元减 50元”。假设你女朋友购物车中有 n 个(n > 100)想买的商品,它希望从里面选几个,在凑够满减条件的前提下,让选出来的商品价格总和最长…

汉语拼音字母表 (声母表和韵母表)

汉语拼音字母表 [声母表和韵母表] 1. 汉语拼音声母表2. 汉语拼音韵母表References 1. 汉语拼音声母表 声母是韵母前的辅音,与韵母一起构成一个完整的音节。 辅音是发声时,气流在口腔中受到各种阻碍所产生的声音,发音的过程即是气流受阻和克…

Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!

代码仓库 会同步代码到 GitHub https://github.com/turbo-duck/flink-demo 当前章节 继续上一节的内容:https://blog.csdn.net/w776341482/article/details/139875037 上一节中,我们需要使用 nc 或者 telnet 等工具来模拟 Socket 流。这节我们写一个 …

【python】linux下安装chromedriver

首先,安装selenium模块 pip3 install selenium查看系统内chrome版本: google-chrome --version 根据谷歌浏览器版本下载对应的浏览器驱动版本: wget https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.114/linux64/ch…

2024年6月大众点评成都餐饮店铺POI分析22万家

2024年6月大众点评成都餐饮店铺POI共有221002家 店铺POI点位示例: 店铺id CACuqlcUQApLA7Ki 店铺名称 峨眉山豆腐脑(百吉街店) 十分制服务评分 7.3 十分制环境评分 7.5 十分制划算评分 7.1 人均价格 18 评价数量 38 店铺地址 百吉街86号1层 大类 美食 中类…

Day7 —— 大数据技术之Hive

Hive快速入门系列 Hive的概述什么是Hive?使用Hive的原因 Hive架构Hive安装Hive配置文件修改启动Hive以命令行方式启动(在$HIVE_HOME/bin目录下)以JDBC连接启动(beeline方式连接) Hive基本操作Hive数据库操作Hive表操作…

天气冷电脑不能启动找不到硬盘

https://diy.zol.com.cn/2004/0611/101994.shtml

为什么 JakeWharton 建议:App 只要用到一个 Activity ?

我们来看看这条回答都提到了哪些内容,对 Activity 和 Fragment 之间的爱恨情仇有何独到的见解,凭什么能得到 JakeWharton 本尊的青睐有加。 因为 Activity 是一个程序入口。你可以将其视为 app 的一个 main 函数。站在用户的立场上,通常你进入…