网络层 VI(路由算法与路由协议)【★★★★★★】

news2024/9/23 19:17:33

(★★)代表非常重要的知识点,(★)代表重要的知识点。

一、路由算法

路由算法的目的很简单:给定一组路由器及连接路由器的链路,路由算法要找到一条从源路由器到目的路由器的“最佳”路径。通常,“最佳”路径是指具有最低费用的路径。

路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。一个理想的路由算法应具有如下的一些特点:

  • 算法必须是正确的和完整的。这里,“正确”的含义是:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机。

  • 算法在计算上应简单。路由选择的计算不应使网络通信量增加太多的额外开销。

  • 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。当网络中的通信量发生变化时,算法能自适应地改变路由以均衡各链路的负载。当某个或某些结点、链路发生故障不能工作,或者修理好了再投入运行时,算法也能及时地改变路由。有时称这种自适应性为“稳健性 / 鲁棒性”(robustness)。

  • 算法应具有稳定性。在网络通信量和网络拓扑相对稳定的情况下,路由算法应收敛于一个可以接受的解,而不应使得出的路由不停地变化。

  • 算法应是公平的。路由选择算法应对所有用户(除对少数优先级高的用户)都是平等的。例如,若仅仅使某一对用户的端到端时延为最小,但却不考虑其他的广大用户,这就明显地不符合公平性的要求。

  • 算法应是最佳的。路由选择算法应当能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大。虽然我们希望得到“最佳”的算法,但这并不总是最重要的。对于某些网络,网络的可靠性有时要比最小的分组平均时延或最大吞吐量更加重要。因此,所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。

一个实际的路由选择算法,应尽可能接近于理想的算法。在不同的应用条件下,对以上提出的六个方面也可有不同的侧重。

应当指出,路由选择是个非常复杂的问题,因为它是网络中的所有结点共同协调工作的结果。其次,路由选择的环境往往是不断变化的,而这种变化有时无法事先知道,例如,网络中出了某些故障。此外,当网络发生拥塞时,就特别需要有能缓解这种拥塞的路由选择策略,但恰好在这种条件下,很难从网络中的各结点获得所需的路由选择信息。

1. 静态路由与动态路由

路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。倘若从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类:静态路由选择策略与动态路由选择策略。

静态路由算法:静态路由选择也叫做非自适应路由选择,由网络管理员手工配置每一条路由。其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小型网络,完全可以采用静态路由选择。

静态路由不会估计流量和结构来调整其路由决策。但这并不说明路由选择是不能改变的,事实上用户可以随时配置路由表。

动态路由算法:动态路由选择也叫做自适应路由选择,根据网络流量负载和拓扑结构的变化来动态调整自身的路由表。其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
常用的动态路由算法可分为两类:距离-向量路由算法和链路状态路由算法。

动态路由选择和静态路由选择的主要区别是:动态路由选择可随网络的通信量或拓扑变化而自适应地调整,而静态路由选择则需要手工去调整相关的路由信息。

2. 距离-向量路由算法

距离-向量算法的基础是 Bellman-Ford 算法,它用于计算单源最短路径。每个结点以自身为源点执行 Bellman-Ford 算法,所以全局上可以解决任意结点对之间的最短路径问题。

下面讨论 Bellman-Ford 算法的基本思想。
假设 dx(y) 表示从结点 x 到结点 y 的带权最短路径的费用,则有:

dx(y) = min{ c(x, v) + dv(y) } ,v 是 x 的所有邻居

式中,c(x, v) 是从 x 到其邻居 v 的费用。已知 x 的所有邻居到 y 的最短路径费用后,从 x 到 y 的最短路径费用是对所有邻居 v 的 c(x, v) + dv(y) 的最小值,下图所示为 Bellman-Ford 算法的基本思想。所有最短路径算法都依赖于一个性质:“两点之间的最短路径也包含了路径上其他顶点间的最短路径”。

对于距离-向量算法,每个结点 x 维护下列路由信息:

  • 从 x 到每个直接相连邻居 v 的链路费用 c(x, v) 。

  • 结点 x 的距离向量,即 x 到网络中其他结点的费用。这是一组距离,因此称为距离向量。

  • 它收到的每个邻居的距离向量,即 x 的每个邻居到网络中其他结点的费用。

在距离-向量算法中,每个结点定期地向它的每个邻居发送它的距离向量副本。当结点 x 从它的任何一个邻居 v 接收到一个新距离向量时,它首先保存 v 的距离向量,然后使用 Bellman-Ford 公式:dx(y) = min{ c(x, v) + dv(y) } 更新自己的距离向量。若结点 x 的距离向量因这个更新步骤而改变,则结点 x 接下来继续向它的每个邻居发送其更新后的距离向量。

下面以下图顶部三个结点的简单网络为例,说明距离-向量算法的实现。下图(a)中的各列依次是三个结点的初始化距离向量,此时各结点之间尚未交换过任何路由信息,因此各结点的初始化距离向量就等于它到每个直接相连邻居 v 的费用。

初始化后,每个结点第一次向它的所有邻居发送其距离向量,在接收到该更新报文后,每个结点重新计算自己的距离向量。

例如,结点 x 计算的过程为:
dx(x) = 0;
dx(y) = min{ c(x, y) + dy(y) , c(x, z) + dz(y) } = min{ 2 + 0 , 7 + 1 } = 2;
dx(z) = min{ c(x, y) + dy(z) , c(x, z) + dz(z) } = min{ 2 + 1 , 7 + 0 } = 3。
注意到结点 x 到结点 z 的最低费用从 7 变成了 3 ,结点 z 到结点 x 的最低费用也从 7 变成了 3 ,如上图(b)所示。结点的距离向量变化后,再次向它们的邻居发送它们更新的距离向量,而没有变化的结点 v 不用发送更新报文。接收到邻居的更新报文后,结点又重新计算它们的距离向量,此次没有结点更新,因此也无更新报文发送,算法进入静止状态,如上图(c)所示。

显然,更新报文的大小与网络中的结点数目成正比,大型网络将导致很大的更新报文。

最常见的距离-向量路由算法是 RIP 算法,它采用“跳数”作为距离的度量。

3. 链路状态路由算法

链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价。链路状态算法要求每个结点都具有全网拓扑结构图(这个拓扑结构图在全网范围内是一致的),它们执行下列两项任务:

  • 第一,主动测试所有相邻结点的状态;
  • 第二,定期地将链路状态传播给所有其他结点。

因此每个结点都知道全网共有多少个结点、哪些结点是相连的、其代价是多少等,于是每个结点都可使用 Dijkstra 最短路径算法计算出到达其他结点的最短路径。
【图的应用——最短路径(Dijkstra算法和Floyd算法)】

在链路状态算法中,结点每收到一个链路状态报文,便用其更新自己的网络状态“视野图”,一旦链路状态发生变化,就使用 Diikstra 算法重新计算到达所有其他结点的最短路径。

因为一个结点的链路状态只涉及相邻结点的连通状态,而与整个互联网的规模并无直接关系,所以链路状态算法适用于大型的或路由信息变化聚敛的互联网环境。

链路状态算法的主要优点是:
① 每个结点都使用同样的链路状态数据独立地计算路径,而不依赖中间结点的计算;链路状态报文不加改变地传播,因此采用该算法易于查找故障。
② 当一个结点从所有其他结点接收到报文时,它就在本地立即计算出正确的路径,保证一步汇聚。
③ 最后,因为链路状态报文仅运载来自单个结点关于直接链路的信息,其大小与网络中的结点数目无关,所以链路状态算法比距离-向量算法有更好的规模可伸展性。

典型的链路状态路由算法是 OSPF 算法。

两种路由算法的比较:

  • 在距离-向量算法中,每个结点仅与它的直接邻居交谈,向它的邻居发送自己的路由表,其大小取决于网络中的结点数目,代价较大。
  • 在链路状态算法中,每个结点通过广播的方式与所有其他结点交谈,但它只告诉它们与它直接相连的链路的费用。

二、分层次的路由选择协议

互联网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。由于以下两个原因,互联网采用分层次的路由选择协议:

  • 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。

  • 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。

为此,可以把整个互联网划分为许多较小的自治系统(autonomous system, AS)。自治系统 AS 是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。

采用分层路由后,路由器被划分为区域,每个路由器知道如何将分组路由到自己所在区域内的目标地址,但对于其他区域内的结构毫不知情。当不同的网络相互连接时,可将每个网络当作一个独立的区域,这样做的好处是一个网络中的路由器不必知道其他网络的拓扑结构。

在目前的互联网中,一个大的 ISP 就是一个自治系统。这样,互联网就把路由选择协议划分为两大类,即内部网关协议 IGP(Interior Gateway Protocol)和外部网关协议 EGP(External Gateway Protocol)。

1. 内部网关协议 IGP

内部网关协议即在一个自治系统内部使用的路由选择协议,它与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。

2. 外部网关协议 EGP

若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP 。目前使用最多的外部网关协议是 BGP 的版本 4 (即 BGP-4 )。

自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)。

下图是两个自治系统互连在一起的示意图。每个自治系统自己决定在本自治系统内部运行哪一个内部路由选择协议(例如,可以是 RIP ,也可以是 OSPF ) 。但每个自治系统都有一个或多个路由器(图中的路由器 R1 和 R2 ) ,除运行本系统的内部路由选择协议外,还要运行自治系统间的路由选择协议(例如,BGP-4 ) 。

总之,使用分层次的路由选择方法,可将互联网的路由选择协议划分为:

  • 内部网关协议 IGP:具体的协议有多种,如 RIP 和 OSPF 等。

  • 外部网关协议 EGP:目前使用的协议就是 BGP 。

对于比较大的自治系统,还可将所有的网络再进行一次划分。例如,可以构筑一个链路速率较高的主干网和许多速率较低的区域网。每个区域网通过路由器连接到主干网。当在一个区域内找不到目的站时,就通过路由器经过主干网到达另一个区域网,或者通过外部路由器到别的自治系统中去查找。

三、路由信息协议(RIP)(★)

路由信息协议(Routing Information Protocol, RIP)是内部网关协议 IGP 中最先得到广泛应用的协议。RIP 是一种分布式的基于距离向量的路由选择协议。是互联网的标准协议,其最大优点就是简单。

1. RIP 的规定

  • RIP 要求网络中的每一个路由器都要维护从它自已到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。

  • RIP 使用跳数(Hop Count)(或称距离,实际上指的是“最短距离”)来衡量到达目的网络的距离。规定从一路由器到直接连接的网络的距离定义为1;而每经过一个路由器,距离就加 1 。

RIP 将“距离“定义如下:

从一路由器到直接连接的网络的距离定义为 1 。从一路由器到非直接连接的网络的距离定义为所经过的路由器数加 1 。例如在下图中,路由器 R1 到网 1 或网 2 的距离都是 1(直接连接),而到网 3 的距离是 2 ,到网 4 的距离是 3 。

  • RIP 认为好的路由就是它通过的路由器数目少,即距离短或跳数少。

  • RIP 允许一条路径最多只能包含 15 个路由器。因此“距离”等于 16 时即相当于不可达。可见 RIP 只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是为了防止分组不断在环路上循环,减少网络拥塞的可能性。

  • 每个路由表项都有三个关键字段,即:< 目的网络 N ,距离 d ,下一跳路由器地址 X >。

需要注意的是:到直接连接的网络的距离也可定义为 0(采用这种定义的理由是:路由器在和直接连接在该网络上的主机通信时,不需要经过另外的路由器。既然每经过一个路由器要将距离加 1 ,那么不再经过路由器的距离就应当为 0 )。

RIP 是应用层协议,它使用 UDP 传送数据(端口 520)。RIP 不能在两个网络之间同时使用多条路由。RIP 选择的路径不一定是时间最短的(哪怕还存在另一条高速[低时延]但路由器较多的路由),但一定是具有最少的路由跳数(即最短路由),因为它是根据最少跳数进行路径选择的。

2. RIP 的特点

RIP 和 OSPF 协议都是分布式路由选择协议。它们的共同特点就是每一个路由器都要不断地和其他一些路由器交换路由信息。我们一定要弄清以下三个要点,即:和哪些路由器交换信息?交换什么信息?在什么时候交换信息?

  • 和谁交换信息:仅和直接相邻的路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的。RIP 协议规定,不相邻的路由器不交换信息。

  • 交换什么信息:交换的信息是当前本路由器所知道的全部信息,即自己的路由表。也就是说,交换的信息是:“我到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器”。

  • 何时交换信息:按固定的时间间隔交换路由信息。例如,每隔 30 秒。然后路由器根据收到的路由信息更新路由表,当网络拓扑发生变化时路由器也及时向相邻路由器通告拓扑变化后的路由信息。

路由器刚开始工作时,它的路由表是空的,只知道自己到直接相连的几个网络的距离为 1 。接着,每个路由器仅和数目非常有限的相邻路由器周期性地交换并更新路由信息。但经过若干次交换和更新后,所有的路由器最终都会知道到达本自治系统内任何网络的最短距离和下一跳路由器的地址,称为收敛。在一般情况下, RIP 可以收敛,并且过程也较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。

所谓“路由收敛”,是指当路由环境发生变化后,各路由器调整自己的路由表以适应网络拓扑结构的变化,最终达到稳定状态(路由表与网络拓扑状态保持一致)。收敛越快,路由器就能越快适应网络拓扑结构的变化。

路由表中最主要的信息就是:到某个网络的距离(即最短距离),以及应经过的下一跳地址。路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为距离向量算法。下面就是 RIP 使用的距离向量算法。

3. RIP 的距离向量算法

对每个相邻路由器发送来的 RIP 报文,执行如下步骤:

  • 对地址为 X 的相邻路由器发来的 RIP 报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为 X ,并把所有“距离”字段的值加 1 。每一个项目都有三个关键数据,即:到目的网络 N ,距离是 d ,下一跳路由器是 X 。

  • 对修改后的 RIP 报文中的每个项目,执行如下步骤:
    IF(若原来的路由表中没有目的网络 N ):
    则把该项目添加到路由表中(表明这是新的目的网络);
    ELSEIF(若原来的路由表中有目的网络 N ,且下一跳路由器的地址是 X):
    用收到的项目替换原路由表中的项目(因为要以更新的消息为准);
    ELSEIF(若原来的路由表中有目的网络 N ,且下一跳路由器的地址不是 X):
    若收到的项目中的距离 d 小于路由表中的距离,则进行更新;
    ELSE :什么也不做。

  • 若 180秒(RIP 默认超时时间,即 3 分钟)还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离设置为 16(距离为 16 表示不可达)。

  • 返回。

上面给出的距离向量算法的基础就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法)。这种算法的要点是这样的:

设 X 是结点 A 到 B 的最短路径上的一个结点。若把路径 A → B 拆成两段路径 A → X 和 X → B ,则每一段路径 A → X 和 X → B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。

在 RIP 协议中,当路由器收到相邻路由器发来的路由更新信息时,若发现有更优的路由(即跳数更小的路由),则直接更新自己的路由表,并向其他相邻路由器广播自己的新路由。

4. 距离向量算法的示例

下面举例说明 RIP 路由条目的更新过程。已知路由器 R6 和 R4 互为相邻路由器,表 4-9(a) 所示为 R6 的路由表,现在收到相邻路由器 R4 发来的路由更新信息,如表 4-9(b) 所示。

现在试更新 R6 的路由表。先把 R4 发来的路由表(表 4-9(b) 所示)中各项的距离都加 1 ,并把下一跳路由器都改为 R4 ,得到表 4-9© 。

将这个表的每行与 R6 的路由表(表 4-9(a) 所示)进行比较。

  • 第一行的 Net1 在表 4-9(a) 中没有,因此要把这一行添加到表 4-9(a) 中。
  • 第二行的 Net2 在表 4-9(a) 中有,且下一跳路由器也是 R4 ,因此要更新(距离增大了)。
  • 第三行的 Net3 在表 4-9(a) 中有,但下一跳路由器不同。于是需要比较距离。新的路由信息的距离是 2 ,小于原表中的 4 ,因此要更新。

这样,得出更新后的 R6 的路由表如表 4-9(a) 所示。

RIP 协议让一个自治系统中的所有路由器都和自己的相邻路由器定期交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。

这里还应注意:虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。

5. RIP 的优缺点

RIP 的优点

  • 实现简单、开销小、收敛过程较快。
  • 若一个路由器发现了更短的路由,则这种更新信息就传播得很快,在较短时间内便可被传至所有路由器,俗称“好消息传播得快”。

RIP 的缺点

  • RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
  • 路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。
  • 当网络出现故障时,路由器之间需反复多次交换信息才能完成收敛,要经过较长时间才能将故障消息传送到所有路由器(即慢收敛现象),俗称“坏消息传播得慢”。

RlP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。下面举例说明 RIP “坏消息传播得慢”的特点。

设三个网络通过两个路由器互连起来,并且都已建立了各自的路由表。图中路由器交换的信息只给出了我们感兴趣的一行内容。路由器 R1 的 “1, 1, 直接” 表示 “到网 1 的距离是 1 ,直接交付”。路由器 R2 中的 “1, 2, R1” 表示 “到网 1 的距离是 2 ,下一跳经过 R1 ”。

现在假定路由器 R1 到网 1 的链路出了故障,R1 无法到达网 1 。于是路由器 R1 把到网 1 的距离改为 16 (表示到网 1 不可达),因而在 R1 的路由表中的相应项目变为 “1, 16, 直接” 。但是,很可能要经过 30 秒钟后 R1 才把更新信息发送给 R2 。然而 R2 可能已经先把自己的路由表发送给了 R1 ,其中有 “1, 2, R1 ” 这一项。

  • R1 收到 R2 的更新报文后,误认为可经过 R2 到达网 1 ,于是把收到的路由信息 “1, 2, R1” 修改为:“1, 3, R2 ” 表明 “我到网 1 的距离是 3 ,下一跳经过 R2 ”,并把更新后的信息发送给 R2

  • 同理,R2 接着又更新自己的路由表为 “1, 4, R1 ”,以为 “我到网 1 距离是 4 ,下一跳经过 R1 ”。

  • 这样的更新一直继续下去,直到 R1 和 R2 到网 1 的距离都增大到 16 时,R1 和 R2 才知道原来网 1 是不可达的。

RIP 的这一特点叫做:好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是 RIP 的一个主要缺点。但如果一个路由器发现了更短的路由,那么这种更新信息就传播得很快。为了使坏消息传播得更快些,可以采取多种措施。例如,让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送。

四、开放最短路径优先(OSPF)协议

虽然目前在规模较小的网络中,使用 RIP 协议的仍占多数。但对于规模较大的网络就应当使用 OSPF 协议。

1. OSPF 协议的基本概念

开放最短路径优先(OSPF)协议最主要的特征就是使用分布式的链路状态协议(link state protocol),而不是像 RIP 那样的距离向量协议。OSPF 也是内部网关协议(IGP)的一种。

OSPF 与 RIP 相比有以下 4 点主要区别:

  • OSPF 向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(flooding),即路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。而 RIP 仅仅向自己相邻的几个路由器发送信息。

  • 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric, 也称“代价”),OSPF 将这个“度量”用来表示费用、距离、时延、带宽,等等,这些都由网络管理人员来决定,因此较为灵活。而在 RIP 中,发送的信息是本路由器所知道的全部信息,即整个路由表(到所有网络的距离和下一跳路由器)。

在讨论路由器之间是如何交换路由信息时,最好将路由器之间的网络简化为一条链路。OSPF 的“链路状态”中的“链路”实际上就是指“和这两个路由器都有接口的网络”。

  • 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现 RIP “坏消息传得慢”的问题。而在 RIP 中,不管网络拓扑是否发生变化,路由器之间都要定期交换路由表的信息。

  • OSPF 是网络层协议,它不用 UDP 或 TCP ,而直接用 IP 数据报传送(其 IP 数据报首部的协议字段为 89 )。OSPF 构成的数据报很短,这样做可减少路由信息的通信量,数据报很短的另一好处是可以不必将长的数据报分片传送(分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传)。而 RIP 是应用层协议,它在传输层使用 UDP 。

注意:用 UDP 传送是指将该信息作为 UDP 报文的数据部分,而直接使用 IP 数据报传送是指将该信息直接作为 IP 数据报的数据部分。RIP 报文是作为 UDP 数据报的数据部分。

2. OSPF 协议的基本工作原理

由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(link-state database),这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为链路状态数据库的同步)。因此,每一个路由器都知道全网共有多少个路由器,以及哪些路由器是相连的,其代价是多少,等等。每一个路由器使用链路状态数据库中的数据,构造出自己的路由表(例如,使用 Dijkstra 的最短路径路由算法计算自己到达各目的网络的最优路径)。此后,当链路状态发生变化时,每个路由器重新计算到达各目的网络的最优路径,构造出新的路由表。虽然使用 Dikstra 算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储“下一跳”(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。

我们注意到, RIP 协议的每一个路由器虽然知道到所有的网络的距离以及下一跳路由器,但却不知道全网的拓扑结构(也是只有到了下一跳路由器,才能知道再下一跳应当怎样走)。

OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。

3. OSPF 协议的拓展知识

为了使 OSPF 能够用于规模很大的网络, OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域(area)。下图就表示一个自治系统划分为四个区域。每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。当然,一个区域也不能太大,在一个区域内的路由器最好不超过 200 个。

划分区域的好处就是:把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。

为了使每一个区域能够和本区域以外的区域进行通信, OSPF 使用层次结构的区域划分。

  • 在上层的区域叫做主干区域(backbone area)。主干区域的标识符规定为 0.0.0.0 。主干区域的作用是用来连通其他在下层的区域。

  • 从其他区域来的信息都由区域边界路由器(area border router)进行概括。在上图中,路由器 R3 , R4 和 R7 都是区域边界路由器,而显然,每一个区域至少应当有一个区域边界路由器。

  • 在主干区域内的路由器叫做主干路由器(backbone router),如 R3 , R4 , R5 , R6 和 R7 。一个主干路由器可以同时是区域边界路由器,如 R3 , R4 和 R7

  • 在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫做自治系统边界路由器(如图中的 R6 )。

采用分层次划分区域的方法虽然使交换信息的种类增多了,同时也使 OSPF 协议更加复杂了。但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF 协议能够用于规模很大的自治系统中。这里,我们再一次地看到划分层次在网络设计中的重要性。

4. OSPF 协议的特点

除以上区别外,OSPF 还具有下列的一些特点:

  • OSPF 允许管理员给每条路由指派不同的代价(例如:高带宽的卫星链路对于非实时的业务可设置为较低的代价,但对于时延敏感的业务就可设置为非常高的代价)。因此,OSPF 对于不同类型的业务可计算出不同的路由。链路的代价可以是 1 至 65535 中的任何一个无量纲的数,因此十分灵活。商用的网络在使用 OSPF 时,通常根据链路带宽来计算链路的代价。这种灵活性是 RIP 所没有的。

  • 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载平衡(load balancing)。在代价相同的多条路径上分配通信量是通信量工程中的简单形式。RIP 只能找出到某个网络的一条路径。

  • 所有在 OSPF 路由器之间交换的分组(例如:链路状态更新分组)都具有鉴别的功能,从而保证了仅在可信赖的路由器之间交换链路状态信息。

  • OSPF 支持可变长度的子网划分和无分类的编址 CIDR 。

  • 由于网络中的链路状态可能经常发生变化,因此 OSPF 让每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。OSPF 规定:链路状态序号增长的速率不得超过每 5 秒钟 1 次。这样,全部序号空间在 600 年内不会产生重复号。

5. OSPF 协议的五种分组类型

OSPF 共有以下五种分组类型:

  • 类型 1 , 问候(Hello)分组:用来发现和维待邻站的可达性。

  • 类型 2 , 数据库描述(Database Description)分组:向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。

  • 类型 3 , 链路状态请求(Link State Request)分组:向对方请求发送某些链路状态项目的详细信息。

  • 类型 4 , 链路状态更新(Link State Update)分组:用洪泛法对全网更新链路状态。这种分组是最复杂的,也是 OSPF 协议最核心的部分。路由器使用这种分组将其链路状态通知给邻站。

  • 类型 5 , 链路状态确认(Link State Acknowledgment)分组:对链路更新分组的确认。

OSPF 规定,每两个相邻路由器每隔 10 秒钟要交换一次问候分组。这样就能确知哪些邻站是可达的。对相邻路由器来说,“可达”是最基本的要求,因为只有可达邻站的链路状态信息才存入链路状态数据库(路由表就是根据链路状态数据库计算出来的)。在正常情况下,网络中传送的绝大多数 OSPF 分组都是问候分组。若有 40 秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。

其他的四种分组都是用来进行链路状态数据库的同步。所谓同步就是指不同路由器的链路状态数据库的内容是一样的。两个同步的路由器叫做“完全邻接的”(fully adjacent)路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。

当一个路由器刚开始工作时,它只能通过问候分组得知它有哪些相邻的路由器在工作,以及将数据发往相邻路由器所需的“代价”。如果所有的路由器都把自己的本地链路状态信息对全网进行广播,那么各路由器只要将这些链路状态信息综合起来就可得出链路状态数据库。但这样做开销太大,因此 OSPF 采用下面的办法:

OSPF 让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。摘要信息主要就是指出有哪些路由器的链路状态信息(以及其序号)已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。下图给出了 OSPF 的基本操作,说明了两个路由器需要交换各种类型的分组。

在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。其他路由器在收到更新分组后要发送确认。

OSPF 使用的是可靠的洪泛法,其要点见下图所示。设路由器 R 用洪泛法发出链路状态更新分组。图中用一些小的箭头表示更新分组。第一次先发给相邻的三个路由器。这三个路由器将收到的分组再进行转发时,要将其上游路由器除外。可靠的洪泛法是在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认)。图中的空心箭头表示确认分组。

为了确保链路状态数据库与全网的状态保持一致, OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。

由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,与整个互联网的规模并无直接关系。因此当互联网规模很大时, OSPF 协议要比距离向量协议 RIP 好得多。由于 OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100ms 。

若 N 个路由器连接在一个以太网上,则每个路由器要向其他 (N - 1) 个路由器发送链路状态信息,因而共有 N · (N - 1) 个链路状态要在这个以太网上传送。OSPF 协议对这种多点接入的局域网采用了指定的路由器(designated router)的方法,使广播的信息量大大减少。指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。

五、边界网关协议(BGP)(★)

1. BGP 的基本概念

边界网关协议(Border Gateway Protocol,BGP)是不同自治系统 AS 的路由器之间交换路由信息的协议,是一种外部网关协议。边界网关协议 BGP 常用于互联网的网关之间。

【思考】在不同自治系统 AS 之间的路由选择为什么不能使用前面讨论过的内部网关协议,如 RIP 或 OSPF?

【答】内部网关协议(如 RIP 或 OSPF)主要是设法使数据报在一个 AS 中尽可能有效地从源站传送到目的站。在一个 AS 内部也不需要考虑其他方面的策略。然而 BGP 使用的环境却不同。这主要是因为以下的两个原因:

  • 互联网的规模太大,使得 AS 之间路由选择非常困难,每个主干网路由器表中的项目数都非常庞大。对于 AS 之间的路由选择,要寻找最佳路由是很不现实的。

  • AS 之间的路由选择必须考虑政治、安全或经济等有关因素。

由于上述情况,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP 采用的是路径向量(path vector)路由选择协议,它与距离向量协议(如 RIP)和链路状态协议(如 OSPF)都有很大的区别。BGP 是应用层协议,它是基于 TCP 的。

2. BGP 的工作原理

BGP 的工作原理如下:

  • 在配置 BGP 时,每一个自治系统(AS)的管理员要选择至少一个路由器,作为该 AS 的“ BGP 发言人”。一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP发言人往往就是 BGP 边界路由器(但也可以不是 BGP 边界路由器)。

“ BGP 发言人”表明该路由器可以代表整个自治系统 AS 与其他自治系统 AS 交换路由信息。虽然 BGP 协议允许使用任何其他计算机作为 BGP 发言人,但大多数 AS 实际上是在一个路由器上运行 BGP 协议的

  • 一个 BGP 发言人与其他 AS 中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接(端口号为 179),然后在此连接上交换 BGP 报文以建立 BGP 会话(session),再利用 BGP 会话交换路由信息(如:增加了新的路由,或撤销过时的路由,以及报告出差错的情况等等)。使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer)。每个 BGP 发言人除了必须运行 BGP 外,还必须运行该 AS 所用的内部网关协议,如 OSPF 或 RIP 。
    下图所示为 BGP 发言人和自治系统 AS 的关系示意图。在图中画出了三个自治系统中的 5 个 BGP 发言人。

  • 边界网关协议 BGP 所交换的网络可达性的信息,就是要到达某个网络(用网络前缀表示)所要经过的一系列自治系统。当 BGP 发言人互相交换网络可达性的信息后,各 BGP 发言人就根据所用的策略,从收到的路由信息中找出到达各自治系统的较好路由。
    下图表示从上图的 AS1 上的一个 BGP 发言人构造出的自治系统连通图,它是树形结构,不存在回路。这种多级结构的网络拓扑决定了 BGP 路由选择协议的特点。

下图给出了一个 BGP 发言人交换路径向量的例子。

自治系统 AS2 的 BGP 发言人通知主干网的 BGP 发言人:“要到达网络 N1, N2, N3 和 N4 可经过 AS2 。”主干网在收到这个通知后,就发出通知:“要到达网络 N1, N2, N3 和 N4 可沿路径 (AS1, AS2) ”。同理,主干网还可发出通知:“要到达网络 N5, N6 和 N7 可沿路径 (AS1, AS3) 。”

3. BGP 的特点

  • BGP 交换路由信息的结点数量级是 AS 个数的数量级,这要比这些 AS 中的网络数少很多。

  • 要在许多自治系统之间寻找一条较好的路径,取决于找准正确的 BGP 发言人(或边界路由器),而每个 AS 中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得 AS 之间的路由选择不致过分复杂。

  • BGP 支持无分类域间路由选择 CIDR ,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。由于使用了路径向量的信息,就可以很容易地避免产生兜圈子的路由。如果一个 BGP 发言人收到了其他 BGP 发言人发来的路径通知,它就要检查一下本自治系统是否在此通知的路径中。如果在这条路径中,就不能采用这条路径(因为会兜圈子)。

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

4. BGP 的报文类型

BGP-4 共使用 4 种报文:

  • 打开(Open)报文:用来与相邻的另一个 BGP 发言人建立关系,使通信初始化。

  • 更新(Update)报文:用来通知某一路由的信息,以及列出要撤销的多条路由。

  • 保活(Keepalive)报文:用来周期性地证实邻站的连通性。

  • 通知(Notification)报文:用来发送检测到的差错。

若两个邻站属于两个不同 AS ,而其中一个邻站打算和另一个邻站定期地交换路由信息(一个 BGP 发言人想与另一个 AS 的 BGP 发言人建立邻站关系),这就应当有一个商谈的过程(因为很可能对方路由器的负荷已很重因而不愿意再加重负担)。因此,一开始向邻站进行商谈时就必须发送 Open 报文。如果邻站接受这种邻站关系,就用 Keepalive 报文响应。这样,两个 BGP 发言人的邻站关系就建立了。

一旦邻站关系建立了,就要继续维持这种关系。双方中的每一方都需要确信对方是存在的,且一直在保持这种邻站关系。为此,这两个 BGP 发言人彼此要周期性地交换 Keepalive 报文(一般每隔3 0 秒)。Keepalive 报文只有 19 字节长(只用 BGP 报文的通用首部),因此不会造成网络上太大的开销。

Update 报文是 BGP 协议的核心内容。BGP 发言人可以用 Update 报文撤销它以前曾经通知过的路由,也可以宣布增加新的路由。撤销路由可以一次撤销许多条,但增加新路由时,每个更新报文只能增加一条。

BGP 可以很容易地解决距离向量路由选择算法中的“坏消息传播得慢”这一问题。当某个路由器或链路出故障时,由于 BGP 发言人可以从不止一个邻站获得路由信息,因此很容易选择出新的路由。距离向量算法往往不能给出正确的选择,是因为这些算法不能指出哪些邻站到目的站的路由是独立的。

六、路由协议之间的比较

RIP 、OSPF 协议与 BGP 的比较如下图所示。

七、例题

① 在 RIP 协议中,当路由器收到相邻路由器发来的路由更新信息时,若发现有更优的路由,则( A )。
A. 直接更新自己的路由表
B. 向相邻路由器发送确认信息后再更新自己的路由表
C. 向所有相邻路由器发送确认信息后再更新自己的路由表
D. 不更新自己的路由表

② OSPF 协议使用( A )分组来保持与其邻居的连接。
A. Hello
B. Keepalive
C. SPF(最短路径优先)
D. LSU(链路状态更新)

③ BGP 交换的网络可达性信息是( A )。
A. 到达某个网络所经过的路径
B. 到达某个网络的下一跳路由器
C. 到达某个网络的链路状态摘要信息
D. 到达某个网络的最短距离及下一跳路由器
【 BGP 仅力求寻找一条能够到达目的网络且较好的路由(不能兜圈子),而并非寻找一条最佳路由。因此 BGP 交换的路由信息是到达某个目的网络所要经过的各个自治系统序列而不仅仅是下一跳】

④ RIP 、OSPF协议 、BGP 的路由选择过程分别使用( D )。
A. 路径向量协议、链路状态协议、距离向量协议
B. 距离向量协议、路径向量协议、链路状态协议
C. 路径向量协议、距离向量协议、链路状态协议
D. 距离向量协议、链路状态协议、路径向量协议

I、RIP 是一种分布式的基于距离向量的路由选择协议,它使用跳数来度量距离。RIP 选择的路径不一定是时间最短的,但一定是具有最小距离(最少跳数)的路径。
II、OSPF 协议使用分布式的链路状态协议,通过与相邻路由器频繁交流链路状态信息,来建立全网的拓扑结构图,然后使用 Diikstra 算法计算从自己到各目的网络的最优路径。
III、因为 BGP 仅力求寻找一条能够到达目的网络且较好的路由(不能兜圈子),而并非寻找一条最佳路由,所以它采用的是路径向量路由选择协议。在 BGP 中,每个自治系统选出一个 BGP 发言人,这些发言人通过相互交换自己的路径向量(即网络可达性信息)后,就可找出到达各自治系统的较好路由。

⑤ 从数据封装的角度看,下列( B )协议属于 TCP/IP 参考模型的应用层。
I. RIP
II. OSPF
III. BGP
IV. ICMP
A. I 、II
B. II 、III
C. I 、IV
D. I 、II 、III 、IV
【RIP [UDP] 和 BGP 协议 [TCP] 属于应用层,OSPF 和 ICMP 协议属于网络层】

⑥ 考虑如下图所示的子网,该子网使用了距离向量算法,下面的向量刚刚到达路由器 C:来自 B 的向量为 (5, 0, 8, 12, 6, 2);来自 D 的向量为 (16, 12, 6, 0, 9, 10);来自 E 的向量为 (7, 6, 3, 9, 0, 4)。经过测量,C 到 B 、D 和 E 的延迟分别为 6 、3 和 5 ,则 C 到达所有结点的最短路径是( B )。


A. (5, 6, 0, 9, 6, 2)
B. (11, 6, 0, 3, 5, 8)
C. (5, 11, 0, 12, 8, 9)
D. (11, 8, 0, 7, 4, 9)

⑦ 某分组交换网络的拓扑如下图所示,各路由器使用 OSPF 协议且均已收敛,各链路的度量已在图中标注。假设各段链路的带宽均为100Mb/s,分组长度为 1000B,其中分组的首部长度为 20B。若主机 A 向主机 B 发送一个大小为 980000B 的文件,忽略分组的传播时延和封装/解封时间,从 A 发送开始到 B 接收完毕为止,需要的时间是( C )。


A. 80.08ms
B. 80.16ms
C. 80.32ms
D. 80.64ms
【根据 OSPF 算法,从 A 到 B 转发经过的链路代价依次为 2、3、1、1、2 ,一共经过 4 个路由器。】

⑧ 【2010统考真题】某自治系统内采用 RIP,若该自治系统内的路由器 R1 收到其邻居路由器 R2 的距离向量,距离向量中包含信息 <net1 ,16>,则能得出的结论是( D )。
A. R2 可以经过 R1 到达 net1 ,跳数为 17
B. R2 可以到达 net1 ,跳数为 16
C. R1 可以经过 R2 到达 net1 ,跳数为 17
D. R1 不能经过 R2 到达 net1

⑨ 【2016 统考真题】假设下图中的 R1、R2、R3 采用 RIP 交换路由信息,且均已收敛。若 R3 检测到网络 201.1.2.0/25 不可达,并向 R2 通告一次新的距离向量,则 R2 更新后,其到达该网络的距离是( B )。


A. 2
B. 3
C. 16
D. 17
【因为 RIP 的特点:“坏消息传得慢”,所以一旦网络出现故障,就要经过较长时间才能将故障消息传送到所有路由器。】

⑩ 【2017统考真题】直接封装 RIP、OSPF、BGP 报文的协议分别是( D )。
A. TCP、UDP、IP
B. TCP、IP、UDP
D. UDP、IP、TCP
C. UDP、TCP、IP

(11) 【2021 统考真题】某网络中的所有路由器均采用距离向量路由算法计算路由。若路由器 E 与邻居路由器 A、B、C 和 D 之间的直接链路距离分别是 8、10、12 和 6 ,且 E 收到邻居路由器的距离向量如下表所示,则路由器 E 更新后的到达目的网络 Net1 ~ Net4 的距离分别是( D )。


A. 9, 10, 12, 6
B. 9, 10, 28, 20
C. 9, 20, 12, 20
D. 9, 20, 28, 20

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

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

相关文章

跑步戴的耳机哪个品牌的好?五大高口碑骨传导耳机推荐!

跑步&#xff0c;作为一项简单而高效的运动方式&#xff0c;越来越受到人们的青睐。在跑步的过程中&#xff0c;音乐往往能够成为我们最好的伴侣&#xff0c;它不仅能够激发我们的热情&#xff0c;还能帮助我们保持节奏&#xff0c;让跑步变得更加轻松愉快。然而&#xff0c;选…

两个月冲刺软考——判断是否为阻塞节点,是否可化简,化简顺序是什么?存储器的分层结构;可屏蔽中断与不可屏蔽中断

1.判断是否为阻塞节点&#xff0c;是否可化简&#xff0c;化简顺序是什么&#xff1f; 首先要理解什么是阻塞节点&#xff1f;所谓阻塞节点就是从这个进程开始执行&#xff0c;会让程序陷入死锁&#xff0c;执行不了。解题关键就在于选择入口&#xff1a;挨个去尝试先执行P1、…

Windows安装MinIO对象存储服务详细版本

一、什么是MinIO? Minio 是一个高性能、开源的对象存储服务器。 Minio 具有以下主要特点和优势&#xff1a; 一、功能特点 1. 多平台支持 - 可以在各种操作系统上运行&#xff0c;包括 Linux、Windows 和 macOS。这使得它可以适应不同的服务器环境和开发需求。 2. 对象存储 - …

【从头写CAD】2 建立项目及角度类

文章目录 一、说明二、操作步骤三、角度单位四、源代码1. mod.rs 内容2. angle.rs 内容3. main.rs 补充调试内容 五、运行1. 运行程序 一、说明 CAD离不开角度数据&#xff0c;目前CAD开源项目多用double类型表示角度。我认为有必要独立出来&#xff0c;让三角函数仅出现该类内…

白酒酿造:传统工艺与现代科技的整合

在千年的历史长河中&#xff0c;白酒酿造技艺如一颗璀璨的明珠&#xff0c;闪烁着中华文明的智慧光芒。如今&#xff0c;随着科技的飞速发展&#xff0c;传统酿造工艺与现代科技在这片古老的土地上交织碰撞&#xff0c;共同书写着白酒酿造的新篇章。豪迈白酒&#xff08;HOMANL…

828华为云征文|基于华为云Flexus云服务器X搭建FTP服务器

❀目录 ❀概述❀特点❀环境准备❀安装❀配置文件修改❀创建目录、修改权限❀控制台安全组开启21端口❀工具验证❀总结 ❀概述 FTP文件传输协议是一种在网络中进行文件传输的广泛使用的标准协议。作为网络通信中的基础工具&#xff0c;FTP允许用户通过客户端软件与服务器进行交…

栈和队列——用栈实现队列

栈的特点是先进后出&#xff0c;队列的特点是先进先出。根据题中要求&#xff0c;我们应用两个栈实现一个队列。我们可以类比用队列实现栈&#xff0c;我们可以先将元素都插入到栈1中&#xff0c;当我们想要取出元素时&#xff0c;我们可以将栈1中的所有数据依次插入到栈2中&am…

污点、容忍、不可调度、排水、数据卷

目录 污点taint 污点的格式 1. key:effect 键名&#xff1a;污点类型 2. keyvalue:effect 键名数值&#xff1a;污点类型 污点的类型 1. NoSchedule 2. PreferNoSchedule 3. NoExecute&#xff08;驱逐&#xff09; 设置污点&#xff08;主节点操作&#xff09…

STM32:通过旋转计数器的计数控制舵机旋转的角度

声明&#xff1a;本博客为各模块之间结合的自主研究学习。 目录 一、按键操控舵机旋转&#xff08;单向&#xff09; 1.1、实物图讲解 1.2、代码讲解 1.2.1、PWM.c 具体步骤&#xff1a; 完整代码&#xff1a; 1.2.2、PWM.h 1.2.3、Servo.c && Servo.h 1.2.4、…

ts 类型分类

目录 01 ts 相关指令 02 类型声明空间与变量声明空间 03 类型注解和类型推断 04 类型分类 , 联合类型与交叉类型 05 never类型 any类型 和unknown类型 01 ts 相关指令 全局安装 typescript 模块 npm i -g typescript 安装完成之后 可以将ts文件转换成js文件 tsc xxx.ts…

为什么越来越多的人选择开放式耳机?平价高品质蓝牙耳机推荐

越来越多的人选择开放式耳机&#xff0c;主要是因为其具有多方面的优势&#xff0c;具体如下&#xff1a; 佩戴舒适度高&#xff1a;开放式耳机不入耳&#xff0c;不堵塞耳道&#xff0c;避免了对耳道的压迫和摩擦&#xff0c;长时间佩戴也不易产生闷热感和不适感。例如&#x…

windows安装git

windows安装git 1.通过git官网下载 官网&#xff1a;https://git-scm.com/downloads 2.安装git &#xff08;1&#xff09;找到下载到的文件&#xff0c;进行双击进行安装 &#xff08;2&#xff09;安装使用说明点击Next &#xff08;3&#xff09;选择自己的安装地址&a…

大屏可视化:阿里 DataV 大屏怎么做自适应的?

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 阿里 DataV 大屏是一款功能强大的数据可视化应用搭建工具&#xff0c;由阿里云提供&#xff0c;旨在帮助用户通过图形化的界面轻松搭建专业水准的可视化应用。 下面我们一起看下 DataV 大屏 是如何做自适应…

【嵌入式】uint32值写入到二进制文件中的存储详情

背景 项目预留100字节用于存储参数文件。现在有些数值一个字节表示不够&#xff0c;需要用4个字节。比如数值1144201745&#xff0c;对应的十六进制0x44332211,那么在二进制中存储是怎么样的呢&#xff1f;做个总结 分析 写了一个sample&#xff0c;把uint32_t u32Value1{0x…

【ThreadLocal源码】深入浅出ThreadLocal

【ThreadLocal源码】深入浅出ThreadLocal-CSDN博客

Linux之Prometheus

认识普罗米修斯 1、prometheus介绍 Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合, 由go语言开发。 适合监控容器平台, 因为kubernetes(俗称k8s)的流行带动了prometheus的发展。 PS&#xff1a;文档使用prometheus监控物理服务器。 prometheus的…

数组程序基础知识

为了处理方便&#xff0c;把具有相同类型的变量按有序的形式组织起来。这些同类数据元素的集合称之为数组。数组可分为数值数组、字符数组、指针数组、结构数组等。 01--一维数组 在使用数组前需要先定义&#xff1a; 类型说明符 数组名[常量表达式]&#xff1b; 类型说明符…

因 Mysql root 密码过于简单导致 Mysql 连接失败的解决方法

问题&#xff1a; Access denied for user ‘root’‘192.168.xx.xx’ (using password: YES) 用户“root”“192.168.xx.xx”的访问被拒绝&#xff08;使用密码&#xff1a;YES&#xff09; 解决方法&#xff1a; 1、使用root用户登录mysql&#xff0c;通过下面的命令给ro…

数据管理能力成熟度评估模型DCMM

一、引言 DCMM&#xff08;Data Management Capability Maturity Assessment Model&#xff0c;数据管理能力成熟度评估模型&#xff09;是我国首个数据管理领域国家标准&#xff08;GB/T 36073-2018&#xff09;&#xff0c;由中国国家标准化管理委员会于2018年3月15日发布&am…

FreeRTOS基础入门——FreeRTOS信号量及二值信号量(十三)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…