第四章 网络层

第一节 网络层服务

  • 网络层是网络核心的最高层,是实现大型网络互联的关键。
  • 网络层关注的是如何将承载传输层报文段的网络层数据报从源主机送达目的主机。在大部分网络环境下,绝大多数的数据报都要经过多条中间路由器,才能从源主机到达目的主机。为此,网络层需要实现两项重要功能:转发forwarding)和路由选择routing)。
    • 转发:当通过一条输入链路接收到一个分组后,路由器需要决策通过哪条输出链路将分组发送出去,并将分组从输入接口转移到输出接口。
    • 路由选择:当分组从源主机流向目的主机时,必须通过某种方式决定分组经过的路由或路径,计算分组所经过的路径的算法被称为路由选择算法,或称为路由算法
  • 路由选择可通过相应的路由选择算法来实现,而路由器是如何知道该将分组转发至哪条链路上呢?一般来说,每个路由器上都有一张转发表(也称为路由表),其表结构类似于一种键值对的形式。当一个分组到达路由器时,路由器会以该分组的网络层首部地址字段的值(比如目的IP地址)作为键,去转发表中查询相应的表项,从而获知该分组应转发至哪条链路上。
  • 转发表如何建立?
    • 路由选择和转发之间是相互作用的,路由器运行路由协议在网络上交换或收集计算路由所需的信息(比如网络拓扑信息等),并基于某种路由选择算法计算路由,然后将路由信息存储到路由器转发表中。路由器在转发分组时,查询转发表,决策如何转发分组。目前常见的路由器都会提供静态路由配置的功能,在极端情况下,网络中所有的路由器都可以由网络工作人员进行静态路由配置,此时不需要任何路由选择协议。
  • 网络层除了实现转发和路由选择功能外,一些提供面向连接服务的网络还提供另一个重要的网络层功能:建立连接
    • 网络层连接是从源主机到目的主机所经过的一条路径,这条路径所经过的每个路由器等网络层设备都要参与网络层连接的建立。根据是否在网络层提供连接服务,分组交换网络可以分为仅在网络层提供连接服务的虚电路Virtual-CircuitVC)网络和仅在网络层提供无连接服务的数据报网络datagram network)。

第二节 数据报网络和虚电路网络

一,数据报网络

  • 按照目的主机地址进行路由选择的网络称为数据报网络
  • 工作过程
    • 用数据报方式传送数据时,将每个分组作为一个独立的数据报进行传送。
    • 数据报方式中每个分组被单独处理,每个分组称为一个数据报,每个数据报都携带源主机地址和目的主机地址信息。
    • 在双方开始通信之前,不需要先建立连接,因此被称为“无连接”。
    • 当一个分组到达某台分组交换机(如路由器)时,该分组交换机检查该分组的目的地址,然后把他转发给某台邻近的分组交换机。
  • 在数据报网络中,无连接的发送方和接收方之间不存在固定的连接(或路径),所以发送的分组和接受的分组次序不一定相同,每个分组被传送的路径也可能不一致。接收方收到分组后要根据相应的协议,对分组重新进行排序,从而生成原始的完整报文,这个任务通常由传输层来完成。如果分组在网络传输的过程中出现了丢失或差错,数据报网络本身不做处理,可以由通信双方的传输层协议来解决。

二,虚电路网络

  • 虚电路网络在网络层提供面向连接的分组交换服务。

  • 通信之前,双方需要先建立虚电路,通信结束后再拆除虚电路。虚电路是在源主机到目的主机的一条路径上建立的一条网络层逻辑连接,为区别于电路交换中的电路,称为虚电路。

    • 电路交换网络在建立每条电路时,网络会为电路分配独享资源,沿某条电路传输的数据,只占用分配给该电路的资源。
    • 虚电路网络的某条虚电路分组,在通过某链路传输时,通常使用该链路的全部带宽,这是完全有别于电路交换的。
  • 虚电路网络是一种分组交换网络,虚电路只是标识了从源主机到目的的一条网络层逻辑连接,并不需要为每条虚电路分配独享资源。

  • 每条虚电路都有虚电路号,称为虚电路标识VCID),沿某条虚电路传输的分组中包含所属电路的VCID。虚电路网络设备根据分组所携带的VCID判断其所属的虚电路,从而决策如何转发分组,并确保分组沿对应的虚电路送达目的。

  • 虚电路交换技术应用:

    • X.25网络。
    • 帧中继Frame Relay)网络。
    • 异步传输模式Asynchronous Transfer ModeATM)网络。
  • 虚电路可以保证分组传输顺序,接收端无须对分组重新排序。

  • 虚电路构成3要素。

    • 从源主机到目的主机之间的一条路径。
    • 该路径上的每条链路各有一个虚电路标识VCID)。
    • 该路径上每台分组交换机的转发表中记录虚电路标识的接续关系。
  • 虚电路网络设备的转发表需要记录或建立邻接链路的VCID间的接续关系。

  • 虚电路分组交换的工作原理

    • 假设主机A请求与主机B之间建立一条VC,该网络选定的路径为A-PS1-PS2-B,为该VC在三条链路上分配的VC号分别为12,22,32。这样,当沿该VC传输的某个分组离开主机A时,其VCID=12;当离开PS1时,VCID=22;当离开PS2时,VCID=32。PS1的各个链路上就近标识的数字是接口号。

    在这里插入图片描述

  • 虚电路分组交换有永久型交换型两种。

    • 永久型虚电路Permanent Virtual CircuitPVC)是一种提前建立,长期使用的虚电路,虚电路的建立时间开销基本上可以忽略。
    • 交换型虚电路Switch Virtual CircuitSVC)是根据通信需要而临时建立的虚电路,通信结束后立即拆除,虚电路的建立和拆除时间开销有时相对影响较大。
  • 虚电路交换和数据报交换的比较

项目虚电路交换数据报交换
端到端连接需要先建立连接不需要建立连接
地址每个分组含有一个短的虚电路号每个分组包含源和目的端地址
分组顺序按序发送,按序接收按序发送,不一定按序接收
路由选择建立VC时需要路由选择,之后所有分组都沿此路由转发对每个分组独立选择
转发结点失效的影响所有经过失效结点的VC终止除了崩溃时丢失分组外,无其他影响
差错控制由通信网络负责由端系统负责
流量控制由通信网络负责由端系统负责
拥塞控制若有足够的缓冲区分配给已经建立的VC,则容易控制由端系统负责
状态信息建立的每条虚电路都要求占用经过的每个结点的表空间网络不存储状态信息
通信类型传输质量要求高的通信数据通信,非实时通信
典型网络X.25,帧中继,ATM因特网

第三节 网络互连与网络互连设备

一,异构网络互连

  • 异构网络主要是指两个网络的通信技术和运行协议的不同。实现异构网络互连的基本策略包括协议转换构建虚拟互联网络

    • 协议转换机制采用一类支持异构网络之间协议转换的网络中间设备,实现异构网络之间数据分组的转换与转发。
    • 构建虚拟互联网络机制的异构网络互连是在现有异构网络基础上,构建一个同构的虚拟互联网络,异构网络均只需封装,转发虚拟互联网络分组,同时引入虚拟互联网中间设备互连异构网络,实现在异构网络间转发统一的虚拟互联网的数据分组。
  • 典型的网络互联设备

    • 中继器,集线器,交换机,网桥,路由器和网关等。
  • 路由器如何在网络层实现多个异构网络之间的互连

    在这里插入图片描述

    • 源主机连接在802.11网络上,目的主机连接在以太网上,这两个网络是异构的网络,同时这两个网络之间还存在着运行多协议标记交换Multiple Protocol Label SwitchingMPLS)网络。
    • 源主机的传输层报文段被封装进IP数据报中,在数据报中封装了目的主机的IP地址,然后数据报被封装进802.11帧中,并发送至第一个路由器。当第一个路由器接收到帧时,路由器将数据报从802.11帧中提取出来,根据数据报中的目的IP地址信息查询其传发表,并将数据报通过某条链路发送出去。由于在这一段链路上运行着MPLS协议,因此该路由器需要建立到第二个路由器的虚电路,并将该数据封装进MPLS帧中。同样,当第二个路由器接收到MPLS帧时,对其中的数据报进行提取,进行在第一个路由器上发生的相似过程。下一跳便是目的主机,其中的链路上运行着以太网,但由于MTUMaximum Transmission Unit,最大传输单元)的限制,导致该数据报无法一次发送完毕,于是需要对该数据报进行分片,对每个分片根据原数据报设置其IP首部,将其封装进以太网帧并发送至目的主机,目的主机对接收到的分片进行重组,至此,数据报从源主机经过了3个异构网络到达了目的主机。

二,路由器

  • 路由器是一种具有多个输入端口和多个输出端口的专用计算机,主要任务是获取与维护路由信息以及转发分组。路由器是最典型的网络层设备。路由器从功能体系结构角度,可以分为输入端口交换结构输出端口路由处理器

1,输入端口

  • 输入端口负责从物理接口接收信号,还原数据链路层帧,提取IP数据报,根据IP数据报的目的IP地址检索路由表,决策需要将该IP数据报交换到哪个输出端口。
  • 通常路由器每个输入端口内都会存有转发表的一份副本,转发表由路由处理器进行计算和更新,并通过某种方式复制到每个输入端口。不仅降低了路由处理器的压力,而且提高了查询效率。
  • 当确定输入端口接收的分组要转发至哪个输出端口之后,分组需要交给交换结构来进行转发。假设输入端口接收到分组的速率超过了交换结构对分组进行交换的速率,如果不对输入端口到达的分组进行缓存,那么将导致大量丢包情况的发生,因此输入端口还需要提供对到达分组的缓存排队功能。

2,交换结构

  • 当分组到达路由器后,通过在输入端口上的处理,分组将会被转发至哪个输出端口上已经确定,交换结构完成将输入端口的IP数据报交换到指定的输出端口。主要包括如下3类:
    • 基于内存交换
      • 早期路由器就像传统计算机,在路由处理器的直接控制下,输入端口和输出端口就像操作系统中的I/O设备。当分组到达输入端口时,通过中断方式将分组由输入端口送至内存,路由处理器对内存中的分组首部进行解析,获取其目的地址,并根据目的地址查找转发表,确定将该分组转发至哪个端口,进而将分组由内存复制到相应的输出端口。
    • 基于总线交换
      • 路由器的输入端口与输出端口同时连接到一条数据总线上,到达输入端口的分组首先经过查询转发表,确定要转发到的输出端口,然后分组经由数据总线传输至指定输出端口。由于总线具有独占性特征,因此,当多个输入端口有分组到达时,只有一个分组能够通过总线传输到相应输出端口,其他输入端口的分组只能排队等待。
    • 基于网络交换
      • 相比基于总线交换,基于网络交换可以实现并行交换传输,使得交换效率得到了较大的提高。
      • 若两个分组经由不同的输入端口到达,且均需要转发到相同的输出端口,则在同一时刻只能转发其中一个分组,而另一个需要等待。
  • 3种交换结构中,基于内存交换的交换结构性能最低,相应的路由器通常价格也最便宜,基于网络交换的交换结构性能最好,通常这类路由器价格也比较昂贵。

在这里插入图片描述

3,输出端口

  • 输出端口首先提供一个缓存排队功能,排队交换到该端口的待发送分组,并从队列中不断取出分组进行数据链路层数据帧的封装,通过物理线路端接发送出去。
  • 什么情况下会出现排队呢?如果输入端口接收分组的速率与输出端口发送分组的速率相同,同时交换结构的交换速率足够快,那是不是就不会出现排队呢?
    • 不是。虽然输入和输出的速率相同,但若每个输入端口的分组都转发至同一个输出端口,输出端口同一时刻只能处理一个分组并将其发送至链路上,因此到达的分组除了其中一个正在被发往链路之外,其余分组都需等待,而在这些分组等待期间,又有可能有新的分组到达,从而出现输出端口排队长度无限制地增长的情况。由于缓存大小是固定的,因此当排队长度到达一定大小之后,其后到达的分组都会被丢弃,从而发生大量丢包现象,进而影响整个网络的吞吐量。
    • 输出端口通常对队列中的分组执行FCFS先到先服务)的调度策略,当然,也可以执行其他调度策略,如按优先级调度,按IP数据报的服务类型(Type of Service,ToS)调度等。

4,路由处理器

  • 路由处理器就是路由器的CPU。
  • 转发与路由选择是路由器两项最重要的基本功能。通过静态或动态获取的路由信息被保存在路由表中,供分组转发时使用。
  • 路由表是以路由项来存储路由信息的,每个路由项也称为一个“入口”(Entry),每个路由项包括很多字段,表示不同信息。
  • 路由器在收到IP数据报时,会利用IP数据报的目的IP地址检索匹配路由表,如果路由表中没有匹配成功的路由项,则通过默认路由对应的接口转发该IP数据报;如果除默认路由外,有一条路由匹配成功,则选择该路由项对应的接口,转发该IP数据报;如果除默认路由外,有多条路由项匹配成功,则选择网络前缀匹配成功位数最长的路由项,通过该路由项指定的接口转发该IP数据报,这就是路由转发过程的“最长前缀匹配优先原则”。

第四节 网络层拥塞控制

一,网络拥塞

  • 在分组交换网中,由于众多的用户随机地将信息送入网络,使网络中需要传输的信息总量经常大于其传输能力,以至于某些网络结点因缓冲区已满,无法接收新到达的分组,此时就发生了所谓的拥塞现象。
  • 拥塞是一种持续过载的网络状态,此时用户对网络资源的总需求超过了网络固有的容量。
  • 拥塞控制就是端系统或网络结点,通过采取某些措施来避免拥塞的发生,或者对已发生的拥塞做出反应,以便尽快消除拥塞。
    • 拥塞控制可以在端系统进行,通常是传输层协议,也可以在网络层进行,比如一些虚电路网络等。
  • 流量控制是否能解决拥塞问题?如果有了流量控制是否还需要再采取拥塞控制措施?
    • 流量控制是发送数据一方根据接收数据一方的接收数据的能力,包括接收缓存,处理速度等,调整数据发送速率和数据量,以避免接收方被数据淹没。
    • 拥塞控制则是根据网络的通过能力或网络拥挤程度,来调整数据发送速率和数据量。
    • 拥塞控制主要考虑端系统之间的网络环境,目的是使网络负载不超过网络的传送能力。
    • 流量控制主要考虑接收端的数据接收与处理能力,目的是使发送端的发送速率不超过接收端的接收能力。
    • 虽然流量控制和拥塞控制都可能需要约束或调整端系统发送数据的速率或者数量,但两者的目标和解决的问题不同,调整速率的依据也不同,因此,二者不可能彼此互相取代。
  • 发生拥塞的原因。
    • 缓冲区容量有限。
    • 传输线路的带宽有限。
    • 网络结点的处理能力有限。
    • 网络中某些部分发生了故障。
  • 拥塞的解决
    • 增加网络资源或是减小网络负载
      • 增加网络资源,就是在网络上出现拥塞前为网络中的各个结点分配更多可用的资源,从而降低拥塞出现的可能性,即拥塞预防
      • 减小网络负载,一般是指在网络中已经出现负载大于资源的情况下(即拥塞),通过减小当前网络的负载来实现对拥塞的消除,这种策略一般被称为拥塞消除

二,流量感知路由

在这里插入图片描述

  • 链路CD是连接两个区域的“最短”通信链路,于是两个区域间的用户通信流量都会选择此链路。这样,这条链路的带宽将在极短时间内被耗尽,进而使得通信延迟增大。假设还有另一条非“最短”通信链路BE,同样连接两个区域。如果此时两个区域间的一部分通信流量被转移至链路BE上,那么整个网络的吞吐量将得到提升。
  • 如果图中权值能够根据网络负载动态调整,则可以将网络流量引导到不同的链路上,均衡网络负载,从而延缓或避免拥塞的发生,这就是流量感知路由在拥塞控制中起到的作用。
  • 比较容易想到的方法是将网络中链路的权值,设置为以链路带宽,传输延迟,链路负载等为变量的函数,那么当网络中链路上的负载,延迟发生变化时,链路的权值同样会得到更新,进而通过路由选择算法逐步使网络中各节点的路由表得到更新。这样,在某条链路负载过大的时候,此链路上的流量会被转移至其他链路上。此种方式也存在不足,两个区域间的通信流量首先会大量经过链路CD,当CD上的负载大到一定程度后,经过动态调整,使得大量流量转移至链路BE,而当链路BE上的负载再次增加后,又会使得链路CD承载更多的流量,从而使整个网络出现振荡。
  • 振荡解决方案?
    • 多路径路由,即两个区域间流量的传输分散到两条不同的链路上,从而使得其中任一链路上的负载都不会太大。
    • 将负载过大的链路上的流量,缓慢地转移至另一条链路上,而不是一次性将全部流量从一条链路转移到另一条链路上。
  • 流量感知是一种拥塞预防措施,可以在一定程度上缓解或预防拥塞的发生。

三,准入控制

  • 准入控制是一种广泛应用于虚电路网络的拥塞预防技术。
  • 基本思想是对新建虚电路审核,如果新建立的虚电路会导致网络变得拥塞,那么网络拒绝建立该新虚电路。
  • 准入控制实现的关键,在于当建立一条新虚电路会导致整个网络发生拥塞时,应该如何反应。显然,需要某种方法来对网络中的流量,拥塞状态进行量化。常用的方法是基于平均流量和瞬时流量,来判断是否有能力接收新虚电路而不会发生拥塞。

四,流量调节

  • 在网络发生拥塞时,可以通过调整发送方向网络发送数据的速率来消除拥塞。
  • 当某个网络结点感知到当前网络发生了拥塞时,可以通知其上游网络结点降低发送速率,从而逐渐消除拥塞,为此,需要解决两个问题:
    1. 网络结点如何能够感知到网络已经发生了拥塞呢?
      1. 对于路由器而言,就是通过输出端口的排队延迟,来对网络拥塞状况进行感知。在网络正常的情况下,路由器内部的排队延迟不会很高,而某个突发的瞬时流量会使得短时间内排队延迟增加。如果只用排队延迟来对网络拥塞情况进行估计,很有可能会产生误判,所以一般通过过去一段时间内的排队延迟以及当前的瞬时排队延迟的加权组合,来对当前的排队延迟进行估计,从而对网络拥塞状况进行准确的评判。
    2. 当路由器感知到网络发生了拥塞时,应该如何将这个拥塞信息通知到其上游结点,从而使之降低发送速率。解决方法有如下几种。
      1. 抑制分组
        1. 通知拥塞上游的最直接的方式是告知发送方。感知到拥塞的路由器选择一个被拥塞的数据报,给该数据报的源主机返回一个抑制分组,抑制分组的目的地址即从被拥塞数据报的源地址得到。
      2. 背压
        1. 让抑制分组在从拥塞结点到源结点的路径上的每一跳,都发挥抑制作用。当抑制分组从拥塞结点传输到上游的第一跳时,接收到抑制分组的结点便会立即降低其向拥塞结点发送分组的速率,从而在极短的时间内使得拥塞结点的拥塞状况得到缓解。

五,负载脱落

  • 负载脱落是消除拥塞的另一种方法,即通过有选择地主动丢弃一些数据报,来减轻网络负载,从而缓解或消除拥塞。当路由器中的数据报得不到及时处理,可能面临被丢弃的危险时,路由器就主动将该数据报丢弃掉。

第五节 Internet网络层

  • Internet是目前世界上最大,最重要的计算机网络。
  • Internet主要包括网际协议Internet ProtocolIP),路由协议以及互联网控制报文协议Internet Control Message ProtocolICMP)等内容。

一,IPv4协议

  • IP目前主要有两个版本:IPv4(为主)和IPv6
  • IP定义了如何封装上层协议(如UDPTCP等)的报文段,定义了Internet网络层寻址以及如何转发IP数据报等内容,是Internet网络层最核心的协议。

1,IP数据报格式

  • IPv4的数据包格式

在这里插入图片描述

  • 版本号占4位,路由器根据该字段确定按那个版本的IP来解析数据报。

  • 首部长度字段占4位,给出的是IP数据报的首部长度,包括可变长度的选项字段,以4字节为单位。

  • 区分服务字段占8位,在旧标准中称为服务类型(Type Of Service,TOS)字段,用来指示期望获得那种类型的服务。只有在网络提供区分服务(DiffServ)时,该字段才有效,提供区分服务的路由器根据IP数据报的区分服务字段的不同取值,为IP数据报提供不同类型的服务。目前的IP网络基本不使用该字段,很多实际的IP数据报的区分服务字段(IP数据报的第二个字节)的值为00H

  • 总长度字段也称为数据报长度,占16位,给出IP数据报的总字节数,包括首部和数据部分。16位可以表示的最大IP数据报的总长度为65535字节,除去最小的IP数据报首部20字节,最大IP数据报可以封装65535-20=65515字节的数据。

  • 标识字段占16位,用于标识一个IP数据报。IP协议利用一个计数器,每产生一个IP数据报计数器加1,作为该IP数据报的标识(ID)。实际上,IP是依靠标识字段和源IP地址和目的IP地址以及协议等字段共同唯一标识一个IP数据报。标识字段最重要的用途是在IP数据报分片和重组过程中,用于标识属于同一原IP数据报。

  • 标志位字段占3位,如下
    在这里插入图片描述

    • 最高位保留。
    • DF是禁止分片(Don’t Fragment)标志。
      • D F = 0 DF=0 DF=0表示允许路由器将该IP数据报分片, D F = 1 DF=1 DF=1禁止路由器将IP数据报分片。
    • MF是更多分片标志(More Fragments)标志。
      • M F = 0 MF=0 MF=0表示该IP数据报是一个未被分片的IP数据报或者是被分片IP数据报的最后一片,具体是哪一种,要结合片偏移字段确定。
      • M F = 1 MF=1 MF=1表明该IP数据报一定是一个IP数据报的分片,并且不是最后一个分片,到底是那个分片要结合片偏移字段确定。
  • 片偏移字段占13位,表示一个IP数据报分片封装与原IP数据报数据的相对偏移量,即封装的数据分片从原整个数据报的哪个字节开始,但片偏移字段以8字节为单位。

  • 生存时间Time-To-LiveTTL)字段占8位。表示IP数据报在网络中可以通过的路由器数(或跳步数)。该字段用来确保一个IP数据报不会永远在网络中游荡(如路由选择算法错误地为其选择了一个环形路由)。源主机在生成IP数据报时设置TTL初值,每经过路由器转发一次TTL减1,如果 T T L = 0 TTL=0 TTL=0,路由器则丢弃该IP数据报,并向源主机发送 T y p e = 11 Type=11 Type=11 C o d e = 0 Code=0 Code=0的ICMP报文。

  • 上层协议字段占8位,指示该IP数据报封装的是哪个上层协议的报文段。事实上,IP是利用该字段实现IP的多路复用与多路分解。

  • 首部校验和字段占16位,利用校验和实现对IP数据报首部的差错检测。首部校验和是逐跳校验,逐跳计算的。

  • 源IP地址字段占32位,是发出IP数据报的源主机的IP地址。当网络中的某台主机接收到来自传输层的报文段后,需要在网络层对该报文段进行封装,在IPv4数据报中,需要将发送主机的IP地址填充至源IP地址字段。

  • 目的IP地址字段占32位,是IP数据报的需要送达的主机的IP地址,路由器将依据该地址检索匹配路由表,决策如何转发该IP数据报。

  • 选项字段长度可变,范围在1~40字节,取决于选项内容。选项字段用来对IP首部进行扩展,可以携带安全,源选路径,时间戳和路由记录等内容。选项字段之后还可能有一个填充字段,长度为0-3字节,取值全0。填充字段的目的是补齐整个首部,符合32位对齐,保证首部长度是4字节的倍数。绝大多数IP数据报的首部中没有选项字段和填充字段。

  • 数据字段,存放IP数据报所封装的传输层的报文段,在目的主机会将其所承载的数据交付给相应的上层协议(依据上层协议字段)。IPv4数据报承载的并不总是来自所谓的上层协议报文段,也可能封装其他协议的报文。

2,IP数据报分片

  • 一个数据链路层协议帧所能承载的最大数据量称为该链路的最大传输单元Maximum Transmission UnitMTU)。

  • 网络层数据报作为数据链路层协议帧的有效载荷,其总长度显然受数据链路的MTU限制,这就是为什么虽然IP数据报总长度最大可达65535字节,而实际IP数据报总长度很少超过1500字节。当路由器要将一个IP数据报转发至某个输出端口,而该数据报总长度大于该输出端口所连接链路的MTU时,路由器如何处理该IP数据报?路由器将IP数据报进行分片(DF=0时),或者将其丢弃(DF=1时)。

  • 路由器如何进行分片

    • IP分片的协议版本,标识,源IP地址,目的IP地址等直接继承原IP数据报对应字段的值即可。
    • 路由器只负责IP数据报分片,不进行IP分片重组,IP分片的重组任务由最终的目的主机的IP来完成。
    • 当IP分片陆续到达目的主机后,目的主机将这些分片重组后,还原成原IP数据报,提取上层协议报文段交给上层协议处理。
    • 目的主机在重组分片时,首先根据各分片首部的标识字段来判断这些分片是否属于同一个IP数据报,即同一个IP数据报分出来的IP分片具有相同的标识字段。
    • 目的主机通过各分片首部的标志字段(MF)可以判断某个分片是否是最后一个分片。
    • 目的主机根据各分片的片偏移字段,判断各IP分片的先后顺序,结合每个IP分片首部的数据报长度字段,还可以判断是否缺少IP分片(比如某个IP分片丢失)。
  • IP数据报分片计算方法

    • 设原IP数据报总长度为 L L L字节,待转发链路的MTU为 M M M字节。若 L > M L>M L>M,且 D F = 0 DF=0 DF=0,则该IP数据报可以且需要分片。分片时每个分片的标识(ID)字段复制原IP数据报的标识字段; M F MF MF标志位,除了最后一个分片为0外,其他分片全部为1。通常,分片时会将原IP数据报分成尽可能少的IP分片,即除最后一个分片外,其他分片均为MTU允许的最大分片。一个最大分片可封装的数据字节数应该是8的倍数,因此,最大分片可封装的数据长度(字节)为
      • d = [ M − 20 8 ] ∗ 8 d=[\frac{M-20}{8}]*8 d=[8M20]8
        式中,20是表示IP数据报首部长度为20字节。需要的IP分片总数为

      • n = [ L − 20 d ] n=[\frac{L-20}{d}] n=[dL20]
        每个IP分片的片偏移字段取值为

      • F i = d 8 ∗ ( i − 1 ) , 1 ≤ i ≤ n F_i=\frac{d}{8}*(i-1),1\leq i \leq n Fi=8d(i1),1in

        式中, F i F_i Fi为第 i i i个IP分片的偏移量。每个IP分片的总长度字段为

      • L i = { d + 20 , 1 ≤ i < n L − d ∗ ( n − 1 ) , i = n L_i= \begin{cases} d+20, 1\leq i < n \\L-d*(n-1),i=n\end{cases} Li={d+20,1i<nLd(n1),i=n

        每个IP分片的MF字段为

      • M F i = { 1 , 1 ≤ i < n 0 , i = n MF_i=\begin{cases}1,1\leq i < n\\0,i=n\end{cases} MFi={1,1i<n0,i=n

二,IPv4编码

  • IPv4地址长度为32位,共有 2 32 2^{32} 232个不同的IP地址,这个数目约为43亿。
  • IPv4地址有3种常用的标记法:二进制标记法,点分十进制标记法,十六进制标记法。
  • IP地址192.168.1.101的三种标记方式
方法表示方法
二进制标记法11000000 1010000 00000001 01100101
点分十进制标记法192.168.1.101
十六进制标记法0xC0A80165
  • IP地址可以划分为两个部分:一部分是前缀Prefix),即网络部分NetID),用于描述主机所归属的网络;另一部分是后缀Postfix),即主机部分HostID),用于表示主机在网络内的唯一地址。对于用于表示主机所处网络地址的前缀,其长度可以是定长的,也可以是变长的。
  • 早期IP地址被设计为定长前缀,这种方式被称作分类地址;目前主流的是无类地址地址前缀长度是可变的。
  • IP子网
    • IP地址具有相同网络号的设备接口。
    • 不跨越路由器(第三层以上层网络设备)可以彼此物理联通的接口。

1,分类地址

  • IPv4地址被设计为定长前缀,但考虑到不同组织所要使用到的地址数量是不同的,因此设计了3种长度的前缀(网络号),分别为8,16,24位,整个地址空间被分为5类,A,B,C,D和E类,并规定A,B,C三类可以分配给主机或路由器使用,D类地址作为组播地址,E类地址保留,该方案被称作分类寻址。

在这里插入图片描述

  • 分类寻址中各类地址空间
前缀长度前缀首字节
A8位0xxxxxxx0~127
B16位10xxxxxx xxxxxxxx128~191
C24位110xxxxx xxxxxxxx xxxxxxxx192~223
D不可用1110xxxx xxxxxxxx xxxxxxxx xxxxxxxx224~239
E不可用1111xxxx xxxxxxxx xxxxxxxx xxxxxxxx240~255
A类地址
  • A类地址第一位以0开头,可变的网络位有7位,即128个A类地址。其中0和127属于特殊地址,可用的A类地址就是128-2=126个。
  • 可变化的主机位有24位,即 2 24 2^{24} 224个主机地址。其中主机位全为0和主机位全为1分别为网络地址和广播地址。不能分配给主机使用,每个A类地址可用的主机地址就是 2 24 − 2 = 16777214 2^{24}-2=16777214 2242=16777214个。
  • A类地址范围是1.0.0.0~126.255.255.255
  • A类地址子网掩码是255.0.0.0,也可以写作==/8==。
    在这里插入图片描述
B类地址
  • B类地址前两位以10开头,可变的网络位有14位,即16384个B类地址。其中128.0和191.255属于特殊地址,可用的B类地址就是16384-2=16382个。
  • 可变化的主机位有16位,即65536个主机地址。其中网络地址和广播地址不能分配给主机使用,每个B类地址可用的主机地址就是65536-2=65534个。
  • B类地址的范围是128.0.0.0~191.255.255.255
  • B类地址子网掩码是255.255.0.0,也可以写作==/16==。

在这里插入图片描述

C类地址
  • C类地址前三位以110开头,可变化的网络位有21位,即 2097152 2097152 2097152个C类地址,其中192.0.0223.255.255属于特殊地址,可用的C类地址就是2097152-2=2097150个。
  • 可变化的主机位有8位,即256个主机地址,其中网络地址和广播地址不能分配给主机使用,每个C类地址可用的主机地址就是256-2=254个。
  • C类地址的范围是192.0.0.0~223.255.255.255
  • C类地址子网掩码是255.255.255.0,也可写作==/24==。
    在这里插入图片描述

2,特殊地址

  • 本地主机地址:0.0.0.0/32。当主机需要发送一个IP数据报时,需要将自己的地址作为源地址,但是在某些情况下(如新加入到网络中还未通过DHCP请求获取到IP地址的主机),主机还不知道自己的IP地址,于是此时会使用到本地主机地址来填充IP数据报的源地址字段。另外,在路由表中,0.0.0.0/0用于表示默认路由。
  • 有限广播地址:255.255.255.255/32。当主机或者路由器某接口,需要向其所在网络中的所有设备发送数据报时,用该地址作为IP数据报的目的IP地址。需要注意,使用有限广播地址的广播数据,只限于发送数据报的主机所在的子网范围内。
  • 回送地址:127.0.0.0/8。如果IP数据报的目的地址位于这个地址块中,那么该数据报将不会被发送到源主机之外,常见的127.0.0.1。

3,特殊IP地址

NetIDHostID作为IP数据报源地址作为IP数据报目的地址用途
全0全0可以不可以在本网范围内表示本机;在路由表中用于表示默认路由
全0特定值可以不可以表示本网内某个特定主机
全1全1不可以可以本网广播地址(路由器不转发)
特定值全0不可以不可以网络地址,表示一个网络
特定值全1不可以可以直接广播地址,对特定网络上的所有主机进行广播
127非全0或非全1的任何数可以可以用于本地软件环回测试,称为环回地址

4,私有IP地址

  • 这部分地址可以在内网使用,不能在互联网上使用,如果以这部分地址为目的地址的IP数据报出现在互联网上时,互联网会丢弃这些IP数据报,不进行转发。
私有地址类别范围
A类10.0.0.0~10.255.255.255(或10.0.0.0/8)
B类172.16.0.0~172.31.255.255(或172.16.0.0/12)
C类192.168.0.0~192.168.255.255(或192.168.0.0/16)
  • 在分类寻址方案中,A类地址网络数量少,但每个A类网络规模大,如果将一个A类地址网络分配给一个组织使用,容易导致IP地址浪费;C类地址网络数量大,但每个C类地址网络规模很小,往往一个组织分配一个C类地址不能满足需求。由于IPv4地址早期分配的粗放型,以及分类地址的固有不足,在早期IP地址的分配和使用过程中存在很大的浪费,IPv4地址已经分配殆尽。

5,无类地址

  • 在无类地址中,不存在分类寻址中的网络类别,网络前缀不再被设计为定长的8位,16位,32位,而变成可以是0~32位的任意值。在无类寻址中,网络地址形式为== a . b . c . d / x a.b.c.d/x a.b.c.d/x==,其中 a . b . c . d a.b.c.d a.b.c.d为点分十进制形式IP地址, x x x为网络前缀长度, x ∈ [ 0 , 32 ] x\in[0,32] x[0,32],这种地址形式称为CIDRClassless Inter-Domain Routing无类域间路由)地址。

6,子网划分

在这里插入图片描述

  • 为缓解地址空间不足,提高IP地址空间利用率,另两种策略分别是子网化和超网化。
  • 子网化:是指将一个较大的子网划分为多个较小子网的过程。较大子网具有较短的网络前缀,较小子网具有稍长的前缀。将较大子网划分为较小子网后,可以将较小子网分别分配给不同组织或网络,从而避免IP地址的浪费。
  • 超网化:是指将具有较长前缀的相对较小的子网合并为一个具有稍短前缀的相对较大的子网,可见,超网化可以看作是子网化的逆过程。
  • 当已知子网中的某主机的IP地址和子网掩码,就可以计算出一个子网的网络地址,广播地址,IP地址总数和可分配IP地址数量等。
    • 假设子网内的一个地址为192.168.1.45,子网掩码为255.255.255.128,那么通过该地址与子网掩码做按位与运算,就可以得到该子网的子网地址为192.168.1.0,或者说该子网为192.168.1.0/25。如果利用子网掩码的反码与该地址做按位或运算,就可以得到该子网的直接广播地址,即192.168.1.127。该子网IP地址总数是128(192.168.1.0至192.168.1.127共128);该子网可分配IP地址数是128-2=126(可分配IP地址是指可以分配给主机或路由器接口使用的IP地址,因此要从子网的IP地址总数中减去子网地址和广播地址,这两个地址是不能分配给主机或路由器接口的);可分配IP地址范围是:192.168.1.1~192.168.1.126。
  • 子网划分的一般性方法
    • 对于一个给定的IP网络 a . b . c . d / x a.b.c.d/x a.b.c.d/x(IPv4网络),如果需要将其划分为多个子网,可以利用其主机域(HostID)的 ( 32 − x ) (32-x) (32x)位中的部分位加以区分。
    • 如果利用 r r r位划分子网 ( r ∈ [ 1 , 30 − x ] ) (r\in[1,30-x]) (r[1,30x]),则可以将原网络 a . b . c . d / x a.b.c.d/x a.b.c.d/x划分为 2 r 2^r 2r个等长的子网,每个子网IP地址空间(总数)为 2 ( 32 − x − r ) 2^{(32-x-r)} 2(32xr),其中每个子网中除了 a . b . c . d / x a.b.c.d/x a.b.c.d/x的网络前缀的 x x x位与区分子网的 r r r位外,剩余位全为0和全为1的地址,分别作为对应子网的子网地址和子网直接广播地址,因此,每个子网可分配IP地址空间为 ( 2 ( 32 − x − r ) − 2 ) (2^{(32-x-r)}-2) (2(32xr)2)
    • r r r越大,可区分的子网数越多,但每个子网可分配IP地址空间越小,即每个子网可分配给主机或路由器接口的IP地址数越少。究竟应该选择多大的 r r r划分子网,要根据实际网络的子网数以及子网规模来定。
    • 在实际划分子网时,会从 ( 32 − x ) (32-x) (32x)位中的高位连续选择 r r r位。上述子网划分过程通常称为等长子网划分,划分出来的子网大小相同,即各子网的网络前缀相同,或者说各子网的子网掩码相同。如果将一个IP网络划分为多个不同规模的子网,就需要进行不等长子网划分。基本方法就是先进行等长划分,然后在将划分出来的子网的其中一个或多个再进行等长划分,从而可以得到多个不同规模的子网。
    • 准确描述一个子网可以通过两种形式
      • 一种是CIDR形式,子网地址形如 a ′ . b ′ . c ′ . d ′ / ( x + r ) a'.b'.c'.d'/(x+r) a.b.c.d/(x+r)
      • 另一种是子网地址(每个子网的 ( x + r ) (x+r) (x+r)位前缀是特定值,剩余 ( 32 − x − r ) (32-x-r) (32xr)位全为0的地址)加子网掩码。子网掩码的取值是对应子网的 ( x + r ) (x+r) (x+r)位高位全取1,剩余 ( 32 − x − r ) (32-x-r) (32xr)位全为0的地址。

7,路由聚合

  • 子网划分后,会利用路由器等第三层网络互连设备互连这些子网,通过路由器实现子网间的IP数据报转发。路由器将路由信息存到转发表(即路由表)中,当收到IP数据报时,利用IP数据报的目的IP地址匹配转发表的表项,并将IP数据报沿最优的匹配成功表项描述的路径进行转发。转发表包含的主要信息有网络地址,子网掩码,下一跳地址以及路由器接口,其中,网络地址和子网掩码可以分开给出,也可以合并以CIDR形式给出。
  • 路由器中的转发模块在一个IP数据报到达后逐行查找转发表。将IP数据报的目的IP地址与路由表的每个路由表项的子网掩码按位与运算,再将结果与该路由表项的网络地址进行匹配,如果相同,则匹配成功。如果整个路由表全部查找完毕,只匹配成功一条路由表项(默认路由除外),则选择该路由表项描述的路径转发IP数据报,即通过该路由表项中的路由器接口转发IP数据报;如果匹配成功的路由表项不止一条,则选择匹配成功的网络前缀最长的那条路由项,即最长前缀匹配优先原则;如果没有一条路由表项匹配成功,则通过默认路由表项描述的路径转发IP数据报。
  • 路由聚合是为了提高路由效率,减少路由表项数,尽可能将能够聚合在一起的子网聚合成一个大的子网。路由聚合可以视为是子网划分的逆过程,通常 2 n 2^n 2n个前缀长度为 x x x的子网,如果这些子网具有 ( x − n ) (x-n) (xn)位长度的共同网络前缀,则这些子网可以聚合为一个网络前缀长度为 ( x − n ) (x-n) (xn)的大子网。在路由表中,满足这个基本条件的子网是否要(或能)聚合为一个大子网,要看它们是否有相同的路由“路径”,即“下一跳地址”和“接口”是否相同,相同才能聚合,否则不能聚合。

三,动态主机配置协议

  • 动态主机配置协议(DHCP)是在应用层实现的,传输层使用UDP。提供动态IP地址分配的网络,需要运行DHCP服务器(端口号为67),并且配置其可以为其他主机进行动态地址分配的IP地址范围等。
  • DHCP工作流程
    1. DHCP服务器发现。新到达主机的首要任务便是进行DHCP客户,并发送DHCP发现(DHCP Discover)报文以便发现DHCP服务器。主机使用UDP向67端口发送DHCP发现报文,UDP报文段进一步封装到IP数据报中。此时主机并不知道DHCP服务器的IP地址,自己也没有分配到IP地址,所以主机会在IP数据报的目的IP地址字段中填入255.255.255.255,表明这是一次广播,在源IP地址字段中填入0.0.0.0。将IP数据报封装完成之后,交付给下一层的数据链路层,数据链路层会负责将数据帧广播到与该主机相连的子网内的所有主机与路由器接口。
    2. DHCP服务器提供。当某台服务器(或路由器)在端口67上提供DHCP服务,并且接收到DHCP发现报文后,会发送一个DHCP提供(DHCP Offer)报文,来响应主机。由于新接入到网络中的主机此时仍不具有可用的IP地址,因此DHCP提供报文仍是通过广播方式发送出去。DHCP提供报文中包含了DHCP服务器为新加入网络的主机分配的IP地址,用于标识一次DHCP过程的标识符,子网掩码,默认网关,本地域名服务器IP地址以及IP地址的租期等信息。
    3. DHCP请求。当新加入网络的主机收到一个或是多个DHCP服务器的DHCP提供报文之后,选择其中一个发送DHCP请求(DHCP Request)报文。此时仍是使用广播的方式来发送DHCP请求报文,因为当前网络中可能存在多个DHCP服务器,当多个DHCP服务器都对新加入网络中的主机做出响应时,这台主机要从中选择一个;而对于未被选中的DHCP服务器,该主机也需要将它们为其分配的IP地址未被使用的消息广而告之,所以仍然使用广播来发送这个报文。
    4. DHCP确认。被选定的DHCP服务器以DHCP确认(DHCP ACK)报文来对DHCP请求报文进行响应。当客户主机收到DHCP ACK报文后开始正式使用该服务器为其分配的IP地址。客户主机在通过DHCP服务器动态分配IP地址过程中,DHCP不仅为主机分配IP地址,还包括子网掩码,默认网关,本地域名服务器IP地址等重要信息。

四,网络地址转换

  • 私有网络地址的主机如何在Internet上进行正常的通信?
    • 解决方案之一:网络地址转换Network Address TranslationNAT)。NAT通常运行在私有网络的边缘路由器(或专门服务器)上,同时连接内部私有网络和公共互联网,拥有公共IP地址。NAT通过替换进出内部私有网络的IP数据报的IP地址与端口号,支持使用私有地址的内部主机与公共互联网中的服务器或其他主机进行通信。
  • NAT工作原理
    • 对于从内网出去,进入公共互联网的IP数据报,将其源IP地址替换为NAT服务器拥有的合法的公共IP地址,同时替换源端口号,并将替换关系记录到NAT转换表。
    • 对于从公共互联网返回的IP数据报,依据其目的IP地址与目的端口号检索NAT转换表,并利用检索到的内部私有IP地址与对应的端口号替换目的IP地址和目的端口号,然后将IP数据报转发到内部网络。

五,ICMP

  • 互联网控制报文协议Internet Control Message Protocol,ICMP)主要目的是:主机或路由器在处理或转发IP数据报的过程中,由于种种原因可能导致异常发生,此时主机或路由器就可能需要将这些异常情况,及时地反馈给其他主机或路由器,而IP本身并没有这种功能,ICMP就是在这种情况下,在主机或路由器间,实现差错信息报告。

  • ICMP通过发送ICMP报文,实现差错报告网络探询功能,因此ICMP报文分为差错报告报文询问报文两大类。每个ICMP报文都包括类型(type)和代码(code)两个字段。

    • 如:type=11,code=0的ICMP报文,为“时间超时”报文,表示TTL=0的IP数据报被丢弃。

    在这里插入图片描述

  • ICMP报文的前4个字节是统一格式,包括3个字段:类型代码校验和,ICMP差错报告报文共有5种:终点不可达源点抑制时间超时参数问题路由重定向等;ICMP询问报文有:回声(echo)请求/应答时间戳(timestamp)请求/应答

    在这里插入图片描述

六,IPv6

  • NAT缓解了IPv4地址耗尽问题,使得没有公共IP地址的设备也能成功上网,但是NAT是一个过渡技术,并不能彻底解决IPv4的问题,IPv6才是解决IPv4问题的理想方案。除了在地址长度上进行了扩展外,IPv6还在其他方面对IPv4进行了增强。

1,数据报格式

  • IPv6数据报格式。

在这里插入图片描述

  • 版本字段,占4位,与IPv4数据报相同,给出协议版本号。
  • 流量类型字段,占8位,与IPv4数据报中的TOS字段具有相似的含义。
  • 流标签字段,占20位,用于标识一系列数据报的流。
  • 有效载荷长度字段,占16位,用于说明IPv6数据报中数据(有效载荷)的字节数量。
  • 下一个首部字段,占8位,用于标识数据报中承载的数据应该交付给哪一个上层协议,比如UDP或TCP等;或指向其他选项首部。
  • 跳数限制字段,占8位,与IPv4数据报中的TTL具有相同的含义。
  • 源IP地址和目的IP地址字段,各占128位,意义与IPv4数据报源IP地址和目的IP地址字段相同。IPv6数据报中的地址字段由IPv4中的32位扩展到了128位,相应地,IPv6地址数量也扩展到了 2 128 2^{128} 2128
  • 数据,为IPv6数据报中承载的有效载荷,上层协议报文段。

2,IPv6地址

  • IPv6地址长度为128位,通常采用8组冒号分隔的十六进制数地址形式表示,如:5000:000:00A1:0128:4500:0000:89CE:ABCD。由于IPv6地址空间巨大,分配给主机的IPv6地址,可能包含连续的多组的“0000”,如:8000:0000:0000:0000:4321:0501:AB96:56CD。对于具有这一特点的IPv6地址,可以采用压缩格式表示,即对于连续的多组“0000”,可以利用连续的两个":"(即“::”)代替,如上述地址可以写为8000::4321:0501:AB96:56CD,但在一个IPv6地址中只能用一次“::”。
  • IPv6地址的另一种形式是在IPv6地址中嵌入IPv4地址,即IPv6地址的低32位写成点分十进制形式,如6700::89A1:0321:206.36.45.19。
  • IPv6地址包括单播地址组播地址任播地址
    • 单播地址唯一标识网络中的一个主机或路由器网络接口,可以作为IPv6数据报的源地址和目的地址。
    • 组播地址标识网络中的一组主机,只能用作IPv6数据报的目的地址,向一个组播地址发送IP数据报,该组播地址标识的多播组每个成员都会收到一个该IP数据报的一个副本。
    • 任播地址也是标识网络中的一组主机,也只能用作IPv6数据报的目的地址,但当向一个任播地址发送IP数据报时,只有该任播地址标识的任播组的某个成员收到该IP数据报。

3,IPv4到IPv6迁移

  • 实现IPv4与IPv6共存的有效解决方案是采用双协议栈,即支持IPv6的网络结点同时也是支持IPv4,同时具备发送IPv4数据报与IPv6数据报的能力。当该结点与只提供IPv4网络层服务的结点通信时,发送IPv4数据报;当与提供IPv6网络层服务的结点通信时,发送IPv6数据报。这种方式要求一个双协议栈结点,能够感知到另一结点是否提供IPv6服务。结点本身是支持IPv4和IPv6的,同时具有IPv4和IPv6两种地址。
  • 结点如何感知通信另一结点提供什么版本的网络层服务呢?
    • DNS。当另一结点提供的是IPv4服务时,DNS查询会返回IPv4地址,于是,当前结点就只能传输IPv4数据报;当另一结点提供IPv6服务时,DNS查询返回IPv6地址,这时传输的就是IPv6数据报。
  • 若IPv6数据报流经一个IPv4结点,即使该结点能够执行IPv6到IPv4的转换,但由于IPv6首部与IPv4首部中的字段并不是一一对应的,因此执行IPv6到IPv4的转换时,会出现信息丢失,这样在后面执行IPv4到IPv6的转换时这些信息也无法恢复。解决方案—隧道。
    • 在隧道中,通信源端与目的端都提供IPv6服务,但途径一段IPv4网络,为了使IPv6数据报成功通过IPv4网络,可以在IPv4网络上建立IPv6隧道。在IPv6数据报进入隧道前的最后一个IPv6路由器上,该路由器将整个IPv6数据报封装进一个IPv4数据报中(即作为IPv4数据报的有效载荷部分),并将该IPv4数据报的目的地址修改为隧道的末端(即隧道后的第一个IPv6路由器)。该IPv4数据报在隧道中进行转发,并最终到达隧道的出口,在隧道出口的IPv6路由器上,IPv6数据报被从IPv4数据报的有效载荷中提取出来,并继续转发至通信目的主机。

第六节 路由算法与路由协议

  • 路由选择:当分组到达一台计算机时,在Internet中,需要根据分组的目的IP地址进行转发。在虚电路网络中,需要根据分组的VCID进行转发,而转发的决策依据是存储在路由器上的转发表中的路由选择信息。路由器运行某种路由协议,与其他路由器交换信息,然后基于某种路由选择算法计算最佳路由,存储到转发表中,作为路由器转发分组时的决策依据。
  • 在实际网络中,一台主机通常通过局域网与一台路由器直接相连,这台路由器称为该主机的默认路由器,连接该主机所在子网的路由器接口就是该主机的默认网关。当主机要与所处子网之外的主机进行通信时,分组首先被传送到其默认路由器,然后再转发到网络核心。
  • 路由选择的关键,就是从源主机的默认路由器到目的主机的默认路由器之间的路由优选。
  • 路由选择算法的目的,就是在给定一组网络中的路由器以及路由器间的连接链路的情况下,寻找一条从源路由器到目的路由器的最优路径。

一,路由选择算法分类

  • 根据路由算法是否基于网络全局信息计算路由,可以将路由选择算法分为:全局式路由选择算法分布式路由选择算法
  • 依据算法是静态的还是动态的分为:静态路由选择算法动态路由选择算法
  • 依据路由选择算法是否为负载敏感的分为:负载敏感的路由选择算法负载迟钝的路由选择算法
    • 全局式路由选择算法:根据网络的完整信息(完整的网络拓扑结构),来计算最短路径。最具有代表性的全局式路由选择算法是链路状态路由选择算法,简称LS算法
    • 分布式路由选择算法:在分布式路由选择算法中,结点不会尝试获取整个网络拓扑信息,结点只需获知与其相连的链路的“费用”信息,以及邻居结点通告的到达其他结点的最短距离信息,经过不断的迭代计算,最终获知经由哪个邻居可以具有到达目的结点的最短距离。最具代表性的分布式路由选择算法是距离向量路由选择算法,简称DV算法
    • 静态路由选择算法:通常是指由人工进行网络配置。
    • 动态路由选择算法:能够在网络状态发生变化时,自动计算最佳路由,从而反映出网络变化,因此具有更好的自适应性。链路状态路由选择算法距离向量路由选择算法都是动态路由选择算法。
    • 负载敏感路由选择算法:能够较好地在网络发生拥塞时迅速地对路由做出调整。
    • 负载迟钝路由选择算法:无法对变换做出快速响应。

二,链路状态路由选择算法

原理

  • 为了构建整个网络的拓扑图,每个路由器周期性检测,收集与其直接相连链路的费用,以及与其直接相连的路由器ID等信息,构造链路状态分组,并向全网广播扩散。于是,网络中的每个路由器,都会周期性地收到其他路由器广播的链路状态分组,并将链路状态信息存储到每个路由器的链路状态数据库中。当数据库中收到足够的链路状态信息后,路由器就可以基于数据库中的链路状态信息,构建出网络拓扑图。接下来,链路状态路由算法就转变为在网络拓扑图上求最短路径问题。

算法

  • Dijkstra算法。

    • D(v):到本次迭代为止,源节点(计算结点)到目的结点v的当前路径距离。初始化时,如果结点v和源节点直接相连,那么D(v)就是其链路上的权值,否则就是 ∞ \infty

    • P(v):到本次迭代为止,在源结点到目的结点v的当前路径上,结点v的前序结点。

    • c(x,y):结点x与结点y之间直接链路的费用,如果x和y之间没有之间链路相连,则c(x,y)= ∞ \infty

    • S:结点的集合,用于存储从源结点到该结点的最短路径已求出的结点集合,初始值只有源点本身。

    • 输入:无向图G,源结点u
      输出:源节点u到无向图G所有结点的最短路径
      Dijkstra(G,u)
      	S = {u}
      	for i = 2 to n
      			D[i] = G[u][i]
      			P[i] = u
      	for i = 1 to n - 1
      		选择不在集合S中且使得D[w]最小的结点w
      		将结点w加入集合S
      		for v not is S
      				if D[w] + c(w,v) < D[v]
      					D[v] = D[w] + c(w,v)
      					P[v] = w
      

三,距离向量路由选择算法

原理

  • 距离向量路由选择算法是一种异步的,迭代的分布式路由选择算法。在距离向量路由选择算法中,没有任何一个结点掌握整个网络的完整信息。每个结点可以测得与所有邻居结点之间的直接链路代价,并将其到达每个目的结点的最短距离(可能是最短距离估计),以(目的,最短距离)的距离向量形式交换给所有的邻居结点。每个结点基于其与邻居结点间的直接链路距离,以及邻居交换过来的距离向量,计算并更新其到达每个目的结点的最短距离,然后将新的距离向量再通告给其所有邻居,直到距离向量不再改变。

算法

  • Bellman-Ford方程(简称B-F方程)。令 d x ( y ) d_x(y) dx(y)表示结点x到结点y的路径的最低费用(即广义最短距离),根据B-F方程,有以下公式成立。
    • d x ( y ) = { c ( x , v ) + d v ( y ) } ; v ∈ { x 的 邻 居 } d_x(y)= \lbrace c(x,v)+d_v(y) \rbrace;v\in\lbrace x的邻居\rbrace dx(y)={c(x,v)+dv(y)};v{x}
    • c ( x , v ) c(x,v) c(x,v)为结点x与邻居结点v之间的直接链路距离(费用)。
    • d v ( y ) d_v(y) dv(y)为邻居结点v通告给结点x的其到达结点y的最短距离。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值