计算机网络学习笔记 - 第五章

第 5 章 网络层

网络层概述

网络层是处理端到端数据传输的最底层

为了实现这个目标,网络层必须知道网络拓扑结构(即所有路由器和链路的集合),并从中选择出适当的路径,即使是大型网络也要选出一条好路经。同时,网络层还必须仔细选择路由器,避免某些通信线路和路由器负载过重,而其他线路和路由器空闲。最后,当源端和接收方位于不同网络时,还会出现新的问题,这些问题都需要由网络层来解决。

5.1 网络层的设计问题

5.1.1 存储转发数据包交换

存储-转发数据包交换

5.1.2 提供给传输层的服务

提供给传输层的服务
  1. 向上提供的服务应该独立于路由器技术。

  2. 应该向传输层屏蔽路由器的数量、类型和拓扑关系。

  3. 传输层可用的网络地址应该有一个统一编址方案,甚至可以跨越 LAN 和 WAN。

网络层的功能

数据链路层和网络层的区别

5.1.3 无连接服务的实现

数据报 (datagram)

如果提供的是无连接的服务,那么,所有的数据包都被独立地注入到网络中,并且每个数据包独立路由,不需要提前建立任何设置。在这样的上下文中,数据包通常称为数据报 (datagram),它类似于电报 (telegram),对应的网络称为数据报网络 (datagram network)。

虚电路 (virtual circuit)

如果使用了面向连接的服务,那么,在发送数据包之前,必须首先建立起一条从源路由器到目标路由器之间的路径。这个连接称为虚电路 (VC, virtual circuit),它类似于电话系统中建立的物理电路,对应的网络称为虚电路网络 (virtual-circuit network)。

无连接服务 路由表

每一台路由器都有一个内部表,它指明了针对每一个可能的目标地址应该将数据包送到哪里去。每个表项由两部分数据组成:目标地址和通往目标地址所使用的出境线路。

管理这些路由表并做出路由选择的算法称为路由算法 (routing algorithm)。

5.1.4 面向连接服务的实现

面向连接服务 路由表

当建立一个连接时,从源机器到目标机器之间的一条路径就被当作这个连接的一部分确定了下来,并且保存在这些中间路由器的表中。所有需要在这个连接上通过的流量,都使用这条路径,这与电话系统的工作方式完全一致。当连接被释放之后,虚电路也随之消失。在面向连接的服务中,每个数据包包含一个标识符,指明了它属于哪一条虚电路

尽管 A 很容易区分出标识连接 1 的数据包是来自 H] 还是来自 H3,但是,C 无法区分它们。基于这个原因,A 给第二个连接的出境流量分配一个不同的连接标识符。这种避免冲突的做法说明了为什么路由器需要具各替换出境数据包中连接标识符的能力

在有些上下文中,这个过程称为标签交换 (label switching)

5.1.5 虚电路与数据报网络的比较

虚电路与数据报网络的比较

5.2 路由算法

路由算法

路由算法 (routing algorithm) 是网络层软件的一部分,它负责确定一个入境数据包应该被发送到哪一条输出线路上。如果网络内部使用了数据报,那么路由器必须针对每一个到达的数据包重新选择路径,因为自上一次选择了路径之后,最佳路径可能已经发生了改变。如果网络内部使用虚电路,那么只有当建立一条新的虚电路时,才需要做路由决策此后,数据包只要沿着已经建立的路径向前传递即可。后一种情形有时候也称为会话路由 (session routing)

路由进程和转发进程

可以把路由器想象成内部有两个进程。其中一个进程在每个数据包到达的时候对它进行处理,它在路由表中査找该数据包所对应的出境线路。这个进程即为转发 (forwarding) 进程;另一个进程负责生成和更新路由表,这正是路由算法发挥作用的地方。

路由算法的特性和指标

路由算法必须满足某些特性:正确性、简单性、鲁棒性、稳定性、公平性和有效性。

首先必须确定要优化什么性能指标。使数据包的平均延退达到最小是有效发送流量的一种很明显的选择,但是使网络的总吞吐量最大化也是一种不错的选择。

非自适应算法 (nonadaptive algorithm)

路由算法可以分成两大类:非自适应算法和自适应算法。非自适应算法 (nonadaptive algorithm) 不会根据当前测量或者估计的流量和拓扑结构,来调整它们的路由决策。相反,从 I 到 J(对所有的 I 和 J) 所使用的路由选择预先在离线情況下计算好,并在网络启动时被下载到路由器中的。这个过程有时候也称为静态路由 (static routing)。

自适应算法 (adaptive algorithm)

自适应算法 (adaptive algorithm) 则会改变它们的路由决策以便反映出拓扑结构的变化,通常也会反映出流量的变化情况

5.2.1 优化原则

最优化原则 (optimality principle)

最优路径的一般陈述如下:如果路由器 J 在从路由器到路由器 K 的最优路径上,那么从 J 到 K 的最优路径也必定遵循同样的路由。为了更好地理解这点,我们将从 1 到 J 的路径部分记作 r,余下的路径部分记作 r2。如果从 J 到 K 还存在一条路由比 r2 更好,那么,它可以与 r 级联起来,从而可以改善从 I 到 K 的路由,这与 r2 是最优路径的假设相违背。

汇集树 (sink tree)

从所有的源到一个指定目标的最优路径的集合构成了一棵以目标节点为根的树。这样的树称为汇集树 (sink tree)

汇集树不一定是唯一的;有可能存在具有相同路径长度的其他汇集树。如果我们允许选择所有可能的路径,则树就变成了更一般的结构,称为有向无环图 (DAG, Directed Acyclic Graph)

由于汇集树确实是一棵树,它不包含任何环,所以每个数据包将在有限的跳数内完成传递。

不同的路由器对当前拓扑结构的了解可能有所不同

5.2.2 最短路径算法

构造有向带权图

基本想法是构造一张网络图,图中的每个节点代表一个路由器,每条边代表一条通信线路或者链路。

边权

一种测量路径长度的方法是跳数。

另一种度量是以千米为单位的地理距离,

除跳数和物理距离之外,还可以用许多其他度量来标示路径的长短。例如,图中每条边用一个标准测试包的平均延迟来标记,这是每小时的测量结果。

一般情况下,边上面的标记可以作为距离、带宽、平均流量、通信成本、平均延迟等其他因素的一个函数,通过计算得出

Dijkstra 算法

5.2.3 泛洪算法

泛洪 (flooding)

将每一个入境数据包发送到除了该数据包到达的那条线路以外的每条出境线路。

问题和解决方法

泛洪法会产生大量的重复数据包

泛洪算法的特性

泛洪途径的鲁棒性非常好。

泛洪能并发选择每一条可能的路径,因此总能选出最短的那条路径,没有其他算法能够产生一个更短的延迟

对于广播信息来说,这是一种有效的广播手段

5.2.4 距离矢量算法

距离矢量路由 (distance vector routing)

距离矢量路由 (distance vector routing) 算法是这样工作的:每个路由器维护一张表(即个矢量),表中列出了当前已知的到每个目标的最佳距离,以及所使用的链路。这些表通过邻居之间相互交换信息而不断被更新,最终每个路由器都了解到达每个目的地的最佳链路。

例:距离矢量路由

例:距离矢量路由

无穷计数问题

整个网络最佳路径的寻找过程称为收敛 (convergence)

坏消息传播得很慢:没有一个路由器具有个比它所有邻居的最小值还大于 1 的值。逐渐地,所有的路由器都会趋向无穷大,但是所需交换的次数依赖于代表无穷大的数值。由于这样的原因,明智的做法是将无穷大设置为最长的路径加 1。

并不完全出人意料,这个问题称为无穷计数 (count-to-infinity) 问题。

问题的核心在于当 X 告诉 Y 它有一条通往某个地方的路径,Y 无从知道自己是否已在这条路径上。

无穷级数问题例

无穷级数问题例

5.2.5 链路状态路由

每一个路由器必须完成以下的事情,算法才能正常工作:

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

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

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

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

  5. 计算出到每个其他路由器的最短路径实际上,算法将完整的拓扑结构分发给了每一个路由器。然后每个路由器运行 Dijkstra 算法就可以找出从本地到每一个其他路由器的最短路径。

发现邻居

当一个路由器启动时,它的第一个任务是找出哪些路由器是它的邻居。为了实现这个目标,它只需在每一条点到点线路上发送一个特殊的 HIELLO 数据包。线路另一端的路由器应该返回一个应答说明自己是谁。这些名字必须是全局唯一的

广播 LAN 的拓扑结构

广播 LAN 为连接到其上的任何一对路由器提供了彼此的连通性。然而,把 LAN 建模成许多个点到点链路会增大拓扑结构,从而导致浪费消息。模拟局域网的一个更好方法来是把它看作一个节点

设置链路成本

为了寻找最短路径,链路状态路由算法需要每条链路以距离或成本度量。到邻居的成本可自动设置或由网络运营商配置的度量。一种常用的选择是使成本与链路带宽成反比。

确定这种延迟的最直接方法是通过线路给另一边发送一个特殊的 ECHO 数据包,要求对方立即发回。通过测量往返时间再除以 2,发送路由器可以得到个合理的延迟估算值。

构造链路状态包

构建一个包含所有这些信息的数据包。该数据包的内容首先是发送方的标识符,接着是一个序号 (Seq) 和年龄 (Age,后面再介绍),以及一个邻居列表。对于每个邻居,同时要给出到这个邻居的延迟。

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

例:构造链路状态包

分发链路状态包

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

第一,如果序号绕回,可能会产生混淆。这里的解决方案是使用一个 32 位的序号。

其次,如果一个路由器崩溃了,那么它将丢失所有的序号记录表。

再次,如果一个序号被破坏了。

所有这些问题的解决方案都一样:在每个数据包的序号之后包含一个年龄 (age) 字段,并且每秒钟将年龄减 1。当年龄字段的值被减到 0 时,来自路由器的该信息将被丢弃

例:分发链路状态包

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

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

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

计算新路由

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

现在可以在路由器本地运行 Dijkstra 算法,以便构建出从本地出发到所有可能目标的最短路径。

这个信息被安装在路由表中,而且恢复正常操作。

链路状态路由和距离矢量路由的比较

5.2.6 层次路由

分层路由 (hierarchical routing)

在采用了分层路由之后,路由器被划分成区域 (region)。每个路由器知道如何将数据包路由到自己所在区域内的目标地址,但是对于其他区域的内部结构毫不知情。当不同的网络被相互连接在一起,很自然地就会将每个网络当作一个独立的区域,一个网络中的路由器不必知道其他网络的拓扑结构对于大型网络,两级的层次结构可能还不够;可能有必要将区域组织成簇 (cluster),将簇组织成区 (zone),将区组织成群 (group),等等

计算分层路由的层数和每层的个数

例如,考虑一个具有 720 个路由器的子网。如果没有分层,每个路由器需要 720 个路由表项;如果子网被分成 24 个区域,每个区域 30 个路由器,那么每个路由器只需要 30 个本地表项,加上 23 个远程表项,总共 53 个表项;如果采用三级层次结构,总共 8 个簇,每个簇包含 9 个区域每个区域 10 个路由器,那么,每个路由器需要 10 个表项用于记录本地路由器,8 个表项用于到同一簇内其他区域的路由,7 个表项用于远程的簇,总共 25 个表项。(Kamoun 和 Kleinrock, 1979) 发现,对于一个包含 N 个路由器的网络,最优的层数是\(\lnN\),每个路由器所需的路由器表项是\(e\lnN\)个。

5.3 拥塞控制算法

拥塞 (congestion)

(一部分)网络中存在太多的数据包导致数据包被延迟延迟和丢失,从而降低了传输性能,这种情况称为拥塞 (congestion)

拥塞崩溃 (congestion collapse),表现为随着注入负载的增加到超出网络的容量,网络性能骤降。

拥塞控制和流量控制

拥塞控制和流量控制之间有很大的差异,它们之间的关系非常微妙。拥塞控制的任务是确保网络能够承载所有到达的流量。这是一个全局性的问题,涉及各方面的行为,包括所有的主机和所有的路由器。与此相反,流量控制只与特定的发送方和特定的接收方之间的点到点流量有关。它的任务是确保一个快速的发送方不会持续地以超过接收方接收能力的速率传输数据。

5.3.1 拥塞控制的途径

拥塞控制方法

供给 (provisioning)

避免拥塞的最基本方法是建立一个与流量匹配良好的网络。

5.3.2 流量感知路由

常规的路由方案

我们在 5.2 节看过的路由方案采用固定链路权重。这些方案能适应拓扑结构的变化,但不能适应负载的变化。

流量感知 (traffic-aware routing)

最直接的方式是把链路权重设置成一个(固定)链路带宽、传输延迟、(可变)测量负载或平均排队延迟的函数。在所有其他条件都相同的情况下,最小权重的路径更青睐那些轻负载的路径。

潜在危险

这两部分通过链路 CF 和 EI 相连。假设东西之间的大部分流量使用链路 CF,因此,这个链路负荷超重因而延迟增大。如果把排队延退加入到计算最短路径的权重中,那么链路 EI 将变得更具吸引力。当新的路由表被安装好之后,大部分东西方的流量现在改走链路 E,由此增加了此链路的负载。因此,在下一次路由更新时,CF 将成为最短路径。结果,路由表可能会烈地摇摆不定,从而导致不稳定的路由和许多潜在的问题。

Internet 路由协议通常不依赖于负载来调整自己的路由。相反,在路由协议外部通过慢慢改变它的输入来调整路由。这种方法就是所谓的流量工程 (traffic engineering)

5.3.3 准入控制

准入控制 (admission control)

其基本思想非常简单:除非网络可以携带额外的流量而不会变得拥塞,否则不再建立新的虚电路。因此,任何建立新的虚电路的尝试或许会失败。

描述流量通常采用的描述符是漏桶 (leaky bucket) 或令牌桶 (token bucket)。一个漏桶有两个参数约束了平均速率和瞬时突发流量大小。

准入控制还可以和流量感知路由相结合,在虚电路建立过程中,考虑绕开流量热点区域的路由。

5.3.4 流量调节

确定何时接近拥塞

路由器必须确定何时快要接近拥塞,最好在拥塞发生之前能确定。为此,每个路由器可连续监测它正在使用的资源。三种可能的资源分別是输出线路的利用率、在路由器内缓冲的排队数据包,以及由于没有足够的缓冲而丢失的数据包数量。在这些可能性中,第二个是最有用的。平均利用率并没有直接考虑大多数流量的突发 50%的利用率对平滑流量来说或许很低,但对于变化很大的流量来说就太高了。丢失数据包的计数来得太退。在数据包丢失时拥塞早就已经形成。

路由器内部排队数据包的数量 EWMA

路由器内部的排队延迟直接捕获了数据包经历过的任何拥塞情况。它在大部分时应该很低,但当有一个突发流量产生积压时会跳跃。为了维持良好的排队延退估计 d,假设 s 表示瞬时队列长度的样值,则 d 可定期生成,并按如下方式进行更新

其中常数\(\alpha\)决定路由器多快忘记最近的历史。这就是所谓的指数加权移动平均 (EWMA, Exponentially Weighted Moving Average)

路由器必须及时把反馈信息传递给造成拥塞的发送方。

抑制包 (choke packet)

通知拥塞发送方的最直接方式是直接告诉发送方。在这种方法中,路由器选择一个被拥塞的数据包,给该数据包的源主机返回一个抑制包 (choke packet)。抑制包中的目标地址取自该拥塞数据包。同时,在原来的拥塞数据包上添加一个标记(设置头部中的一位),因而它在前行的路径上不会产生更多的抑制包。除此以外,数据包的转发过程如同平常一样。

当源主机收到了抑制包,按照要求它必须减少发送给指定目标的流量

显式拥塞通知 (ECN)

路由器可以在它转发的任何数据包上打上标记(设置数据包头的某一个标志位)发出信号,表明它正在经历着拥塞。当网络传递数据包时,接收方可以注意到有个拥塞已经发生,在它发送应答包时顺便告知发送方。然后发送方可以像以前那样紧急刹车降低传输速率。

IP 和 TCP 中使用此方法

逐跳后压

另一种办法是让抑制包在沿途的每一跳都发挥作用,如图 5-26(b) 中的序列所示。在这里,只要抑制包到达 F,则 F 必须按照要求减慢发给 D 的数据包流。这样做的结果是要求 F 为 D 的数据包流分配更多的缓冲区,因为源主机仍然在全速发送数据,但是 F 这么做却让 D 立刻得到缓解,就好像电视广告中的头痛疗法一样。在下一步,抑制包到达 E 告诉 E 减慢给 F 的数据包流。这一行动给 E 的缓冲区带来更大需求,但是却让 F 立即得到缓解。最后,抑制包到达 A,数据包流才真的减慢下来。

这种逐跳方案的实际效果是拥塞点上的拥塞现象很快得到了缓解,但是其代价是上游路径需要消耗更多的缓冲区空间。

5.3.5 负载脱落

负载脱落 (load shedding)

负载脱落 (load shedding) 是一种富有想象力的说法,它指当路由器因为米不及处理数据包而面临被这些数据包淹没的危险时,就将它们丢弃。

丢包策略

对于一个被数据包淹没的路由器来说,关键的问题是选择丢弃哪个数据包。首选的方案可能取决于使用网络的应用程序类型。对于文件传输,旧的数据包价值要高于新的数据包。相比之下,对于实时媒体流,新的数据包价值超过老的数据包。因为如果数据包被延退并且错失了给用户的播放时间,那么该数据包就变得一无所用。前一种策略(即旧的比新的好)通常称为葡萄酒 (wine) 策略,而后一种策略(即新的比旧的好)通常称为牛奶 (milk) 策略。

为了实现智能丢弃政策,应用程序必须在它们的数据包上打上标记,指示网络它们有多重要。然后,当不得不丢弃数据包时,路由器可以首先丢弃重要性最轻一类数据包,然后是次重要一类数据包,以此类推。

随机早期检测 (RED)

为了确定何时开始丢弃数据包,路由器要维护一个运行队列长度的平均值。当某条链路上的平均队列长度超过某个阈值时,该链路就被认为即将拥塞,因此路由器随机丢弃一小部分数据包。随机选择丢弃的数据包使得快速发送方发现丢包的可能性更大;因为在数据报网络中,路由器不能分辨出哪个源引起了网络的最大麻烦,因此随机选择丢弃的数据包或许是最佳选择。当没有出现期待的确认信息时,受此影响的发送方就会发现丢包,然后传输协议将放慢速度。因此,丢失的数据包起到了传递抑制包的同样作用,但却是隐含的无须路由器发送任何显式信号。

RED 和 ECN 的比较

相比那些只在缓冲区溢出才丢包的路由器,RED 路由器能提高网络性能,虽然它们可能需要调整正常工作方式。然而,如果 ECN 可用,那么它就是首选的选项。它的工作方式几乎完全一样,但提供了一个显式拥塞信号而不是依据丢包来判断是否拥塞;RED 用在主机不能接收显式信号的环境里。

5.4 服务质量

过度配置 (overprovisioning)

提供良好服务质量的一个简单解决方案,就是建设有足够容量的网络,无论扔给它什么样的流量都能承担。这种解决方案的名称是过度配置 (overprovisioning)

5.4.1 应用需求

流 (flow)

从一个源端发到一个接收方的数据包流称为一个流 (fow)(Clark, 1988)。在面向连接的网络中,一个流或许是一个连接上的全部数据包:而在无连接网络中,一个流是从一个进程发到另一个进程的所有数据包。

服务质量 (QoS)

每个流的需求可由四个主要参数来表示:带宽、延迟、抖动和丢失。总之,这些参数决定了一个流要求的服务质量 (QoS, Quality of Service)。

抖动 (jitter) 延迟的变化(即标准方差)或者数据包到达时间的变化称为抖动 (Jitter)
不同应用程序的服务质量需求

ATM 支持不同类别的 QoS

ATM 网络支持:

  1. 恒定比特率(比如电话)。

  2. 实时可变比特率(比如压缩的视频会议)。

  3. 非实时可变比特率(比如点播电影)。

  4. 可用比特率(比如文件传输)

5.4.2 流量整形

流量整形 (traffic shaping)

流量整形 (traffic shaping) 是指调节进入网络的数据流的平均速率和突发性所采用的技术。

服务等级约定 (SLA, service level agreement)

有时候客户和服务提供者之间的约定称之为服务等级约定 (SLA, service level agreement),特别是当它由聚合流量组成,并且存在一段比较长期的时间时,比如一个给定客户的全部流量。只要顾客履行了约定中的义务,并且根据商定的合约发送数据包,那么,服务提供者就承诺按时将数据包递交到目的地。

流量监管 (traffic policing)

超出约定模式之外的数据包可能会被丢弃,或者被打上低优先级标记。对一个流进行监测称为流量监管 (traffic policing)

漏桶算法和令牌桶

漏桶算法 (leaky bucket algorithm)

令牌桶算法 (token bucket algorithm)

漏桶算法和令牌桶算法的区别

例:令牌桶的整型

计算以最大发送速率发送突发数据的持续时间

例:计算以最大发送速率发送突发数据的持续时间

5.4.3 包调度

包调度算法 (packet scheduling algorithms)

在同一个流的数据包之间以及在竞争流之间分配路由器资源的算法称为(数据)包调度算法 (packet scheduling algorithms)。为不同的流可以预约的潜在资源有以下 3 种。

  1. 带宽。

  2. 缓冲区。

(3)CPU 周期。

FIFO/FCFS

FIFO 路由器在队列满时通常丢弃新到的数据包。由于新近到达的数据包会排在队列末尾,因此这种行为称为尾丢包 (tail drop)。

公平队列 (fair queueing)

该算法的实质是针对每条输出线路,路由器为每个流设置单独的队列。当线路空闲时,路由器循环扫描各个队列,如图 5-30 所示;然后,从下一个队列中取出第一个数据包发送。以这种方式,如果某条输出线路被 n 个主机竞争,则每发送 n 个数据包中每个主机获得发送一个数据包的机会。正是这个意义上的公平,使得所有流量以同样的速率发送数据包。即使源端发送更多的数据包也不会提高这个速率。

该算法就有一个缺陷:它给使用大数据包的主机比使用小数据包的主机提供了更多的带宽

循环公平队列

这里的诀窍是计算一个虚拟时间,这个时间指每个数据包发送完毕所需要的轮数。每一轮循环从所有有数据待发送的队列中排空一个字节:然后,按照数据包的结时间顺序排队,并以该顺序真正发送数据包

如果一个数据包的长度为 L,它的完成时间恰好是启动之后的第 L 轮循环启动时间要么是前一个数据包的完成时间,或者是数据包的到达时间(如果它到达时队列为空)

加权公平队列 (WFQ)

这种修改后的算法称为加权公平队列 (WFQ, Weighted Fair Queueing)。设每一轮的字节数是一个流的权重 W,我们现在可以给出计算完成时间的公式:

其中 A 为到达时间,F 为完成时间,L;是数据包 i 的长度。在图 5-31(a) 中,最下面的队列权重为 2,所以你可以看到在图 5-31(b) 给出的完成时间表中,它的数据包被发送得更快。

5.5 网络互联

5.5.1 网络如何不同

网络的不同之处

5.5.2 何以连接网络

两种基本选择

连接不同网络的方式有两种基本选择:第一,我们可以制造这样的设备,它能将每种网络的数据包翻译或转换成每个其他类别网络的数据包;第二,像出色的计算机科学家那样,尝试在不同网络的上面增加一个间接层,并且构造一个公共层来解决这个问题。

路由器和交换机

在路由器上,数据包被从帧中提取出来,数据包中的网络地址被用来决定把它转发到哪里;而在交换机(或网桥) 上,整个帧是根据其 MAC 地址传送的。交换机不必了解正在被交换的数据包所采用的网络层协议,同样路由器也不必了解交换机所采用的链路层协议。

今天,网桥主要用来连接链路层的同类网络,路由器用来连接网络层不同的网络。

5.5.3 隧道

隧道技术 (tunneling)

这种情形就是源主机和目标主机所在网络的类型完全相同但它们中间却隔着一个不同类型的网络。

这个问题的解决方案是一种称为隧道 (tunneling) 的技术。为了给伦敦办事处的主机发送一个 IP 数据包,巴黎的主机构造一个包含伦敦 IPv6 地址的数据包,然后将该数据包发送到连接巴黎 IPv6 网络到 IPv4

Internet 上的多协议路由器:当该多协议路由器获得 IPv6 数据包后,它把该数据包用一个 IPv4 头封装,封装后的 IPv4 数据包指向多协议路由器另边的 IPv4,该网络与伦敦的 IPv6 网络相连;也就是说,路由器将一个 (IPv6) 数据包放入到一个 (IPv4) 数据包中。当这个包裹着的数据包到达伦敦路由器,原来的 IPv6 数据包被提取出来,并被发送给最终的目标主机。

5.5.4 互联网路由

内部网关协议 (IGP)/外部网关协议 (EGP)/边界网关协议 (BGP)

所有这些因素导致了两级路由算法。在每个网络中,使用一个域内 (intradomain) 或者内部网关协议 (interior gateway protocol) 进行路由 ("网关"是"路由器"的旧称)。这可能是我们已经描述过的一种链路状态协议。为了让数据包跨越构成互联网的网络,就需要用到域间 (interdomain) 或外部网关协议 (exterior gateway protocol)。网络可能全部使用不同的域内协议,但它们必须使用相同的域间协议。在 Internet 上,域间路由协议称为边界网关协议 (BGP, Border Gaterway Protocol)。

自治系统 (AS)

还有一个更重要的术语要介绍。由于每个网络独立于所有其他网络运营,因此这样的网络通常称为一个自治系统 (AS, Autonomous System)

5.5.5 数据包分段

限制数据包最大长度的原因

其中包括:

  1. 硬件(比如以太网帧的长度限制)

  2. 操作系统(比如所有的缓冲区都是 512 字节)

  3. 协议(比如,数据包长度字段中的位数)。

  4. 遵从某个国家(或国际)标准

  5. 期望将错误引入的重传次数减少到某种程度。

  6. 期望防止数据包占用信道时间太长

路径最大传输单元 (MTU)

源端通常不知道数据包通过网络到达接收方的路径,因此它当然不知道到达接收方的数据包尺寸有多小。这个数据包尺寸称为路径最大传输单元 (MTU, Path Maximum Transmission Unit) 即使源端知道路径 MTU,数据包在无连接网络中也是独立路由的,比如 Internet。这种路由意味着路径可能会突然改变,因而意外地更改路径 MTU。

透明分段/非透明分段

分段不利于性能,因为除了增加头开销,数据包的丢失概率也增加了;任何个段的丢失都将导致整个数据包的丢失;而且对主机而言,分比不分带来了更大的突发

IP 实现的非透明分段

路径 MTU 发现 (path MTU discovery)

每个 IP 数据包发出时在它的头设置一个比特,指示不允许对该数据包实施分段操作。如果一个路由器接收的数据包太大,它就生成一个报错数据包并发送给源端,然后丢弃该数据包,如图 5-44 所示。当源端收到报错数据包,它就使用报错数据包携带的信息重新将出错数据包分段,每个段足够小到报错路由器能处理。如果沿着路径前进又遇到一个 MTU 更小的路由器,那么重复上述过程。

5.6 Internet 的网络层

协议设计十大原则
  1. 保证工作。直到多个原型系统成功地与对方相互通信,方可完成设计或者确定标准

  2. 保持简单。有疑问时应该使用最简单的解决方案。如果一项特性并非绝对不要,那么就放弃该特性。尤其是,通过组合其他的特性也能够获得同样效果的时候。

  3. 明确选择。如果有儿种方法可以完成同样的事情,则选择其中一种方法。

  4. 模块开发。

  5. 期望异构性。

  6. 避免静态选项和参数。如果不可避免要使用参数的话(比如最大数据包长度),那么,最好的办法是让发送方和接收方协商一个值,而不是定义固定的参数值

  7. 寻找好的而不是完美的设计。

  8. 严格发送,宽容接收。

  9. 考虑可扩展性

  10. 考虑性能和成本

Internet 的网络层

在网络层,可以把 Internet 看作是一种相互关联的网络或自治域(自治系统)集合。

IP 的任务是提供一种尽力而为 (best-effort) 地把数据包从源端传输到接收方的方法(即不提供任何保证),无须考虑这些机器是否在同一个网络,也不必关心它们之间是否还有其他网络。

5.6.1 IPv4 协议

IP 数据报

每个 IP 数据报包含两部分,一个头和一个正文,正文部分也称之为有效净荷。头由一个 20 字节的定长部分和一个可选的变长部分组成

IPv4 头

版本 (version) 字段

版本 (Version) 字段记录了数据报属于协议哪个版本。

IHL 字段

由于头的长度不固定,所以头的 IHL 字段指明了头到底有多长(以 32 位字长度为单位)。IHL 的最小值为 5,这表明头没有可选项。该 4 位字段的最大值为 15,把头的长度限制为最大 60 字节,因此选项 (Options) 字段最多为 40 字节。

区分服务 (differentiated services) 字段

区分服务 (Differentiated services) 字段

该字段最初称为服务类型 (Type of service)。它曾经并且仍然用来区分不同的服务种类。

现在,前 6 位用来标记数据包的服务类别,我们在本章前面描述过的加速服务和确保服务:后 2 位用来携带显式拥塞通知信息,比如数据包是否经历了拥塞,我们在本章的拥塞控制部分描述了显式拥塞通知。

总长度 (total length) 字段

总长度 (Total length) 字段包含了该数据报中的所有内容,即头和数据。最大长度是 65535 个字节。

标识 (identification) 字段

标识 (Identification) 字段的用途是让目标主机确定一个新到达的分段属于哪一个数据报。同一个数据报的所有段包含同样的标识值。

DF(不分段)标志

DF 代表"不分段"(Don't Fragment) 标志位。这是针对路由器的一条命令,它不允许路由器分割该数据报。最初,该字段用来支持没有能力组装还原数据包的主机。现在该字段可用在发现路径 MTU 过程中,路经 MTU 是能经过路经而无须分段的最大数据包。通过在发出的数据包中设置 DF 位,发送方知道这个数据包要么完整地到达目的地,要么有个报错消息反馈回来。

MF(更多的段)标志

MF 代表"更多的段"(More Fragments) 标志位。除了最后一个段以外,其他所有的段都必须设置这一位。它的用途是接收方可以知道什么时候一个数据报的所有分段都已经到达了。

分段偏移量 (fragment offset) 字段

分段偏移量 (Fragment offset) 字段指明了该段在当前数据报中的位置。除了数据报的最后一个段以外,其他所有段的长度必须是 8 字节的倍数

例:IP 数据报分段

生存期 (time to live) 字段

生存期 (Time to live) 字段是一个用于限制数据包生存期的计数器。这里的计数单位最初设置为秒,因此最大的生存期为 255 秒。在每一跳上该计数器必须被递减,而且,当数据报在一台路由器上排队时间较长时,该计数器必须多倍递减。实际上,它只是跳计数器,当它递减到 0 时,数据包就被丢弃,并且路由器给数据包的源主机发回一个报警包。

协议 (protocol) 字段

协议 (Protocol) 字段指明了该将它交给哪个传输进程。TCP 是一种可能,但是 UDP 或者其他的协议也有可能。

头校验和 (header checksum) 字段

头校验和 (Header checksum) 字段。校验算法的执行过程是这样的:当数据到达时,所有的 16 位(半字)累加起来,然后再取结果的补码。该算法的目的是到达数据包的头校验和计算结果应该为 0。这样的校验和对于检测数据包穿过网络时是否发生错误非常有用。请注意,在每一跳必须重新计算头校验和字段,因为至少有个字段总是不断在改变(即生存期字段),

源地址和目标地址

源地址 (Source address) 字段和目标地址 (Destination address) 字段表示源网络接和日标网络接口的 P 地址。

选项 (options) 字段

选项 (Options) 字段的设计意图是提供一种途径,允许后续版本协议包含一些原设计中没有出现的信息,以便实验人员尝试新的想法、避免为那些不常使用的信息分配头字段。

严格源路由

严格源路由 (Strict source routing) 选项给出了从源到目标的完整路径,其形式是一系列 IP 地址。数据报必须严格地遵循这条路径向前传输。

松散源路由

松散源路由 (Loose source routing) 选项要求该数据包穿越所指定的路由器列表,并且要求按照列表中的顺序前进;但是,在途中也允许经过其他路由器。

记录路由

记录路由 (Record route) 选项告诉沿途的路由器,将自己的 IP 地址附加到可送字段中。

时间戳

时间戳 (Timestamp) 选项类似于记录路由选项,只不过每个路由器除了记录自己的 32 位 IP 地址以外,还要记录一个 32 位时间戳

5.6.2 IP 地址

分类的 IP 地址

IP 地址和 MAC 地址的比较

一个 IP 地址并不真正指向一台主机,而是指向一个网络接口,所以如果一台主机在两个网络上,它必须有两个 IP 地址。然而,大多数主机都连在一个网络,因而只有一个 IP 地址。与此相反,路由器有多个接口,从而有多个 IP 地址

分类寻址 (classful addressing)

与以太网地址不同的是 IP 地址具有层次性。每个 32 位地址由高位的可变长网络和低位的主机两部分数据组成。同一网络上(比如以太局域网)的所有主机,其地址的网络值是相同的。这意味着一个网络对应一块连续的 P 地址空间,这块地址空间就称为地址的前缀 (prefix)

五类 IP 地址

特殊 IP 地址

互联网中的 IP 地址

子网

三层 IP 地址

子网掩码

地址中主机部分的剩余位数可以有所变化。这意味着,块的大小必须是 2 的幂。按照惯例,网络地址的书写格式是前缀 IP 地址后跟一个斜线,斜线后是网络部分的位长度。在我们的例子中,如果前包含 28 个地址,所以留下了 24 位用于网络部分,写成 128.208.0.0/24。

因为前缀长度仅从 IP 地址无法推断出来,路由协议必须把前缀携带给路由器。有时候,前缀很简单地由长度描述,比如"/16",读音为"slash 16"。前缀长度相当于网络部分中 16 的二进制掩码。以这种格式书写时称为子网掩码 (subnet mask),它可以与ー个 IP 地址进行 AND 操作,以便提取出该 IP 地址的网络部分。在我们的例子中,子网掩码为 255.255.255.0。

子网划分 (subnetting)

这就是所谓的子网划分 (subnetting),分割一个大型网络得到的一系列结果网络(比如以太网)称为子网 (subnet)

例:划分子网及分组转发

一个/16 地址空间被分割成几片。这种分割并不要求均匀,但每片必须对齐以便可以把较低的任何位用作地址的主机部分。在这种情况下,块的一半(一个/17) 分配给了计算机科学系,四分之一分配给了电机工程学系(一个/18),八分之一(一个/19) 分配给了艺术系,剩余的八分之一未分配。了解地址块如何分割的不同方式是看以二进制表示的结果前缀

当数据包到达时,路由器会看该数据包的目标地址,并检査它属于哪个子网。具体做法是:路由器把数据包的目标地址与每个子网的掩码进行 AND 操作,看结果是否对应于某个前缀。例如,考虑一个发往 IP 地址 128.208.2.151 的数据包。为了看它是否属于计算机科学系,我们把该目标地址与 25255.128.0 进行 AND 操作,获得前 17 位(即 128.208.0.0),并且检査它们是否匹配计算机系的前缀地址(即 128.208.128.0)。显然它们不匹配。然后再检査前 18 位,在与电机工程学系的子网掩码 AND 操作后,我们得到 128.208.0.0,这恰好匹配电机工程系的前缀地址,所以数据包被转发到通往电机工程系网络的接口。

子网划分设计

例:子网划分设计

CIDR

路由聚合 (route aggregation)/超网 (supernet)

在这里我们把多个小前的地址块合并成一个大前缀的地址块。 这个合并过程称为路由聚合 (route aggregation),由此产生的较大前缀地址块有时称为超网 (supernet),以便有别于地址块的分割

CIDR

有了地址聚合,IP 地址可包含大小不等的前缀。同样一个 IP 地址,一台路由器把它当作/22 的一部分对待(该地址块包含 20 个地址),而另一台路由器把它当作一个更大的/20 一部分对待(其中包含 22 个地址)。这是因为每个路由器有相应的前缀信息。这个设计和子网划分协同工作,统称为无类域间路由 (CIDR, Classless Inter- Domain Routing)

CIDR 的路由器分组转发

例:CIDR

现在让我们从位于组约的一个远程路由器的角度来看这 3 所大学。3 个前缀的所有 IP 地址都应该从纽约(或更一般地,从美国)发送到伦敦。伦敦的路由进程注意到这个,并且将 3 个前缀合成一个聚合表项,即前缀 194.24.0.0/19,然后传递给纽约路由器。这个前缀包含了 8K 个地址,并涵盖了 3 所大学的地址和其他未分配的 1024 个地址。通过聚合,3 个前缀已经减少为一个,由此减少了必须告知约路由器的前缀,并且纽约路由器的路由表表项。

前缀允许重叠。规则是数据包按最具体路由的方向发送,即具有最少 IP 地址的最长匹配前缀 (longest matching prefix)。

该前缀中的先前那块未用地址现在已经分配给了旧金山的网络。

相反,最长匹配前缀路由可以用图中显示的两个前缀来转发。一个总的前缀指示把整个地址块的流量发到伦敦一个更具体的前用来指示该大前缀的一部分流量发往旧金山。有了最长匹配前缀规则,到旧金山网络的 IP 地址的流量将被发送到通往旧金山的出境线路,并且发往大前缀中所有其他 P 地址的流量将被送往伦敦。

NAT

NAT

NAT 的基本思想是 ISP 为每个家庭或每个公司分配一个 IP 地址(或者,最多分配少量的 IP 地址),用这个 P 地址来传输 Internet 流量。在客户网络内部,每台计算机有唯一的 IP 地址,该地址主要用来路由内部流量。然而,当一个数据包需要离开客户网络,发向其他 ISP 时,它必须执行一个地址转换,把唯一的内部 IP 地址转换成那个共享的公共 IP 地址。这种地址转换使用了 IP 地址的三个范围,这些地址已经被声明为私有化。任何网络可以在内部随意地使用这些地址。仅有的规则是不允许包含这些地址的数据包出现在 Internet 上。这 3 个保留的地址范围为:

10.0.0.0~10.255.255.255/8 (16777216 个主机)

172.16.0.0~172.31.255.255/12 (1048576 个主机)

192.168.0.0~192.168.255.255/16 (65536 个主机)

在客户办公室内,每台机器都有一个形如 10.x.y.z 的地址。然而,当一个数据包离开客户驻地时,它首先要通过一个 NAT 盒子 (NAT box),

此 NAT 盒子将内部的 IP 源地址(图中为 10.0.0.1) 转换成该客户所拥有的真实 IP 地址。

NAT 的例子

NAT 存在的问题

第一,NAT 违反了 IP 的结构模型。IP 的结构模型声明每个 P 地址均唯一标识了世界上的一台机器。

第二,NAT 打破了 Internet 的端-端的连接模型,即任何一个主机可在任何时间给任何一台其他主机发送数据包。

第三,NAT 将 Internet 从一个无连接网络改变成一个面向连接网络特有的形式。

第四,NAT 违反了最基本的协议分层规则:第 k 层不应该对第 k+1 层在本层的有效载荷字段中放什么作任何假设

第五,Internet 上的进程并不一定必须使用 TCP 或者 UDP

第六,有些应用以规定的方式使用多个 TCP/IP 连接或者 UDP 端口。例如,标准的文件传输协议 (FTP, File Transfer Protocol) 在数据包正文插入 IP 地址,接收方正文中提取出这些地址,并使用它们。由于 NAT 对这些地址安排一无所知,它不可能重写这些 IP 地址,或者说明情况。

最后,由于 TCP Source port 字段 16 位长,所以,至多只有 65536 台机器可以被映射到同一个 IP 地址上。

动态 NAT 表项

静态 NAT 表项

5.6.3 IPv6 协议

IPv6 的设计目标

它的主要目标是

  1. 即使地址空间的分配效率不高,也能支持几十亿台主机。

  2. 降低路由表的大小。

  3. 简化协议,使路由器更快速地处理数据包。

  4. 提供更好的安全(认证和隐私)

  5. 更加关注服务类型,特别是针对实时数据。

  6. 辅助指定范围内的组播。

  7. 主机漫游时无须改变地址。

  8. 允许协议向未来演进。

  9. 允许新老协议共存多年。

IPv6 固定头

IPv6 和 IPv4 头的对比

IHL 字段没有了,因为 IPv6 头有固定的长度。协议 (Protocol) 字段也被拿掉了,因为下一个头 (Next header) 字段指明了最后的 P 头后面跟的是什么(比如 UDP 或者 TCP 段)。

所有与分段有关的字段都被去掉了,因为 IPv6 采用了另一种方法来实现分段。当主机发送了一个非常大的 IPv6 数据包时,如果路由器不能转发这么大的数据包,它并不对该数据包进行分段,而是向发送主机返回一条报错消息。

校验和 (Checksum) 字段也被去掉了,因为计算校验和会极大地降低性能。

区分服务 (Differentiated services)

区分服务 (Differentiated services,最初称为流量类别)字段的用途主要是区分数据包的服务类别,这些数据包具有不同的实时传递需求。它主要被用在服务质量的区分服务体系中,使用方式与 IPv4 数据包的同名字段一样。此外,最低 2 位用来发送显式拥塞指示也与 IPv4 的方式相同。

流标签 (flow label)

流标签 (Flow label) 字段为源端和接收方提供了一种建立伪连接的方式,即源端和接收方把一组具有同样需求并希望得到网络同等对待的数据包打上标记

为了保障服务质量,每个流由源地址、目标地址和流编号来指定。

有效载荷长度 (Payload length)

有效载荷长度 (Payload length) 字段指明了紧跟在图 5-56 中 40 个字节头之后还有多少字节数。

下ー个头 (Next header)

IPv6 头得以简化的原因在于它可以有额外的(可选)扩展头。该字段指明了当前头之后还有哪种扩展头(当前已经定义了 6 种扩展头),如果有的话。如果当前的头是最后一个 IP 头,那么下一个头字段指定了该数据包将被传递给哪个传输协议处理(比如 TCP、UDP)。

扩展头

跳数限制 (Hop limit)

实际上,它与 IPv4 中的 TTL(Time to live) 字段是一样的,也就是说,在每一跳上该字段中的值都要被路由器递减。

IPv6 地址

16 个字节被分成 8 组来书写,每一组 4 个十六进制数字,组之间用冒号隔开

IPv4 地址现在可以写成一对冒号再加上老式的点分十进制数,例如:

::192.31.20.46

5.6.4 Internet 控制协议

ICMP

ICMP 报文

每一种 ICMP 消息类型都被封装在一个 IP 数据包中。

类型字段

校验和字段

数据部分

ICMP 应用:ping

ICMP 应用:tracert

ARP

ARP

ARP 缓存

首先,一且一台机器已经运行了 ARP,那么,它可以将结果缓存起来,以便稍后它与同一台机器通信时再用。当下次通信时,它就可以在缓存中找到所需的地址映射关系,从而避免了进行第二次广播。

为了允许映射关系发生变化,比如为一台主机配置了一个新 IP 地址(但保留其老的以太网地址),ARP 缓存中的相应表项应该在几分钟之后发生超时。

免费 ARP

保持缓存信息最新状态并能优化性能的一种更聪明方式是,让每台机器配置之后广播它的地址映射关系。这次广播通常以 ARP 的形式发送,即主机发送一个 ARP 请求查找它自己的 IP 地址。按理来说网络上应该不会有任何应答,这个广播数据包的副作用就是其他主机在 ARP 缓存中加入个映射表项。这就是所谓的免费 ARP(gratuitous ARP)。如果意外地收到了一个应答,那么一定是两台机器被分配了相同的 IP 地址。网络管理员必须解决这个问题,否则这两台机器都不能使用网络。

直接交付与间接交付

假设主机 1 想要给 EE 网络上的主机 4(192.32.63.8) 发送数据包。主机 1 发现目标 IP 地址不在 CS 网络。同时它知道应该把所有这些网络外的流量发给路由器,该路由器称为默认网关 (Default gateway)。按照惯例,默认网关具有网络上的最低地址 (198.31.65.1)。为了给路由器发送帧,主机 1 必须知道该路由器在 CS 网络上的接口地址。因此,主机 1 发送一个 ARP 广播报文,请求 198.31.65.1 对应的以太网地址,从该广播报文的应答报文它获知所需的以太网地址为 E3;然后用该地址给路由器发送帧。数据包沿着一条 Internet 路径从一个路由器被转发到下一个路由器时就是采用这种查询机制的。

当路由器的以太网 NIC 得到该帧后,它将数据包交给 IP 软件。IP 软件从网络掩码了解到这个数据包要发送到 EE 网络,在 EE 网络再到达主机 4。如果路由器不知道主机 4 的以太网地址,它可以再次使用 ARP。在图 5-61 的表中列出了从 CS 和 EE 网络观察到的帧的源和目标的以太网地址和 IP 地址。我们观察到出现在每个网络上的帧的以太网地址发生了改变,而 IP 地址保持不变(因为它们表示所有互联网络的端点)

当主机 1 不知道主机 4 在另一个不同网络时,仍然可以从主机 1 发送个数据包给主机 4。解决办法是让 CS 网络上的路由器回答针对主机 4 的 ARP 请求,并且以 E3 作为响应。直接由主机 4 来响应对自己的 ARP 请求报文是不可能的,因为它根本看不到 ARP 请求(路由器不会转发以太网级的广播报文)。然后,路由器将收到发给 192.32.63.8 的帧,并将该帧转发到 E 网络。这个解决方案称为 ARP 代理 (proxy ARP)。这种方案常用在这样一种特殊情况下:一个主机想出现在一个网络上,即使它实际上在另个网络上

DHCP

DHCP 阶段

DHCP 例子

5.6.6 OSPF 内部网关路由协议

域内路由算法 (intradomain routing)/内部网关协议 (interior gateway protocol)

Internet 由大量的独立网络或自治系统 (AS, Autonomous System) 构成,并由不同的组织运营,这些组织通常是公司、大学或 ISP。在自己网络内部,一个组织可以使用自己的内部路由算法,或者更流行的名称叫域内路由算法 intradomain routing

域内路由协议也称为内部网关协议 (interior gateway protocol)。

域间路由 (interdomain routing)/外部网关协议 (exterior gateway protocol)

独立运营网络之间的路由问题,或域间路由 (interdomain routing) 问题。在这种情况下,所有网络必须使用相同的域间路由协议和外部网关协议 (exterior gateway protocol)。 Internet 采用的域间路由协议是边界网关协议 (BGP, Border Gateway Protocol)

内部网关协议和外部网关协议

OSPF 概念

OSPF 的工作方式本质上是对一张图进行操作:将一组实际网络、路由器和线路抽象到一个有向图中,图中的每条弧有一个权值(距离、延等)。两台路由器之间的点到点连接可以用一对弧来表示,每个方向上一个,两个方向上的权值可以不同。广播网络用一个节点表示,加上网络上每台路由器用一个节点表示,从网络节点到路由器节点之间的弧段权值为 0。

等价成本多路径 (ECMP, Equal Cost Multipath)。

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

OSPF 区域/路由器

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

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

每个连接到两个或更多区域的路由器称为区域边界路由器 (border router)。它必须是骨干区域的一部分。区域边界路由器的工作任务:概括本区域的目的地信息并注入到与自已连接的其他区域 AS 边界路由器 (AS boundary router)。它把通往其他 AS 的外部路由注入到本区域。然后外部路由就呈现为可以通过 AS 边界路由器可达的目的地,该路由当然会有某种成本。

OSPF 消息类型

5.6.7 BGP 外部网关路由协议

路由策略的因素

典型的路由策略可能涉及政治、安全或者经济方面的考虑因素。

中转服务 (transit service)

客户 ISP 给提供商 ISP 付费,以便将数据包传送到 Internet 上的任何其他目的地以及接收来自 Internet 上任何其他目的地的数据包。可以说客户 ISP 从提供商 ISP 购买了中转服务 (transit service)。

BGP 例

对等 (peering) 传输

假设 AS2 和 AS3 之间有大量的流量需要交流。由于它们的网络早就连接,因此如果它们愿意,它们可以使用不同的政策直接给彼此发送免费流量。这将减少必须通过 AS1 替它们传递的流量,并有望降低它们的账单。这一政策称为对等 (peering) 传输。

路径矢量协议 (path vector protocol)

BGP 不仅维护到每个目的地的成本,而且每个 BGP 路由器还跟踪所使用的路径。这种方法称为路径矢量协议 (path vector protocol)。路径由下一跳路由器(有可能在 ISP 的另一侧,不定相)和一系列 AS 或者 AS 路径组成,这些自治系统或者相应的路径序列是该路由必须遵守的(以相反顺序给出)。最后,一对 BGP 路由器通过建立 TCP 连接而相互通信。

BGP 路由通告

作者

xqmmcqs

发布于

2021-07-21

更新于

2022-07-11

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×