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

计算机网络:网络层 - 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.mzph.cn/web/27696.shtml

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

相关文章

Java:System 系统类

文章目录 一、System二、常用API2.1 exit2.2 currentTimeMillis2.3 arraycopy 一、System System 类提供了对系统操作的API。 二、常用API 2.1 exit exit:终止运行的 Java 虚拟机0:表示正常结束非0:表示异常结束(一般用1&#…

php中配置variables_order详解

variables_order 是 PHP 配置中的一个指令,它决定了PHP如何从外部来源自动接收变量数据,这些外部来源包括HTTP GET、POST、Cookie以及命令行参数等。这个设置会影响到$_GET, $_POST, $_COOKIE, $_FILES, 和 $_REQUEST 这些预定义全局变量的内容。 varia…

GiantPandaCV | 提升分类模型acc(三):优化调参

本文来源公众号“GiantPandaCV”,仅用于学术分享,侵权删,干货满满。 原文链接:提升分类模型acc(三):优化调参 一、前言 这是本系列的第三篇文章,前两篇GiantPandaCV | 提升分类模型acc(一):B…

微服务feign组件学习

手写不易,对您有帮助。麻烦一键三连。也欢饮各位大料指正,交流。 微服务feign组件学习 1.概念1.1 feign 概念1.2 Ribbon概念 2.使用2.1 集成feign2.1.1 maven依赖2.1.2 项目结构 2.2 使用2.2.1 定义feign接口2.2.2 消费端服务调用2.2.3 消费端扫描feig…

单通道电容感应芯片XW01T用于水位检测、人体感应

概述 XW01T SOT23-6封装和丝印 XW01T 是一个单通道电容感应芯片,广泛应用于水位检测,人体感应等应用场合。 特点 做非接触式液位检测和长按功能检测 自动环境校准 内置按键消抖,无需软件再消抖 嵌入共模干扰去除电路 每秒按键反应速度可达 20 次 上电立刻判断按键有效状态 按…

数据分析的流程是啥样?

数据分析在当今的商业环境中扮演着至关重要的角色。通过深入挖掘和理解数据,企业可以做出更明智的决策,优化产品与服务,提高市场竞争力。然而,数据分析并非简单的数据堆砌和解读,它需要一个系统的流程来确保分析的准确…

【C++11】第一部分(一万六千多字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 C11简介 统一的列表初始化 {}初始化 std::initializer_list 声明 auto decltype 右值引用和移动语义 左值引用和右值引用 左值引…

【Python】数据处理:NumPy

NumPy是一个用于科学计算的开源Python库,其名称来源于“Numerical Python”的缩写。它提供了支持大规模多维数组和矩阵运算的功能,此外还包含了大量的数学函数库,可以高效地进行各种数学操作。 import numpy as np数组创建、属性和操作 数组…

Docker|了解容器镜像层(2)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践,最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单,同时又非常强大。在今天的帖子[1]中&#xf…

基于mybatis plus增加较复杂自定义查询以及分页

基于java技术,spring-boot和mybatis-plus搭建后台框架是现在非常流行的技术。 其中关于多表关联查询的实现相对比较复杂,在这里进行记录以供开发人员参考。 以一个系统中实际的实体类为查询为例, T3dMaterial实体其中的fileType属性及字段…

桶排序!!

桶排序 算法描述bucketSort函数bucketSort完整代码topKFrequent函数topKFrequent完整代码 完整代码 算法描述 给定一个整数数组 nums 和一个整数 k ,请返回其中出现频率前 k 高的元素。可以按 任意顺序 返回答案。 bucketSort函数 这个函数将输入数组根据元素出现…

Scrapy与MongoDB的异步数据存储

在数据采集过程中,处理大量的数据请求和存储任务是常见的需求。使用Scrapy来爬取数据并将其存储到MongoDB中是一个高效的解决方案。本文将介绍如何实现一个异步插入MongoDB的Scrapy管道。 项目背景 在本项目中,我们需要从某些公开网站上爬取数据&#…

java安装并配置环境

安装前请确保本机没有java的残留,否则将会安装报错 1.安装java jdk:安装路径Java Downloads | Oracle 中国 百度网盘链接:https://pan.baidu.com/s/11-3f2QEquIG3JYw4syklmQ 提取码:518e 2.双击 按照流程直接点击下一步&#x…

618:带货短剧,阿里VS拼多多的新战场

霸道总裁爱上我、穿越回古代成为后宫之主...让人上头的短剧今年持续升温,成为不少人的“电子榨菜”。 今年618,短剧又变身火热的主角,成为各大平台和品牌的新战场。 淘宝早在“逛逛”板块的二级页面,增加了名为“剧场”的板块&a…

机器学习实验------PCA

目录 一、介绍 二、算法流程 (1)数据中心化 (2)计算协方差矩阵 (3)特征值分解 (4)选择特征 三、运行结果展示 四、实验中遇到的问题 五、PCA的优缺点 优点: 缺点…

vue相关的前端知识回顾

nvm的安装 nvm 是一个 nodejs 版本管理工具。 使用 nvm 可以安装不同版本的 nodejs。也能够实时的切换不同的版本的NodeJS。 官方文档:https://github.com/nvm-sh/nvm 安装命令: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/in…

联想正式发布全栈算力基础设施新品,加速筑基AI 2.0时代

6月14日,以“异构智算 稳定高效”为主题的联想算力基础设施新品发布会在北京成功举办。 据「TMT星球」了解,在与会嘉宾和合作伙伴的见证下,联想正式发布率先搭载英特尔至强 6能效核处理器的联想问天WR5220 G5、联想ThinkSystem SR630 V4、联…

前端传递bool型后端用int收不到

文章目录 背景模拟错误点解决方法 背景 我前几天遇到一个低级错误,就是我前端发一个请求,把参数送到后端,但是我参数里面无意间传的布尔型(刚开始一直没注意到,因为当时参数有十几个),但是我后…

Python-算法编程100例-系统设计题(入门级)-疫情人员管理

题目描述: 现有一套用于管理疫情下人员流动风险的软件系统,请实现以下接口: RiskMonitor(int[] people):系统初始化,people[i]的下标表示人员编号,值表示所在地区的编号。初始时所有地区(包括没人的地区&…

“土猪拱白菜” 的学霸张锡峰,如今也苦于卷后端

大家好,我是程序员鱼皮,前几天在网上刷到了一个视频,是对几年前高考励志演讲的学霸张锡峰的采访。 不知道大家有没有看过他的演讲视频。在演讲中,衡水中学的学霸张锡峰表达了城乡孩子差距大、穷人家的孩子只想要努力成为父母的骄…