计算机网络原理——网络层

网络层的介绍

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

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

网络层体现了通信子网向端系统所提供地网络服务,通信子网向端系统提供虚电路(Virtual Circuit)和数据报(Datagram)两种网络服务
虚电路可以理解为物理层中地电路交换,建立专用通路
数据报可以理解为驿站,将数据送到驿站后,驿站负责寻址再传

虚电路操作方式

在虚电路操作方式中,为了进行数据传输,网络的源节点和目的节点之间先要建立一条逻辑通路,因为这条逻辑通路不是专用的,所以称之为“虚电路”。每个节点到其他任一节点之间可能有若干条虚电路支持特定的两个端系统之间的数据传输,两个端系统之间也可以有多条虚电路为不同的进程服务,这些虚电路的实际路径看可能相同也可能不同。
一条虚电路可能要经过多个中间节点,在节点间的各段物理信道上都要占用一条逻辑信道用以传送分组。由于各节点均独立地为通过地虚电路分配逻辑信道,也即同一条虚电路通过各段信道所获取地逻辑信道号可能是不同地,所以各节点内部必须建立一张虚电路表,用以记录经过该节点的各条虚电路所占用的各个逻辑信道号。
各节点的虚电路表是在虚电路建立过程中建立的。各节点的虚电路表空间和逻辑信道号都是网络资源,当虚电路拆除时必须回收。

数据报操作方式

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

虚电路服务

虚电路服务是网络层向传输层提供的一种使所有分组按顺序到达目的端系统的可靠的数据传送方式。进行数据交换的两个端系统之间存在着一条为它们服务的虚电路。
为了建立端系统之间的虚电路,源端系统的传输层首先向网络层发出连接请求,网络层则通过虚电路网络访问协议向网络节点发出呼叫分组;在目的端,网络节点向端系统的网络层传输呼叫分组,网络层再向传输层发出连接指示;最后,接收方传输层向发起方发回连接响应,从而使虚电路建立起来。此后,两个端系统之间就可以传送数据。数据由网络层拆成若干个分组送给通信子网,由通信子网将分组传送到数据接收方

数据报服务

数据报服务一般仅由数据报交换网来提供。端系统的网络层同网络节点中的网络层之间,一致的按照数据报操作方式交换数据。当端系统要发送数据时,网络层给该数据附加上地址、序号等信息,然后作为数据报发送给网络节点;目的端系统收到数据报可能是不按序到达的,也可能有数据报的丢失。

虚电路子网和数据报子网的比较

比较项目数据报子网虚电路子网
建立电路不需要需要
地址信息每个分组包含完整的源地址和目标地址每个分组包含一个很短的虚电路号
状态信息路由器不保留任何有关连接的状态信息每个虚电路都要求路由器为每个连接建立表项
路由每个分组被独立地路由当虚电路建立地时候选择路径,所有分组都沿着这条路径
路由器失效地影响没有,除非在崩溃过程中分组丢失所有经过此失效路由器地虚电路都将终止
服务质量很难实现如果有足够地资源可以提前分配给每一个虚电路,则很容易实现
拥塞控制很难实现如果有足够地资源可以提前分配给每个虚电路,则很容易实现

路由选择

通信子网为网络源节点和目的节点提供了多条传输路径地可能性。网络节点在收到一个分组后,要确定向下一个节点传送地路径,这就是路由选择,路由选择是网络层要实现地基本功能。
在数据报方式中,网络节点要为每个分组路由做出选择
在虚电路方式中,在建立虚电路时确定路由
路由选择包括两个基本操作,最佳路径的判定网间信息包的传送
确定路由选择的策略称路由选择算法。以下介绍几种路由选择算法

最优化原则

所谓最优原则(Optimality Principle)是指:如果路由器B在从路由器A到C的最佳路由上,那么从B到C的最佳路就会在同一路由之中。
最为最优化原则的一个直接结果,可知从所有源端到目的端的最佳路由集合,形成了以目的地为根的树。这样的一棵树称为汇集树(Sink Tree),其中距离度量单位时站数。
由于汇集树时一棵树,它不包含任何循环,因此沿汇集树传送分组不仅路由最优,而且每个分组均可在有限次数的步骤内送达。
但实际情况并非如此简单,因为在操作过程中链路和路由器额能经常会断开或停止工作,然后又恢复工作,所以不同的路由器对当前的拓扑结构可能会有不同的理解,而且路由器获取子网及其汇集树信息的方法也可能不同。

静态路由选择算法

静态路由选择算法是一类不用测量也不需要利用网络信息,而按某种固定规则进行路由选择的算法,严格来说并不是一种算法,而是网络管理员在路由选择前就已经手工建立了映射表。
下面介绍三种静态路由选择算法:最短路由选择算法、扩散法、基于流量的路由选择算法

最短路由选择算法

最短路由选择(Shortest Routing)算法时一种简单易懂而应用广泛的技术。它的基本思想是:建立一个子网图,图中每个节点代表一台路由器,每条弧线代表一条通信线路,弧上的数字代表该路的权重。为了在一对给定的路由器之间选择一条路由路径,路由算法只需要在途中找到这对节点之间最短路径即可。
对于路径长度的测量有多种方法,有计算站点数、距离、信道带宽、平均通信量、通信开销、队列长度、传播时延等
其中最著名的算法是Dijkstra在1959年提出的Dijkstra算法
该算法要求每个节点用从源节点沿已知最佳路径到本节点的距离来标注。开始时由于一条路径也不知道,故所有节点标注为无穷大。随着算法的进行和不断找到的路径,标注随之改变,使之反映出较好的路径。一个标注可以是暂时性地,也可以是永久性地。但最初所有标注都是暂时性地。当发现标注代表了从源节点到该节点地最短可能路径时,就使之称为永久性地,不再进行修改。

扩散法

扩散法(Flooding)是一种最简单地路由算法,又叫泛射路由选择法。一个网络节点从某条线路收到一个分组后,再向除该路线外所有线路发送收到地分组。结果,最先到达目的地地一个或若干个分组肯定经过了最短地路径,而且所有看可能地路径都被尝试过。
显然这种方法会产生大量地重复分组,甚至可能产生无穷多个分组。解决这个问题地方法之一是让每个分组包含站计数器,每经过一个站点计数器减一,当计数器值为0时就扔掉分组。

基于流量的路由选择算法

前面两种算法只考虑了拓扑结构,而没有考虑到网络负载。在一些网络中,每对节点间平均数据流量时相对稳定和可预测地。因此,完全有条件在进行静态路由选择时把负载因素考虑进去。基于流量地路由选择(Flow-based Routing)正式这样一种既考虑拓扑结构又兼顾网络负载地静态路由算法。
这种分析地基本思想为:对某一给定地线路,如果已知负载与平均流量,那么可以根据排队论计算出该线路上地平均分组延迟,这样路由选择问题就归结为如何找出产生网络最小平均延迟地路由选择算法。
要采用这种方法,有些信息必须是已知地。网络地拓扑结构已知,通信量矩阵和线路容量矩阵

动态路由选择算法

距离矢量路由(Distance Vector Routing)算法

每个路由器维护一张路由表(即一个矢量),它以子网中地每个路由器为索引,表中列出了当前已知的路由器到每个目标路由器地最佳距离,以及所使用的线路。通过在邻居之间相互交换信息,路由器不断更新它们内部地路由表。通过邻居路由器路由表中到目的地的预估时间加上到邻居路由器的预估时间,算出各条线路的预估时间,选择最短的线路作为路由。

链路状态路由(Link State Routing)算法

在1979年以前,ARPANET一直使用距离矢量路由算法,而在此后,则被替换为链路状态路由算法。该算法可以用以下5个部分加以描述。每个路由器必须完成以下工作

  1. 发现它的邻居节点,并知道其网络地址
  2. 测量到各邻居节点的延迟或者开销
  3. 构造一个分组,分组中包含所有它刚刚知道的信息
  4. 将这个分组发送给所有其它刚刚知道的信息
  5. 计算出到每一个其它路由器的最短路径

第一步:发现邻居
在每一个点到点的线路上发送一个hello分组,线路另一端的路由器发送一个应答说明他是谁。这些名字必须是全局唯一的(比如IP,你在家里两个路由器设置相同的IP试试,笑)
第二步:测量线路开销
发送一个特殊的ECHO分组,另一端立即回送一个应答。计算往返时间后除以2,发送方路由器就可以得到合理的延迟估计值
第三步:创建链路状态分组
该分组的内容首先是发送方的标识,接着是一个序列号和年龄,以及一个邻居和该路由器到邻居的延迟的列表{id:“A”,seq:“seq1”,age:“1”,[{id:“B”,delay:“10”}]}(类似于这种吧)
第四步:发布链路状态分组
使用扩散(藩射)法来发布链路状态分组。为了控制扩散过程,每个分组包含一个序列号,序列号随着每一个新的分组而递增。每个路由器记录下它所看到的所有(源路由器、序列号)对。当一个新的链路状态分组进来的时候,路由器在已经看到的分组列表中检查这个分组,若是重复分组则丢弃。如果序号小于当前看到的来自该源路由器的最大序列号,则拒绝,因为该路由器有了更新的数据
第五步:计算新的路由
一旦一个路由器已经获得了全部的链路状态分组后,它就可以构造出完整的子网图了,因为每条链路都已经被表示出来了。然后再路由器本地运行寻找最短路径的算法,将该算法的结果安装再路由表中,然后恢复正常的操作。

移动主机的路由选择

移动主机是指那些离开了原始站点还想继续连接网络的主机。
在包含移动主机的系统中,路由算法的目标是,能够做到用移动主机地址给它们发送分组,而不管这些主机在哪里,这些分组都能够被递交给它们。
以下是一个连着多个LAN,MAN,和无线单元的WAN在处理移动主机时的工作

  1. 外地代理定期广播一个分组,宣布自己的存在及其地址。一个新来的移动主机可以等待这类消息。移动主机可以广播一个分组问:这里有没有外部代理
  2. 移动主机登录到外地代理,并给出其原来所在地的地址,当前数据链路层地址,以及一些安全性信息。
  3. 外地代理与移动主机的主代理联系,核实移动主机是否真的在那。
  4. 主代理检查安全性信息,如果核实通过,则通知外地代理继续
  5. 当外地代理从主代理处得到确认后,在它的表中加入一个表项,并通知移动主机,登录成功

广播路由选择

在有些应用中,主机需要给其它多个主机发送消息。列入,用于发布天气预报的服务,它的最佳工作方式时将消息广播给所有的机器,然后让那些感兴趣的机器读取数据。
广播(Broadcasting):同时给所有的目标发送一个分组
让源机器简单地给每一个目标单独发送一个分组
扩散法
多目标路由
以发起广播地路由器为根地汇集树
逆向路径转发

多播路由选择

分布在各处的进程需要以组的方式协同工作,组中的进程通常要给其它所有的成员发送信息。如果组的规模比较小,那么它只要以点对点的方式给每一个其它成员发送消息即可。如果组的规模比较大,那么这种策略的代价就非常昂贵。
多播传输需要对组进行管理。路由算法关心的是,当一个进程加入组的时候,它需要把这个事实告诉它的主机,当主机与组之间的从属关系发生变化的时候,主机必须将这些变化告诉路由器,或者路由器定期询问它们的主机
为了实现多播路由,每个路由器计算一棵生成树,该树覆盖所有的其它路由器。当一个进程给一个分组发送多播分组时候,第一个路由器检查它的生成树,并对该树进行修剪,去掉那些并不通向该组成员主机的路线。

拥塞控制

拥塞发生的原因

拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致于引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。
出现这种现象的原因

  • 多条流入线路有分组到达,并需要同一输出线路,此时,如果路由器没有足够的内存来存放所有这些分组,那么有的分组就会丢失
  • 路由器的慢速处理器的缘故,以至于难以完成必要的处理工作。那么,即使有多余的线路容量,分组也需要进入到队列当中。

拥塞控制的通用原则

拥塞控制问题可以从控制论角度来看待,解决的方案可以分成两类:开环的和闭环的。
开环的控制手段有:确定何时接受新的流量、确定何时丢弃分组及丢弃哪些分组,以及在网络的不同点上执行调度决策。所有这些手段的共同之处是,它们在做出决定的时候不考虑网络的当前状态。
开环算法可以分成在源端采取动作还是在目的端采取动作两类算法。
闭环方案则建立在反馈环路的概念基础上,当这种方法用于拥塞控制的时候,它有3各部分

  1. 监控系统,检测到何时何地发生了拥塞。
  2. 将该信息传递到能够采取行动的地方
  3. 调整系统的运行,以改正问题。

拥塞预防策略

为预防拥塞在网络的各个层次上可以采取的策略

传输层
重传策略
乱序缓存策略
确认策略
流量控制策略
确定超时策略
网络层
子网内部的虚电路与数据报策略
分组排队和服务策略
分组丢弃策略
路由算法
分组生存管理
数据链路层
重传策略
乱序缓存策略
确认策略
流量控制策略

虚电路子网中的拥塞控制

  • 防止已经拥塞的子网进一步恶化的技术是准入控制(Admission Control):一旦出现拥塞信号,则不再创建任何虚电路,直到问题排除位置
  • 允许建立虚电路,但新的虚电路绕开问题的区域
  • 进行资源预留:建立虚电路的时候,约定了流量的形状、所要求的服务质量和其它参数。

数据报子网中的拥塞控制

每台路由器可以监视到它的输出线路和其它资源的使用情况。给每条线路关联一个实变量u,取值在0.0-1.0之间,代表了这条线路最近的利用率。为了使u值尽可能反映实际情况,路由器定期对线路的瞬时利用率f进行采样,然后根据以下公式更新u值
u(new) = a X u(old) + (1 - a) * f
其中a代表了路由器忘记最近的历史情况有多快
当u超过了特定的阈值时,该输出线路进入一种“警告”状态。路由器对每个新到来的分组进行检查,若输出路线处于“警告”状态,就需要采取以下措施

  1. 警告位。在分组的头部设置一个特殊的位来指示警告状态。在分组到达目标端的时候,将警告位复制到传回的确认分组中。源主机监视这种警告位的确认分组比例来调整传输速率。
  2. 抑制分组。路由器给源主机送回一个抑制分组,并在抑制分组中指明原分组的目标地址。当源主机收到抑制分组的时候调整传输速率
  3. 逐跳抑制分组。当网络速度很高或者路由器离源主机距离很远的时候,给源主机发送抑制分组并不能很好的起作用,因为反应太慢。改进的方法是让抑制分组影响到沿途的每一跳,让沿途的路由器减少传输速率,这就要求路由器有足够的缓冲区

负载丢弃

当其它方法都不能消除拥塞的时候,路由器只能用最后一种方法了,那就是负载脱落(Load Shedding)。当路由器因为来不及处理分组而被淹没的时候,只要将这些分组丢弃即可。
那么应该丢弃哪些分组,取决于运行的应用的类型。对于文件传输而言,老的分组比新的分组更有价值;对于流媒体应用,一个新的分组比老的分组更加重要。
为了实现一种智能的丢弃策略,应用程序必须在它们的分组中标明优先级,以指明这些分组的重要性

抖动控制

抖动(Jitter):分组到达时间的变化量(即标准偏差)。
对于像音频流和视频流这样的应用,只要传输时间是恒定的,那么它就不会介意到底需要20ms还是30ms才能将分组传递给主机。在高抖动的情况下,有的分组需要20ms到达,而其它的分组需要30ms到达,这将使得声音或电影的质量很不稳定。
通过计算,得出沿途每一跳的期望传输时间,就可以对抖动加以控制。当一个分组到达一台路由器的时候,该路由器对它进行检查,看这个分组比预定的时间来早了还是来晚了。早的晚发,晚的早发,对抖动进行控制
然而,对于视频电话这种应用来说,因路由器的缓存带来的延迟是不可接受的。

服务质量

从一个源到一个目标的分组流(Stream)称为一个流(Flow)。用4个基本参数来描述每个流的需求特征:可靠性、延迟、抖动、和带宽。这4个特征合起来决定了一个流所要求的服务质量
以下是常见的应用,以及它们的需求严格程度

应用可靠性延迟抖动带宽
电子邮件
文件传输
web访问
远程登录
音频点播
视频点播
电话
视频会议

网络互联

网络互连原理

网际互连的目的是使一个网络上的用户能访问其它网络上的资源,使不同网络上的用户相互通信和交换信息。
要实现网际互连,必须

  1. 在网络之间至少提供一条物理上连接的链路,并具有对这条链路的控制规程
  2. 在不同网络的进程之间提供合适的路由实现数据交换
  3. 有一个始终记录不同网络使用情况并维护该状态信息的统一的计费服务
  4. 在提供以上服务时,尽可能不对互连在一起的网络的体系结构作任何修改

网际互连不单纯指不同的通信子网在网络层上互连。两个网络之间要互连时,它们之间的差异可以表现在OSI七层模型中的任何一层上。于是就有了网络之间互相连接的中继设备,称为网间连接器,按它们对不同层次进行的协议和功能转换,可以分为以下几类
转发器(Repeater):实现物理层的连接,对网段上衰减的信号进行放大整形或再生
网桥(Bridge):提供数据链路层上的协议转换,在不同或相同局域网之间存储和转发帧
路由器(Router):作用域网络层,提供网络层上的协议转换,在不同的网络之间存储和转发分组。
网关(Gateway):提供传输层及传输层以上各层间的协议转换,又称协议转换器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值