运输层服务原语.doc_第1页
运输层服务原语.doc_第2页
运输层服务原语.doc_第3页
运输层服务原语.doc_第4页
运输层服务原语.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 在计算机网络体系结构中,运输层处于什么地位? 2. 运输层的功能是什么? 3. 什么是端到端通信? 4. 运输层协议包含哪些要素? 学习目标 本章主要要求掌握运输层的功能和模型;掌握运输服务的概念;理解运输协议的分类;了解运输协议的设计中要解决的主要问题和解决问题的一般方法;正确理解运输协议的主要元素。 学习指南 本章学习的关键在于首先理解运输层在整个网络体系结构中所处的地位。运输层处于网络体系结构的核心位置,它利用通信子网的功能为上层应用提供一定QoS的传输服务。把握住这一点,就不难理解运输协议分类、连接管理、故障恢复等概念了。 难重点 1. 运输服务模型 2. 运输协议类 3. 运输层编址 4. 连接管理 5. 多路复用 6. 故障恢复 第一节运输层功能与模型 运输层的地位:利用网络层的服务和运输实体的功能,向会话层提供服务。运输层是整个协议层次结构的核心。其任务是为从源端机到目的机提供可靠的、价格合理的数据传输,而与当前网络或使用的网络无关。如果没有传输层,整个分层协议的概念也就没有什么意义了。 本章涉及到以下概念: 运输实体 ( TE,Transport Entity ) 网络服务访问点 ( NSAP,Network Service Access Point ) 运输服务访问点 ( TSAP,Transport Service Access Point ) 运输实体间的运输连接 ( TC,Transport Connection ) 运输实体间的运输层协议 ( TP,Transport Protocol ) 运输服务提供者 ( TS-Provider ) 运输服务用户 ( TS-User ) 会话协议数据单元 ( SPDU,Session Protocol Data Unit ) 运输服务数据单元 ( TSDU,Transport Service Data Unit ) 运输协议数据单元 ( TPDU,Transport Protocol Data Unit ) 网络服务数据单元 ( TSDU,Transport Service Data Unit ) 运输层的基本功能(可以和货物运输的情况作类比) 运输层依据会话层的服务质量(QoS, Quality of Service)要求,选择适当的网络层服务和运输层协议,以提供可靠的、价格合理的、与网络层无关的数据传送。 QoS相当于在货物运输的例子中所考虑的时间、可靠性、费用等。选择网络服务相当于在货物运输的例子中选择运输方式,比如:空运、铁路等。运输层协议相当于邮寄信件时是使用平信,还是挂号信,等等。 运输层处于OSI模型的上3层与下3层之间,提供进程间端到端的、透明的、可靠的数据传送。网络层是提供系统间的数据传送,而运输层是提供进程间的数据传送。 OSI模型中上3层的功能为:信息传送,了解数据含义,进程间通信;下3层的功能为:数据传送,不关心数据含义,系统间通信。 运输层的功能为: 数据传送,不关心数据含义,进程间通信;可视为低层的一部分。 弥补高层(上3层)要求与网络层(基于下3层)数据传送服务质量间的差异(差错率、差错恢复能力、吞吐率、延时、费用等),对高层屏蔽网络层的服务的差异,提供稳定和一致的界面。 第二节运输协议类 运输层协议是依据网络层提供的服务质量来分类的。经过多年的研究与讨论,ISO于1984年通过了OSI运输协议的标准。这就是ISO8072和ISO 8073。CCITT参与了这一标准的制订,并通过了相应的X.214和X.224建议书。欧洲计算机厂家协会ECMA,美国国家标准学会ANSI以及美国国家标准局NBS等也都积极参与了运输层协议标准的制订。NBS已于1988年底改名为国家标准与技术研究院NIST。 一、网络服务 网络服务质量参数,网络层所提供的服务质量是由以下两个参数来评价的: 残留差错率 可报告差错率 残留差错率(Residual Error Rate): 反映网络连接质量,网络实体不可检测;或漏检差错率。残留差错是网络层未改正的差错且不通知运输层。 (1) 所有传送的网络服务数据单元(NSDU)的分类(4类):Nk 成功传送(Successfully Transferred)的NSDU:Ns 错误(Incorrect)的NSDU:Ne 丢失的(Lost)NSDU:Nl 重复(Extra)的NSDU:Nx (2) 定义: 在测量时间内,在网络连接上传送的所有错误的、丢失的和重复的NSDU与所传送的全部NSDU之比。 (3) 公式: ; 可报告差错率: 指在可检测的差错中不可恢复的差错所占的比例。 (1) 残留差错(Residual Error): 网络实体不可检测的差错;反映差错检测能力; (2) 可报告差错(Signalled Error): 网络实体可检测,但不可恢复的差错;反映差错恢复能力。 检测到有不可恢复差错的NSDU时,网络实体并不递交运输实体,而是报告运输实体对它进行恢复;通知运输层的网络连接释放(release)或网络连接恢复(reset)。 可报告差错率低,表示网络实体的差错恢复能力强。 A类网络服务: 可接受的残留差错率、可接受的可报告差错率;A型网络服务是一个完善的、理想的、可靠的网络服务。分组在网络中传送时不会丢失也不会失序(失序指分组到达的顺序与发送的顺序不一致),这样,运输层就不需要故障恢复的服务和重新排序的服务等等,因而运输层就非常简单。 B类网络服务: 可接受的残留差错率、不可接受的可报告差错率;需要运输实体进行差错恢复。 C类网络服务: 不可接受的残留差错率、不可接受的可报告差错率; C型网络服务的质量最差。对于这类网络,运输协议应能检测出网络的差错,同时要有差错恢复能力。对失序、重复以及错误投递的数据分组,也应能检测出并进行改正。某些局域网和一些具有移动结点的城域网以及具有衰落信道的分组无线电网都局于C型网络。 二、运输协议类 为了能够在各种不同网络上进行不同类型的数据的传送,ISO定义了5类(class)运输协议,即第0类至第4类的运输协议。这5类运输协议都是面向连接的。也就是说,用户要进行通信,必须先建立运输连接。当然,这必然要用到网络层提供的服务,或者说,要建立网络连接。同理,在建立网络连接时,又需要建立各有关链路的连接。当数据传送结束后,则必须释放运输连接。 针对网络服务质量的差异,运输层定义了5个运输协议类,提供不同的功能。网络层服务质量降低时,对运输协议的要求就提高,以向运输层用户提供一种比较稳定的服务界面。 表5.1 运输协议类 主要功能 使用的网络服务 TP0 简单类 (Simple Class) 运输连接管理; A TP1 基本差错恢复类 (Basic Error Recovery Class) TP0+差错恢复; B TP2 复用类 (Multiplexing Class) TP0+复用/解复用; 流量控制; A TP3 差错恢复与复用类 (Error Recovery & Multiplexing Class) TP1+TP2; B TP4 差错检测与恢复类 (Error Detecting & Recovery Class) TP3+有差错检测; 有分流/合流; C 第0类运输协议是最简单的,它只具有一些最起码的功能。第0类运输协议和CCITT的T.70建议书相兼容。T.70是为智能用户电报(teletex)终端提供运输服务的建议书。第0类运输协议的功能就是建立一个简单的端到端的运输连接,而在数据传送阶段具有将长数据报文分段传送的功能(当有此需要时)。它没有差错恢复功能,也不将多条运输连接复用到一条网络连接上。第0类运输协议是面向A型网络服务的。 第1类运输协议较简单,但增加了基本差错恢复功能。利用网络层的连接拆除或复位进行差错恢复。这里的基本差错是指出现网络连接断开或网络连接失败,或者收到了一个未被认可的运输连接的数据单元。当网络连接断开时,运输层就试图建立另一条网络连接。第1类运输协议面向B型网络服务。 第3类运输协议面向B型网络服务,它包含了第1类相第2类运输协议的功能,既有差错恢复功能又有复用功能。 第4类运输协议是最复杂的,它可以在网络的质量较差时保证高可靠性的数据传送。它面向C型网络服务。第4类运输协议具有差错检测、差错恢复以及复用等功能。 一、连接与传输 为了使运输协议可以向运输服务用户提供适当的服务,在运输连接建立时应当就若干服务质量参数进行协商。协商好的服务质量参数就从运输服务用户传给运输层的运输协议实体,以后再依次传给下面的网络层。 虽然运输协议的主要目的是给用户提供一条可靠的端到端的连接以便传输数据,但要做到这一点还应当有适当的管理服务。这样,运输层提供的服务便可归纳为两大类: (1) 运输连接管理;即负责建立和在通信完毕时释放运输连接。 (2) 数据传输。 二、运输服务 运输服务是由运输协议实体使用运输协议和网络服务向会话实体提供的服务。 运输服务模型如下图所示。 图5.3 运输服务队列模型 TSAP,TC(运输连接),TCEP(运输连接端点)间的关系如左图所示,其中: TSAP:通过TSAP提供运输服务,可有多个TSAP。 TC:TSAP间可建立一个或多个运输连接(TC)。 TCEP:TC的两端称为TCEP(Transport Connection End Point)。 图5.4 TSAP、TCEP和TC三者之间的关系 1) 提供运输QoS选择: 吞吐量、延时、残留差错率等。在满足用户要求的前提下,优化资源使用,以达到最优的性能价格比。 2) 运输QoS与网络QoS独立: 对运输用户提供相对稳定的服务界面。运输层可弥补运输层用户QoS要求与网络层提供的QoS间的差异,使运输服务用户可不关心底层的通信网络。 3) 提供端到端数据传送: 4) 提供透明的数据传送: 对运输用户的数据内容、格式和编码没有限制。 5) 良好的寻址系统: 运输地址对应唯一的TSAP,并能映射到相应的网络层地址机构。 运输服务原语: 三个阶段:连接建立、数据传送、连接释放 4种服务:TC建立、正常数据传送、加速数据传送、TC释放 12种原语:TC建立(4种)、正常数据传送(4种)、加速数据传送(2种)、TC释放(2种) 表5.2 阶段 服务 原语 参数 TC 建 立 TC建立 T-CONNECT.request T-CONNECT.indication Called address 被叫地址 Calling address 主叫地址 Expedited data option 加速数据选择 Quality of Service 服务质量 TS-User data 用户数据 T-CONNECT.response T-CONNECT.confirm Responding address 响应地址 Expedited data option 加速数据选择 Quality of Service 服务质量 TS-User data 用户数据 数据传送 正常数据传送 T-DATA.request T-DATA.indication TS-User data 用户数据 加速数据传送 T-EXPEDITED-DATA.request T-EXPEDITED-DATA.indication TS-User data 用户数据 TC 释放 TC释放 T-DISCONNECT.request TS-User data 用户数据 T-DISCONNECT.indication Disconnect reason 释放原因 TS-User data 用户数据 无连接数据传送 普通数据传送 T-UNITDATA.request T-UNITDATA.indication Called address 被叫地址 Calling address 主叫地址 Quality of Service 服务质量 TS-User data 用户数据 连接建立阶段: 成功建立连接、被叫用户拒绝建立连接、TS提供者拒绝建立连接; 对于通信子网的用户,也就是对用户进程来说,我们希望得到的是端到端的可靠通信服务。所谓端到端即从进程到进程。有时还可能希望得到其他的服务,例如多对进程之间的通信复用到一个网络连接上。在互连网的情况下,各子网所能提供的服务往往是不一样的。为了能使通信子网的用户得到一个统一的通信服务,就有必要设置一个运输层。 运输层弥补了各个通信子网提供的服务的差异和不足,而在各通信子网提供的服务的基础上,利用本身的运输协议,增加了服务功能,使得对两端的网络用户来说,各通信子网都变成透明的,而对各子网的用户,面向通信的运输接口就成为通用的。换言之,运输层向高层用户屏蔽了下面通信子网的细节,使高层用户看不见实现通信功能的物理链路是什么,看不见数据链路采用的是什么规程,也看不见下面到底有几个子网以及这些子网是怎样互连起来的。运输层使高层用户看见的就是好象在两个运输层实体之间有一条端到端的可靠的通信通路。 第四节运输协议 一、运输协议的元素 传输服务是通过建立连接的两个传输实体之间所用的传输协议来实现的。在某些方面,传输协议类似数据链路层协议,二者都必须解决差错控制、分组顺序、流量控制及其它问题,但二者之间也存在着显著的差异。这些差异主要是因为两个协议所运行的环境不同所造成的,如图5.6所示。在数据链路层,两个路由器通过物理通道直接通信;而在运输层,这个物理通道由整个子网所取代。这一差异对协议产生了很多重要的影响。 首先,在数据链路层,不必为一个路由器指明它要与哪个路由器通话-每条输出线对应唯一的一个路由器。在运输层里,需要显式地给出目的端地址。 其次,在图5.6(a)中的线路上建立连接的过程很简单:另一端总是存在的(只有在它已崩溃的情况下才不存在),每一方都没有太多事情要做。对运输层而言,初始连接的建立要复杂得多,这点我们以后会看到。 数据链路层和运输层之间另一个主要的区别是子网的存储能力。当路由器发送了一帧时,该帧可能会到达目的地,也可能会丢失,但它不会徘徊一会儿,躲藏在网络的某个角落,而在某个不合适的时刻又突然冒出来。如果子网内部采用数据报和适应性路由选择策略,那么就极可能将一个分组存储几秒钟,然后再传送。子网能将分组存储起来的能力有时可能会产生灾难性后果。因此需要使用特殊的协议。 数据链路层和运输层之间的最后一个区别是数量上的差别而非类型上的差别。在两层中都需要有数据缓冲和流量控制,但在运输层中出现的大量的、动态变化的连接要求可能需要使用与在数据链路层中不同的处理方法。在数据链路层中,有些协议为每个连接均分配了固定数目的缓冲区。在运输层中,由于需要管理很大数目的连接,因此,为每个连接分配很多缓冲区的策略不具有吸引力。在以下的几小节中,将考察所有这样和那样的问题。 二、编址 当一个应用程序希望与一个远程应用程序建立连接时,它必须指定是与哪个应用程序相连(无连接的传输存在同样的问题:每个报文应发送给谁)。一般采用的方法是定义进程可以侦听连接请求的传输地址。在因特网中,这些端点是(IP地址,本地端口)对。在ATM(异步传输模式)中,则为AAL-SAP,我们使用中性术语传输服务访问点TSAP(Transport Service Access Point)来描述。网络层中类似的端点(即网络层地址)则称为NSAP。IP地址就是NSAP的例子。 图5.7说明了一个面向连接的子网(如ATM)中NSAP,TSAP,网络连接和传输连接之间的关系。注意,传输实体通常支持多个NSAP。在有些网络中,也可能存在多个NSAP,但对其他网络,每台机器只有一个NSAP(如一个IP地址)。在面向连接的网络层上建立一个传输连接,可能采用的连接方案如下: 1主机2上的定时器服务进程将自己连到122号TSAP上,等待即将到来的请求。一个进程如何将自己与TSAP相连是属于网络模型以外的问题,它完全依赖于本地的操作系统。例如,可以用LISTEN调用。 2主机1上的-个应用进程想找出当天的时间,于是发出一个CONNECT请求,将6号TSAP设定为源地址,将122号TSAP设定为目的地址。 3主机1上的传输实体在其机器上选择一个网络地址(如果它不止一个)并在它们之间建立一个网络连接。对于无连接子网,无须建立该网络层连接.使用该网络连接,主机1的传输实体便能与主机2的传输实体通话了。 4主机1上的传输实体向主机2上对等端说的第一句话是:早上好,我想在我的6号TSAP和你的122号TSAP之间建立-个传输连接。你认为如何? 5主机2上的传输实体便询问122号TSAP的定时服务器是否愿意接受一个新的连接。如果它同意,传输连接便建立成功。注意,传输连接是从TSAP到TSAP的,而网络连接只是其中的从NSAP到NSAP的部分。 主机1上的用户进程如何知道定时服务器是连接到122号TSAP上的呢?如果我们已经解决了这一问题,以上描绘的图景就很美了。一种可能性是定时服务器长年与122号TSAP相连,并且所有网络用户都逐渐了解到这一点。在这种模型中,各种服务都有不变的、可以打印出来的TSAP地址,并且能通告给新加入到网络中的用户。 图5.7 TSAP,NSAP和连接 不变的TSAP地址可能适用于少数从不改变的关键服务。一般地,用户进程常常想与其他的用户进程通话,这些用户进程只是短时间存在并且预先不知道TSAP地址。而且,如果有很多潜在的服务器进程,而其中的大多数很少使用,那么,让每个进程整天处于活动状态并整天侦听不变的TSAP地址是一种浪费。简而言之,需要一种更好的方案。 被UNIX主机用于因特网上的一种该方案的简化形式如图5.8所示,称为初始连接协议(initial connection protocol)。该方案不再让每个可能存在的服务器去侦听一个众所周知的TSAP地址,而是让每台希望向远端用户提供服务的机器运行一个特殊的进程服务器(process server),它充当载荷较轻的服务器的代理。它同时侦听一系列端口,等待TCP连接请求。需要某种服务的用户通过执行CONNECT请求开始,然后设定他们所需服务的TSAP地址(TCP端口)。如果没有服务器在等待它的到来,它将会连接到进程服务器上,如图5.8(a)所示。 当进程服务器收到传入的请求后,便装入用户请求的服务器,并将已经建立的与用户的连接转交给它。于是新的服务器便开始执行用户请求的任务,而进程服务器则又回去侦听新的用户连接请求,如图5.8(b)所示。 尽管初始连接协议对于那些需要随时创建的服务器来说是十分有效的,但确实存在着很多服务不依赖于进程服务器的情况。例如,文件服务器需要在特定的硬件(带有硬盘的机器)上远行,而不能当有用户想与其通话时才仓促创建。 在这种情况下经常采用另一种方案。在这种模型中,存在一个称为名字服务器(name server),有时称作名录服务器(dictionary server)的特殊进程。为了找到与一个给定服务名称(如定时服务器(time-of-day)相对应的TSAP地址,用户要与该名字服务器(它一直在侦听一个众所周知的TSAP)建立一个连接。接着,用户向名字服务器发送一个报文,指明服务的名称,而名字服务器则将相应的TSAP地址返回给用户。接下来,用户释放与名字服务器之间的连接,而与希望得到的服务之间建立-个新的连接。 在这种模型中,当创建一个新的服务时,必须向名字服务器注册,给出它的服务名称(一般是ASCII码字符串)及其TSAP地址。名字服务器将这些信息记录在其内部数据库中,以便以后能够回答收到的查询。 名字服务器的功能类似于电话系统中的查号辅助操作员-它提供从名字到号码的映射。正如在电话系统中一样,关键是由名字服务器(或初始连接协议中的进程服务器)所使用的众所周知的TSAP地址确实应该是用户所熟悉的。如果你根本就不知道查号台的号码,就谈不上让查号台话务员来查询任何信息。如果你认为你所拨的信息查询号码是清楚的,那么只要有机会你在国外也可以试一下。 有别于层次型地址空间的一种选择是平面型地址空间(flat address space)。如果TSAP地址为非层次型,则需要二级映射来定位合适的机器。即必须有一个名字服务器,其输入为传输地址,输出为网络地址。另外,在某些情况下(例如,在局域网中),有可能以广播方式发出一个查询,请目的机器发送一个分组来标识自己。 现在我们假定用户已经成功地找到欲建立连接的TSAP地址。另一个有趣的问题是:本地传输实体如何知道那个TSAP被放置在哪台机器上?进一步说,传输实体怎么知道哪个网络层地址用来与管理TSAP请求的远程传输实体建立网络连接呢? 答案依赖于TSAP地址的结构。一种可能的结构是TSAP地址为层次型地址(hierarchial addresses)。层次型地址是由-系列字段组成,这些字段将地址空间划分为不相交的分区。例如,一个完全通用的TSAP地址可能有如下的结构: 地址 = 使用这一方案,可以十分简单明了地确定任何已知范围内的TSAP。同理,如果一个TSAP地址是一个NSAP地址和一个端口(表明本地TSAP之一的局部标识符)的组合,那么当给出了一个传输实体要连接的TSAP地址时,它使用TSAP中包含的NSAP地址以到达适当的远端传输实体。作为层次型地址的一个简单例子,考察电话号码19076543210。该号码可以按1-907-654-3210来分析。其中,1为国家代码(美国+加拿大),907为地区代码(阿拉斯加),654为阿拉斯加的一个分局,而3210则是该分局中的端口(用户专用线)之一。 三、连接管理 1.建立连接 建立连接听起来容易,但实际上却是意想不到的棘手。初看起来,一个传输实体似乎只需向目的机器发送一个连接请求(CONNECTION REQUEST)TPDU,并等待对方接受连接(CONNECTION ACCEPTED)的应答就足够了,但当网络可能丢失、存储和出现重复分组时,问题便出现了。 设想一个子网十分拥塞以至于根本不能及时返回确认,每个分组由于在规定时限内得不到确认而需要重发二次或三次的情形。假设该子网内部使用数据报,并且每个分组拥有不同的路由。一些分组可能会因为子网内部的线路拥塞需要很长一段时间才能到达,即它们被存储到子网中,并在很久以后突然出现。 最坏的可能性是发生下面的情况。一个用户与银行之间建立了一条连接,并发送报文让银行将一笔巨款转至一个不能完全信任的人的账户下,然后便释放连接。不幸的是,此时每个分组均被复制并存放于子网中。当连接已经断开后。所有的复制分组又会从子网中发出并顺序到达目的瑞,请求与银行建立一个新的连接并再次转账,然后释放连接。而银行则无法辨别这些分组是重复的,便假定这是第二次独立的转账业务。于是将巨款再次转移。本节剩下的部分将专门讨论延迟的重复分组问题,特别重点讨论可靠地建立连接的算法,以防止类似于上述灾难性问题的发生。 问题的关键是由于子网中存在着延迟的重复分组。解决这一问题的方法很多,但都不是很令人满意。一种方法是废弃使用过的传输地址。在这种方法中,每次需要一个传输地址时,系统便产生一个新的。当释放一个连接时,传输地址便被废弃了。这一策略使进程服务器变为无效。 另一种可能的解决方法是给每个连接分配一个连接标识符,即一个随连接建立而递增的顺序号,该标识符由请求连接方选择,并放进包括连接请求在内的每个TPDU中。当每个连接被释放后,各传输实体可以更新一张表,列出所有过时的连接对(对等的传输实体,连接标识符)。每当收到一个连接请求时,便检查这张表,看该连接是否属于以前所释放的连接。 不幸的是,这种方案有一些基本的缺陷:它要求每个传送实体长时间保持一定量的历史信息。如果某台机器由于崩溃而丢失了它存储的信息,那么它便无法再获知哪些连接标识符是用过的。 因而我们需要采取一种不同的方法。我们必须设计出一种机制来删除那些仍在网中徘徊的过时的分组,不让它们永远存留在子网中。如果我们能够确保任何一个分组在子网中的存留时间都不超过某个已知的时间那么问题在某种程度上就变得较易处理了。 采用下述的技术之一,可以将分组的生命周期限制在一个已知的最大值内: 1.受限制的子网设计; 2.在每个分组内设置一个生存时间; 3.为每个分组加上时间戳。 第一种方法包括防止分组进入回路,以及限制延时不超过(当前已知的)可能最长的路径时延。第二种方法是在每次转发分组时使生存时间加1。数据链路层协议将丢弃那些生存时间值超过某个特定值的分组。第三种方法要求每个分组均包含生成时间,由路由器负责丢弃超过预定时间的旧分组。第三种方法要求路由器的时钟同步,而同步本身就是一项繁重的任务,除非同步信号来自子网络外部,如通过收听定期广播准确时间的无线电台。 在实际应用中,我们不仅需要保证一个分组已经无效,而且要保证对该分组的所有确认均告失效,因此,我们现在引进T的概念,它表示实际最长的生命期的某个不太大的倍数。该倍数与所用的协议无关,只是对延长T有影响。如果在一个分组发出后等待了时间T,我们便可以确定有关该分组的一切现在已告失效,该分组及其确认将不会再次突然出现而使问题复杂化。 根据分组限定的生命期,有可能设计出一种建立可靠连接的安全方法。下面描述的方法源于Tomlinson(1975),该方法解决了这一问题,但同时也带来了特殊问题。这一方法后来经Sunshine和Dalal(1978)做了进一步的优化。该方法以各种形式广泛用于实践中。 为了解决系统崩溃后机器会丢失全部存储信息的问题。Tomlinson建议为每台主机增设一个计时(time-of-day)时钟。不同主机的时钟不需同步。假定每个时钟都采用二进制计数器形式,在统一的时间间隔内累加计数。而且,计数器内的位数必须等于或大于序列号内的位数。最后,也是更重要的,是假定时钟一直在运转,即使主机停机亦如此。 基本思想是确保在同一时刻永远不会出现两个编号相同的TPDU。当一个连接建立后,时钟的低k位作为初始序号(也是k位)。这样便不同于数据链路层所介绍的协议,每个连接均以不同的序号开始对其TPDU进行编号,序号空间应该很大,以便当序号再次(循环了一周)出现时,具有相同序号的旧的TPDU早已传送完毕。时间和初始序号之间的线性关系如图5.9所示。 一旦建立连接的两个传输实体接受了初始序号,便可以使用任何滑动窗口协议来实现数据流量控制。实际上,初始序号曲线(由粗线表示)并非真正线性的,而是阶梯形的,因为时钟是以离散形式前进的。为简单起见,我们忽略这一细节。 当主机崩溃时会出现问题,即当主机再次启动运行后,其传输实体不知道它处在序号空间的什么位置。一种解决方法是要求传输实体在主机恢复后空闲等待Ts,以便使所有过时的TPDU失效。然而,在一个复杂的网络系统中,T值可能很大,所以这种方法不具有吸引力。 为了避免在系统崩溃后所要求的Ts空闲等待时间,有必要对序号的使用引入一种新的限制。通过一个例子我们会看到这种限制的必要性。设分组的最长生命期为60 s,计时时钟每秒计数一次。如图5.9所示,对于x时刻接通的连接,其初始序号将为x。设想当t30s时,发送至5号连接(已经接通)的一个普通的数据TPDU被赋予的序号为80。不妨称其为TPDU X。在将TPDU X发送出去后。主机即崩溃并且很快重启。在t60s的时刻,它开始重新接通0至4号连接。在t70s时,它按照连接请求以初始序号70重新接通了5号连接。在接下来的15s内,主机发送出7080号数据TPDU。于是,当t85s时,一个序号为80的新的TPDU以及连接5被送入子网中。不幸的是,此时TPDU X仍然存在。如果TPDU X能先于新的TPDU 80到达接收方,它便会被接受,但正确的TPDU 80却被作为重复数据而拒收。 为了避免出现这类问题,我们必须做到在一些序号可用作初始序号之前的时间T内禁止使用它们(即赋予新的TPDU)。时间和序号的非法组合如图5.9(a)中的禁止区域所示。任何连接在发送任何TPDU之前,传输实体都必须读计时值,并进行检查,以确保该TPDU的序号和时间组合不在禁止区域内。 该协议在两种不同情况下可能会陷入困境。如果一台主机在-个刚刚接通的连接上发送的数据太多、太快,实际的序号与时间的关系曲线要比初始序号与时间的关系曲线更陡些(斜率更大)。这意味着在任何连接上的最大数据传输速率是每秒钟传送一个TPDU;还意味着在系统崩溃恢复后接通一个新的连接之前,传输实体必须空闲等待一段时间,以免同一序号被重用。这两点都要求时钟的脉冲间隔要短(几个毫秒)。 很不幸,由于发送数据太快而从曲线下方进入禁止区域并不是陷入困境的唯一情形。从图5.9(b)中可以清楚地看到,当任何数据传输速率低于时钟速率时,实际所用的序号与时间曲线将最终从左侧进入禁止区域。实际所用序号曲线的斜率越大,该曲线进入禁区的时间越晚。正如上面讲过的,传输实体在发送两个TPDU之前必须检查该TPDU是否将进入禁止区域,如果是,则将延迟Ts后再发送该TPDU,或者重新对序号进行同步。 基于时钟的方法解决了数据TPDU的延迟重发问题,但要使该方法可行,必须首先建立连接。因为控制TPDU也可能被延迟,所以在使双方都接受初始序号这点上可能出现问题。例如,假设连接是由主机1向远端对等主机2发送连接请求TPDU而建立的,该TPDU中包含了主机1建议的初始序号和目的端口号。接收方(主机2)通过回送一个接受连接TPDU来确认该请求。如果连接请求TPDU在传送时丢失而延迟的重复连接请求突然出现在主机2上,那么连接将会被错误地建立。 为了解决这一问题,Tomlinson(1975)引入了三次握手(three-way hand shake)的方法。该建立连接的协议并不要求连接的双方以相同的序号开始发送数据,所以它可以在同步方式下使用,而不必非要采用全局计时时钟的方式。 当主机1发出连接请求时,连接建立的一般过程:主机1选择一个序号x并向主机2发送一包含了该序号的连接请求TPDU;接着,主机2回应一个接受连接TPDU,确认x并声明自己所选用的初始序号y;最后,主机1在其发送的第一个数据TPDU中确认主机2所选择的初始序号。 现在来看看当出现延迟的重复控制TPDU时,三次握手方法是如何工作的。第一个TPDU是来自于一个已经释放的连接的延迟重复的连接请求,该TPDU在主机1毫不知晓的情况下到达主机2。主机2通过向主机1发送一个接受连接TPDU来响应该TPDU,而该接受连接TPDU的真正目的是要证实主机l确实试图建立一个新的连接。当主机1拒绝接受主机2建立连接的意图时,主机2便意识到自己受到了延时的重复TPDU的欺骗并放弃该连接。这样,延时的重复数据便不会产生不良后果。 最糟糕的情况是当一个延时的CR(连接请求)和一个对ACC(接受连接)的确认并存于子网中时,见动画。如上例一样,主机2收到了一个延时的CR并做了确认应答。在这里,关键是要认识到主机2已经建议使用y作为从主机2到主机1进行数据传输的初始序号,因为主机2十分清楚当前没有序号y或对y进行确认的TPDU存在。于是,当第二个延时的TPDU到达主机2时,主机2根据它确认的是序号z而不是y知道这也是一个过时的重复TPDU。重要的是要认识到此处不会出现过时的CR,ACC或其他可能引起协议失败的TPDU组合的情况,也不会无故建立无人要求的连接。 另一种针对延迟的重复TPDU而能可靠地建立连接的方案请参见(Waston,1981)。该方案使用了多个定时器来排除意外的事件。 2.释放连接 连接的释放要比建立更容易些。尽管如此,仍有很多不引人注意的细节问题。前面曾提到过,终止连接有两种方式:非对称释放和对称释放。非对称释放是电话系统动作方式:当一方挂机后,连接即告中断。对称释放将连接按照两个独立的单向连接来处理,要求每一方分别释放连接。 非对称释放很突然,因而可能会导致丢失数据。请看动画中所示的释放连接(DR)情形。当连接建立后,主机1发送了一个数据TPDU并正确抵达主机2,接着,主机1发送了另一个数据TPDU,这次很不幸,主机2在收到第二个TPDU之前先发出了DISCONNECT(释放连接请求),结果是连接被释放,数据被丢失。 显然,我们需要采用更为完善的连接释放协议来防止数据丢失。一种方法是采用对称释放方式,每个方向独立释放本方的连接。这种方式中,即使主机已经发出了释放连接TPDU,仍然能够继续接收数据。 对称释放方式适用于每个用户进程有固定数量的数据需要发送,而且清楚地知道何时发送完毕的情况。其他情况下,决定所有工作是否已经完成和连接是否应该释放是没有把握的。可以预想一种协议,在该协议下,主机1说:我发送完了。你呢?如果主机2响应:我也发送完了。再见。那么,连接变可以被安全释放。 不幸的是,这种协议并非总是有效的。对此有一个著名的问题,称为两军问题(two army problem)。设想一支白军被围困在一个山谷中,如图5.10所示。山谷两侧是蓝军。白军在人数上比山谷两侧的任何一支蓝军都多,但少于两支蓝军合在-起的人数。如果单独一支蓝军对白军发动进攻,则必败无疑;但如果两支蓝军同时进攻,便可取胜。 假设蓝军1号的指挥官发出消息:我建议在3月29日拂晓发起攻击。怎么样?现在假设信息送到了,蓝军2号的指挥官同意这一建议,并且他的回信安全送回到蓝军1号处。那么能否发动进攻呢?很可能不会,因为蓝军2号的指挥官不知道他的回信是否安全达到了。如果未送到,蓝军1号将不会适时发起攻击,那么他贸然进攻就是愚蠢的。 现在我们采用三次握手的方法来改进这一协议。最初提出建议的指挥官必须确认对该建议的应答信息。假如信息没有丢失,蓝军2号将收到该确认信息,但现在蓝军1号指挥官开始犹豫起来。因为他毕竟不知道他的确认信息是否被安全收到了,如果未被收到,他清楚蓝军2号不会按时发动进攻。那么我们现在采用四次握手协议会如何呢?结果仍是于事无补。 实际上,可以证明不存在有效解决该问题的协议。假如存在某种协议的话,那么,协议中最后一条信息要么是必需的,要么不是。如果不是,可以删除它(以及其他任何不必要的信息),直到剩下的协议中每条信息均必不可少。那么若最后-条信息没有安全到达目的地会怎样呢?刚才说过这条信息是必需的,因此,如果它丢失了,进攻计划便不会实施。因为最后发出信息的指挥官永远无法确定该信息能否安全到达。所以他便不会贸然行动。同样,另一支蓝军也明白这个道理,所以也不会发动进攻。 为了看清两军问题与释放连接之间的相关性,只需用释放连接代替攻击一词就行了。如果连接的双方在确信对方也准备释放连接之前都不准备断开连接,那么连接将永远也得不到释放。 在实际应用时,人们在解决释放连接问题时往往准备冒比进攻白军问题更大的风险,所以问题并非完全没有希望解决。动画表明了采用三次握手方法进行连接释放的四种情况。这一协议并非绝对无误,但它已令人满意了。 正常释放的情形,此时,一个用户发出一个DR(释放连接请求)TPDU,而首先要求释放连接。当该TPDU到达后,接收方也回送个DR TPDU,并同时启动定时器以防止其DR TPDU丢失。当应答方的DR到达后,最初提出释放连接的一方又回送-个ACK(确认)TPDU,并断开连接。最后,当ACK TPDU抵达目的地后,接收方也释放连接。释放一个连接意味着传输实体从其记载所有接通的连接的表中删除该连接的有关信息并设法通知该连接的所有者(传输用户)。该操作有别于传输用户调用DISCONNECT原语的情形。 如果最后的ACK(确认)TPDU丢失,如动画所示,那么就需要用定时器来补救了。当定时器超过时限后,连接将被强行释放。 现在考察第二个DR(响应的DR)丢失的情形。这时,首先提出释放连接的用户将不能收到所期待的响应,待到定时器超时,再次开始要求释放连接。从动画中可以看到这种情况下是如何工作的,假设第二次没有任何TPDU丢失,并且所有TPDU都正确、及时地到达目的地。 最后一种情况。除了假设由于丢失TPDU使所有重发DR的尝试均失败以外,其他情况与上个动画完全相同。这样,经过N次尝试后,发送方(提出释放连接的一方)只好放弃努力并断开连接。同时,接收方(被动释放连接的一方)因为定时器超时也释放掉连接。 这种协议通常已经满足需要了,但理论上当第一个DR和所有N次重发均被丢失的情况下,该协议便会失败。因为此时发送方将放弃重发并释放连接,而另一方却对对方的释放连接企图一无所知,而处于连接有效状态。这种情况将导致一个半接通的连接。 可以采取一种措施来避免这种问题的发生,即禁止发送方在做完N次尝试后放弃连接而让它一直继续下去,直到已收到了一个应答。然而,如果另一方采用超时而释放连接的方法,那么,发送方将会永远处于发送DR状态,因为它不可能再收到应答信息了(对方已经释放连接了)。如果我们禁止接收方采用超时中断连接的方法,那么该协议对图5.22(b)所示的情况便会束手无策。 一种消除半接通连接的方法是,如果在一段时间内没有收到任何TPDU,连接便自动释放。这样,如果一方已经释放了连接,那么另一方将检测不到对方的活动因而也断开连接。当然,如果引进这一规则,就需要为每个传输实体设置一个定时器,每当收到一个TPDU时都要使定时器停止并重新启动。如果该定时器超时,就发送一个伪TPDU,目的只是不让对方释放连接。另一方面,如果采用自动释放连接的规则,并且在一个处与空闲状态的连接上连续丢失了很多的伪TPDU,那么连接的双方将会先后释放连接。 对这个问题本书不再作进一步说明了,(暨阳社区 版权所有),但现在应该清楚,释放一个连接并非像初看起来那么简单。 在连接、虚电路及物理链路上,多路复用几组对话的方法在网络结构的许多层上都有一定的作用。在传输层中对多路复用技术的需要表现在很多方面。例如,子网内部使用虚电路的网络中,每个接通的连接在连接的整个阶段均需占据路由器中的-些表空间。如果缓冲区是被分配给每个路由器中的虚电路的,那么登录到远端机器上的用户离开终端去喝咖啡期间,他仍然在耗费着昂贵的资源。尽管这种分组交换的实现与使用分组交换的主要原因之一用户只根据传输的数据量而不是根据连接时间付费相抵触,但很多通信公司还是选择了按时间收费的方法,因为它非常类似于他们在过去的几十年中巳经习惯了的电路交换模型。 在这种价格结构下,长时间保持虚电路的接通十分不利,于是使不同的传输连接复用到同一网络连接上的技术便很有吸引力。这种形式的多路复用称为向上多路复用(upward multiplexing),如图5.11(a)所示。图中,4个不同的传输连接都使用同-网络连接(例如,ATM虚电路)与远端主机相连。当连接时间成为通信费用的主要因素时,就由传输层根据传输连接的目的地将它们分为不同的组,并将每个分组映射到最小数目的网络连接上。如果有太多的传输连接被映射到同一个网络连接上,性能就会变得很差,因为窗口通常是满的,用户不得不排队等待发送报文。如果映射到一个网络连接上的传输连接过少,则服务费用会很昂贵。当在ATM上向上多路复用时,尽管ATM特意为了标识连接而为每个虚通路提供了4000多虚电路号码,但我们还是要用传送报文头部的一个字段来标明连接,这真是一个莫大的讽刺。 由于另一个与传输技术而非价格因素有关的原因,使多路复用在传输层中也可能有用。例如,假定某个重要的用户有时需要高带宽的连接。如果子网需要用n位序号作为一个滑动窗口的流量控制,那么当有2n-1分组未得到确认时,用户就必须停止发送,等待这些分组到达远端主机并得到确认。如果物理连接是通过卫星相连

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论