网络层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.mzph.cn/web/58095.shtml

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

相关文章

【UGUI】为射击游戏添加动态显示的分数和血量到UI界面

项目背景 在这个项目中,我们希望实现一个简单的游戏系统,其中玩家可以通过击中目标来获得分数,同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示,以便玩家能够随时了解自己的状态。 技术实现 1. 静态变量的使…

「C/C++」C/C++标准库 之 #include<cstdlib> 通用工具函数库

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

CTF压缩包破解神器bkcrack教程和详细使用过程

kali安装bkcrack教程和详细使用过程 1.bkcrack介绍:2.bkcrack功能:3.bkcrack安装:Linux-Kali下:测试:Windows下安装: 4.bkcrack的使用方法:4.1查看相关参数4.2恢复内部密钥从 zip 档案中加载数据…

基于Python的乡村居民信息管理系统【附源码】

基于Python的乡村居民信息管理系统 效果如下: 系统主页面 系统登录页面 管理员主页面 居民管理页面 政务学习页面 土地信息管理页面 个人信息管理页面 居民登陆页面 村委人员主页面 研究背景 随着信息技术的飞速发展和乡村振兴战略的深入实施,传统的乡…

UI设计公司—兰亭妙微—提供轨道交通行业UI设计

蓝蓝设计工作室2008年开始,2011年正式成立北京兰亭妙微科技有限公司,主创清华团队,专注软件和互联网ui设计开发,擅长企业信息化管理、监控、大数据软件UIUE咨询和设计开发服务。立足UI,一直在学习进步。交通行业UE UI解…

2-Ubuntu/Windows系统启动盘制作

学习目标: 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器,确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器,理解启动盘的使用场景和注意事项,…

Java项目管理与SSM框架介绍

Maven简介 Maven是一个项目管理工具。它可以帮助程序员构建工程,管理jar包,编译代码,完成测试,项目打包等等。Maven工具是基于POM(Project Object Model,项目对象模型)实现的。在Maven的管理下每…

CGAL生成简单形状

三角形 四边形 立方体 六面体 棱柱 锥体 二十面体 网格 Polyhedron _mesh;/**************三角形************/CGAL::make_triangle(K::Point_3(100, 0, 0), K::Point_3(0, 100, 0), K::Point_3(0, 0, 0), _mesh);CGAL::IO::write_polygon_mesh("F:/WORK/STL/triangle.stl…

江协科技STM32学习- P30 FlyMCU串口下载STLink Utility

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

【Python】【数据可视化】【商务智能方法与应用】课程 作业一 飞桨AI Studio

作业说明 程序运行和题目图形相同可得90分,图形显示有所变化,美观清晰可适当加分。 import matplotlib.pyplot as plt import numpy as npx np.linspace(0, 1, 100) y1 x**2 y2 x**4plt.figure(figsize(8, 6))# yx^2 plt.plot(x, y1, -., labelyx^2,…

提高后端接口性能的方法

个人bibilailai(不喜请跳过):前几天参加的部门技术分享会,同事分享了一个内容为“提高接口性能的常见技巧”,个人觉得很有用,所以想在这里分享给大家,希望对刚入职场不久的兄弟姐妹们有所帮助。…

.net Core 使用Panda.DynamicWebApi动态构造路由

我们以前是通过创建controller来创建API,通过controller来显示的生成路由,这里我们讲解下如何不通过controller,构造API路由 安装 Panda.DynamicWebApi 1.2.2 1.2.2 Swashbuckle.AspNetCore 6.2.3 6.2.3添加ServiceAction…

服务器新建用户

文章目录 前言一、步骤二、问题三、赋予管理员权限总结 前言 环境: 一、步骤 创建用户需要管理员权限sudo sudo useradd tang为用户设置密码 sudo passwd tang设置密码后,可以尝试使用 su 切换到 tang 用户,确保该用户可以正常使用&#…

NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?

在智慧城市的建设中,各种先进的技术系统正发挥着越来越重要的作用。其中,NVR监测软件/设备EasyNVR作为一种高效的视频边缘计算网关,不仅能够实现视频数据的采集、编码和存储,还能与其他智慧城市系统进行深度集成,共同推…

【NOIP提高组】虫食算

【NOIP提高组】虫食算 C语言C 💐The Begin💐点点关注,收藏不迷路💐 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子: 43#98…

Lobe Chat:你的私人AI助理

有一天,一位程序员对他的朋友说:‘我希望有一个助手,能像我一样聪明,但不会吃饭、喝水和请病假。’朋友回答说:‘这很简单,你只需要一个智能聊天助手!’于是,程序员便找到了 LobeCha…

【CAPL实战】LIN帧干扰的脚本实现

文章目录 1、帧头干扰响应linDisturbRespWithHeader1.1 函数功能1.2 参数说明1.3 代码实例1.4 执行结果 2、帧头干扰帧头linDisturbHeaderWithHeader2.1 函数功能2.2 参数说明2.3 代码实例 1、帧头干扰响应linDisturbRespWithHeader 1.1 函数功能 使用一个新的header帧头来干…

华为HarmonyOS打造开放、合规的广告生态 - 激励广告

场景介绍 激励广告是一种全屏幕的视频广告,用户可以选择点击观看,以换取相应奖励。 接口说明 接口名 描述 loadAd(adParam: AdRequestParams, adOptions: AdOptions, listener: AdLoadListener): void 请求单广告位广告,通过AdRequestPar…

自由学习记录(18)

动画事件的碰撞器触发 Physics 类的常用方法 RaycastHit hit; if (Physics.Raycast(origin, direction, out hit, maxDistance)) {Debug.Log("Hit: " hit.collider.name); } Physics.Raycast:从指定点向某个方向发射射线,检测是否与碰撞体…

【elkb】创建用户和角色

在使用中我们不能把超管的用户信息给到所有者,我们需要为不用的使用场景创建不同的用户。 登录管理员用户 打开管理页面 创建角色 点击角色,创建角色 填写角色信息 设置Kibana 权限 最后点击创建角色 创建用户 点击用户--->创建用户 填写信息 登录…