• 计算机网络体系结构及协议


    第3章 计算机网络体系结构及协议

    3.4 网络层

       网络层是OSI参考模型中的第三层,介于运输层和数据链中路层之间。它在数据路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通 信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务。网络层关系到通信子网的运行控制,体现了网络应用 环境中资源子网访问通信子网的方式,是OSI模型中面向数据通信的低三层(也即通信子网)中最为复杂、关键的一层。
      网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括路由选择、阻塞控制和网际互连等。

     3.4.1 通信子网的操作方式和网络层提供的服务

      端点之间的通信是依靠通信子网中的节点间的通信来实现的,在OSI模型中,网络层是网络节点中的最高层,所以网络层将体现通信子网向端系统所提供的网 络服务。在分组交换方式中,通信子网向端系统提供虚电路和数据报两种网络服务,而通信子网内部的操作也有虚电路的数据报两种方式。

     1.虚电路操作方式

      在虚电路操作方式中,为了进行数据传输,网络的源节点的目的节点之间先要建立一条逻辑通路,因为这条逻辑通路不是专用的,所以称之为“虚”电路。每个 节点到其它任一节点之间可能有若干条虚电路支持特定的两个端系统之间的数据传输,两个端系统之间也可以有多条虚电路为不同的进程服务,这些虚电路的实际路 径可能相同也可能不同。
      节点间的物理信道在逻辑上均可看做由多条逻辑信道组成,这些逻辑信道实际上由节点内部的分组缓冲器来实现。所谓占用某条逻辑信道,实质上是指占用了该 段物理信道上节点分配的分组缓冲器。不同的逻辑信道在节点内部通过逻辑信道号加以区分,各条逻辑信道异步时复用同一条物理信道。
      一条虚电路可能要经过多个中间节点,在节点间的各段物理信道上都要占用一条逻辑信道用以传送分组。由于各节点均独立地为通过的虚电路分配逻辑信道,也 即同一条虚电路通过各段信道所获取的逻辑信道可能是不相同的,所以各节点内部必须建立一张虚电路表,用以记录该点的各条虚电路所占用的各个逻辑信号。
      为使节点能区分一个分组属于哪条虚电路,每个分组必须携带一个逻辑信道;同样,同一条虚电路的分组在各段逻辑信道上的逻辑信道可能也不相同。传输中, 当一个分组到达节点时,节点根据其携带的逻辑信道号查找虚电路表,以确定该分组应发往的下一个节点及其下一段信道上所占用的逻辑信道号,有该逻辑信道号替 换分组中原先的逻辑信道号后,再将该分组发往下一个节点。
      各节点的虚电路表是在虚电路建立过程中建立的。比如,与A节点相连的源端系统要经中间节点B、C跟与D节点相连的目的端系统建立一条虚电路,源端系统 可发出一个呼叫请求分组,该分组除了包含目的地址外,还包含源端系统所选取的不用的最小逻辑信道号N。A节点收到请求分组后在A节点与下一节点B间所有已 使用的逻辑信道号之外选取一个最小编号NA,并将请求分组中的逻辑信道N替换成该逻辑信道号NA,再将分组成发送给节点B。此后的各节点依次逐个根据自身 实际情况选取新的逻辑信道号(如NB、NC、ND等)来替换收到的分组中的逻辑信道号。最后,目的节点D将请求分组传送给连接它的端系统。在此过程中,每 个节点的虚电路表中要记录两个逻辑信道:前一个节点所选取的逻辑信道号和本节点所选取的逻辑信道号。这样便使得虚电路所跨越的每一段连接上的逻辑信道号都 是唯一的。
      图3.16给出一个虚电路表建立的示例,这里假设建立了6条虚电路。由于虚电路上的数据是双向传输的,为保证两节点之间正、反两个方向的虚电路不相混 淆,在一个节点选取逻辑信道号来替换其前一节点的逻辑信道号时,不仅要考虑与下一节点之间的逻辑信道号不相同,还在考虑与下一节点作为另一个条反向虚电路 的上一节点头时所选取的逻辑信道号相区别。例如,在建立虚电路1-BAE时(这里1-BAE表示源节点为B,建立虚电路时选取1为逻辑信道号,并经A传送 到E),在节点B中,尽管A节点是第一次作为B节点的下一节点,但由于虚电路0-ABCD中A到B间已使用了逻辑信道号0,因此在出路一栏选B到A间的逻 辑信道号为1。这样,当从节点A发来一个分组时,若它所携带的逻辑信道号为0,刚说明是虚电路ABCD上的正向分组;若为1,则说明虚电路BAE上的反向 分组。对于虚电路2-BFE的建立也是同样情况。

    第3章 计算机网络体系结构及协议 <wbr>-4
    第3章 计算机网络体系结构及协议 <wbr>-4

    第3章 计算机网络体系结构及协议 <wbr>-4

    图3.16 虚电路建立示例

      各节点的虚电路表空间和逻辑信道号都是网络资源,当虚电路拆除时必须回收。这可通过某端系统发出一个拆链请求分组,告知虚电路中各节点删除虚电路表是有关表项来实现。

     2.数据报操作方式

      在数据报操作方式中,每个分组被称为一个数据报,若干个数据报构成一次要传送的报文或数据块。每个数据报自身携带有足够的信息,它的传送是被单独处理 的。一个节点接收到一个数据报后,根据数据报中的地址信息和节点所存储的路由信息,找出一个合适的出路,把数据报原样地发送到下一个节点。
      当端系统要发送一个报文时,将报文拆成若干个带有序号和地址信息的数据报,依次发给网络节点。此后,各个数据报所走的路径就可能不同了,因为各个节点 在随时根据网络的流量、故障等情况选择路由。由于名行其道,各数据报不能保证按顺序到达目的节点,有些数据报甚至还可能在途中丢失。在整个数据报传送过程 中,不需要建立虚电路,但网络节点要为每个数据报做路由选择。

     3.虚电路服务

      虚电路服务是网络层向运输层提供的一种使所有分组按顺序到达目的端系统的可靠的数据传送方式。进行数据交换的两个端系统之间存在着一条为它们服务的虚电路。
      为了建立端系统之间的虚电路,源端系统的运输层首先向网络层发出连接请求,网络层则通过虚电路网络访问协议向网络节点发出呼叫分组;在目的端,网络节 点向端系统的网络层传送呼叫分组,网络层再向运输层发出连接指示;最后,接收方运输层向发起方发回连接响应,从而使虚电路建立起来。此后,两个端系统之间 就可以传送数据。数据由网络层拆成若干个分组送给通信子网,由通信子网将分组传送到数据接收方。
      上述虚电路的服务是网络层向运输层提供的服务,也是通信子网端向系统提供的网络服务。但是,提供这种虚电路服务的通信子网内部的实际操作既可是虚电路 方式的,也可以是数据报方式的。以虚电路操作方式的网络,一般总是提供虚电路服务。OSI中面向连接的网络服务就是虚电路服务。在虚电路操作方式,端系统 的网络层同通信子网节点的操作是一致的。SNA就是采用这种虚电路操作支持虚电路服务方式的实例。
      以数据报方式操作的网络,也可以提供虚电路服务,即通信子网内部节点按数据报方式交换数据,而与端系统相连的网络节点则向端系统提供虚电路报务.对于 端系统来说,它的网络层与节点间通信仍像虚电路操作方式的网络节点间一样,先建立虚电路,再交换数据分组,最后拆除电路.但实际上,每个分组被网络节点分 成若干个数据报,附加上地址、序号、逻辑信道等信息分送到目的节点。目的节点再将数据报进行排序,拼成原来的分组,送给目的端系统。因此,源端系统和源网 络节点之间、目的节点和目的端系统之间的网络层按虚电路操作方式交换分组,而目的节点和源节点之间则按数据报交方式完成分组的交换。尽管通信子网的数据报 交换是不可靠的,但是两端原网络节点做了许多诸如排序、重发等额外工作,从而满足了虚电路服务的要求。例如,在ARPANET中,其内部使用数据报操作方 式,但可以向端系统提供数据报和虚电路两种服务。

     4.数据报服务

      数据报服务一般仅由数据报交换网来提供。端系统的网络层同网络节点中的网络层之间,一致地按照数据报操作方式交换数据。当端系统要发送数据时,网络层 给该数据附加上地址、序号等信息,然后作为数据报以发送给网络节点;目的端系统收到的数据报可能是不按序到达的,也可能有数据报的丢失。例如,在 ARPANET、DNA等网络中,就提供了数据报服务。数据报服务与OSI的无连接网络服务类似。
      由虚电路交换网提供数据报服务的组合方式并不常见。可以想像有这么一种特殊情况:一个端系统的网络层已经构造好了用于处理数据报的服务,而当它要接入 以虚电路方式操作的网络时,网络节点就需要做一些转换工作。当端系统向网络节点发送一个携带有完整地址信息的数据报时,若发向同一地址的数据报数量足够 大,则网络节点可以为这些数据报同目的节点间建立一条虚电路,所有相同址的数据报均在这条虚电路上传送时,这条虚电路便可以拆除。所以,这种数据报服务具 有了虚电路服务的通信质量,但这样做既不经济,效率也低。

     3.4.2 路由选择 

      通信子网为网络源节点和目的节点提供了多条传输路径的可能性。网络节点在收到一个分组后后,要确定向下一节点传送的路径,这就是路由选择。在数据报方 式中,网络节点要为每个分组路由做出选择;而在虚电路方式中,只需在连接建立时确定路由。确定路由选择的策略称路由算法。
      设计路由算法时要考虑诸多技术要素。首先,考虑是选择最短路由还是选择最佳路由;其次,要考虑通信子网是采用虚电路的还是采用数据报的操作方式;其 三,是采用分布式路由算法,即每节点均为到达的分组选择下一步的路由,还是采用集中式路由算法,即由中央节点或始发节点来决定整个路由;其四,要考虑关于 网络拓朴、流量和延迟等网络信息的来源;最后,确定是采用静态路由选择策略,还是动态路由选择策略。

     1.静态路由选择策略

      静态路由选择策略不用测量也不需利用网络信息,这种策略按某种固定规则进行路由选择,其中还可分为泛射路由选择、固定路由选择和随机路由选择三种算法。
      (1)泛射路由选择法。这是一种最简单的路由算法。一个网络节点从某条线路收到一个分组后,再向除该线路外的所有线路重复发送收到分组。结果,最先到 达目的的节点的一个或若干个分组肯定经过了最短的路径,而且所有可能的路径都被尝试过。这种方法用于诸如军事网络等强壮性要求很高的场合。即使有的网络节 点遭到破坏,只要源、目间有一条信道存在,则泛射路由选择仍能保证数据的可靠传送。另外,这种方法也可用于将一个分组数据源传送到所有其它节点的广播式数 据交换中。它还可被用来进行网络的最短路径及最短传输延迟的测试。
      (2)固定路由选择。这是一种使用较多的简单算法。每个网络节点存储一张表格,表格中每一项记录着对应某个目的节点的下一节点或链路。当一个分组到达 某节点时,该节点只要根据分组上的的地址信息,便可从固定的路由表中查出对应的目的节点及所应选择的下一节点。一般,网络中都有一个网络控制中心,由它按 照最佳路由算法求出每对源、目节点的最佳路由,然后为每一节点构造一个固定路由表并分发给各个节点。固定路由选择法的优点是简便易行,在负载稳定,拓扑结 构变化不大的网络中运行效果很好。它的缺点是灵活性差,无法应付网络中发生的阻塞和故障。
      (3)随机路由选择。在这种方法中,收到分组的节点,在所有与之相邻的节点中为分组随机选择出一个节点。方法虽然简单,但实际路由不是最佳路由,这会增加不必要的的负担,而且分组传输延迟也不可预测,故此法应用不广。

     2.动态路由选择策略

      节点的路由选择要依靠网络当前的状态信息来决定的策略,称动态路由选择策略。这种策略能较好地适应网络流量、拓扑结构的变化,有利于改善网络的性能。但由于算法复杂,会增加网络的负担。独立路由选择、集中路由选择和分布路由选择是三种动态路由选择策略的具体算法。
      (1)独立路由选择。在这类路由算法中,节点不仅根据自己搜集到的有关信息做出路由选择的决定,与其它节点不交换路由选择信息。这种算法虽然不能正确 确定距离本节点较远的路由选择,但还是能较好地适应网络流量和拓扑结构的变化。一种简单的独立路由选择算法是Baran在1964年提出的热土豆(Hot Potato)算法:当一个分组到来时,节点必须尽快脱手,将其放入输出队列最短的方向上排队,而不管该方向通向何方。 
      (2)集中路由选择。集中路由选择也像固定路由选择一样,在每个节点上存储一张路由表。不同的是,固定路由选择算法中的节点路由表由人工制作,而在集中路由选择算法中的节点路由表由路由控制中心RCC(Routing Control Center)定时根据网络状态计算、生成并分送到各相应节点。由于RCC利用了整个网络的信息,所以得到的路由选择是完美的,同时也减轻了各节点计算路由选择的负担。 
      (3)分布路由选择。在采用分布路由选择算法的网络中,所有节点定期地与其每个相邻节点交换路由选择信息。每个节点均存储一张以网络中其它节点为索引 的路由选择表,,网络中每个节点占用表中一项。每一项又分为两个部分,一部分是所希望使用的到目的节点的输出线,另一部分是估计到目的的节点所需要的延迟 或距离。度量标准可以是毫秒或链路段数、等待的分组数、剩余的线路和容量等。

     3.4.3 阻塞控制

      阻塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通 信业务陷入停顿,即出现死锁现象。这种现象跟公路网中经常所见的交通拥挤一样,当节假日公路网中车辆大量增加时,各种走向的车流相互干扰,使每辆车到达目 的地的时间都相对增加(即延迟增加),甚至有时在某段公路上车辆因堵塞而无法开动(即发生局部死锁)。
      网络的吞吐量与通信子网负荷(即通信子网中正在传输的分组数)有着密切的关系。当通信子网负荷比较小时,网络的吞吐量(分组数/秒)随网络负荷(每个 节点中分组的平均数)的增加而线性增加。当网络负荷增加到某一值后,若网络吞吐量反而下降,则表征网络中出现了阻塞现象。在一个出现阻塞现象的网络中,到 达某个节点的分组将会遇到无缓冲区可用的情况,从而使这些分组不得不由前一节点重传,或者需要由源节点或源端系统重传,从而使通信子网的有效吞吐量下降。 由此引起恶性循环,使通信子网的局部甚至全部处于死锁状态,最终导致网络有效吞吐量接近为零。

     1.阻塞控制方法

      (1)缓冲区预分配方法。该法用于虚电路分组交换网中。在建立虚电路时,让呼叫请求分组的途经的节点为虚电路预先分配一个或多个数据缓冲区。若某个节 点缓冲器已被占满,则呼叫请求分组另择路由,或者返回一个“忙”信号给呼叫者。这样,通过途经的各个节点为每条虚电路开设的永久性缓冲区(直到虚电路拆 除),就总能有空间来接纳并转送经过的分组。此时的分组交换跟电路交换很相似。当节点收到一个分组并将它转发出去之后,该节点向发送节点返回一个确认信 息。该确认一方面表示接收节点已正确收到分组,另一方面告诉发送节点,该节点已空出缓冲区以备接收下一个分组。上面是“等一等”协议下的情况,若节点之间 的协议允许多个未处理的分组存在,则为了完全消除阻塞的可能性,每个节点要为每条虚电路保留等价于窗口大小数量的缓冲区。这种方法不管有没有通信量,都有 可观的资源(线路容量或存储空间)被某个连接占有,因此网络资源的有效利用率不高。这种控制方法主要用于要求高带宽和低延迟的场合,例如传送数字化语音信 息的虚电路。
      (2)分组丢弃法。该法不必预先保留缓冲区,当缓冲区占满时,将到来的分组丢弃。若通信子网提供的是数据报服务,则用分组丢弃法来防止阻塞发生不会会 引起大的影响。但若通信子网提供的是虚电路服务,则必须在某处保存被丢弃分组的备份,以便阻塞解决后能重新传送。有两种解决被丢弃分组重发的方法,一种是 让发送被丢弃分组的节点超时,并重新发送分组直至分组被收到;另一种是让发送被丢弃分组的节点在一定次数后放弃发送,并迫使数据源节点超时而重新开始发 送。但是不加分辨地随意丢弃分组也不妥,因为一个包含确认信息的分组可以释放节点的缓冲区,若因节点无空余缓冲区来接收含确认信息的分组,这便使节点缓冲 区失去了次释放的机会。解决这个问题的方法可以为每条输入链路永久地保留一块缓冲区,以用于接纳并检测所有进入的分组,对于捎带确认信息的分组,在利用了 所捎带的确认释放缓冲区后,再将该分组丢弃或将该捎带好消息的分组保存在刚空出的缓冲区中。
      (3)定额控制法。这种方法在通信子网中设置适当数量的称做“许可证”的特殊信息,一部分许可证在通信子网开始工作前预先以某种策略分配给各个源节 点,另一部分则在子网开始工作后在网中四处环游。当源节点要发送来自源端系统的分组时,它必须首先拥有许可证,并且每发送一个分组注销一张许可证。目的节 点方则每收到一个分组并将其递交给目的端系统后,便生成一张许可证。这样便可确保子网中分组数不会超过许可证的数量,从而防止了阻塞的发生。


    转自:http://blog.sina.com.cn/s/blog_4ae3493f01008vf0.html

  • 相关阅读:
    c++Primer再学习(1)
    c++Primer再学习练习Todo
    感悟(一)
    新目标《C++程序设计原理与实践》
    C++Primer再学习(4)
    开篇
    C++Primer再学习(3)
    C++实现的单例模式的解惑
    使用springboot缓存图片
    springboot h2 database
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2246251.html
Copyright © 2020-2023  润新知