网络层3——IP数据报转发的过程

目录

一、基于终点的转发

1、理解

2、IP数据报转发过程

二、最长前缀匹配

1、理解

2、主机路由

3、默认路由

三、二叉线索查找


一、基于终点的转发

1、理解

理解什么叫终点转发
IP数据报的传递,交给路由器后
可不可以做到直接发送给目的主机呢?
可以,直接将目的主机的IP地址存放在路由表即可
技术上是可行的
但是,成本太大
为什么?什么成本?
中国有20亿个主机,包括手机和PC端,不过分吧
我现在在北京,我要向任何一个人发送消息
而且要只经过一个路由器
那么,这个路由器就必须存放全中国所有的IP地址才可以,即存20亿个IP地址,
存的成本、查找的成本很大
所以,需要多个路由器分摊,对应的,网络需要划分
这就是为什么网络采用如今设计构架的本质原因
纯粹就是因为跨区域太大,需要进行多层级的资源整合和设计
用合理的构架适当降低成本,以技术成本换取经济成本
再高明的技术,如果经济成本过高,那么规模势必不会大
一个最简单的例子就是航天
所以,
IP层数据的转发,并不是直接发给目的主机,而是以终点网络为目的。
一个IP数据报:有源主机IP地址、目的主机IP地址
路由器根据目的主机的IP地址所在的网络地址,发送给对应网络
路由表只需存放各个网络号地址即可
这就大大缩小了转发表的负担
这就是基于终点的转发

2、IP数据报转发过程

首先看,目的主机是否在本网络
怎么看?
路由器的转发表的第一个网络号就是本网络
用目的主机IP地址和转发表第一个网络号的地址掩码进行计算
得到目的主机IP地址的网络号,如果匹配,相等
那很简单,直接交付
直接在本网络广播,找到主机,目的主机返回MAC地址,发送端封装MAC帧,发送

如果不在本网络
依次顺着路由器的转发表
逐个计算网络号,直到匹配,
而后路由器根据目的网络转发

查找转发表的过程,叫做寻找网络前缀匹配

二、最长前缀匹配

1、理解

最长前缀匹配:谁的网络号长,就匹配谁
什么意思?
举个例子,下面有一个场景:


有一个分组,128.1.24.1到达一个路由器
路由器连接2个网络,分别是A公司和B公司
A公司的网络号是:128.1.24.0/24 
B公司的网络号是:128.1.25.0/24
                               128.1.26.0/24
                               128.1.26.0/24

B公司将25、26、27进行聚合,形成:
                               128.1.24.0/22
于是,路由器的路由表存放两个网络号:
                               128.1.24.0/22
                               128.1.24.0/24

但是,经过计算,你会发现:

128.1.24.1两个网络号都匹配!
但是,很明显,该IP地址是不属于B公司的
所以,给谁?
给A
虽然网络前缀都一样,但是A的网络前缀有24位,B只有22位
这就是最长前缀匹配

为什么?
因为网络前缀越长,说明越具体
于是,在安排网络号前缀在路由表的顺序时
可以将最长的放前面,依次往后

2、主机路由

对特定主机,专门给出一个单独的路由
就是把主机的IP地址直接写在转发表中
该网络号前缀为32位
此时,只要目的地址是该特定主机,
目的IP地址和网络前缀32个1做与
结果一定匹配,直接转发

特定主机路由放在路由器的第一行

用处?
检查网络连接 / 转发表

例如,我要检查A->B主机的某个特定路线
我就可以主机路由,进行特定路线转发
然后逐个排查

3、默认路由

0.0.0.0/0
网络号全0,网络前缀为0,所以地址掩码为32位全0
此时,任何IP目的地址和32位全0做与运算
结果必定是0,于是匹配

综上,一个转发表的内容,有如下:
第一行:特定主机路由(可有可无)
第二行之后:前缀最长的网络号
最后一行:默认路由

一个IP数据报在路由器的查找表过程:
1、拿到目的主机IP地址
2、从上到下,逐个匹配网络号

注意:最长前缀匹配问题,只会发生在CIRD网络分配
而不会在分类地址中发生
同时,在转发表中,不会出现两行或两行以上都匹配的情况

上述的查找转发表的过程,是顺序查找
从上往下逐个进行
最坏结果是从上到下一个都没有查找
效率很低
于是,为了提高转发表的查询效率,
需要借助新的数据结构
支撑新的查找算法
下面介绍基于二叉树结构的前缀二分查找

三、二叉线索查找

二叉树,左边为0,右边为1

一个IP地址32位,从上到下,即使网络前缀有32位,最多也就是查询32次
效率很高,首位为1 ,往右边;为0,往左边
直接砍一半减少了 2^31次比较

每一个节点代表一个唯一的前缀


 

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

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

相关文章

【LwIP源码学习4】主线程tcpip_thread

前言 本文对lwip的主要线程tcpip_thread进行分析。 正文 tcpip_thread是lwip最主要的线程,其创建在tcpip_init函数中 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);tcpip_init函数被TCPIP_Init函数调用。…

前端的导入导出「CommonJS」「ES Module」模块化规范

模块化开发有助于我们将代码进行拆分,便于开发和维护,但如果不清楚模块化规范,就会在开发时不知道该用 require 还是 import,导出时该用 export 还是 module.exports 参考博主文章

CoEdge: 面向自动驾驶的协作式边缘计算系统,实现分布式实时深度学习任务的高效调度与资源优化

文章导读 CoEdge系统的构思基于边缘计算的发展,这一分布式计算范式将服务从云端推向网络边缘,以支持各种物联网应用,如智能交通和自动驾驶。随着通信技术的进步,出现了新的协作边缘系统,多个边缘节点可以通过本地点对…

操作系统进程的描述与控制知识点

前趋图和程序执行 前趋图 定义: 前趋图是指一个有向无循环图,可记为 DAG,它用于描述进程之间执行的先后顺序图形表示: 程序的执行 程序顺序执行时,系统资源的利用率很低 程序顺序执行时的特征 顺序性封闭性可再现性 …

移远通信推出八款天线新品,覆盖5G、4G、Wi-Fi和LoRa领域

近日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出八款高性能天线新品,进一步丰富其天线产品阵容,更好地满足全球客户对高品质天线的更多需求。具体包括5G超宽带天线YECT005W1A和YECT004W1A、5G天线YECT028W1A、4G天…

k8s简单的指令以及图解

k8s简单的操作指令 1.kubectl get pods 查看全部的pods 也就是k8s中的最小颗粒度 2.kubectl describe podsname 查看pod的详情 3.kubectl get pods -n podsname 查看pod服务是否正常 4.kubectl logs -f 容器name --tail1000 -n podname 查看pod 的日志 5.kubectl get service …

Python复习1:

一、数据类型 1.数字:int、float、bool 2.字符串:string 3.列表:list 4.集合:set 5.字典:dictionary 二、Test 1.print输出固定格式 num110 str1"hello world" #输出的固定格式 print("num1%d&…

UVM验证该去大公司还是中型公司呢?

无论是UVM验证还是系统C验证亦或是其它,大公司的普遍特点是做过多层封装、已经准备好轮子、各式各样的工具库。如果一毕业就进大公司,那你会在UVM等基础之上再学习公司封装的那部分工具、脚本或者是库,一旦掌握以后你接下来将会脱离一些初级的…

法律文件智能识别:免费OCR平台优化数字化管理

一、系统概述 在法律行业,纸质文件的数字化需求日益迫切,合同、判决书、协议等文件的管理成为法律部门的一大难题。传统手动输入不仅耗时,且易出错。思通数科的OCR识别平台应运而生,以其开源、免费的特性为法律文档管理提供了智能…

koa + sequelize做距离计算(MySql篇)

1.核心思路 1.利用sequelize的fn方法调用MySql原生函数(st_distance_sphere、point) 2.这里利用到了MySql的原生函数,不懂可以去看看mysql的函数知识 2.核心代码 //st_distance_sphere、point函数用来计算当前经纬度和目的地经纬度 //col…

小程序分包看完这一篇秒懂

前言 在小程序开发中,分包是一种优化加载时间和用户体验的方法。通过将小程序拆分成多个包,可以按需加载,从而减少首次加载时间。很多刚涉及小程序开发的小伙伴对小程序分包都相对茫然或者头疼。也不知道该合适进行分包,怎么进行…

第02章 MySQL环境搭建

一、MySQL的卸载 如果安装mysql时出现问题,则需要将mysql卸载干净再重新安装。如果卸载不干净,仍然会报错安装不成功。 步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0…

1.探索WebSocket:实时网络的心跳!

序言 你可能听说过"WebSokcet"这个词,感觉它好像很高深,但其实它是一个超级酷的小工具,让我们在Web应用里实现实时通信。想象一下,你可以像聊天一样,在浏览器和服务器之间来回“畅聊“,没有延迟…

Qt6 CMake 中引入 Qt Linguist 翻译功能

qt cmake 使用自带翻译工具配置步骤 创建Qt CMake 程序大体流程配置项目 CMake 及 代码使用流程最终CMake 如下最终工程链接为:参考 创建Qt CMake 程序 大体流程 配置项目 CMake 及 代码 在CMake 中添加如下代码, 导入相关的翻译库 find_package(QT NAMES Qt6 Qt…

【Linux】——如何安装g++

g的安装 sudo yum install -y gcc-c

FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式

FET113i-S核心板是飞凌嵌入式基于全志T113-i处理器设计的国产工业级核心板,凭借卓越的稳定性和超高性价比,FET113i-S核心板得到了客户朋友们的广泛关注。作为一款拥有A7核RISC-V核DSP核的多核异构架构芯片,全志科技于近期释放了T113-i的RISC-…

基于python的机器学习(二)—— 使用Scikit-learn库

目录 一、样本及样本划分 1.1 划分样本的方法 1.1.1 train_test_split()函数 1.1.2 时间序列划分 1.1.3 交叉验证 二、导入或创建数据集 2.1 导入Sklearn自带的样本数据集 2.2 利用Sklearn生成随机的数据集 2.3 读入自己创建的数据集 2.3.1 用Python直接读取文本文件…

【LQB15_模拟】C风险对冲

Description 小蓝所在的蓝星集团即将建立执行一个重要的项目,在建立项目的时候需要考虑执行这个项目对集团的风险。他们组有三个备选方案,方案A的风险评估值为a,方案B的风险评估值为b,方案C的风险评估值为c。方案风险评估值越低&…

第二十八章 Vue之自定义指令

目录 一、引言 二、自定义指令的注册和使用方式 2.1. 自定义指令-全局注册使用 2.2. 自定义指令-局部注册使用 三、自定义指令完整代码 3.1. 自定义指令全局注册/使用 3.1.1. main.js 3.1.2. App.vue 3.2. 自定义指令局部注册/使用 3.2.1. main.js 3.2.2. App.vue …

银行信贷知识竞赛活动策划方案

为了落实20xx年省分行工作会议精神,进一步加强信贷队伍建设,普及和强化员工对信贷业务知识的掌握和运用,提高信贷从业人员素质,推动全省农行20xx年员工成长计划实施,实现我行全面提升信贷管理水平,促使信贷…