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

六、路由转发

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.mzph.cn/web/32696.shtml

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

相关文章

一元线性回归模型 多元线性回归模型回归模型评估

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Vue41 ref属性

ref属性 ref是Vue提供的获取组件的属性 <template><div><h1 v-text"msg" ref"title"></h1><button ref"btn" click"showDOM">点我输出上方的DOM元素</button><MySchool ref"sch"…

若依微服务项目09 - swagger如何不显示某个模块的接口文档

在若依微服务项目中&#xff0c;如果不想暴露某个模块的swagger的接口文档&#xff0c;需要怎么做&#xff1f; 本文以ruoyi-gen模块进行举例说明。 默认情况下&#xff0c;可以看到这里包含了ruoyi-gen模块&#xff0c;我们要做的是&#xff0c;要将ruoyi-gen进行隐藏。 最终的…

阐述Spring Security概念及其运用于实战

Spring Security(安全校验) 1. 概述 Spring Security是Spring项目组提供的安全服务框架,核心功能包括认证和授权.为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作. 在如今开发模式中,Spring Security已经成为Java程序员必备的一项技术,简化认证…

5 DSL入门_02精确查询

1. 精确查询 (1)一般是查找keyword,数值&#xff0c;日期&#xff0c;boolean等类型字段&#xff0c;所以不会对搜索条件分词&#xff0c;常见的有&#xff1a;term,range//只查询city南京市鼓楼区,且不会对搜索词分词 get /hotel/_search {"query":{"term&quo…

RabbitMQ实战宝典:从新手到专家的全面探索

前言 在当今分布式系统架构中&#xff0c;消息队列已成为不可或缺的一部分&#xff0c;而RabbitMQ作为其中的佼佼者&#xff0c;凭借其强大的功能和灵活性&#xff0c;广泛应用于各种规模的应用场景中。本文将带你从基础概念出发&#xff0c;深入探讨RabbitMQ的核心特性&#…

计算机网络 静态路由及动态路由RIP

一、理论知识 1.静态路由 静态路由是由网络管理员手动配置在路由器上的固定路由路径。其优点是简单和对网络拓扑变化不敏感&#xff0c;缺点是维护复杂、易出错&#xff0c;且无法自动适应网络变化。 2.动态路由协议RIP RIP是一种基于距离向量的动态路由协议。它使用跳数作…

springboot+vue+mysql+mybatis 二手交易平台

springbootvuemysqlmybatis 二手交易平台 相关技术 javaspringbootmybatismysqlvueelementui

芯片后端之 PT 使用 report_timing 产生报告如何阅读

今天,就PT常用的命令,做一个介绍,希望对大家以后的工作,起到帮助作用。 在PrimeTime中,使用report_timing -delay max命令生成此报告。switch -delay max表示定时报告用于设置(这是默认值)。 首先,我们整体看一下通过report_timing 运行之后,报告产生的整体样式。 pt…

Bootstrap 5 导航

Bootstrap 5 导航 Bootstrap 5 是一个流行的前端框架&#xff0c;用于快速开发响应式和移动设备优先的网站。在本文中&#xff0c;我们将深入探讨 Bootstrap 5 中的导航组件&#xff0c;包括其功能、自定义选项以及如何在实际项目中有效使用它们。 简介 Bootstrap 5 的导航组…

vscode用vue框架2,续写登陆页面逻辑,以及首页框架的搭建

目录 前言&#xff1a; 一、实现登录页信息验证逻辑 1.实现登录数据双向绑定 2.验证用户输入数据是否和默认数据相同 补充知识1&#xff1a; 知识点补充2&#xff1a; 二、首页和登录页之间的逻辑(1) 1. 修改路由&#xff0c;使得程序被访问先访问首页 知识点补充3&am…

numpy.ndarray数据计算及操作集锦

目录 1. numpy.ndarray各列求均值1.1 列1.2 行 1. numpy.ndarray各列求均值 1.1 列 要对 v_sec_trans 数组的每一列求均值&#xff0c;可以使用 numpy 库中的 mean 函数。以下是具体的代码示例&#xff1a; import numpy as np# 定义 v_sec_trans 数组 v_sec_trans np.array…

Qt 实战(5)布局管理器 | 5.1、DPI对布局的影响

文章目录 一、DPI对布局的影响1、什么是DPI&#xff1f;2、DPI对布局的影响3、优化布局以适应不同DPI4、总结 前言&#xff1a; 在开发跨平台桌面应用程序时&#xff0c;DPI&#xff08;Dots Per Inch&#xff0c;每英寸点数&#xff09;是一个不可忽视的因素。DPI决定了屏幕上…

【STM32】STM32通过I2C实现温湿度采集与显示

目录 一、I2C总线通信协议 1.I2C通信特征 2.I2C总线协议 3.软件I2C和硬件I2C 二、stm32通过I2C实现温湿度&#xff08;AHT20&#xff09;采集 1.stm32cube配置 RCC配置&#xff1a; SYS配置&#xff1a; I2C1配置&#xff1a; USART1配置&#xff1a; GPIO配置&#…

二叉树经典OJ练习

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 二叉树经典OJ练习 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 前置说…

python:psutil获取指定进程Cpu及Memory使用的GUI界面

1导入依赖库 import os import psutil import time from pyecharts import options as opts from pyecharts.charts import Line import PySimpleGUI as sg from datetime import datetime from concurrent.futures import ThreadPoolExecutor import ctypes import sys2主界面…

八、(正点原子)Linux内核定时器实验

定时器是我们最常用到的功能&#xff0c;一般用来完成定时功能&#xff0c;本章我们就来学习一下 Linux 内核提供的定时器 API 函数&#xff0c;通过这些定时器 API 函数我们可以完成很多要求定时的应用。 Linux内核也提供了短延时函数&#xff0c;比如微秒、纳秒、毫秒延时函数…

YOLO系列--Anchor Based Anchor Free

一、Anchor based 1.1 Anchor的定义 Anchor也被称为锚框&#xff0c;预先设置目标的大概位置&#xff0c;然后再在这些预设框的基础上进行精细化的调整。调整过程被包括分类 判断预设框是属于正样本 or 负样本-和回归调整预测框的位置。 1.2 Anchor的产生 Anchor box是指在…

长尾分布(Long-tailed Distribution)

长尾分布&#xff08; L o n g − t a i l e d D i s t r i b u t i o n Long-tailed\ Distribution Long−tailed Distribution&#xff09;是统计学和概率论中的一个重要概念&#xff0c;用于描述一组数据中尾部&#xff08;即远离均值的部分&#xff09;包含了相对较多极端值…

【Linux基础】SSH登录

SSH简介 安全外壳协议&#xff08;Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…