计算机网络:网络层 - IP数据报的转发

news2025/5/19 17:44:32

计算机网络:网络层 - IP数据报的转发

    • 基于终点转发
    • 最长前缀匹配
    • 二叉线索树路由表
    • 特殊路由
      • 特定主机路由
      • 默认路由
    • IP多播


基于终点转发

路由器转发报文时,是通过报文中的目的地址字段来转发的,也即是说路由器只知道终点的IP地址,根据这个地址来进行转发,这叫做基于终点转发

路由器拿到报文后,决定把这个报文向哪一个路由器转发,下一个收到报文的路由器也执行一样的操作,通过一个一个路由器的接力传送,直到分组的到达目的网络。

路由器内部存储了很多条目,每个条目代表一个网络,网络通常以网络地址/前缀长度或者是网络地址 网络掩码的形式

接下来我就用一个案例,来介绍路由器是如何决定把数据报转发到下一个路由器的:

在这里插入图片描述

源主机H1想要把数据报传输给主机H2源地址128.1.2.193目的地址128.1.1.132

第一步:先检测目的主机源主机是否在同一个网络中

这个步骤是由源主机自己完成的,如果在同一个网络中,那么直接在网络内部通信即可,无需路由器。

整个网络N1的网络前缀为128.1.2.192/26,子网掩码为255.255.255.192

源主机H1处于N1中,将目的地址与源地址的子网掩码进行按位与,看结果是否与源地址所处的网络N1相同,从而判断目的主机与源主机是否在一个网络

128.  1.  1.132 //目的地址
255.255.255.192 // 子网掩码
----------------
128.  1.  1.128 // 结果

最终结果为128.1.1.128,与N1的网络前缀128..1.2.192不同,所以不处于一个网络,此时要交给路由器转发。

假设现在把报文已经递交给了路由器R1R1的转发表如下:

在这里插入图片描述

第二步:当路由器转发报文时,根据自己的路由表,一一进行网络前缀匹配

从上往下,首先拿目的地址128.1.1.132128.1.2.64/26进行前缀匹配,/26的子网掩码为255.255.255.192,进行计算:

128.  1.  1.132 //目的地址
255.255.255.192 // 子网掩码
----------------
128.  1.  1.128 // 结果

结果128.1.1.128128.1.2.64/26不匹配,说明不是通过该路由。

随后拿第二条进行匹配,网络前缀为128.1.2.128/26,子网掩码为255.255.255.192,进行计算:

128.  1.  1.132 //目的地址
255.255.255.192 // 子网掩码
----------------
128.  1.  1.128 // 结果

结果128.1.1.1281288.1.1.128/26匹配,说明可以通过该路由转发,于是通过该路由通过该接口把数据报转发出去。

如果下一个节点还是路由器,则重复以上过程,如果已经到达指定网络,那么路由器的任务就结束了。


最长前缀匹配

有的时候,路由器内部可能会有多个条目匹配,此时要选择网络前缀最长的接口进行转发

某个路由器转发数据报时,目的地址为206.0.71.130,该路由器的路由表如下:

206.0.68.0/22    R1
206.0.71.128/25  R2

先匹配第一条,网络前缀206.0.68.0/22,子网掩码为255.255.252.0,将目的地址子网掩码进行按位与:

206.  0. 71.130 //目的地址
255.255.252.  0 // 子网掩码
----------------
206.  0. 68. 0 // 结果

结果206.0.68.0和网络前缀206.0.68.0/22匹配,说明可以通过路由器R1转发。

随后再匹配第二条,网络前缀206.0.71.128/25,子网掩码为255.255.255.128,将目的地址子网掩码进行按位与:

206.  0. 71.130 //目的地址
255.255.252.128 // 子网掩码
----------------
206.  0. 68.128 // 结果

结果206.0.68.128与网络前缀206.0.71.128/25也匹配,可以通过路由器R2转发。

此时既可以通过R1也可以通过R2,但是R1的网络前缀长度为/22,而R2的网络前缀长度为/25,所以选择R2进行转发,这就是最长前缀匹配

通过匹配更长的网络,可以确保数据包被转发到最具体的网络,而不是更广泛的网络。

为了提高最长前缀匹配的效率,路由器会对条目排序,把前缀长的条目放在前面

这样进行匹配时,只需要从上往下匹配即可,第一个匹配的网络一定是最长的,无需在往下匹配了。


二叉线索树路由表

当转发表的项目数很大时,为了进行更加有效的查找,通常是将无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索树(binary trie),它是一种特殊结构的树。

IP 地址中从左到右的比特值决定了从根节点逐层向下延伸的路径,而二叉线索中的各个路径就代表转发表中存放的各个网络前缀

为了简化二叉线索的结构,用每条路由中网络前缀唯一前缀来构造二叉线索。在进行查找时,只要和唯一前缀相匹配,就表示和这条路由相匹配

比如下图:

在这里插入图片描述

对于第一条地址,其网络前缀为01000110.0.0.0,现在确定该网络前缀的唯一前缀:

  1. 第一位0:该路由表中有其它的地址第一位也是0,不是唯一前缀
  2. 前两位01:该路由表中有其它的地址前两位也是01,不是唯一前缀
  3. 前三位010:该路由表中有其它的地址前三位也是010,不是唯一前缀
  4. 前四位0100:该路由表中没有其它的地址前四位是0100,是唯一前缀

因此第一个条目的唯一前缀就是0100,利用这个前缀构建节点,也就是图中的蓝色路径。

要将二叉线索用于转发表中,还必须使二叉线索中的每一个叶节点包含对应的网络前缀子网掩码。当搜索到一个叶节点时,就必须将目的 IP 地址和该叶节点的子网掩码进行按位与运算,看结果是否与对应的网络前缀相匹配。若匹配,就按下一跳的接口转发该分组;否则,就丢弃该分组。


特殊路由

在路由表中,还存在两种特殊的路由:特定主机路由默认路由

特定主机路由

特定主机路由是指针对特定 IP 地址的路由条目。它明确指定了到达该主机的路径,包括下一跳路由器和网络接口。这种路由的子网掩码为255.255.255.255

相比于一般的路由,特定主机路由的优先级是最高的,这可以从最长前缀匹配的角度理解,其前缀长度为/32

应用场景

  • 当需要与特定主机建立直接连接时,例如访问特定服务器或设备。
  • 当需要优化特定主机的网络性能时,例如将数据包直接转发到目标主机,避免经过其他路由器。

默认路由

默认路由是指当路由器无法找到与目的 IP 地址匹配的路由时,会使用的路由条目。它通常指向一个默认网关,负责将数据包转发到其他网络。

该路由的网络前缀为0.0.0.0/0,一般是最后一个匹配的路由,只有当前所有的条目都匹配不上,才会走这个条目。


IP多播

如图所示:

在这里插入图片描述

现在一个服务器要同时给90台主机提供相同的服务,如果采用单播的方式,那么同样一份数据就要拷贝90份发送出去,这会造成大量资源浪费,对此我们会采用IP多播的方式。

如图所示:

在这里插入图片描述

在服务器发送数据报时,只发送一份,随后路由器根据多播,将其复制多分发送给指定的路由器,后面的路由器也重复该过程。直到该数据报传输到一个局域网内部。

IP 多播所传送的分组需要使用多播 IP 地址,也就是 D 类IP 地址多播地址只能用于目的地址,而不能用于源地址

IP 多播可以分为两种,一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员。


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

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

相关文章

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境),可作为深度学习信号前处理过程,水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…

每日一练:攻防世界:ewm

这道题我尝试了使用montagegaps解题,但是没有解出来,图片数量不是很多,可以尝试用PS直接拼图,但是这样学不到东西,我也就没尝试,直接看的官方WP 这段代码应该是改变工作目录到small,并且变量当…

第九届星华杯网络邀请赛

T1喵星人的身高 T2犇犇碑 T3嘤嘤词典 T4三角区间和

spring注解驱动系列-- spring容器创建原理

从源码开始探究spring容器的创建原理,下面是源码总步骤 Override public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Tell the subc…

机器人运动学笔记

一、建模 参考资料:https://zhuanlan.zhihu.com/p/137960186 1、三维模型和连杆、关节定义 2、设置z轴 SDH和MDH会不一样,主要的区别在于SDH中坐标系在连杆末端,MDH中坐标系在连杆首端。虽然这里只是给出z轴,但是由于后面原点位…

React 渲染流程分析

React 页面是由组件组成的,从根组件直到叶组件,内部的组件数通过 Fiber 来保存并触发并发更新。页面的展示分为两部分,首先是初始化,所有组件首次展示,都要进行渲染,之后是更新流程,也就是页面产…

简单的心电图信号分割方法

代码很简单,很容易看懂。 import pandas as pdimport matplotlib.pyplot as plt #headers [Name, Age, Marks]df pd.read_csv(samples-folder/samples2.csv) dfdf.drop(0)dfdf.drop(1)# print(df) if(len(df.columns) 3): df.columns [sample interval, sig…

Setapp:只需一次订阅,即可获得 240 款+ Mac 软件

为一项任务寻找合适的应用程序是一项相当艰巨的任务。过去,最好的办法要么是花费宝贵的时间搜索可靠的评论,要么就是相信无论安装什么软件都能完成任务。 如果你是 Mac 用户,那么 Setapp 将让这一问题成为过去。无需在需要时下载单个程序&am…

【数据挖掘】机器学习中相似性度量方法-余弦相似度

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至&#…

MIPI A-PHY协议学习

一、说明 A-PHY是一种高带宽串行传输技术,主要为了减少传输线并实现长距离传输的目的,比较适用于汽车。同时,A-PHY兼容摄像头的CSI协议和显示的DSI协议。其主要特征: 长距离传输,高达15m和4个线内连接器; 高速率,支持2Gbps~16Gbps; 支持多种车载线缆(同轴线、屏蔽差分…

SolarLab - hackthebox

简介 靶机名称:SolarLab 难度:中等 靶场地址:https://app.hackthebox.com/machines/SolarLab 本地环境 靶机IP :10.10.11.16 ubuntu渗透机IP(ubuntu 22.04):10.10.16.17 windows渗透机IP(windows11&…

OS复习笔记ch9-1

单处理器调度 调度类型 主要类型 长程调度:决定将哪个进程放入进程池中 中程调度:决定将哪些进程部分或者全部放入内存中 短程调度:决定哪个空闲进程上处理机 I/O调度:决定哪个进程的I/O请求被可用的I/O设备处理 处理器调度和进…

如何通过数据库与AI实现以图搜图?OceanBase向量功能详解

OceanBase支持向量数据库的基础能力 当前,数据库存储系统与人工智能技术的结合,可以体现在两个主要的应用方向上。 一、近似搜索。它利用大语言模型(LLM,简称大模型)的嵌入(embedding)技术&am…

【Android面试八股文】请描述new一个对象的流程

文章目录 请描述new一个对象的流程JVM创建对象的过程检查加载分配内存内存空间初始化设置对象初始化请描述new一个对象的流程 JVM创建对象的过程 当JVM遇到一条new指令时,它需要完成以下几个步骤: 类加载与检查内存分配 并发安全性内存空间初始化设置对象信息对象初始化下图…

永磁同步直线电机(PMLSM)控制与仿真3-永磁同步直线电机数学三环控制整定

文章目录 1、电流环参数整定2、速度环参数整定3、位置环参数整定 写在前面:原本为一篇文章写完了永磁同步直线电机数学模型介绍,永磁同步直线电机数学模型搭建,以及永磁同步直线电机三环参数整定及三环仿真模型搭建,但因为篇幅较长…

贪心+dp,CF 1282B2 - K for the Price of One (Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1282B2 - K for the Price of One (Hard Version)https://codeforces.com/problemset/problem/1282/B2 二、解题报告 1、思路分析 考虑优先买价格低的,所以先升序排序 定义状态f[i]为购买前i个…

axios打通fastapi和vue,实现前后端分类项目开发

axios axios是一个前后端交互的工具,负责在前端代码,调用后端接口,将后端的数据请求到本地以后进行解析,然后传递给前端进行处理。 比如,我们用fastapi写了一个接口,这个接口返回了一条信息: …

LeetCode | 709.转换成小写字母

这道题可以用api也可以自己实现,都不难,大小字母之前相差了32,检查到大写字母时加上32即可 class Solution(object):def toLowerCase(self, s):""":type s: str:rtype: str"""return s.lower()class Solution…

韩顺平0基础学java——第22

p460-483 常用类 包装类Wrapper 针对8种几种数据类型相应的引用类型——包装类 包装类和基本数据类型的转换 jdk5之前的手动装箱和拆箱: jdk5之后的自动装箱和拆箱: 三元运算符是一个整体: 这个三元运算符里,精度最高的是doubl…

机器学习周记(第四十三周:MCformer)2024.6.10~2024.6.16

目录 摘要ABSTRACT1 论文信息1.1 论文标题1.2 论文摘要1.3 论文引言1.4 论文贡献 2 论文模型2.1 问题定义2.2 可逆实例归一化(Reversible Instance Normalization)2.3 混合通道块 (Mixed-Channels Block)2.4 编码器(De…