【考纲内容】

(一)网络层的功能

异构网络互连;路由与转发;SDN基本概念;拥塞控制

(二)路由算法

静态路由与动态路由:距离-向量路由算法;链路状态路由算法;层次路由视频讲解

(三) IPv4

IPv4分组:IPv4地址与NAT;子网划分与子网掩码、CIDR、路由聚合、ARP、DHCP 与 ICMP

(四) IPv6

IPv6的主要特点;IPv6地址

(五) 路由协议

自治系统;域内路由与域间路由;RIP路由协议;OSPF路由协议;BGP路由协议

(六) IP组播

组播的概念;IP组播地址

(七) 移动IP

移动IP的概念;移动IP通信过程

(八) 网络层设备

路由器的组成和功能;路由表与路由转发

【复习提示】

本章是历年考査的重中之重,尤其是结合第3章、第5章、第6章出综合题的概率很大。其 中IPv4以及路由的相关知识点是核心,历年真题都有涉及,因此必须牢固掌握其原理,也要多做 题,以便灵活应用。本章的其他知识点,如IP组播、移动IP、IPv6也要有所了解。

4.1网络层的功能

互联网在网络层的设计思路是,向上只提供简单灵活的、无连接的、尽最大努力交付的 数据报服务。也就是说,所传送的分组可能出错、丢失、重复、失序或超时,这就使得网络 中的路由器比较简单,而且价格低廉。如果主机中的进程之间的通信需要是可靠的,那么可 以由更高层的传输层来负责。采用这种设计思路的好处是:网络的造价大大降低,运行方式 灵活,能够适应多种应用。互联网能够发展到今日的规模,充分证明了当初釆用这种设计思 想的正确性。

4.1.1异构网络互连

要在全球范围内把数以百万计的网络互连起来,并且能够互相通信,是一项非常复杂的任务, 此时需要解决许多问题,比如不同的寻址方案、不同的网络接入机制、不同的差错处理方法、不 同的路由选择机制等等。用户的需求是多样的,没有一种单一的网络能够适应所有用户的需求。 网络层所要完成的任务之一就是使这些异构的网络实现互连。

网络互连是指将两个以上的计算机网络,通过一定的方法,用一些中间设备(又称中继系统) 相互连接起来,以构成更大的网络系统。根据所在的层次,中继系统分为以下4种:

1) 物理层中继系统:转发器,集线器。

2) 数据'链路层中继系统:网桥或交换机。

3)网络层中继系统:路由器。

4)网络层以上的中继系统:网关。

使用物理层或数据链路层的中继系统时,只是把一个网络扩大了,而从网络层的角度看,它 仍然是同一个网络,一般并不称为网络互连。因此网络互连通常是指用路由器进行网络互连和路 由选择。路由器是一台专用计算机,用于在互联网中进行路由选择。

注意:由于历夹原因,许多有关TCP/IP的文献也把网络层的路由器称为网关。

TCP/IP体系在网络互连上采用的做書是在网络层釆用标准化协议,但相互连接的网络可以是 异构的。图.4J⑶表丞用进多迓算机网络豳过一些路由器进行互连。由于参加互连的计算机网络 都使用相同的IP协议,因此可故把云连寿的网络视为如图4.1(b)所示的一个虚拟IP网络。

虚拟互连网络也就是逻辑互连网络,其意思是互连起来的各种物理网络的异构性本来是客观 存在的,但是通过IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网 络。这种使用IP协议的虚拟互连网络可简称为IP网络。

使用IP网络的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样, 而看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议等)。

4.1.2路由与转发

路由器主要完成两个功能:一是路由选择(确定哪一条路径),二是分组转发(当一个分组 到达时所采取的动作)。前者是根据特定的路由选择协议构造出路由表,同时经常或定期地和相 邻路由器交换路由信息而不断地更新和维护路由表。后者处理通过路由器的数据流,关键操作是 转发表査询、转发及相关的队列管理和任务调度等。

1) 路由选择。指按照复杂的分布式算法,根据从各相邻路由器所得到的关于整个网络拓扑 的变化情况,动态地改变所选择的路由。

2) 分组转发。指路由器根据转发表将用户的IP数据报从合适的端口转发出去。

路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找 过程最优化,路由表则需要对网络拓扑变化的计算最优化。在讨论路由选择的原理时,往往不去 区分转发表和路由表,而是笼统地使用路由表一词。

4.1.3 SDN的基本概念

网络层的主要任务是转发和路由选择。可以将网络层抽象地划分为数据平面(也称转发层面) 和控制平面,转发是数据平面实现的功能,而路由选择是控制平面实现的功能。

软件定义网络(Software Defined Network,SDN)是近年流行的一种创新网络架构,它釆用集中式的控制平面和分布式 的数据平面,两个平面相互分离,控制平面利用控制-数据接口对数据平面上的路由器进行集中 式控制,方便软件来控制网络。在传统互联网中,每个路由器既有转发表又有路由选择软件,也 就是说,既有数据平面又有控制平面。但是在图4.2所示的SDN结构中,路由器都变得简单了, 它的路由选择软件都不需要了,因此路由器之间不再相互交换路由信息。在网络的控制平面有一 个逻辑上的远程控制器(可以由多个服务器组成)。远程控制器掌握各主机和整个网络的状态, 为每个分组计算出最佳路由,通过Openflow协议(也可以通过其他途径)将转发表(在SDN中 称为流表)下发给路由器。路由器的工作很单纯,即收到分组、查找转发表、转发分组。

image-20230702203708451

这样,网络又变成集中控制的,本来互联网是分布式的。SDN并非要把整个互联网都改造成 如图4.2所示的集中控制模式,这是不现实的。然而,在某些具体条件卜,,特别是像一些大型的 数据中心之间的广域网,使用SDN模式来建造,就可以使网络的运行效率更高。

SDN的可编程性通过为开发者们提供强大的编程接口,使得网络具有很好的编程性。对上层 应用的开发者,SDN提供的编程接口称为北向接口,北向接口提供了一系列丰富的APL开发者 可以在此基础上设计自己的应用,而不必关心底层的硬件细节。SDN控制器和转发设备建立双向 会话的接口称为南向接口,通过不同的南向接口协议(如Openflow), SDN控制器就可兼容不同 的硬件设备,同时可以在设备中实现上层应用的逻辑。SDN控制器集群内部控制器之间的通信接 口称为东西向接口,用于增强整个控制平面的可靠性和可拓展性。

image-20230702205022971

SDN的优点:①全局集中式控制和分布式高速转发,既利于控制平面的全局优化,又利于高 性能的网络转发。②灵活可编程与性能的平衡,控制和转发功能分离后,使得网络可以由专有的 自动化工具以编程方式配置。③降低成本,控制和数据平面分离后,尤其是在使用开放的接口协 议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。

SDN的问题:①安全风险,集中管理容易受攻击,如果崩溃,整个网络会受到影响。②瓶颈 问题,原本分布式的控制平面集中化后,随着网络规模扩大,控制器可能成为网络性能的瓶颈

交换原理补充:

与传统 IP 网络的区别——控制平面、数据转发平面分离。特征:集中控制、开放接口、网络虚拟化。

SDN 的核心诉求:让软件应用参与到网络控制中并起到主导作用,而不是让各种固定模式的协议来控制网络。

转发、控制、应用的三层架构:

  • 转发层(基础设施层):由转发设备组成。(流表处理、数据转发)
  • 控制层:由 SDN 控制软件组成,与转发层可通过 OpenFlow 协议通信。(设备管理和拓扑、流表控制和下发)
  • 应用层:不同的应用逻辑通过控制层开放的 API 管理能力控制设备的报文转发功能。(网络资源统一管理)

南北向接口:

  • 北向接口,为应用提供编程接口。暂时没有标准化。
  • 南向接口,设备控制信令,控制设备的转发行为。可用标准化 OpenFlow 协议。

Openflow 基本概念:将转发面设备抽象为一个由多级流表(Flow Table)驱动的转发模型。

  • 转发面抽象成多级流水线,每个节拍匹配关键字、操作指令集。
  • 转发面的行为:根据转发表和报文头决定下一跳及新的报文格式。

流表的作用、与路由表的区别:

  • 流表是 OpenFlow 对网络设备的数据转发功能的抽象,表项包括了网络各个层次的配置信息。
  • 传统的路由表无法更改、不可编程。

4.1.4拥塞控制

在通信子网中,因出现过量的分组而引起网络性能下降的现象称为拥塞。例如,某个路由 器所在链路的带宽为R B/s,如果IP分组只从它的某个端口进入,那么其速率为 $r{in} B/s$ 。当 $r{in}=R$ 时,可能看起来是件“好事”,因为链路带宽被充分利用。但是,如图4.3所示,当分组到达路由器的速率接近R时,平均时延急剧增加,并且会有大量的分组被丢弃(路由器端口的缓冲区是有限的),整个网络的吞吐量会骤降,源与目的地之间的平均时延也会变得近乎无穷大。

image-20230702212112986

image-20230703195758652

判断网络是否进入拥塞状态的方法是,观察网络的吞吐量与网络负载的关系:如果随着网络负载的增加,网络的吞吐量明显小于正常的吞吐量,那么网络就可能已进入''轻度拥塞”状态;如果网络的吞吐量随着网络负载的增大而下降,那么网 络就可能巳进入拥塞状态;如果网络的负载继续增大,而网络的吞吐量下降到零,那么网络就可 能已进入死锁状态。

为避免拥塞现象的出现,要釆用能防止拥塞的一系列方法对子网进行拥塞控制。拥塞控制主 要解决的问题是如何获取网络中发生拥塞的信息,从而利用这些信息进行控制,以避免由于拥塞 而出现分组的丢失,以及严重拥塞而产生网络死锁的现象。

拥塞控制的作用是确保子网能够承载所达到的流量,这是一个全局性的过程,涉及各方面的 行为:主机、路由器及路由器内部的转发处理过程等。单一地增如I资源并不能解决拥塞。

流量控制和拥塞控制的区别:流量控制往往是指在发送端和接收端之间的点对点通信量的控 制。流量控制所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。而拥塞控制必 须确保通信子网能够传送待传送的数据,是一个全局性的问题,涉及网络中所有的主机、路由器 及导致网络传输能力下降的所有因素。

拥塞控制的方法有两种:

1) 开环控制。在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产 生拥塞。这是一种静态的预防方法。一旦整个系统启动并运行,中途就不再需要修改。 开环控制手段包括确定何时可接收新流量、何时可丢弃分组及丢弃哪些分组,确定何种 调度策略等。所有这些手段的共性是,在做决定时不考虑当前网络的状态。

2) 闭环控制。事先不考虑有关发生拥塞的各种因素,釆用监测网络系统去监视,及时检测
哪里发生了拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行,并解决 出现的问题。闭环控制是基于反馈环路的概念,是一种动态的方法。

4.2路由算法

4.2.1静态路由与动态路由

路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。从能否随网络的通 信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类。

静态路由算法(又称非自适应路由算法)。指由网络管理员手工配置的路由信息。当网络的 拓扑结构或链路的状态发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息。 它不能及时适应网络状态的变化,对于简单的小型网络,可以釆用静态路由。

动态路由算法(又称自适应路由算法)。指路由器上的路由表项是通过相互连接的路由器之 间彼此交换信息,然后按照一定的算法优化出来的,而这些路由信息会在一定时间间隙里不断更 新,以适应不断变化的网络,随时获得最优的寻路效果。

静态路由算法的特点是简便和开销较小,在拓扑变化不大的小网络中运行效果很好。动态路 由算法能改善网络的性能并有助于流量控制;但算法复杂,会增加网络的负担,有时因对动态变 化的反应太快而引起振荡,或反应太慢而影响网络路由的一致性,因此要仔细设计动态路由算法, 以发挥其优势。常用的动态路由算法可分为两类:距离-向量路由算法和链路状态路由算法。

4.2.2距离-向量路由算法

见后RIP协议

(课本P285补充)

4.2.3链路状态路由算法

1979 年以前 ARPANET 一直使用距离矢量路由算法,而在此之后则改为使用链路状态路由算法。导致距离适量算法退位的主要问题在于,当网络拓扑结构发生变化后距离矢量路由算法需要太长时间才能收敛到稳定状态(由于无穷计数问题)。因此,距离矢量路由算法被一个全新的算法所替代,该算法称为链路状态路由算法( link state routing)。今天,链路状态路由算法的变种算法——IS-IS 或者 OSPF 己经成为大型网络或 Internet 应用最为广泛的路由算法。

链路状态路由算法的设计思想非常简单,可以用五个部分加以描述。每一个路由器必须完成以下的事情,算法才能正常工作:

(1 )发现它的邻居节点,并了解其网络地址。

(2 )设置到每个邻居节点的距离或者成本度量值。

(3 )构造一个包含所有刚刚获知的链路信息包。

(4 )将这个包发送给所有其他的路由器,并接收来自所有其他路由器的信息包。

(5 )计算出到每个其他路由器的最短路径。

实际上,算法将完整的拓扑结构分发给了每一个路由器。然后每个路由器运行 Dijkstra算法就可以找出从本地到每一个其他路由器的最短路径。下面我们详细地考虑上述每一个步骤。

发现邻居

当一个路由器启动时,它的第一个任务是找出哪些路由器是它的邻居。为了实现这个目标,它只需在每一条点到点线路上发送一个特殊的 HELLO 数据包。线路另一端的路由器应该返回一个应答说明自己是谁。这些名字必须是全局唯一的,因为当一个远程路由器以后昕到有三个路由器都能连接到 F 时,它必须能够确定这三个路由器所提到的 F 是同一个路由器 F 。

当两个或者多个路由器通过一个广播链路连接(比如一个交换机、环或经典以太网),情形会稍微复杂一些。图 5-11(a)显示了一个广播 LAN 直接与三个路由器 A 、C 和 F 连接的情形。如图所示,每个路由器都连接到一个或者多个其他的路由器上。

image-20230703213511332

广播 LAN 为连接到其上的任何一对路由器提供了彼此的连通性。然而,把 LAN 建模成许多个点到点链路会增大拓扑结构,从而导致浪费消息。模拟局域网的一个更好方法来是把它看作一个节点,如图 5-11(b )所示。在这里,我们引入了一个新的人造节点 N,它与 A,C 和 F 连接。 LAN 上的一个指定路由器( designated router)被选中替代 N 运行路由协议。事实上,从 LAN 上的 A 到 C 是可能的,这里用路径 ANC 表示这条路径。

设置链路成本

为了寻找最短路径,链路状态路由算法需要每条链路以距离或成本度量。到邻居的成本可自动设置或由网络运营商配置的度量。一种常用的选择是使成本与链路带宽成反比。例如,lGbps 以太网的成本可能是 l ,而 100 Mbps 以太网的成本可能是 10。这样可以使得高容量的路径成为路由更好的选择。

如果网络在地理上分散,链路的延迟可以作为成本的组成部分,这样才能更好地选择较短链路上的路径。确定这种延迟的最直接方法是通过线路给另一边发送一个特殊的ECHO 数据包,要求对方立即发回。通过测量往返时间再除以 2,发送路由器可以得到一个合理的延迟估算值。

构造链路状态包

一旦收集到了所需要的交换信息,每个路由器的下一步工作是构建一个包含所有这些信息的数据包。该数据包的内容首先是发送方的标识符,接着是一个序号( Seq)和年龄(Age,后面再介绍),以及一个邻居列表。对于每个邻居,同时要给出到这个邻居的延迟。图 5-12 (a)显示了一个网络实例,每条线路上标出了延迟信息。这 6 个路由器所对应的链路状态数据包如图 5-12(b )所示。

image-20230703213749554

构造链路状态数据包很容易。难的是确定什么时候构造数据包。一种可能的做法是周期性地创建数据包,也就是说,以一定的时间间隔创建链路状态数据包。另一种可能做法是每当发生某些重要的事情时才创建数据包,比如当一条线路断掉或者一个邻居节点停机时,或当它们重新恢复运行时,或当它们的特性发生了一定变化时。

分发链路状态包

链路状态路由算法最技巧的部分在于分发链路状态数据包。所有路由器必须快速并可靠地获得全部的链路状态数据包。如果不同的路由器使用了不同版本的拓扑结构,那么它们计算出来的路由可能会不一致,例如出现环路、目标机器不可达以及其他的问题。

首先,我们描述最基本的发布算法,然后再对它进行改进。基本思路是使用泛洪法将链路状态数据包分发给所有路由器。为了控制泛洪规模,每个数据包都包含一个序号,序号随着每一个新数据包发出而逐一递增。路由器记录下它所看到的所有(源路由器、序号〉对。当一个新的链路状态数据包到达时,路由器检查这个新来的数据包是否己经出现在上述观察到的列表中。如果这是一个新数据包,则把它转发到除入境线路之外的所有其他线路上。如果这是一个重复数据包,则将它丢弃。如果数据包的序号小于当前所看到过的来自该源路由器的最大序列号,则它将被当作过时数据包而拒绝接受,因为路由器己经有了更新的数据。

这个算法还有几个问题有待处理,不过,这些问题都是可管理的。第一,如果序号绕回,可能会产生混淆。这里的解决方案是使用一个 32 位的序号。即使每秒钟产生一个链路状态数据包,也需要 137 年才可能发生绕回,所以,这种可能性可以忽略不计。其次,如果一个路由器崩溃了,那么它将丢失所有的序号记录表。如果它再从 0 开始,那么,下一个数据包将被作为重复数据包而拒绝。再次,如果一个序号被破坏了,比如发送方发送的序号 4,但是由于产生了1 位错误,所以接收方看到的序号是 65 540 ,那么,序号从 5 到 65 540 的数据包都将被当作过时数据包而拒绝接受,因为接收方认为当前的序号是 65 540 。

所有这些问题的解决方案都一样:在每个数据包的序号之后包含一个年龄( age )宇段,并且每秒钟将年龄减 1 。当年龄宇段的值被减到 0 时,来自路由器的该信息将被丢弃。通常情况下,每隔一段时间,比如说 10 秒,一个新的数据包就会到来:所以,只有当一个路由器停机时(或者 6 个连续的数据包被丢失,这种情形发生的可能性不大),路由器信息才会超时。在初始泛洪过程中,每个路由器也要递减 age 宇段,这样可以确保没有数据包丢失,也不会无限制生存下去(如果一个数据包的 age 为 0,则被丢弃〉。

对这个算法做一些改进可以使它更加健壮。当一个链路状态数据包被泛洪到一千路由器时,它并没有立即被排入队列等待传输。相反,它首先被放到一个保留区中等待一段时间。如果在这个数据包被转发出去之前,另一个来自于同一个源路由器的链路状态数据包也到来了,那么就比较它们的序号。如果两个数据包的序号相等,则丢弃重复数据包。如果两者不相等,则丢弃老的数据包。为了防止线路产生错误导致丢包和错包,所有的链路状态数据包都要被确认。

在图 5-12(a)所示的网络中,路由器 B 使用的数据结构如图 5-13 所示。这里的每一行对应于一个刚刚到达的,但是还没有完全处理完毕的链路状态数据包。该表记录了数据包的来源、序号和年龄,以及状态数据。而且,针对 B 的三条线路(分别到 A、C 和 F)还记录了发送和确认标志。发送标志表明该数据包必须在所指示的线路上发送。确认标志表明它必须在这条线路上得到确认。

image-20230703214553693

在图 5-13 中,来自 A 的链路状态数据包可以直接到达,所以 B 必须将它发送给 C 和F,并且按照标志位的指示向 A 发回确认。类似地,必须把来自 F 的数据包转发给 A 和 C,并且向 F 返回确认。然而,第三个数据包,即来自 E 的数据包有所不同。它到达两次,一次经过 EAB ,另一次经过 EFB. 因此,它只需被发送给 C,但是要向 A 和 F 确认,正如标志位所示。

如果一个重复数据包到来时原来的数据包仍然在缓冲区中,那么标志位必须作相应的改变。例如,如果表中第四项被转发出去之前, C 的链路状态数据包的一份副本从 F 到达,那么,这六位将被改变为 100011 ,以表明该数据包必须向 F 确认,但是不用转发了。

计算新路由

一旦路由器己经积累了全部的链路状态数据包之后,它就可以构造出完整的网络图,因为每条链路都己经被表示出来了。事实上,每条链路被表示了两次,每个方向各表示一次。不同方向的链路可能有不同的成本。最短路径计算可找到从 A 到 B 与从 B 到 A 不同的路径。

现在可以在路由器本地运行 Dijkstra 算法,以便构建出从本地出发到所有可能目标的最短路径。这个算法的运行结果告诉路由器到达每个目的地能够走哪条链路。这个信息被安装在路由表中,而且恢复正常操作。

相比距离矢量算法,链路状态路由算法需要更多的内存和计算。对于一个具有 n 个路由器的网络,每个路由器有 k 个邻居,那么,用于存储输入数据所要求的内存与 h 成正比,这至少与列出全部目的地的路由表一样大。而且,计算时间的增长快过 h,即使采用最有效的数据结构,在大型网络中运行这个算法依然是个问题。不过,在许多实际场合,链路状态路由算法工作得很好,因为它没有慢收敛问题。

链路状态路由算法被广泛地应用于实际网络中,所以现在提一下某些使用该算法的例子。许多 ISP 使用中间系统到中间系统(IS-IS, Intermediate System-Intermediate System)链路状态协议( Oran,1999 ),它是专门为 DECnet 而设计的,后来被 ISO 采纳用于 OSI协议;自此以后,它被作了多次修改以便能够处理其他的协议,例如最著名的 IP 协议。开放最短路径优先 C OSPF, Open Shortest Path First )是另一个主流链路状态协议。它是在 IS-IS 之后几年由 IETF 设计的,而且它吸收了 IS-IS 的许多创意。这些创意包括:一种泛洪链路状态更新的自稳定方法、 LAN 上的指定路由器概念以及计算和支持路径分裂和多个度量的方法。因此,IS-IS 和 OSPF 之间的差异非常小。其中一个最重要的差别是,IS-IS 可同时携带多个网络层协议的信息(比如,IP 、 IPX 和 AppleTalk),OSPF 不具备这个特性。对于大型的多协议环境这一特性是个优势。OSPF 更广泛地应用在公司网络,而 IS-IS 则更多地应用在 ISP 网络。

OSPF

Internet 由大量的独立网络或自治系统( AS, AutonomousSystem )构成,并由不同的组织运营,这些组织通常是公司、大学或ISP。在自己网络内部,一个组织可以使用自己的内部路由算法,或者更流行的名称叫域内路由算法(intradomain routing )。不过,流行的只有极少数几个标准协议。在本节,我们将了解域内路由问题,并考查 OSPF 协议,这是一个被普遍实际使用的路由协议。域内路由协议也称为内部网关协议( interior gateway protocol )。在下一节,我们将探讨独立运营网络之间的路由问题,或域间路由( interdomain routing )问题。在这种情况下,所有网络必须使用相同的域间路由协议外部网关协议( exterior gateway protocol )。Internet 采用的域间路由协议是边界网关协议( BGP, Border Gateway Protocol )。

由于有了其他路由协议的长期工作经验,负责设计新协议的工作组列出了一系列必须要满足的需求。

第一,该算法必须发表在公开的文献中,这便是 OSPF 中 0 (开放的〉的含义。由某一家公司拥有的私有方案是无法做到这一点的。

第二,新的协议必须支持多种距离度量,包括物理距离、延迟等。

第三,它必须是一个动态算法,能够自动而且快速地适应网络拓扑变化。

第四,对于 OSPF 来说这是新的需求,它必须支持基于服务类型的路由。新的协议必须能够区分实时流量和其他的流量,并使用不同的路由方法。当时,IP 协议有一个服务类型(type of service)宇段,但是没有一个路由协议使用这个字段。OSPF 也包含了该宇段,但是仍然没有人使用它,最终它又被去掉了。也许这种需求有点超前,因为它先于 IETF 的区分服务工作展开前提出,区分服务模式使得服务质量重新焕发了活力。

第五条与上面一条有关,OSPF 必须实现负载均衡,即把负载分散到多条线路上。大多数以前的协议都将所有的数据包通过最优路径发送出去,即使存在两条同等程度好的路由也只选择一条使用,其他路径根本不用。在许多情况下,将负载分散到多条线路上可以获得更好的性能。

第六,必须支持层次化系统。到 1988 年,一些网络已经增长到相当大的规模,以至于任何一台路由器都不可能知道其完整的拓扑结构。OSPF 必须设计成不要求路由器知道完整的拓扑结构也能很好地工作。

第七,要求提供适度的安全性,以防止恶作剧的学生向路由器发送虚假路由信息来欺骗路由器。

第八,对于那些通过隧道连接到Internet 的路由器,新协议也必须能够对它们进行处理。以前的协议并不能很好地解决这样的问题。

OSPF 同时支持点到点链路(比如,SONET )和广播网络(例如,大多数局域网)。其实,它能够支持拥有多个路由器的网络,这些路由器中的每一个都可以直接与其他路由器通信(称为多路访问网络),即使它们没有广播能力。此前的协议不能很好地处理这种情况。

广播局域网的抽象

图 5-64(a)给出了一个自治系统网络。这里主机被省略了,因为它们在 OSPF 中通常不起作用,真正参与路由协议的是路由器和网络(其中可能包含主机)。图 5-64(a)中的大多数路由器通过点到点链路连接到其他路由器和网络,最终到达这些网络中的主机。然而,路由器 R3 、R4 和 R5 则是通过一个广播局域网连接,诸如交换式以太网。

image-20230703220311199

OSPF 的工作方式本质上是对一张图进行操作:将一组实际网络、路由器和线路抽象到一个有向图中,图中的每条弧有一个权值(距离、延迟等)。两台路由器之间的点到点连接可以用一对弧来表示,每个方向上一个,两个方向上的权值可以不同。广播网络用一个节点表示,加上网络上每台路由器用一个节点表示,从网络节点到路由器节点之间的弧段权值为0。尽管如此,它们是重要的,因为没有它们就没有通过网络的路径。其他网络只有主机,因此只需要一条到达网络的弧,没有返回弧。这种结构使得路由可以到达主机但不能穿过主机。

图5-64Cb )显示的是图5-64Ca)所示网络的图形表示。OSPF 协议从根本上做了两件事情,首先用一个类似这样的图来表示实际的网络,然后每个路由器使用链路状态方法计算从自身出发到所有其他节点的最短路径。有可能协议会发现多个同样短的路径,在这种情况下,OSPF 记住最短路径集合,并在报文转发期间把流量分摊到这些路径上。这种多路径路由方法有助于负载均衡。该方法称为等价成本多路径( ECMP , Equal CostMultiPath )。

分区

Internet 中的许多 AS 本身非常庞大,而且不便于管理。 OSPF 可以将这样的 AS 划分成编号的区域(Area),每个区域是一个网络,或者一组互连的网络。区域不能相互重叠,但是也不必面面俱到,也就是说有些路由器可能不属于任何一个区域。全部属于一个区域的路由器称为内部路由器( internal router)。区域是单个网络的一种泛化形式。在区域外部,能见到的是它的目的地而不是拓扑结构。

每个 AS 有一个骨干区域( backbone area ),称为 0 号区域。该区域中的路由器称为骨干路由器( backbone router)。所有区域都必须连接到骨干区域,连接方式有可能会通过隧道进行;所以,从 AS 内的任何一个区域出发,经过骨干区域,总是有可能到达该 AS 的任何其他区域。在图形表示法中,隧道也用一个弧来表示,并且有一个权值。如同所有其他的区域一样,骨干区域的拓扑结构对于其外部也是不可见的。

每个连接到两个或更多区域的路由器称为区域边界路由器( border router)。它必须是骨干区域的一部分。区域边界路由器的工作任务:概括本区域的目的地信息并注入到与自己连接的其他区域。这种概括包含成本信息,但不包括区域内的所有拓扑细节传递成本信息可以使得其他区域内的主机找到进入本区域的最好区域边界路由器。不传递拓扑信息可以减少流量和简化其他区域路由器的最短路径计算。然而,如果只有一个边界路由器通往区域外,甚至路由信息概要都不需要传递。通往该区域外部目的地的路由总是被指令“前往边界路由器”,这类区域称为存根区域(Stub Area )。

最后一种路由器是 AS 边界路由器( AS boundary router)。它把通往其他 AS 的外部路由注入到本区域。然后外部路由就呈现为可以通过 AS 边界路由器可达的目的地,该路由当然会有某种成本。外部路由可以注入一个或更多个 AS 边界路由器。图 5-65 给出了自治系统、区域和各种路由器之间的关系。一个路由器可以扮演多种角色,例如,一个边界路由器同时还是一个骨干路由器。

image-20230703222302382

在正常操作期间,每个区域内的路由器有相同的链路状态数据库,并运行相同的最短路径算法。其主要工作是计算从自身出发到每个其他路由器和整个 AS 内网络的最短路径。区域边界路由器需要所有与之连接区域的数据库,并且为每个区域分别运行最短路径算法。

对于在同一区域内的源和目的地,选择最好的区域内路由(全部位于该地区内)。对于不在同一个区域内的源和目的地,区域间路由必须先从源所在区域到骨干区域,再从骨干区域到目标区域,最后到达目的地。这种算法强制把 OSPF 配置成星型结构,骨干区域相当于集线器,其他区域是向外辐射区域。因为路由算法选择的是最小成本路由,因此位于网络不同位置的路由器可能会选择不同的区域边界路由器进入骨干区域和目标区域。从源到目的地的数据包被“如此这般地”路由,它们不需要封装或者隧道(除非目标区域与骨干区域的唯一连接是一个隧道)。此外,通往外部目的地的路由如果需要可以包括外部成本,或者仅包含 AS 内部成本。外部成本指从 AS 边界路由器通往目的地的外部路径的成本。

消息

当一台路由器启动时,它在所有的点到点线路上发送 HELLO 消息,并且通过 LAN 将 HELLO 消息组播到一个包含所有其他路由器的组。每台路由器从应答消息中得知谁是自己的邻居。同一个 LAN 上的路由器都是邻居

OSPF 协议需要在邻接的路由器之间相互交换信息才能工作,邻接(adjacent )路由器邻居路由器是不同的。尤其是,让一个 LAN 中的每台路由器都跟本 LAN 中的其他每台路由器进行交换路由信息显然非常低效。为了避免出现这样的情形, OSPF 要求从每个 LAN中选举一台路由器作为指定路由器( designated router )。指定路由器与本 LAN 上的所有其他路由器是邻接的,并且与它们交换信息。实际上,它就是一个代表本 LAN 的单个节点。邻居但不是邻接的路由器相互之间并不交换信息。有一台备份的指定路由器总是保持最新的状态数据,以便缓解主指定路由器崩溃时的转接和取代主指定路由器的需要。

在正常操作过程中,每台路由器周期性地泛洪 LINK STATE UPDATE 消息到它的每台邻接路由器。这些消息给出了它的状态信息,并提供了拓扑数据库用到的成本信息。这些泛洪消息需要被确认,以保证它们的传输可靠性。每条消息都有一个序号,路由器据此判断一条入境 LINK STATE UPDATE 消息比它当前拥有的信息更老还是更新。当一条线路启用、停止或者其成本发生改变时,路由器也要发送 LINK STATE UPDATE 消息。

DATABASE DESCRIPTION 消息给出了由发送方持有的所有链路状态表项的序号。通过把自己相应的值与发送方传过来的这些值进行比较,接收方即可决定谁拥有最新的值。当一条链路启动时使用这些消息。

通过使用 LINK STATE REQUEST 消息,每一对邻接路由器中的任一个路由器都可以向另一个路由器请求链路状态信息。这个算法的结果是,每一对邻接路由器都可检查谁有最新的数据;新的信息就是通过这种方式被传播到整个区域。所有这些消息都是以 IP 数据包的形式直接被发送出去。图 5-66 概括了这 5 类消息。

image-20230703224927092

最后,我们把所有的工作综合到一起。通过泛洪法,每个路由器把它与其他路由器和(笔者注:这个“和”是不是应该改成“的”)网络的链路以及链路成本告诉给它所在区域中的所有其他路由器。这些信息使得每台路由器都可以构建出它所在区域的拓扑图,并且计算最短路径。骨干区域也是这样工作的。而且,为了计算出从每个骨干路由器到每个其他路由器的最佳路由,路由器还要接受来自每个区域边界路由器的信息。最佳路由信息又被传回到区域边界路由器,区域边界路由器再将这些信息在本区域内广播。利用这些信息,内部路由器可以选择通往区域外目的地的最优路由,包括通向骨干区域的最佳出口路由器。

ChatGPT补充:

Q:第一个问题,链路状态数据库中包含了什么信息?

链路状态数据库(Link-State Database, LSDB)就是包含了所有链路状态通告(Link-State Advertisements, LSAs)的数据库。

当网络的状态发生变化时,相关的路由器将生成新的链路状态通告,这些通告通过链路状态更新(Link-State Update, LSU)消息在所有路由器之间传播,以便每个路由器都可以更新自己的链路状态数据库。

Q:区域边界路由器需要把区域内的信息发送到骨干区域吗

是的,区域边界路由器(Area Border Routers, ABRs)在OSPF(Open Shortest Path First)协议中扮演着非常重要的角色。ABRs负责在OSPF的各个区域之间传输路由信息。具体来说,ABRs执行以下两个主要的功能:

  1. 将区域内部的路由信息汇总并发送到骨干区域(Backbone Area):这是通过生成并发送“汇总LSA(Link-State Advertisement)”来完成的。汇总LSA包含了ABR所在区域的所有路由信息,但不包括那些已经由其他ABRs汇总过的信息。

  2. 从骨干区域接收路由信息,并将其传播到其所在的非骨干区域:这是通过转发从骨干区域接收到的LSAs来完成的。

总的来说,ABRs在OSPF中起到了路由信息的“桥梁”角色,负责在各个区域之间传播路由信息,从而保证了整个OSPF网络的连通性。

Q:OSPF中的存根区域是什么?

一个存根区域是一个特殊类型的区域,它不接受外部路由的广播,只接受内部路由的广播。所有非本地网络的路由信息都被表示为一个默认路由。

存根区域的主要特点和优势有:

  1. 存根区域不允许系统外部的路由(AS-External-LSAs),即不允许OSPF外部路由信息传入。所有进入存根区域的流量都被路由到一个或多个特定的路由器,这些路由器具有到达其他OSPF区域或其他路由协议区域的路由信息。

  2. 存根区域只需要维护一个默认路由,从而大大简化了区域内路由器的路由表,并减小了路由信息的传播和处理开销。

  3. 存根区域通常用于那些只需要访问企业核心网络或因特网的边缘网络。

在实际应用中,还有两种特殊的存根区域:Totally Stub Area(完全存根区域)和 Not-So-Stubby Area(NSSA,不那么存根的存根区域)。完全存根区域不仅不接受外部路由,而且还不接受OSPF的汇总路由。NSSA允许区域内存在ASBR,因此能接收和发送某些外部路由,同时还会生成默认路由。

在 OSPF 中,“汇总路由”是指在一个 OSPF 区域(Area)的边界路由器(ABR)上,将多个网络的路由信息进行汇总后,生成的一个或者多个新的路由条目。这些新的路由条目被称为“汇总路由”,它们可以简化路由表,并减少路由信息在 OSPF 网络中的传播。

在完全存根区域中,为了进一步简化路由表和降低路由信息的处理和传播开销,路由器不仅不接受来自自治系统外部的路由(AS-External-LSAs),也不接受汇总路由(Summary-LSAs)。它们只接受区域内的路由(Intra-Area-LSAs)和一个默认路由,而这个默认路由是由区域边界路由器(ABR)提供的,用于向其他 OSPF 区域或者其他路由协议区域发送流量。

王道书里的OFPS算法将得太精简了,实际上的算法确实很多细节(但是很精妙),但是不会考这么多。看了两边教材的这一部分,感觉酣畅淋漓。

4.2.4层次路由

当网络规模扩大时,路由器的路由表成比例地增大。这不仅会消耗越来越多的路由器缓冲区 空间,而且需要用更多CPU时间来扫描路由表,用更多的带宽来交换路由状态信息。因此路由选 择必须按照层次的方式进行。

因特网将整个互联网划分为许多较小的自治系统(注意一个自治系统中包含很多局域网),每个 自治系统有权自主地决定本系统内应釆用何种路由选择协议。如果两个自治系统需要通信,那么就需 要一种在两个自治系统之间的协议来屏蔽这些差异。据此,因特网把路由选择协议划分为两大类:

1) 一个自治系统内部所使用的路由选择协议称为内部网关协议(IGP),也称域内路由选择, 具体的协议有RIP和OSPF等。

2) 自治系统之间所使用的路由选择协议称为外部网关协议(EGP),也称域间路由选择,用 在不同自治系统的路由器之间交换路由信息,并负责为分组在不同自治系统之间选择最 优的路径。具体的协议有BGP。

使用层次路由时,OSPF将一个自治系统再划分为若干区域(Area),每个路由器都知道在本 区域内如何把分组路由到目的地的细节,但不用知道其他区域的内部结构。

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

补充

子网掩码背诵

image-20230702221102282

MTU路径发现

路径MTU发现(Path MTU Discovery,简称PMTUD)是一个网络协议机制,用于确定两个IP主机间可传输的最大数据报大小(MTU),以避免IP分片。PMTUD的目标是最小化因分片引起的网络效率低下问题,并降低因数据报过大而无法传输的风险。

这是PMTUD的基本工作过程:

  1. 发送方首先设定数据报大小为它的本地MTU大小。

  2. 发送方在IP报头中设置"不分片"(Don't Fragment, DF)标志位。这意味着如果数据报大于路径上任何一段的MTU,网络设备(如路由器)不能将其分片。

  3. 如果数据报在传输过程中到达的网络设备的MTU小于数据报大小,那么该设备会因为无法处理这个过大的数据报而丢弃它,并向发送方返回一个ICMP差错报文,通知发送方"需要进行分片但设置了不分片比特"。

  4. 当发送方接收到这个ICMP差错报文,它会从报文中获取新的MTU值(也就是引发错误的设备的MTU),然后调整自己的数据报大小,使其不超过新的MTU值。然后,发送方再次发送数据报。

  5. 这个过程会不断重复,直到数据报成功到达目的地,或者找到一条路径,所有网络设备的MTU都能处理数据报。

通过PMTUD,发送方可以发现网络路径中最小的MTU,并据此调整自己的数据报大小。这样可以提高网络效率,因为避免了不必要的IP分片和重新组合,同时也避免了因数据报过大而被丢弃的情况。