计算机网络基础 中文版 word可编辑014.docx
《计算机网络基础 中文版 word可编辑014.docx》由会员分享,可在线阅读,更多相关《计算机网络基础 中文版 word可编辑014.docx(20页珍藏版)》请在冰点文库上搜索。
计算机网络基础中文版word可编辑014
下载
第14章协议与分层
14.1概述
前几章讨论了网络的基本硬件并说明构成局域网或广域网系统的组件,本章则叙述用于网络系统的软件的结构。
这一章将解释硬件何以不能单独解决所有的通讯问题,并说明协议软件的必要性。
它讨论网络协议软件必须处理的问题,以及解决问题的技术。
更重要的是,本章描述了分层概念,为理解一套完整的协议怎样与硬件协同工作而构成一个强大的通信系统提供了概念基础。
后面各章都建立在本章所提出的理论思想上。
下一章将说明这些基本思想怎样扩展成一个互联网(internet)环境。
后继章节则讲述一套完整的协议,并将说明这套协议中各个协议怎样处理每个提及到的问题。
再后的章节将展示应用程序是怎样利用协议软件在网络中进行通信的。
14.2协议的必要性
基本的通信硬件包括了点到点的位串传送机制。
但是,使用裸硬件来进行通信就象用二进制位1和0来编程一样笨拙不便。
为方便程序员,联网计算机使用了复杂的软件,为应用程序提供方便的高层接口。
这种软件自动处理大部分低层通讯细节和问题,使应用程序间的通信变得很容易。
因此,大多数应用程序依靠网络软件通信,并不直接与网络硬件打交道。
通信涉及的所有部分都必须认同一套用于信息交换的规则(例如使用的语言和信息发送规
则)。
外交官们把这种认同称为协议(protocol)。
这一术语也可用于计算机通信:
规定消息的格式以及每条消息所需的适当动作的一套规则称之为网络协议(networkprotocol)或计算机通信协议(computercommunicationprotocol)。
实现这些规则的软件称为协议软件(protocolsoftware)。
单个网络协议可以是简单的(例如传送文本文件时使用ASCII码的协定),也可以是复杂的(例如用复杂数学函数加密数据的协定)。
概述如下:
规定计算机信息交换中消息的格式和含义的协定称为通信协议。
使用网络的应用程序并不直接同网络硬件打交道,而是与按给定规则进行通信的协议软件打交道。
14.3协议系列
设计者不是设计一个单一、巨大的协议来为所有可能形式的通信规定完整的细节,而是采取了把通信问题划分成多个子问题,然后为每个子问题设计一个单独的协议的方法。
这样做使得每个协议的设计、分析、实现和测试比较容易。
正如我们将要看到的那样,将通信软件划分为多个协议增加了灵活性,因为它允许在需要时使用协议的子集。
必须仔细地划分各个协议,以确保生成的通信系统有效和高效。
为了避免重复劳动,每个协议应该处理其他协议所未处理的那部分通信问题。
为了让协议有效实现,协议之间应能共享数据结构和信息。
最后,这些协议的组合应该能处理所有可能的硬件错误或其他的异常情况。
怎样保证这些协议很好地协同工作呢?
答案在于一个完整的设计方案:
不是孤立地开发每
个协议,而是将协议设计、开发成完整、协作的集合,称为协议系列(protocolsuite)或协议
交互。
个型上
(称一
族(family)。
协议系列中的每个协议解决部分通信问题,这些协议合起来就解决了整个通信问题。
而且,整个系列被设计成能在协议之间高效
14.4协议设计规划
已有几个工具可用来帮助协议设计人员理解各通信子问题,并规划一个完整的协议系列。
分层模
(layeringmodel)是其中最重要的工具之一。
本质
说,分层模型描述了把通信问题分为几个子问题为层,layer)的方法,一个协议系列可通过对应每层规定一个协议来设计。
例如,在早期网络历史中
应用层表示层会话层传输层网络层数据链路层物理层
第七层第六层第五层第四层第三层第二层
,
第一层
国际标准化组织(InternationalOrganizationfor
Standardization,ISO)定义了一个七层参考模型(7-layer
ReferenceModel)。
图14-1表示了ISO分层模型并给出了每一层的号码。
14.5七层模型
图14-1历史上的ISO七层参考模型。
分层模型是一个工具,帮助协议设计人员构造一套解决所有通信问题的协议
ISO模型提出后的二十年来有关协议设计的思想已经改变,许多现代的协议也不符合旧的
模型,但是许多ISO模型的术语仍然保留了下来。
特别是当网络专业人员提到第几层时,通常指ISO的第几层(这一术语是非正式使用的,当用于现代网络时经常被延伸)。
由于ISO模型为网络中复杂的硬件和协议组件的关系提供了一个简单的解释,它变得极为
流行。
在ISO模型中,最低层对应于硬件,以后各层对应于使用硬件的固件或软件。
本节将概述每一层的目的。
第一层:
物理层
第一层对应于基本网络硬件。
例如,在第4章中讲到的RS-232规范属于第一层,给出了局域网硬件的详细规范。
第二层:
数据链路层第二层协议规定怎样把数据组织成帧及怎样在网络中传输帧。
例如,在第6章讲到的帧格
式、充填的位或字节以及校验和的计算都划归第二层。
第三层:
网络层
第三层协议规定怎样分配地址,怎样把包从网络的一端转发到另一端。
第8章所讲的编址和第12章中的转发细节都属于第三层。
第四层:
传输层
第四层协议规定怎样处理可靠传输的细节,是最复杂的协议之一。
本章讨论基本的传输问题,后面章节将举出一个传输协议的例子。
第五层:
会话层
第五层协议规定怎样与远程系统建立一个通信会话(例如,怎样登录到一台远程分时计算机)。
第五层规范了安全细节,例如,通过口令获得授权。
第六层:
表示层
第六层协议规定了怎样表示数据。
需要这层协议是因为不同品牌的计算机对整数和字符使用不同的内部表示。
因此,需要第六层协议把在一台计算机上的表示翻译成在另一台计算机上
的表示。
第七层:
应用层每个第七层协议都规定了一个特定的应用程序怎样使用网络。
例如,把文件从一台计算机
传送到另一台计算机的应用程序的规范属于第七层。
该协议规定了一台计算机上的应用程序怎
样提出请求(例如,怎样指定想要文件的名字),以及另一台计算机上的应用程序如何响应等这样一些细节。
14.6栈:
分层软件
当根据分层模型设计协议时,目标协议软件按层次组织。
每台计算机上的协议软件被分成许多模块,每个模块对应一层。
更重要的是,分层决定了模块间的相互作用:
理论上说,当协议软件发送或接收数据时,每个模块只同它紧邻的上层模块和下层模块通信。
因此,送出的数据向下通过每一层,接收的数据向上通过每一层。
图14-2表示了这一概念。
计算机1上的栈计算机2上的栈应用层应用层
表示层表示层
会话层会话层
传输层传输层网络层网络层数据链路层数据链路层
物理层(网络硬件)
图14-2数据从一台计算机上的一个应用程序通过网络传送到另一台计算机上的一个应用程序的概念路径
正如图中所显示的那样,每台计算机包含了为实现整套协议的软件。
厂商使用栈(stack)这一术语来指这种软件,是因为开发这类软件所依据的分层模型通常用一系列方框图来表示,如图14-1和14-2那样。
因此,“你的计算机运行哪个栈?
”这个问题通常是指网络协议,不是指栈数据结构。
目前已有几个商业栈可用。
图14-3中的表列出了六个流行的协议栈。
厂商栈
Novell公司NetwareBanyan公司VINESApple公司AppleTalkDEC公司DECNETIBM公司SNA(多家厂商)TCP/IP
图14-3协议栈的例子。
虽然这些栈使用相同的原理,但具体细节不同,因而不兼容
由于每个栈是独立开发的。
一个特定栈的协议不能与另一个栈的协议交互。
因此,如果在
一台计算机上使用Novell公司的Netware栈,则该计算机就只能和其他使用Netware栈的计算机通信。
同样,如果在一台计算机上使用Apple计算机公司的AppleTalk栈,该计算机就只能和其
他使用AppleTalk栈的计算机通信。
如有必要,一台计算机可以同时运行多个栈。
例如,一台计算机既有Netware栈软件,又有VINES栈软件。
两个栈可在同一台计算机上运行,可以通过同一个物理网络传送数据而不会互相干扰,因为根据每个帧中的类型域可识别出该消息应由哪个栈处理。
14.7分层软件怎样工作
我们说过,每层协议软件负责解决一部分通信问题。
为做到这一点,发送计算机上特定层的软件在要传送的数据上附加一些信息,接收计算机上相应层的软件则使用这些附加信息来处理收到的数据。
例如,如果两台计算机就帧格式中的校验和达成协定,那么在这两台计算机上的数据链路(DataLink)层软件就能执行校验和计算。
在图14-2中,当一个发送帧到达计算机
1上的数据链路(DataLink)层软件时,该软件将在帧中加上校验和,然后再在网络上传输。
当一个接收帧到达计算机2上的数据链路(DataLink)层软件时,该软件将验证并除去校验和,然后再把帧传送到网络(Network)层。
14.8多层嵌套头部
通常,每一层在把数据传送到低一层之前都往头部加入一些附加信息。
因此,在网络中传输的帧包含了一系列嵌套的头部。
如图14-4所示。
如图所示,对应于最低层协议的头部最先出现。
在ISO分层模型中,对应于数据链路层的
头部最先出现。
虽然第一层规定了用于传送帧的电信号和光信号,但它并不象其他层那样在帧
中加一个头部。
图14-4只是示范了一个通用概念,并没有指出所有的可能性。
有些协议软件并不仅在发
出的数据中附加头部。
例如,第6章说明了一
个数据链路协议可能放置一个特殊字符来标识帧头,附加另一个特殊字符来标识帧尾,在中间插入一些额外字符以避免出现特殊字符。
同
样,一些协议规定所有的附加信息应当加到帧的尾部,而非头部。
14.9分层的科学依据
原始用户数据第七层头部
第六层头部
第五层头部
第四层头部第三层头部第二层头部
图14-4在网络中传送的帧中的嵌套头部。
每层协议软件都把一个头部加到发送帧
分层的重要意义源于一个简单的科学原理,称为分层原理(layeringprinciple)。
在目标计算机上的第N层软件必须恰好接收由发送计算机上的第N层软件所发送的数据。
换句话说,在发送帧之前协议进行的任何转换必须在接收时完全地逆转换(在数学上,如果发送方实施了转换T,接收方必须实施转换T-1)。
如果在发送计算机上的一个特定层把一个头部放入帧中,在接收计算机上的相应层必须除去该头部。
如果一个层在发送帧前进行了加密,则接收计算机的相应层必须把该帧解密。
分层是一种很有用的思想,因为它简化了协议的设计和测试。
分层避免了一层协议软件引
入可为其他层所见的改变。
这样做的结果是,每一层的发送和接收软件可独立于其他层进行设计、实现和测试。
图14-5说明了分层原理怎样在协议栈的各处应用。
计算机1上的栈
计算机2上的栈
应用层应用层同样消息
表示层会话层传输层网络层
数据链路层
同样消息同样消息同样消息同样消息
同样消息物理层(网络硬件)
表示层会话层传输层网络层数据链路层
图14-5分层原理应用在ISO模型的每一层。
如果发送计算机上的协议软件改变了该消息,则这一改变必须被接收计算机上的对应协议软件还原
14.10协议使用的技术
我们已经看到了在通信系统中出现的问题的例子,以及用协议来解决一些这种问题的方法。
例如,第3章讨论了位串在传送中怎样出错。
为了检测这种错误,数据链路协议使用了如下各种技术:
奇偶校验位(paritybit)、帧校验和(framechecksum)以及循环冗余校验(cyclicredundancycheck)。
具体选用哪种技术由整个协议系列的设计决定。
有些协议不仅能检错,还能纠错或防止错误的发生。
特别是传输协议使用了许多工具来处理一些最复杂的通信问题。
这一节回顾了一系列可能引起的问题,并讨论了协议用以解决这些问题的技术。
同前面讨论的数据链路层技术一样,具体细节由整个协议系列的设计决定。
14.10.1无序传递的排序
一个可变路由的无连接网络系统可能以乱序方式传递包。
要理解这一点,可考虑一序列发送中的包,并记住网络在任何时候都试图使用最短可用路径。
假如在这一序列中的第i个包被发送后,马上有一个较短路径可用了,网络将按这一较短路径发送第i+1个包,使得它比第i个包先到。
为了处理乱序传递,传输层使用了排序(sequencing)。
发送方为每个包指定一个序列号。
接收方保存当前按顺序收到的最后一个包的序列号,同时保存一个乱序到达的包的链表。
当一
个包到达时,接收方检查其序列号以决定怎样处理。
如果是所期待的下一个包(即,按顺序到达的包),协议软件将包发送到上一层,并检查乱序包链表看是否有适合的包可取出发到上一层。
如果是乱序到达的包,协议软件把它加到链表中。
14.10.2排序消除重复包
硬件发生故障可能会产生重复的包。
这种现象在广域网上经常发生,在局域网中也会出现。
例如,使用CSMA/CD的局域网中的一个转发器发生故障,可能会使接收方认为传输有效,而发送方却认为冲突。
结果,发送方从冲突点退回并重发,导致帧有两个副本到达接收方(作者亲身经历了这样的情形)。
排序解决了重复包的问题。
接收软件在检查到达包的序列号时验证重复性,如果这个序列号已经向上递送或与在链表中等待的包匹配,接收软件就丢弃新的副本。
14.10.3重发丢失的包
在计算机网络中,包的丢失是一个基本问题,因为传输错误可能导致位串破坏,使帧失效。
若接收方检测到这种错误,将丢弃该帧。
为了保证可靠(reliable)传输(即无包丢失),协议使用带重发的确认(positiveacknowledgewithretransmission)。
当一个帧完好无损地到达,接收方协议软件都将返回一个小的消息,报
告接收成功。
这个消息称为确认(acknowledgement,ACK)。
发送方负责确保每个包传输成功。
当发出一个包时,发送端协议软件将启动一个计时器。
如果确认在计时器超时前到达,软件便取消计时器。
如果计时器已超时,软件将发出该包的另一个副本,并重新启动计时器。
发送第二个副本的动作称为重发(retransmitting),该副本通常称为重发包(retransmission)。
如果硬件故障导致网络永久性断开,或接收方计算机崩溃,重发就不可能成功。
因此,重
发协议通常设定一个最大的重发次数。
当达到这个最大重发次数时,协议停止重发并宣布无法通信。
注意,重发可能产生重复包。
因为发送方不能区分一个包是已经丢失还是经历了很长的延迟,可能会太早地决定重发。
这样,包的两个副本都被送到。
因此,使用重发来提供可靠性的协议也必须处理重复包问题。
14.10.4避免过量延迟导致的重播
在包交换系统中,延迟产生的一个来源是由存储转发方法所引起的。
当一个包到达一个包交换机后,该包被放入一个队列,如果包的到达速度比交换机的转发速度快,等待包队列会变得很大,将出现过度延迟。
特殊情况下的延迟可能导致重播错误(replayerror),重播意味着一个老的、延迟的包影响了后来的通信。
例如,考虑下列事件序列:
1)两台计算机同意在下午1点通信。
2)一台计算机发送一列十个包给另一台计算机。
3)一个硬件故障导致第3个包延迟。
4)改变路由,避开硬件故障。
5)在发送计算机上的协议重发第3个包,剩余的包都被无差错地传送。
6)在下午1∶05,两台计算机同意再进行通信。
7)在第2个包到达后,从较早的会话发出的第3个包的延迟副本到达了。
8)从第二次会话发送的第3个包到达了。
不幸的是,如果不细心地设计协议,一个早期会话发送的包可能在后来的会话中被接收,
而正确的包被当作重复包丢弃了。
使用控制包时,重播也可能发生,例如,协议经常发送一个特殊的控制包来中止一次会话。
如果从前一次会话发送的一个中止请求副本到达了,可能致使协议软件过早地中止本次会话。
为了避免重播,协议用一个唯一的标识符标记每一次会话(例如,建立会话的时间),并需要把这个唯一的标识符放到每个包中,协议软件将丢弃任何包含不正确标识符的到达包。
为
了避免重播,一个标识符必须在一段相当长的时间(例如几小时)内不被再次使用。
14.10.5控制流量以防止数据过载
计算机并不都以相同的速度运行,当一台计算机通过网络发送数据的速度比目的计算机接收数据的速度快时,就出现了数据过载,结果导致了数据丢失。
有几种技术可用于处理数据过载。
总起来说,这些技术被称为流控制(flowcontrol)机制。
流量控制最简单的形式是一个简单停等(stop-and-go)系统,每发出一个包便等待。
当接收方准备好接收另一个包时,发送一个控制消息,通常是一种确认。
虽然简单停等协议避免了过载,却降低了网络带宽的利用率。
要理解这一点,考虑一个包大小为1000个字节、传输速率为2Mbps、延迟时间为50毫秒的网络将会发生什么事。
网络硬件
可以2Mbps的速率把数据从一台计算机传送到另一台计算机。
但是每发送一个包后,发送方必须等100毫秒,才能发送另一个包(即,包到达接收方需50毫秒,传回确认也需50毫秒)。
因此,使用简单停等协议传送数据的最大速率为每100毫秒一个包。
若以位传送速率表示,简单停等协议的最大速率可达80000bps,这只是硬件容量的4%。
为了获得较高的吞吐量,协议使用称为滑动窗口(slidingwindow)的流量控制技术。
程
序设置发送方和接收方使用固定的窗口尺寸(windowsize),这是在收到确认前可以发送的最大数据量。
例如,发送方和接收方同意窗口大小为四个包。
发送方在开始发送数据时,提取数据填入第一个窗口,并发送副本。
如果有可靠性要求,发送方应保留一份副本以备万一需要时重发。
接收方必须准备好缓冲区空间以接收整个窗口。
当包顺序到达时,接收方把包传给应用程序并返回一个确认给发送方。
当确认到达后,发送方丢弃已被确认的副本并发送下一个包。
图14-6说明了所谓滑动窗口的过程。
窗口
a)
未发送已确认
窗口
14-6一个四个包大小的窗口滑过发送数据,窗口被显示
a)当开始传送时b)在两个包已经被确认后c)在8个包被
b)
窗口
c)
图
确认后,发送方可以传送窗口中的所有包
滑动窗口能显著地增加吞吐量。
要理解这一点,考虑一下使用简单停等协议和滑动窗口协议的传送顺序。
图14-7包含了对一个大小为4个包的传送比较。
图14-7a)表示了一个简单停等协议的传送顺序,在已发送出一个包,再发送另一个包之前要
等待确认。
如果沿着网络的一条路径发送一个包的延迟时间为N,发送四个包所需要时间为8N。
计算机1
发送包发送包
计算机2
发送确认
发送确认
计算机1计算机2
发送四个包
发送四
个确认
完成
发送包
发送
确认
发送包
发送
确认
完成
a)b)
图14-7消息需要发送一系列的四个包使用
a)简单停等流量控制和b)一个四个包大小的滑动窗口。
时间沿页面向下推移,每个箭头表示一个消息从一台计算机发送到另一台计算机
图14-7b)表示了一个滑动窗口b协议的传送顺序,协议在等待前发送出窗口中的所有包。
现
实一点,图中显示了在后继包的发送之间有一段小的延迟。
虽然这一延迟小得不能察觉,但传送并不是立即发生的—需要一段很短的时间(通常是若干微秒)让硬件完成包的发送,中断CPU,然后开始传送下一个包。
因此,发送4个包所需要的全部时间是2N+,这里指很小的时延。
要理解滑动窗口的重大意义,想像一个涉及到许多包的扩展通信。
在这种情况下,需要进
行传送的总时间很长,以至可被忽略不计。
要了解滑动窗口带来的好处,考虑一个有很高吞吐量和很大时延的网络(例如卫星信道),对于这种网络,滑动窗口协议用一个大于1的因子增加性能。
实际可能的提高是:
g
T
w
=T×W
T
这里T是使用滑动窗口协议所能获得的吞吐量。
T是使用简单停等协议所能获得的吞吐量。
g
wg
W是窗口大小。
这一方程说明了为什么在图14-7b)中的滑动窗口协议的吞吐量大约是图14-7a)
中的简单停等协议的4倍。
当然,吞吐量不能仅靠增加窗口的大小来任意增大,网络带宽给定了上限—位串不可能比硬件所能达到的最大速度还快地发送。
因此,方程可以被重写为
w
其中B是硬件的带宽。
14.10.6避免网络拥塞的机制
=min(B,T×W)
在包交换系统中,拥塞是一个很基本的问题。
要理解这一点,请考虑图14-8中所表示的网络。
假设在网络中的每个连接具有1.5Mbps的带宽,考虑信息怎样通过中间的连接从一端传到
算
的传
3
另一端。
例如,设想一个连到站点1的计
机发送了一系列包到一个连接到站点5上计算机。
包可以1.5Mbps的速率从站点1
送到站点3,也可以1.5Mbps的速率从站点
传送到站点4。
如果只有一台计算机在发送包,网络
运行得很好。
但任何更多的信息通过中间
图14-8有六个包交换机的网络,这种网络可能出现拥塞
连线的话将导致拥塞。
例如,如果一个连接到站点2的计算机开始发送包给连接在站点6上的目标计算机,包一定通过中间的连线。
当站点1和站点2同时发送包时,到达站点3的数据速率两倍于站点3所能通过连线发到站点4的数据速率。
对应于站点3的包交换把从站点1和站点2中发送到的包放入队列中,直到它们被发送。
由于到达的包比能发送的要多,队列增大,有效延迟增加(在理论上延迟如第12章所讲的那样,可增加到任意大。
实际上,在包交换中的队列是有限的)。
这种情况被称为拥塞(congestion)。
如果拥塞持续下去,包交换机将溢出内存,开始丢弃包。
虽然重发能恢复丢失的包,但这样就浪费了时间。
另外,如果这种情况持续下去,整个网络将变得不可用。
这种情况称为拥塞崩溃(congestioncollapse)。
协议通过监视网络,一旦发现拥塞就迅速地反应,避免拥塞崩溃。
这里有两种方法:
1)当拥塞出现时,让包交换机通知发送方。
2)将包丢失作为拥塞的估计。
前一种方案的实现有两种方式
(1)当出现拥塞时,让包交换机发送一个特殊消息给包的源发者。
(2)让包交换机给每个由于拥塞而产生延迟的包头设置一个位,接收该包的计算机如果发现包中置了该位,将在确认信息中加入有关消息来通知源发者。
(在出现拥塞和发送包的
计算机得知拥塞之间会出现较长的延迟。
)
在现代的网络中根据包的丢失来估计拥塞是有道理的,因为:
现代网络硬件工作良好,大多数的包丢失是由于拥塞而不是硬件故障引起。
因此,发送方假设所有的包丢失是由于网络拥塞引起的,在多数时间都能猜中。
如果发送方使用超时和重发策略。
包丢失是很容易测量的。
每个重发事件意味着拥塞的出现。
对拥塞的适当响应包括减少包的传送速率。
有些协议使用速率控制(ratecontrol)机制,监视包产生的频率,当出现拥塞时暂时减少包的产生速率