当前位置: 首页 > news >正文

计算机网络(四)网络层

4.1、网络层概述

简介

网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输

 这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可

但是如果要将这些异构型网络互连起来,形成一个更大的互联网,就需要实现网络层设备路由器

有时为了简单起见,可以不用画出这些网络,图中N1~N7,而将他们看做是一条链路即可

要实现网络层任务,需要解决一下主要问题:

一.网络层对分组丢失分组失序分组重复的传输错误情况采取相应的措施,使得接收方能正确接受发送方发送的数据,就是可靠传输,反之,如果什么措施也不采取,则是不可靠传输。即网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)

二.网络层寻址问题:网络IP地址

三.路由选择问题:路由器路由表 路由器收到数据后,依据数据包的目的地址和路由器中的路由表来决定将数据包从自己的哪个接口转发

四.路由器获取路由记录:一种是由用户或网络管理员进行人工配置,这种方法只适用于规模较小且网络拓扑不改变的小型互联网另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网

补充:网络层(网际层)除了 IP协议外,还有之前介绍过的地址解析协议ARP,还有网际控制报文协议ICMP网际组管理协议IGMP

总结


4.2、网络层提供的两种服务

  • 在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。

  • 争论焦点的实质就是:在计算机通信中,可靠通信应当由谁来负责?是网络还是端系统

面向连接的虚电路服务

一种观点:让网络负责可靠通信

  • 这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式。

  • 通信之前先建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。

  • 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。

发送方 发送给 接收方 的所有分组都沿着同一条虚电路传送

  • 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
  • 请注意,电路交换的电话通信是先建立了一条真正的连接。
  • 因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样

无连接的数据报服务

另一种观点:网络提供数据报服务,而不提供可靠通信

  • 互联网的先驱者提出了一种崭新的网络设计思路。

  • 网络层向上只提供简单灵活的、无连接的尽最大努力交付数据报服务

  • 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。

  • 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。

发送方 发送给 接收方 的分组可能沿着不同路径传送

尽最大努力交付

  • 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等)
  • 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
  • 互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。

虚电路服务与数据报服务的对比

对比的方面虚电路服务数据报服务
思路可靠通信应当由网络来保证可靠通信应当由用户主机来保证
连接的建立必须有不需要
终点地址仅在连接建立阶段使用,每个分组使用短的虚电路号每个分组都有终点的完整地址
分组的转发属于同一条虚电路的分组均按照同一路由进行转发每个分组独立选择路由进行转发
当结点出故障时所有通过出故障的结点的虚电路均不能工作出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序总是按发送顺序到达终点到达终点时不一定按发送顺序
端到端的差错处理和流量控制可以由网络负责,也可以由用户主机负责由用户主机负责

4.3、IPv4

地址概述

计算机网络:计算机网络就是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通讯的目的。

IP地址分为以下三种:

1、网络地址:网络地址是互联网上的节点在网络中具有的逻辑地址,可对节点进行寻址。IP地址是在互联网上给主机编址的方式,为每个计算机分配一个逻辑地址,这样不但能够对计算机进行识别,还能进行信息共享。IP主机位全0 即为网路地址

2、广播地址:广播地址专门用于同时向网路中所有工作站进行传送的一个地址。在使用TCP/IP 协议的网路中,主机标识段hostid 为全1 的IP 地址为广播地址,广播的分组传送给hostid 段所涉及的所有计算机。

3、主机地址:主机地址简单说就是IP地址,即每台终端的IP地址。

广播地址可以分为两类

<1> 有限广播

它不被路由转发,但会被送到相同物理网路段上的所有主机

其IP地址的网络位和主机位全为1即255.255.255.255

<2> 直接广播

网络广播会被路由转发,并被送到专门网络上的每台主机

IP地址的网络位对应这个网络,主机栏位通常全为1,

如 192.168.10.255,网掩码位255.255.255.0

<3> 在TCP/IP协议体系中,传输层只有UDP协议才会被广播。

<4> 为什么广播地址可以作为目的地址而不能作为源地址?

1)主机号全为1的广播地址,它代表了网络全部的主机,向广播地址发送数据时,所有同一网段的主机都会收到该数据,即广播地址可以作为目的地址。

2)广播地址之所以不可以作为源地址,是因为广播地址代表了该网络的全部主机。如果广播地址作为源地址(发送请求的IP地址)时,也就意味着全部主机发送请求,此时是无法确定到底是哪台主机发送的请求,所以不能作为源地址。

IPv4概述

简介

分类编制的IPv4地址

  • 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。

  • 主机号在它前面的网络号所指明的网络范围内必须是唯一的。

  • 由此可见,一个 IP 地址在整个互联网范围内是唯一的

A类地址

最小网络号:最小网络号是指一个网络地址范围中的第一个可用网络地址。这通常是网络中的默认网关或路由器的地址。

默认网关是连接到不同网络之间进行数据传输的关键设备,它负责将数据包转发到目标网络上,因此最小网络号通常被分配给默认网关用于实现跨网络的通信。

最大网络号:最大网络号是指一个网络地址范围中的最后一个可用网络地址。它在子网划分和CIDR编址中非常重要。最大网络号前的所有网络地址都被分配给特定的网络设备或主机,而最大网络号保留作为广播地址,用于发送消息到目标网络中的所有设备或主机。

注意:127.0.0.1既可以作为源IP又可以是目的ID。0.0.0.0是本地IP,只能是源IP

广播地址和网络地址是特殊的IP地址,并不能作为主机

在网络通信中,源IP地址标识数据包的发送者,而目的IP地址标识数据包的接收者。因此,一个 IP 地址作为源IP或目的IP,取决于它被用于哪种角色。

B类地址

C类地址

练习

总结

IP 地址的指派范围

一般不使用的特殊的 IP 地址

IP 地址的一些重要特点

(1) IP 地址是一种分等级的地址结构。分两个等级的好处是:

  • 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。

  • 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。

(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口

  • 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。

  • 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址

(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。

(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。

划分子网的IPv4地址

为什么要划分子网

划分子网是为了减少网络流量,提高网络性能,便于网络管理

下图便是一个网络:

因为某种原因,我们希望再多申请两个独立的网络。但由于主机过少,每个独立的网络所提供的IP地址并没有全部被使用完,造成了资源浪费,并且申请新的网络有弊端。

为了避免因申请新的网络所造成的弊端,我们通过从主机号部分借用一部分作为子网号,建立多个子网以达到同等于申请新的网络的目的。

该网络划分为三个子网后,对内表现是三个网络,但对外仍然表现为没有划分子网前的网络。

划分子网的优点

1.减少了IP地址的浪费.

2.使网络的组织更加灵活

3.更便于维护和管理

如何划分子网

基本思路

  • 划分子网属于一个单位内部的事情,对外仍然表现为没有划分子网的网络。

  • 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。

  • 增加一个子网掩码用于划分子网

凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机。

子网掩码

举例

默认子网掩码

总结

  • 子网掩码是一个网络或一个子网的重要属性。
  • 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
  • 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
  • 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。

无分类编址的IPv4地址

为什么使用无分类编址

IP分类的划分方式导致了大量的地址浪费,特别是 C 类网络,很多时候分配给用户的 C 类网络地址中的主机数远远超出实际需要,造成了资源浪费。为了解决地址浪费的问题,CIDR诞生了

无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。

CIDR 最主要的特点

  • CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
  • IP 地址从三级编址(使用子网掩码)又回到了两级编址
  • CIDR是一种归并网络的技术,其作用是把小的网络汇聚成大的超网

如何使用无分类编址

举例

注意:聚合C类网数量就是地址数量除以C类网的主机数量,即一共有多少种C类网络

路由聚合(构造超网)

路由聚合:具有相同下一跳以及共同前缀的路由信息,按照一定的规则聚合到一起,只发布一条路由到其它区域。

路由聚合可以减少路由器中路由表的路由记录,减轻内存压力

习题

注意:广播地址和网络地址是特殊地址,不可被分配,也不可作为主机地址

总结

各分类标准的优缺点

方法

优点

缺点

解决的问题

分类编制

简单易于理解

可伸缩性差,浪费IP地址,不适应网络规模的增长

IP地址枯竭问题

划分子网

更高效地利用IP地址

管理复杂,静态划分导致浪费,无法动态适应网络规模变化

IP地址管理和资源利用率问题

无分类编址

灵活性强,适应网络规模变化

对网络管理员要求较高,配置复杂

IP地址管理和资源利用率问题

IPv4地址的应用规划

给定一个IPv4地址快,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址,这就是IPv4地址应用规划的任务

定长的子网掩码FLSM(Fixed Length Subnet Mask)

划分子网的IPv4就是定长的子网掩码

举例

通过上面步骤分析,就可以从子网1 ~ 8中任选5个分配给左图中的N1 ~ N5

采用定长的子网掩码划分,只能划分出2^n个子网,其中n是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同

但是也因为每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费

变长的子网掩码VLSM(Variable Length Subnet Mask)

无分类编址的IPv4就是变长的子网掩码

也就是说需要多少地址,我就给你分配多少,多余的我就留着,等需要的时候,再分配

举例

先分配大的地址,再分配小的


4.4、IP数据报的发送和转发过程

举例

源主机如何知道目的主机是否与自己在同一个网络中,是直接交付,还是间接交付?

可以通过目的地址IP源地址的子网掩码进行逻辑与运算得到目的网络地址

  • 如果目的网络地址源网络地址相同,就是在同一个网络中,不通过路由器转发,属于直接交付
  • 如果目的网络地址源网络地址不相同,就不在同一个网络中,需要路由器转发,属于间接交付,传输给主机所在网络的默认网关(路由器——下图会讲解),由默认网关帮忙转发

主机C如何知道路由器R的存在?

用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关

例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关​

主机A会将该IP数据报传输给自己的默认网关,也就是图中所示的路由器接口0

路由器收到IP数据报后转发流程

  • 检查IP数据报首部是否出错:

    • 若出错,则直接丢弃该IP数据报并通告源主机

    • 若没有出错,则进行转发

  • 根据IP数据报的目的地址在路由表中查找匹配的条目:

    • 若找到匹配的条目,则转发给条目中指示的吓一跳

    • 若找不到,则丢弃该数据报并通告源主机

假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值

接下来路由器对该IP数据报进行查表转发

路由器首先逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址,然后与路由条目中的目的网络进行比较

如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报

VLAN和路由器可以抑制广播风暴


4.5、静态路由配置及其可能产生的路由环路问题

概念

路由表配置

网络目标(Network Destination)指定了目标网络的IP地址或网络ID。

网络掩码(Netmask): 指定了网络目标的子网掩码,用于确定网络范围。

网关(Gateway): 指定了用于访问目标网络的下一跳路由器或设备的IP地址。

接口(Interface): 指定了将数据包发送到目标网络时使用的网络接口。

 跃点数(Metric):  表示路由的优先级或距离,小的跃点数优先级更高。

多种路由情况举例

静态路由配置

默认路由

默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的。当目标IP不在路由表中,就按照默认路由进行转发

特定主机路由

有时候,我们可以给路由器添加针对某个主机的特定主机路由条目

一般用于网络管理人员对网络的管理和测试

多条路由可选,匹配路由最具体的,即最长前缀

静态路由配置错误导致路由环路

如下是三个正常的路由表

假设此时将R2的路由表中第三条目录配置错了下一跳

这导致R2和R3之间产生了路由环路

为避免此情况,IP数据包首部设置了TTL字段

聚合了不存在的网络而导致路由环路

下图存在一个人工配置了聚合路由的路由表

R2配置了聚合路由,这导致该聚合路由包含了两个不存在的网络。当R2需要转发IP数据报给不存在的网络时,由于R2本不存在相关网络,因此该IP数据包就不会被转发。但聚合路由的原因,原本不应被转发的IP数据报却被错误的转发给了R1。而R1配置了默认路由,该IP数据包又会被转发给R2,如此往复,便形成了路由环路。

为解决此种情况造成的路由环路,我么们需要在R2的路由表中配置黑洞路由。黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,IP数据报进入它后就被丢弃。因此便有效的避免了路由环路

网络故障而导致路由环路

当路由器R1检测到直连网络192.168.1.0/24的线路故障时,会自动删除该直连网络的路由条目

此时R2转发IP数据包到该网络时,R2会先转发给R1。由于R1已经删除了该网络的路由条目,所以R1会走默认路由,把IP数据报转发给R2。而R2又会接着转发给R1,R1转发给R2,这样就形成了路由环路

解决方法

添加故障的网络为黑洞路由,这样无法转发到的网络,就会进到黑洞路由自动销毁了​

假设经过一段时间后故障网络恢复了,R1又自动地得出了其接口0的直连网络的路由条目,那么针对该网络的黑洞网络会自动失效

如果又故障,则生效该网络的黑洞网络,继续正常运行

总结


4.6、路由选择协议

路由选择分为以下两类

因特网是全球最大的互联网,其所采用的路由选择协议的主要特点如下:

分布式:因特网中的各路由器通过相互间的信息交互共同完成信息的获取与更新

分层次:一个较大的因特网服务商就可划分为一个自治系统。自治系统的内部和外部采用不同类别的路由选择协议,分别进行选择

因特网采用分层次的路由选择协议

  • 如下便是两个举例的自治系统,两个自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择。每个自治系统都根据其内部的路由选择协议和共同的度量以确定其内部的路由,根据自治系统之间的路由选择协议用以确定不同自治系统之间的路由。​​

域间路由选择使用外部网关协议EGP这个类别的路由选择协议

域内路由选择使用内部网关协议IGP这个类别的路由选择协议

注意:两者EGP和IGP是两个类别名称而非具体协议,不同的自治系统内部协议可以互不相同。网关其实就是路由器,只是早期和现在的名称变化而已。因此网关协议的名称可称为路由协议

常见的路由选择协议

路由选择协议是在路由器上运行的。因此我们有必要学习路由器的基本构造

路由器的基本结构  

在本课程中,默认路由表等同转发表

路由器是一种具有多个输入端口,和输出端口的专用计算机,其任务是转发分组。

路由器一般接收和转发一下两种数据:

1、数据报文(处理+转发)

2、路由报文(和其他路由器共享信息,更新路由表)

路由器的基本结构如下:

1、输入,输出端口

2、输入,输出缓冲区

3、转发引擎(Forwarding Engine):转发引擎是路由器的核心组件,负责处理和转发数据包。

4、控制平面(Control Plane):控制平面主要负责管理和维护路由器的功能。它处理路由协议(如OSPF、BGP等)与其他路由器交换路由信息,更新路由表,保持网络的可达性和稳定性。

5、路由表(Routing Table):路由器内部维护着一个路由表,用于存储与其他网络相关的路由信息。路由表记录了目标网络的网络号、下一跳地址和出接口等信息。根据路由表的内容,路由器可以确定如何转发收到的数据包。

路由器结构可划分为两大部分:

1、分组转发部分

由三部分构成

  • 交换结构

  • 一组输入端口:

    信号从某个输入端口进入路由器时

    物理层将信号转换成比特流,送交数据链路层处理

    数据链路层识别从比特流中识别出帧,去掉帧头和帧尾后,送交网络层处理

    如果送交网络层的分组是普通待转发的数据分组

    则根据分组首部中的目的地址进行查表转发

    若找不到匹配的转发条目,则丢弃该分组,否则按照匹配条目中所指示的端口进行转发

  • 一组输出端口

    数据输出时,网络层会更新数据分组首部中某些字段的值,例如将数据分组的生存时间减1,然后送交数据链路层进行封装

  • 数据链路层将数据分组封装成帧,交给物理层处理

    物理层将帧看成比特流将其变换成相应的电信号进行发送

2、路由选择部分

  • 路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性地与其他路由器进行路由信息的交互,更新路由表

    如果送交给输入端口的网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交给路由选择处理机

  • 路由选择处理机根据分组的内容来更新自己的路由表

    路由选择处理机还会周期性地给其他路由器发送自己所知道的路由信息

路由信息协议RIP

距离简单的说就是从一个路由到一个网络之间的包括自己的所有路由的个数

在上图中,下面的路径通过路由器少,所以这就被rip认为是好路由

等价负载均衡:将通信量均衡的分部到多条等价的路由器上

收敛就是指路由器已经知道各个网络的最短距离和下一跳地址的情况

RIP的基本工作过程

这是一个自治系统中最开始的路由器的路由表中的信息,只有其直连的网络的信息

这是经过路由信息交互以后,路由表中的信息。接下来我们来看看路由更新的规则

RIP的路由条目的更新规则

现有如下两个路由器:

起始状态下路由器C的路由表中到达各目的网络的下一跳都记为问号,也就是说路由器D并不关心路由器C的这些内容

 假设此时路由器C的RIP更新报文发送周期到了,路由器C将自己路由表中的下一跳修改为C,距离都加一后,连着将其他路由信息一起封装到RIP更新报文中发送给路由器D。

距离加一的原因:路由器D到达路由器C的记录的目的网络时,需要先到达路由器C,此时也就多了一次转发路由器C的行为了

注意:由于等价负载均衡,到达目的网络,下一跳不同,但距离相同,就需要添加到路由表中。但本人在实际写题中,这种情况,答案一般不添加路由器

举例2

相关习题

RIP存在“坏消息传播得慢”的问题

当R1无法到达N1时,R1会将其路由表中到达N1的距离修改为16,表示N1不可达,并等待RIP更新周期到时后,发送该路由信息给R2。R2未收到R1的消息时,R2中关于N1的路由条目仍然是先前通过RIP协议获取到的。如果此时R2的RIP更新周期比R1的RIP周期先到时,R2的路由信息就会先到达R1,而R1的路由信息后到达R2。当R1收到R2的路由信息时,就会被该谣言误导,认为可以通过R2到达N1,距离为3,并在R1的路由更新周期到时后,发送该信息给R2。R2由于收到了之前R1的消息,因此更新路由记录N1不可达。当R2再次收到R1的路由信息以后,被该谣言误导,认为可以通过R1到达N1,距离为4,并更新了路由记录。在R2的路由更新周期到时后,发送该信息给R1。R1收到R2的路由信息后,被该谣言误导。如此往复,直到距离更新为16不可达

解决方法

但是,这些方法也不能完全解决“坏消息传播得慢”的问题,这是距离向量的本质决定

总结

RIP 协议的优缺点

优点:

  1. 实现简单,开销较小。

缺点:

  1. RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
  2. 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
  3. “坏消息传播得慢”,使更新过程的收敛时间过长。

开放最短路径优先OSPF

开放最短路径优先 OSPF (Open Shortest Path First)

概念

问候(Hello)分组

某路由器路由表中,在某邻居在死亡倒计时归零前,收到了邻居的分组,则重新计时。否则某路由器就会认为该邻居路由器不可达

IP数据报首部中协议号字段的取值为89,用来表明IP数据报的数据载荷为OSPF分组

发送链路状态通告LSA

洪泛法:自治系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组,会传递给系统中其他所有路由器

链路状态数据库同步

使用SPF算法计算出各自路由器到达其他路由器的最短路径

OSPF五种 分组类型

OSPF的基本工作过程

OSPF在多点接入网络中路由器邻居关系建立

OSPF在多点接入网络中路由器邻居关系时,如果不采用其他机制,将会产生大量的多播分组

DR和BDR的选择是为了减少转发分组的数量

如上图所示,选用DR和BDR减少了邻居关系数量

若DR出现问题,则由BDR顶替DR

实现DR和BDR的选举是通过各路由器之间交换选举参数,如路由器优先级,路由器ID等等,然后根据选举规则选出DR和BDR。具体规则类似于交换机生成树选举交换机

为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area)

下图表示了一个自治系统中的各个区域划分及路由信息的交流

  • 在上图的自治系统内,所有路由器都使用OSPF协议,OSPF将该自治系统再划分成4个更小的区域

  • 每个区域都有一个32比特的区域标识符

  • 主干区域的区域标识符必须为0,主干区域用于连通其他区域

  • 其他区域的区域标识符不能为0且不相同 

  • 每个区域一般不应包含路由器超过200个

  • 划分区域的好处就是,利用洪泛法交换链路状态信息局限于每一个区域而不是自治系统,这样减少整个网络上的通信量

  • 区域内路由器是所有接口都在同一区域内的路由器

  • 区域边界路由器是为了各区域的连通而存在的,每个区域都有一个区域边界路由器,其一个接口用于连接自身所在区域,一个接口用于连接主干区域。

  • 主干路由器是主干区域内的路由器,区域边界路由器也可以看作主干路由器

  • 自治系统边界路由器是主干区域内用于与本自治系统外的其他自治系统交换路由信息的路由器

  • 采用分层次划分区域的方法,虽然使交换信息的种类增多了,同时也使OSPF协议复杂了,但这样做能使各个区域内部交换路由信息的通信量大大减小,因而OSPF协议能够用于规模很大的自治系统

总结

边界网关协议BGP

BGP(Border Gateway Protocol)是不同自治系统的路由器之间交换路由信息的协议

两个BGP发言人通过一个共享网络连接在一起,而BGP发言人往往就是BGP边界路由器

在BGP协议刚开始运行时,BGP的的邻站交换整个BGP路由表,但以后只需要在发生变化时更新有变化的部分,这样做对节省网络带宽和减少路由器的处理开销都有好处

相关习题

总结

4.7、IPv4数据报的首部格式

各字段的作用

  • 一个 IP 数据报由首部数据两部分组成。

  • 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。

  • 在首部的固定部分的后面是一些可选字段,其长度是可变的。

图中的每一行都由32个比特(也就是4个字节)构成,每个小格子称为字段或者域,每个字段或某些字段的组合用来表达IP协议的相关功能

填充字段:首部中的可选字段的长度从1个字节到40个字节不等,而IP数据报的首部长度一定是4字节的整数倍,因此当20字节的固定部分加上1到40个字节长度不等的可变部分,造成首部长度不是4字节整数倍时,就用取值为全0的填充字段填充相应个字节,以确保IP数据报的首部长度是4字节的整数倍

​​

对IPv4数据报进行分片

现在假定分片2的IP数据报经过某个网络时还需要进行分片

总结


4.8、网际控制报文协议ICMP

架构IP网络时需要特别注意两点:

  • 确认网络是否正常工作

  • 遇到异常时进行问题诊断

而ICMP就是实现这些问题的协议

ICMP的主要功能包括:

  • 确认IP包是否成功送达目标地址

  • 通知在发送过程当中IP包被废弃的具体原因

  • 改善网络设置等

有了这些功能以后,就可以获得网络是否正常,设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断

ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议

ICMP 报文的格式

ICMP差错报告报文

终点不可达

源点抑制

时间超过

参数问题

改变路由(重定向)

不应发送ICMP差错报告报文情况

ICMP应用举例

分组网间探测PING(Packet InterNet Groper)

跟踪路由(traceroute)

tracert命令的实现原理

总结


4.9、虚拟专用网VPN与网络地址转换NAT

虚拟专用网VPN(Virtual Private Network)

  • 由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。

  • 考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。

  • 假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址

上图是因特网数字分配机构IANA官网查看IPv4地址空间中特殊地址的分配方案

用粉红色标出来的地址就是无需申请的、可自由分配的专用地址,或称私有地址​

私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信

私有地址只能用作本地地址而不能用作全球地址

因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发

本地地址与全球地址

  • 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。

  • 全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。

  • 问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。

所以部门A和部门B至少需要一个 路由器具有合法的全球IP地址,这样各自的专用网才能利用公用的因特网进行通信

部门A向部门B发送数据流程

两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上就好像是在本机构的专用网上传送一样,从逻辑上看,R1和R2之间好像是一条直通的点对点链路。因此也被称为IP隧道技术

网络地址转换NAT(Network Address Translation)

举例

在专用网络连接到因特网的路由器上安装NAT软件的路由器叫做NAT路由器

它至少有一个有效的外部全球IP地址

这样,所有使用私有地址的主机在和外界通信时,都要在NAT路由器上将其私有地址转换为全球IP地址

假设,使用私有地址的主机要给因特网上使用全球IP地址的另一台主机发送IP数据报

因特网上的这台主机给源主机发回数据报

当专用网中的这两台使用私有地址的主机都要给因特网使用全球地址的另一台主机发送数据报时,在NAT路由器的NAT转换表中就会产生两条记录,分别记录两个私有地址与全球地址的对应关系

这种基本转换存在一个问题

解决方法

我们现在用的很多家用路由器都是这种NART路由器

总结

相关文章:

计算机网络(四)网络层

4.1、网络层概述 简介 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输 这些异构型网络N1~N7如果只是需要各自内部通信&#xff0c;他们只要实现各自的物理层和数据链路层即可 但是如果要将这些异构型网络互连起来&#xff0c;形成一个更大的互…...

时空笔记:CBEngine(微观交通模拟引擎)

CBEngine 是一个微观交通模拟引擎&#xff0c;可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…...

Apache Sedona和Spark将geojson瓦片化例子

Apache Sedona很方便读取geojson、ShapeFile、geopackage等文件&#xff0c;提供了很多spark sql函数和rdd算子。下面例子主要用于熟悉spark和sedona的使用。 引入的maven包 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.or…...

5种IO模型

目录 一、认识IO二、5种IO模型三、非阻塞IO代码 一、认识IO 什么是IO&#xff1f; Input(输入)和Output(输出)。 冯诺依曼体系结构中&#xff0c;数据从输入设备拷贝到内存&#xff0c;经过处理后&#xff0c;再从内存拷贝到输出设备。现实情况中&#xff0c;数据并不是那么流…...

ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技

本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走&#xff1a; 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画&#xff0c;将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…...

面试题

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 目录下大于10M的文件转移到…...

工厂方法模式

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一个接口&#xff0c;用于创建对象&#xff0c;但允许子类决定实例化的类是哪一个。这样&#xff0c;工厂方法模式将对象的创建逻辑委托给子类&#xff0c;从而实现了创建…...

web前端学习总结(一)

web前端使用三项技术:html、css、javascript. 一、html:超文本标记语言&#xff0c;用于展示网页的框架。 <html> <head><title> </title></head><body><div> </div> <!--用于布局&#xff0c;占1行 --><span&g…...

【深度学习入门_基础篇】概率论

开坑本部分主要为基础知识复习&#xff0c;新开坑中&#xff0c;学习记录自用。 学习目标&#xff1a; 随机事件与概率、随机变量及其分布、多维随机变量及其分布、大数定律与中心极限定理。 强烈推荐此视频&#xff1a; 概率论_麻省理工公开课 废话不多说&#xff0c;直接…...

SpringMVC根据url校验权限,防止垂直越权

思路是加一个拦截器&#xff0c;对除登录接口的所有请求进行拦截。拦截到请求后&#xff0c;查询当前用户都拥有哪些url的权限&#xff08;这个需要权限表有url字段&#xff09;&#xff0c;然后与当前请求的url对比&#xff0c;如果相同则说明有权限&#xff0c;否则没有。 首…...

istio-proxy oom问题排查步骤

1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存&#xff0c;此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高&#xff0c;在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…...

openstack下如何生成centos9 centos10 和Ubuntu24 镜像

如何生成一个centos 10和centos 9 的镜像1. 下载 对应的版本 wget https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2 wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Gener…...

Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0

目录 首先你要定义v8的模型特征文件 下方是完整的模型编写函数 然后你要在控件窗体中定义应用这些方法以及函数 一、定义你的标签 二、下方是定义模块和坐标的方法 三、画框 完整推理函数代码块 效果展示 完整源码 训练其实和yolov10差不多 因为v10就是在v8的基础上做了优…...

C#中序列化的选择:JSON、XML、二进制与Protobuf详解

C#中序列化的选择&#xff1a;JSON、XML、二进制与Protobuf详解 在C#开发中&#xff0c;序列化是将对象转换为可存储或传输的格式的过程&#xff0c;而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。…...

深入理解 Java 设计模式之策略模式

一、引言 在 Java 编程的世界里&#xff0c;设计模式就如同建筑师手中的蓝图&#xff0c;能够帮助我们构建出更加健壮、灵活且易于维护的代码结构。而策略模式作为一种经典的行为型设计模式&#xff0c;在诸多实际开发场景中都发挥着至关重要的作用。它能够让算法的定义与使用…...

如何快速导出Python包和安装?

pip freeze > requirements.txt导出&#xff1a; 安转 &#xff1a; ​ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple...

记录一个在增量更新工具类

1. 应用场景 比方说我现在有一个商品&#xff0c;这个商品可以上传图片用来展示&#xff0c;之前已经上传过5张图片 ABCDE&#xff0c;现在其中BC这两张图片不想要了要换成FG&#xff0c;这个时候就可以使用这个工具类进行更新。 在最后一步&#xff0c;可以不管ADE直接只管新增…...

VUE3 常用的组件介绍

Vue 组件简介 Vue 组件是构建 Vue 应用程序的核心部分&#xff0c;组件帮助我们将 UI 分解为独立的、可复用的块&#xff0c;每个组件都有自己的状态和行为。Vue 组件通常由模板、脚本和样式组成。组件的脚本部分包含了各种配置选项&#xff0c;用于定义组件的逻辑和功能。 组…...

UML系列之Rational Rose笔记二:包图

rose绘制包图&#xff0c;有简单的有复杂的&#xff1b; 正常图简单的话&#xff0c;直接新建package使用就行&#xff0c;改变package的大小&#xff0c;改变名称当作不同的包就行&#xff1b;基本没有什么学习难度&#xff1b;在此&#xff0c;笔者直接介绍一下回执标准一点…...

第34天:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

时间轴&#xff1a; Java反射相关类图解&#xff1a; 反射&#xff1a; 1、什么是 Java 反射 参考&#xff1a; https://xz.aliyun.com/t/9117 Java 提供了一套反射 API &#xff0c;该 API 由 Class 类与 java.lang.reflect 类库组成。 该类库包含了 Field 、 Me…...

cuda实现flash_attn_mma_share_kv源码分析

一 源码分析 1.1 函数入口 void flash_attn_mma_stages_split_q_shared_kv(torch::Tensor Q, torch::Tensor K, torch::Tensor V, torch::Tensor O, int stages) {CHECK_TORCH_TENSOR_DTYPE(Q, torch::kHalf) // Q [B,H,N,D]CHECK_TORCH_TENSOR_DTYPE(K, torch::kHalf) // K …...

Python操作Excel的库openpyxl使用入门

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。以下是一些 openpyxl 的基本使用方法&#xff1a; 安装 openpyxl 首先&#xff0c;确保已经安装了 openpyxl。如果没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; pip install openp…...

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…...

信息网络安全考试gjdw

序号 一级纲要 二级纲要 题目分类 题型 题干 选项 答案 题目依据 试题分数 试题编码 备注 说明 1 信息安规 \ 专业题库 单选题 根据信息安规规定&#xff0c;试验和推广信息新技术&#xff0c;应制定相应的&#xff08; &#xff09;&#xff0c;经本单位…...

S变换matlab实现

S变换函数 function [st,t,f] st(timeseries,minfreq,maxfreq,samplingrate,freqsamplingrate) % S变换 % Code by huasir Beijing 2025.1.10 % Reference is "Localization of the Complex Spectrum: The S Transform" % from IEEE Transactions on Signal Proc…...

【OLAP和PLTP】—— 浅谈两者的应用场景和区别

大家好&#xff0c;我是摇光~ OLAP&#xff08;Online Analytical Processing&#xff09;和OLTP&#xff08;Online Transaction Processing&#xff09;是两种不同的数据处理技术&#xff0c;分别用于不同的业务场景。以下是关于OLAP和OLTP的详细介绍&#xff1a; 一、OLAP&…...

计算机组成原理(1)王道学习笔记

一、 引言 计算机硬件唯一能识别的数据是二进制-----0/1。 用低/高电平表示0/1。 通过很多条电路&#xff0c;可以传递多个二进制数位。 每个二进制数位称为1bit&#xff08;比特&#xff09;。 计算机硬件的基本组成 早期的ENIAC计算机是通过手动接线来控制计算。冯诺依曼首次…...

LLaMA模型:自然语言处理的革新者

引言 在人工智能的领域中&#xff0c;自然语言处理&#xff08;NLP&#xff09;是一个充满挑战的分支&#xff0c;它的目标是让计算机能够理解和生成人类语言。Transformer模型&#xff0c;作为NLP的基石&#xff0c;已经极大地推动了这一领域的发展。然而&#xff0c;为了进一…...

各种特种无人机快速发展,无人机反制技术面临挑战

随着科技的飞速发展&#xff0c;各种特种无人机在军事、民用等领域得到了广泛应用&#xff0c;其性能不断提升&#xff0c;应用场景也日益丰富。然而&#xff0c;无人机反制技术的发展确实面临一定的挑战&#xff0c;难以完全跟上无人机技术的快速发展步伐。以下是对这一问题的…...

1555银行账户概要_pandas解答

目录 题目链接(无_力扣VIP_略过)一.读题(建议使用这种表结构_数据对比看)题目SQL Schema & Pandas Schema 建表语句_数据 二.答案_MySQL一图解MySQL一图解__可只需看此!!!!!!!!!!!!!!!!答案-----------------------------------------------------------------------------…...

【C++补充】第一弹---位图技术揭秘:内存优化与快速访问

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 位图 1.1 位图相关面试题 1.2 位图的设计及实现 1.3 C库中的位图 bitset 1.4 位图的模拟实现 1.5 位图的优缺点 1.6 位图相关考察题目 1 …...

node.js中实现token的生成与验证

Token&#xff08;令牌&#xff09;是一种用于在客户端和服务器之间安全传输信息的加密字符串。在Web开发中&#xff0c;Token常用于身份验证和授权&#xff0c;确保用户能够安全地访问受保护的资源。 作用与意义 身份验证&#xff1a;Token可以用来验证用户的身份&#xff0…...

服务器登陆后有java变量

需求&#xff1a;在ssh服务器后&#xff0c;用户root 使用java会报错&#xff0c;没有这个变量&#xff0c;其实环境变量中已经有配置了&#xff0c;在/etc/profile 中有写变量及地址&#xff0c;通过source /etc/profile 命令也可以使环境变量加载上&#xff0c;但是ssh后不会…...

层次模型式的工作流

层次模型式的工作流是一种适合分布式版本控制系统&#xff08;如 Git、Mercurial&#xff09;的开发协作方式&#xff0c;它将开发团队分成多个层次&#xff0c;每个层次有明确的角色和职责&#xff0c;代码从底层逐步向上层汇总和集成&#xff0c;最终形成一个完整、稳定的产品…...

Linux 发行版介绍与对比:Red Hat、Ubuntu、Kylin、Debian

Linux 操作系统有众多发行版&#xff08;Distros&#xff09;&#xff0c;每个发行版的设计目标、目标用户、应用场景和使用方式有所不同。常见的 Linux 发行版包括 Red Hat、Ubuntu、Kylin 和 Debian。以下是这些发行版的详细介绍与对比&#xff0c;以及它们的应用场景和使用方…...

G1原理—3.G1是如何提升垃圾回收效率

大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理 提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 快速…...

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …...

C# SQL ASP.NET Web

留学生的课程答疑 按照要求完成程序设计、数据库设计、用户手册等相关技术文档&#xff1b; 要求 1. 计算机相关专业&#xff0c;本科以上学历&#xff0c;至少有1年以上工作经验或实习经历。 2. 熟练掌握WinForm程序开发&#xff0c;或ASP.NET Web编程。 3. 熟悉C#中网络…...

asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?

对于并发请求&#xff0c;每个请求会被分配到一个独立的线程或线程池工作线程上。通过 HttpContext 或 AsyncLocal&#xff0c;每个线程都能独立地获取到它自己的上下文数据。由于这些数据是与当前请求相关的&#xff0c;因此在并发请求时不会互相干扰。 在并发请求时&#xf…...

软件23种设计模式完整版[附Java版示例代码]

一、什么是设计模式 设计模式是在软件设计中反复出现的问题的通用解决方案。它们是经过多次验证和应用的指导原则,旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。 设计模式是一种抽象化的思维方式,可以帮助开发人员更好地组织和设计他们…...

FPGA 20 ,FPGA按键消抖功能解析与实现

目录 前言 一. 具体场景 二. 消抖方法...

基于单片机的无线气象仪系统设计(论文+源码)

1系统方案设计 如图2.1所示为无线气象仪系统设计框架。系统设计采用STM32单片机作为主控制器&#xff0c;结合DHT11温湿度传感器、光敏传感器、BMP180气压传感器、PR-3000-FS-N01风速传感器实现气象环境的温度、湿度、光照、气压、风速等环境数据的检测&#xff0c;并通过OLED1…...

OA系统如何做好DDOS防护

OA系统如何做好DDOS防护&#xff1f;在数字化办公蔚然成风的当下&#xff0c;OA&#xff08;办公自动化&#xff09;系统作为企业内部管理与协作的神经中枢&#xff0c;其安全性和稳定性直接关系到企业的日常运营效率、信息流通效率以及长远发展。OA系统不仅承载着企业内部的日…...

java_单例设计模式

什么是设计模式 什么是单例设计模式 单例设计模式——饿汉式 虽然你没有使用这个对象实例&#xff0c;但是它也帮你创建了&#xff01;容易造成对象的浪费 對象&#xff0c;通常是重量級的對象, 餓漢式可能造成創建了對象&#xff0c;但是沒有使用. package com.hspedu.singl…...

比较分析:Windsurf、Cody、Cline、Roo Cline、Copilot 和 通义灵码

随着人工智能技术的快速发展&#xff0c;开发者工具变得越来越智能化&#xff0c;特别是在代码生成、辅助编程等领域&#xff0c;市面上涌现了多种 AI 驱动的工具。本文将从开源性、集成能力、功能覆盖范围、支持的编程语言、生态兼容性、成本、学习曲线、响应速度、离线支持以…...

vue3后台系统动态路由实现

动态路由的流程&#xff1a;用户登录之后拿到用户信息和token&#xff0c;再去请求后端给的动态路由表&#xff0c;前端处理路由格式为vue路由格式。 1&#xff09;拿到用户信息里面的角色之后再去请求路由表&#xff0c;返回的路由为tree格式 后端返回路由如下&#xff1a; …...

C#版 软件开发6大原则与23种设计模式

开发原则和设计模式一直是软件开发中的圣经, 但是这仅仅适用于中大型的项目开发, 在小型项目的开发中, 这些规则会降低你的开发效率, 使你的工程变得繁杂. 所以只有适合你的才是最好的. 设计模式六大原则1. 单一职责原则&#xff08;Single Responsibility Principle&#xff0…...

后端Java开发:第十三天

第十三天&#xff1a;继承 - 面向对象的核心概念 欢迎来到第十三天的学习&#xff01;今天&#xff0c;我们将深入探讨 Java 中的 继承&#xff08;Inheritance&#xff09;&#xff0c;这是面向对象编程的四大基本特性之一。继承是指一个类&#xff08;子类&#xff09;通过继…...

awr报告无法生成:常见分析手段

awr报告无法生成:常见分析手段 STATISTICS_LEVEL和OPEN_MODEAWR快照是否能自动生成?AWR快照能否手动生成?日志有无ORA-12751或ORA-32701报错?MMON进程是否被挂起?排查数据库隐藏参数分析快照生成错误信息分析AWR Snapshot Tracing分析AWR Table Flush是否超时STATISTICS_L…...

基础算法——差分

原理与特点 先回顾一下前缀和算法。 | arr | 1 | 3 | 7 | 5 | 6 | | ---------- | ------ | ------ | ------ | ------ | ------ | | prefix 值 | 101 | 134 | 13711 | 137516 | 1375622 |前缀和的特点是前面的相加prefix(i)sum(i-1)arr(i)。那么差分数组diff就如下面的形式 |…...