网络层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. 静态变量的使…

使用Spring Boot搭建简单的web服务

1 引言 1.1 Spring Boot简介 Spring Boot是由Pivotal团队提供的一套开源框架,旨在简化Spring应用的创建及部署。 一、核心设计思想 Spring Boot的核心设计思想是“约定优于配置”(Convention Over Configuration,简称COC)。这…

「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的管理下每…

数字证书的简单记录

CA(Certificate Authority):即数字证书颁发认证机构。 CA数字证书(crt/cer证书):数字证书 申请者与颁发者信息申请者公钥颁发者签名,由CA机构使用私钥签名得到数字证书。 CA中间证书&#xff1…

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…

【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(2)

前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…

江协科技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…

ETCD简介

ETCD etcd的使用场景默认处理的数据都是控制数据, 对于应用数据,只推荐数据量很小,但是更新访问频繁的情况 主要用于共享配置和服务发现的组件(激活码验证) 分布式键值(key-value)数据库 基于go语言实现 分布式系…

服务器新建用户

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

【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--接口路径管理

从这篇文章开始,我们将为孢子记账增加简易的权限系统,它包含接口路径管理、角色可访问接口管理、访问权限中间件。在本篇文章中我们先实现接口路径管理相关的接口。 一、需求 接口路径管理比较简单,需求和前面的 用户 以及 **角色**的需求类…

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

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

TCP建立连接之后怎么保持长连接(检测连接断没断)

在TCP连接建立后,保持长连接的主要方式是通过定期的心跳检测(Keep-Alive)和超时机制。以下是一些具体的方法和机制 1. TCP Keep-Alive TCP协议本身提供了一种Keep-Alive机制,可以通过以下步骤实现: 启用Keep-Alive&…