网络层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次比较

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


 

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

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

相关文章

VMware虚拟机Debian扩展磁盘

一、 版本 VMware:Workstation 17 Pro虚拟机:Debian11 二、 VMware虚拟机扩展 虚拟机关机状态快照或者备份:以免扩容失败导致文件丢失虚拟机——设置——硬盘——磁盘使用工具——扩展——扩展磁盘容量——设置为想要的大小 三、 虚拟机…

新能源汽车的未来:车载电源与V2G技术的前景

近年来,新能源汽车在全球市场上发展迅速,尤其是在中国,新能源汽车的月销量已经超过了燃油车。随着新能源技术的不断发展,新能源汽车不仅仅是作为出行工具,而逐渐成为“移动能源站”。本文将探讨电动汽车的车载外放电功…

JavaScript知识点梳理及案例实践

1. Date对象 创建Date对象 //方法1:不指定参数 var nowd1new Date(); console.log(nowd1.toLocaleString( )); //方法2:参数为日期字符串 var d2new Date("2004/3/20 11:12"); console.log(d2.toLocaleString( )); var d3new Date("04/…

[vulnhub]DC:7

https://www.vulnhub.com/entry/dc-7,356/ 端口扫描主机发现 探测存活主机,178是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-03 13:30 CST Nmap scan report for 192.168.75.1 Host is up (0.00037s l…

探索React源码:React Diff

本篇文章我们来了解一下Diff算法的实现过程。 相关概念 React中的各种节点 假设当前存在一个DOM节点,触发了一次更新,那么在协调的过程中,会有四种节点和该节点相关联: 该DOM节点本身。 workInProgress fiber,更新过程…

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的,增加了一些更强大和实用的特性。 特性: Android 5.0 以上点击会有水波纹效果 可以选择自定义…

微服务设计模式 - 重试模式(Retry Pattern)

微服务设计模式 - 重试模式(Retry Pattern) 定义 重试模式(Retry Pattern)是一种微服务中的设计模式,用于在临时性失败(如网络故障或暂时不可用的服务)发生时,自动重新尝试请求&…

HTML 基础标签——链接标签 <a> 和 <iframe>

文章目录 1. `<a>` 标签属性详细说明示例2. `<iframe>` 标签属性详细说明示例注意事项总结链接标签在HTML中是实现网页导航的重要工具,允许用户从一个页面跳转到另一个页面或嵌入外部内容。主要的链接标签包括 <a> 标签和<iframe> 标签。本文将深入探…

Netty 组件介绍 - Future Promise

在异步处理时&#xff0c;经常用到这两个接口 netty 中的 Future 继承 jdk 中的 FutuFuture&#xff0c;而Promise 又对 netty Future 进行了扩展。 idk Future 只能同步等待任务结束&#xff08;或成功或失败)才能得到结果netty Future 可以同步等待任务结束得到结也可以异…

Excel:vba实现批量插入图片批注

实现的效果&#xff1a;实现的代码如下&#xff1a; Sub InsertImageNamesAndPictures()Dim PicPath As StringDim PicName As StringDim PicFullPath As StringDim RowNum As IntegerDim Name As StringDim Comment As CommentDim folder As FileDialog 定义文件选择对话框 清…

C++(类和对象-友元)

友元的作用 作用&#xff1a; 在C中&#xff0c;友元&#xff08;friend&#xff09;是一种特殊的类成员&#xff0c;它可以让一个函数或者类访问其他类的私有&#xff08;private&#xff09;和保护&#xff08;protected&#xff09;成员。 注意&#xff1a; 友元的使用应该谨…

ssm044基于java和mysql的多角色学生管理系统+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;学生管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生管理系统就是在这…

猜字谜 华为OD

源码 Java import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test;import java.util.ArrayList; import java.util.List; import java.util.TreeSet;public class GuessWord {public Input input;BeforeEachpublic void init() {input new Input("…

C++队列

好久没有发博客了&#xff0c;欢迎阅读&#xff1a;C队列。 1.队列的介绍 队列&#xff08;queue&#xff09;是一种先进先出的、操作受限的线性表。 数据结构是&#xff1a;先进入队列的先出去&#xff0c;后进入队列的后出去。 必须从队尾插入新元素&#xff0c;队列中的…

【ArcGISPro】制作简单的ArcGISPro-AI助手

【python】AI Navigator的使用及搭建本机大模型_anaconda ai navigator-CSDN博客 【Python】AI Navigator对话流式输出_ai大模型流式输出效果(打字效果) python-CSDN博客 【C#】调用本机AI大模型流式返回_怎么实现调用本地大模型时实现流式输出-CSDN博客 【ArcGISPro】宣布推…

小白从零开始配置pytorch环境

一、下载ANACONDA 官方网址Anaconda Installers and Packages 笔者选择的是Anaconda3-5.3.0-Windows-x86_64.exe版本。全程安装可以手机开热点&#xff0c;会快一点。 二、查看电脑是否有显卡 1、打开任务管理器 2、查看电脑CUBA版本&#xff0c;如上篇文章所提到查看CUDA-V…

Java设计模式之责任链模式

1、责任链模式的定义&#xff1a; 责任链模式(Iterator Pattern)是一种行为型设计模式&#xff0c;使多个对象都有机会处理同一个请求&#xff0c;将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 2、责任链模式的角色&#x…

web安全测试渗透案例知识点总结(下)——小白入狱

目录 [TOC](目录)一、更多详细的实际案例教程案例1&#xff1a;文件上传漏洞利用案例2&#xff1a;目录遍历&#xff08;Path Traversal&#xff09;漏洞检测案例3&#xff1a;暴力破解登录密码案例4&#xff1a;命令注入漏洞案例5&#xff1a;身份认证绕过&#xff08;Passwor…

.NET 8 中 Entity Framework Core 的使用

本文代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/89935738 概述 Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具&#xff0c;为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进&#xff0c;开发人…

后端java——如何为你的网页设置一个验证码

本文通过HUTOOL实现&#xff1a;Hutool参考文档Hutool&#xff0c;Java工具集https://hutool.cn/docs/#/ 1、工具的准备 如果我们通过hutool来实现这个功能&#xff0c;我们需要提前安装hutool的jar包。 下载地址&#xff1a;Central Repository: cn/hutool/hutool-all/5.8.…