分类: 系统运维
2007-01-31 10:51:46
一、ATM中的传输层
很难说清ATM是否有传输层。一方面,ATM层具有网络层的功能,并且其上还有一层(AAL),从分层角度看AAL便是传输层。一些专家同意这一观点。此处所使用的协议之一(AAL5)功能上类似于UDP,而UDP无疑是传输层协议。另一方面,没有任何一个AAL协议像TCP那样提供可靠的端到端的连接(尽管这些协议只需做很小的变化即可)。另外,在多数应用中,在AAL之上还使用了另一个传输层。不再细究了,就在这一章中讨论AAL层及其协议,而不管它是不是真正的传输层。
ATM网络的AAL层与TCP具有本质区别,其主要原因是设计者对传输音频和视频数据流更有兴趣,为此迅速传送比精确地传送更重要。ATM层连续输出53字节的信元。信元中没有差错控制、没有流量控制以及其他种类的控制。所以,它不能很好地满足多数应用的要求。为了弥补这一不足,在建议I.363中,ITU在ATM层之上定义了一个端到端的层。这一层称为ATM适配层AAL(ATM adaptation layer),它经历了一段曲折的历史:充满了错误、反复修订以及未完成的工作。
AAL的目标是向应用提供有用的服务,并将它们与在发送端(方)将数据分割为信元、在接收端(方)将信元重新组织为数据的机制隔离开来。它按照3个坐标轴来组织服务空间:
1、实时服务和非实时服务。
2、恒定比特率服务和变化的比特率服务。
3、面向连接的服务和非连接的服务。
原则上,用3个坐标轴和每个坐标轴上的2个值可以定义8种不同的服务,如下图。ITU觉得只有其中的4个有使用价值,并分别命名为类A、B、C、D。其他几种则未得到支持。从ATM4.0开始,该图有些过时,所以在这里提出它来主要是作为背景信息,以帮助读者了解为什么AAL协议设计为目前这个样子。目前主要的不同是传输类(ABR、CBR、NRT-VBR、RT-VBR和UBR)之间,而不是这些AAL支持的服务类之间。
AAL支持的基本服务类(现已过时)
为了处理这4类服务,ITU定义了4个协议而后来发现对于类C和类D的技术要求十分相似,从而将AAL3和AAL4合为AAL3/4。计算机工业当时昏然不觉,后来才发现它们都不令人满意。后来暂且定义了另一种协议--AAL5来解决这个问题。
ATM适配层的上面部分称为会聚子层(cenvergence sublayer)。其作用是向应用程序提供一个接口。它又是由两个子部分组成:一个是对所有应用程序都通用的公共部分(相对于给定的AAL协议),另一个是与应用程序相关的子部分。其中每个部分的作用都是与协议相关的,但是可以包括报文分帧和错误检测。
在发送端,会聚子层负责接收来自于应用程序的比特流(数据)或随机长度的报文,并将它们分为44~48字节的单元以便传输。确切的大小有赖于所用的协议,因为一些协议要占用48字节ATM载荷中的一部分作为自己的头。在接收端,该子层将信元重组为原始的报文。通常情况下,报文分界(如果存在)是要保留的。
AAL下面的部分称为分割和重组SAR(segmentation and reassembly)子层。它将会聚子层交给它的数据单元加上头和尾从而构成信元有效载荷。接着,这些载荷被交给ATM层进行传送。在接收端,SAR子层将信元重组为报文。SAR子层基本上只涉及信元,而会聚子层则与报文打交道。
SAR子层对于某些(但不是所有的)服务类来说,还有另外一些功能。特别是,它有时候可以进行错误检测和多路复用。SAR子层对于所有服务类都是存在的但功能的强弱则依赖于其特定的协议。
AAL1是用于A类传输的协议。A类传输是指实时的、恒定比特率的、面向连接的传输,例如非压缩的音频和视频数据。输入的是比特流,不存在报文分界。对于这种传输,并没有使用像停--等这样的错误检测协议,因为由超时和重发机制引入的延迟是不能接受的。但是,丢失信元时会通知应用程序,由它采取措施(如果可能的话)来进行弥补。
AAL1使用了一个会聚子层和SAR子层。会聚子层检测丢失和误入的信元,平缓输入的数据速率从而以恒定的速度发送信元。最后,会聚子层将输入的报文或比特流分解为46字节或47字节的单元,然后交给SAR子层处理。在另一端(接收方)它取出这些数据单元,重组为原始的输入。AAL1的会聚子层没有自己的协议头信息。
相反,AAL1的SAR子层有自己的协议。其信元格式如下图。两种格式都是以1字节的头开始:其中包含3字节的信元序号SN(用于检测是否丢失或误入了信元);该字段之后是3位的序号保护字段SNP(即校验和),可以改正信元序号字段中的单个错误并检测出现两个错误的情况。
当必须保留报文分界时使用P信元。指针(Pointer)字段用于给出下一段报文起始位置的偏移量。
AAL1是针对简单的、面向连接的、实时数据流而设计的,除了具有对丢失和误入信元的检测机制外,它没有错误检测功能。对于单纯的未经压缩的音频或视频数据,或者其中偶尔有一些较重要的位的其他任何数据流都没有什么问题,AAL1就已经足够了。
对于压缩的音频或视频数据,数据传输速率随时间会有很大的变化。例如,很多压缩方案在传送视频数据时,先周期性地发送完整的视频数据,然后只发送相邻顺序帧之间的差别,最后再发送完整的一帧。当镜头静止不动并且没有东西发生移动时,则差别帧很小。其次,必须要保留报文分界,以便能区分出下一个满帧的开始位置,甚至在出现丢失信元或坏数据时也是如此。由于这些原因,需要一种更完善的协议。AAL2就是针对这一目的而设计的。
像在AAL1中一样,AAL2的会聚子层没有本身协议而SAR子层有本身协议。SAR信元的格式如下图:
AAL2的信元格式
序号SN(Sequence Number)字段用于记录信元的编号以便检测信元丢失或误入。信息类型IT(Information Type)字段用于指明该信元是报文的开始、中间或末尾。长度指示LI(Length Indicator)字段指明有效载荷是多大,单位为字节(有效载荷可能小于45字节)。最后,CRC字段是整个信元的校验和,可以检测出错误。
标准中并没有注明各字段的大小。据说在标准化进程的最后关头,委员会成员觉得AAL2有许多问题,以致不能投入使用,但为时已晚,没有办法组织标准化的进程。最后委员们去掉了所有的字段大小的设定以使正式标准能够按时颁布,但这样便没有人能够实际使用它。
开始时,ITU为服务类C和D制订了不同的协议(服务类C和D分别是对数据丢失或出错敏感,但不具有实时性的面向连接和非连接的数据传输服务类)。后来ITU发现没有必要指定两套协议,于是便将它们合二为一,形成了一个单独的协议,即AAL3/4。
AAL3/4可以按两种模式进行操作,即流和报文。在流模式中不保留报文分界信息。以下将集中讨论流模式。在每种模式中都可能出现可靠的传输和不可靠的(即不保证可靠性)的传输。
AAL3/4具有一个其他协议中没有的性能--支持多路复用。AAL3/4的这一功能允许来自于一台主机的多个会话(如远程登录)沿着同一条虚电路传输并在目的端分离出来。使用一条虚电路的所有会话得到相同质量的服务,因为这是由虚电路本身性质所决定的。
和AAL1、AAL2不一样,AAL3/4具有会聚子层协议和SAR子层协议。从应用程序到达会聚子层的报文最大可达65535字节。首先将其填充为4的整数倍字节。接着加上头和尾信息。在会聚子层对保温进行了重构,并加上了头和尾信息后,便将报文传送给SAR子层,由SAR子层将报文分为最大44字节的数据片。
AAL3/4具有两层协议开销:每个报文需要增加8字节,每个信元增加4字节。总之,它是一种开销极大的机制,尤其是对短的报文。
从AAL1到AAL3/4协议主要是由电信工业设计的并被ITU标准化,它没有太多地考虑计算机工业的要求。由于两个协议层所导致的复杂性及低效性,再加上校验和字段十分短(仅10位),使一些研究人员萌生了一个制订新的适配层协议的念头。该协议被称为简单有效的适配层SEAL(simple efficient adaptation layer),经过论证,ATM论坛接受了SEAL,并为它起名叫AAL5。
AAL5向其应用程序提供了几种服务。一种选择是可靠服务(即采用流控机制来保证传输,以防过载);另一种选择是不可靠服务(即不提供数据传输保证措施),通过选项使校验错的信元或者丢失或者传送给应用程序(但被标识为坏信元)。AAL5支持点到点方式和多点播送方式的传输,但多点播送方式未提供数据传输的保证措施。
像AAL3/4一样,AAL5支持报文模式和流模式。在报文模式中,应用程序可以将长度从1字节~65535字节的数据报传送到AAL层。当到达会聚子层时,将报文填充至有效载荷字段并加上尾部信息,选择填充数据(0字节~47字节),以使整个报文(包括填补的数据和尾部信息)为48字一节的整数倍。AAL5没有会聚子层头,只有一个8字节的尾。
用户到用户UU(User to User)字段不用于AAL层本身,而是为了自己的目的供更高一层(可能是会聚子层的特定服务子部分)使用,例如,排序或者多路复用。长度(Length)字段指出真正的有效载荷是多少,以字节为单位,不包括填充的字节数。0值用于终止未传送完毕的报文。CRC字段是基于整个报文的标准32位校验和,包括填充数据和尾部信息(CRC字段设置为0)。尾部的一个8位的字段留作将来使用。
报文交给SAR子层,然后发送出去。在SAR子层不增加任何头、尾信息,而是将报文分成48字节的单元,并将每个单元送到ATM层进行传输。它还通知ATM层将最后信元的PTI字段置为1,以便保留报文分界。(这时出现了一个问题:这是一种不正确的协议层混合体,因为AAL层不该使用ATM层的头部信息。)
AAL5较AAL3/4的主要优点是更加高效。虽然AAL3/4对每个报文只增加4字节的头信息,但它还要为每个信元增加4字节的头信息,因而使有效载荷的容量减少到44字节,对于长的报文,无效数据占8%。AAL5的每个报文有一个稍大的尾部(8字节),但每个信元无额外开销。信元中没有顺序号,可以通过长的校验和来弥补,从而可以检测丢失的、误插的或错误的信元,而不需要使用顺序号。
在因特网中,与ATM网接口的一般方法是使用AAL5的有效载荷字段来传输IP分组。与这种方法相关的各种问题在RFC 1483和RFC 1577中进行了讨论。
各种AAL协议似乎不必要地相似,并且考虑得很不周到,把会聚子层和SAR子层区分开也是有疑问的,尤其是因为AAL5的SAR子层并无任何自己的特点。用稍微增强一些的ATM层头部信息来提供像排序、多路复用和数据分帧的功能便足够了。
AAL给人的整体印象是变体很多,变体之间存在很多细微的差别,而且尚未完工。原来的4个服务类A、B、C、D实际上已被废除。AAL1可能确实没有必要存在;AAL2不完整;AAL3和AAL4永无出头之日;AAL3/4效率低而且校验和字段位数太少。
将来的一切都依赖于AAL5,但到目前为止,AAL5尚有很多改进的余地。AAL5报文应该有一个顺序号和一位用于区分数据还是控制报文的标志位,从而可以成为一种可靠的传输协议。可以用尾部的未用空间来实现上述功能。
尽管有这么多不相同的AAL协议,但没有一种支持简单可靠的点到点的传输连接。需要这种服务的应用程序可以使用另一种协议--特定服务的面向连接协议SSCOP(service specific connection oriented protocol)。但是,SSCOP只是用于控制,不能用于数据传输。
SSCOP用户发送报文,每个报文都被赋予一个24位的顺序号。报文最大可达64KB,而且不能分开。它们必须按顺序传送。不像某些可靠的传输协议,它丢失报文时总是有选择性地进行重传而不是回到序号n,重传n以后的所有的报文。
SSCOP从根本上说是一种动态滑动窗口协议。对于每个连接,接收方保留准备接收报文序号的窗口,及标明该报文是否已经存在的位图(bitmap)。这个窗口在协议操作期间可以改变大小。
SSCOP的不寻常之处是对确认的处理方法:它没有捎带机制。取而代之的是发送方定期地查询接收方,要求它发送回表明窗口状态的位图。据此,发送方丢弃已被对方接收的报文并更新其窗口。