网络接口:服务模型
星期3, 2008年10月14日讨论从终端节点来看的网络和服务模型的各种类型:无连接的和面向连接的、可靠的和数据报服务、服务类型以及各种组合。
什么是网络层
一个网络是由一些分组交换机组成的,它们通过各种技术例如点到点链接或者局域网连接。我将一个分组交换机称为路由器,虽然它也可以有下列名字:
. 中继系统, 或者简称IS (ISO术语);
. 网关(有时被IP协会使用);
. 交换机,或者第三层交换机。
网络的目标是使将设备连接到网络的用户能够传输数据并且能够从其他用户的设备接受数据。这与电话网络相似,你将你的电话连到网络与其他将电话连到网络的用户进行通信。将连到网络的设备称为终端节点,这是一个常用的术语, 虽然也可以有下列名字:
. 主机( IP协会使用);
. 数据终端设备,或者DTE (X.25标准使用);
. 端系统,或者ES (ISO术语);
. 工作站。
这样,就终端节点而言,网络是一片连着的大云朵,所以使其能与其他附着在云上的终端节点通信。另外,节点通常用来既表示终端节点也可以是路由器。
网络服务类型
人们常争论从终端节点的角度来看,网络应该是什么样子的。实际上有两个不同的问题:
1 ) 网络应该是可靠的或是数据报的(最佳努力的)?
2 ) 网络应该是面向连接的或是无连接的?
一个可靠服务模型意味着网络保证发送每一个数据包,按顺序,且没有重复或者丢失。数据报,或者称为最佳努力服务,发送到达的数据报,让运输层发送。在一个无连接模型中,每一小段数据(数据包)是独立发送的,并且携带完整的源地址及目的地址。这与邮政系统类似,每一封信都带着完整的地址注入系统。面向连接(有时被称为虚电路)模型与电话网络类似,每一个呼叫都必须先建立连接,网络保持整个连接,通常所有的数据包都是沿着从源到宿的相同路径前进的,并且网络常常为每一个会话分配一个标识符使得不是所有的数据包都需携带源和宿的地址。在这个模型中,终端系统首先通知网络它想与另一个终端系统会话,然后网络通知目标端系统有会话请求,由目标决定是接受或是拒绝。此处“呼叫”一词意思是网络建立的虚电路,而“会话”意思是在虚电路上流动的信息,但是区别并不重要。
性能保证
有一些关于终端节点能获得或者它能够被期望的性能事项。网络或许能提供服务保证的能力,例如最小带宽、最小时延或者最小时延变化。端节点可能被限制到某一个带宽,并且过量负载可能被丢弃或者仅仅看情况来传送。带宽限制可能会使端节点永远不能超越,或者仅仅是一个平均值(峰值是允许的,只要它们不超越某个门限值)。如果端节点超越这个门限值,网络可能丢弃多余的数据或者将多余的数据标记为低优先级的,即在网络拥塞时最先被丢弃。
网络服务保证的请求通常是通过连接完成的。在一个无连接的系统中,使用一个优先级字段来完成相似的功能。然而,差别发生于当有太多的高优先级信息需要保证网络服务时。在极端情况下,如果所有的流量都标识为高优先级时,优先级字段根本不起任何作用。一个面向连接的网络如果它已经有了足够的、它能处理的、并能保证服务的流量时,它能够锁住将来的连接,那些幸运的已经被接受的连接能够得到它们想得到的一切,而剩下的则一无所有。资源预留具有浪费带宽的潜在危险。如果端节点预留了峰值负载,并且如果网络保证即使所有的会话同时以峰值传送一长段时间以至用完所有的缓冲区,但却没有拥塞,那么这样的网络是低效率的,因为没有使用的带宽是不能被使用的。有时数据报流量能够使用已经被预留的、但没有被使用的带宽。同航空业一样,网络也能过量预定。有时,流量需要被丢弃,正如航空公司有时也会阻塞旅客一样(你可以毫不犹豫地丢弃数据,但是飞机的乘客是很难缠的。你得诚挚道歉,并安排他们搭乘下一航班,并给他们一张免费的往返机票来弥补他们的麻烦)。如果一个网络保证提供100%的可靠服务,但却丢失了你的一部分数据,这时候会发生什么情况?也许应该警告你—声明你的一部分数据丢失了—然后继续?或者应该简单地中断会话?大多数X.25的实现采用了后者。
服务模型选择举例
ISO从没有在某个服务模型上取得一致意见。结果,ISO网络层的设计者已经分成两个独立阵营:面向连接的一方采纳了CCITT的面向连接的X.25协议;面向无连接的一方设计了CNLP(Connectionless Network Layer Protocol, ISO 8473)。IP团体在传统上是网络层的面向无连接的一方,但是也做了一些努力来提供服务保证—例如RSVP(资源预留协议, RFC 2205)—导致了面向连接的建议。虽然X.25的设计者选择了可靠的面向连接的服务,也可能有一个面向连接的数据报服务,事实上,ATM就是面向连接的数据报服务(因为它不保证数据的传送,尽管它具有保证带宽的服务类型)。各种不同的选择参见下图。

混合策略
与一般的看法一样,没必要把分类看得太重,有很多网络设计的实例都不是完全符合面向连接的模式要求。下面介绍几个例子:
1) 在会话建立之前需要有一个呼叫建立过程的网络。在呼叫建立过程中,所有的包的路由都已经被计算好,但网络并不保证带宽,也不保证包不会被丢失。这么设计的网络的目的,是为了在每一个呼叫建立时,给它分配一个小的数字编号。这样就使得路由器可以直接通过查表知道包的路由,而不需要像通常的做法那样解析包的网络层头部,然后通过处理它的网络层地址来得到路由。这种网络仍然可以提供数据报服务,但允许包丢失,不保证一定带宽,也不保证一定的时延。ATM是这种网络类型的一个例子。此外,它还能提供各种服务类型(包括保证一定的带宽)。
2) 在会话开始前需要有一个呼叫建立的过程,但只是为了在第一个路由器与最后一个路由器之间的端对端连接进行同步。包被独立地进行路由,但通过头尾两个路由器之间的握手可以恢复丢失或者乱序的包(用一个类似与运输层的协议);然后所有包以正确的顺序到达目的端节点。在这种网络中没有带宽保证。设计这种网络的目的是为了支持面向连接的界面。不提供通常与这种接口相联系的统一的服务,使得网络资源可以共享。人们已经在X.25中实现了这种网络类型,X.25可以运行在提供数据报服务的网络(如IP)之上,并且只有在网络边缘的路由器向所连接的端节点提供X.25接口。
3) 网络并不需要外在的呼叫建立协议,但是每当出现一个新的源—目的对时,路由器将代表端节点开始一个呼叫建立过程。设计这种网络的目的是为了提供给端节点一个无连接的界面,同时允许为每个会话指定一个小的数字编号,使得路由器可以迅速地转发包。一些方法采用了面向连接的数据链路层(如ATM),它们简单地通过ATM的虚电路向出口路由器转发包。其他一些方法中采用在IP包头部前面再附加上一些小的包头信息,使得路由器在转发包时可以根据小的包头信息(mini-header)来判断,而无须根据IP头部来判断。目前,IETF有一个名为MPLS(多协议标签交换, Multi Protocol Label Switching)的工作组,负责制定这个策略的标准。
无连接与面向连接
这两种连接类型孰好孰坏?面向连接的支持者提出以下理由:
1) 面向连接服务可以迅速建立路由。在呼叫建立阶段,就可以开始查看复杂的地址,然后为呼叫指定一个小的标识符。当路由器在转发包时,就可以根据这个小的标识符来查看简单的路由表,从而迅速作出决定。
2) 当网络接受一个呼叫时,它就应该义不容辞地提供一个合理的带宽。拒绝新的呼叫请求的策略,会比降低目前正在进行的呼叫的服务质量要好得多。
3) 面向连接的网络中,运输层处理统一的服务会更容易。例如,如果网络独立地为每一个包计算路由(在无连接的网络中经常如此),运输层很难计算到目的端的来回时延(round-trip delay)(这一点很重要,当发送端没有收到目的端的确认信息时,需要根据这个延迟时间来判断是否需要重发包)。另外一个例子是包大小。我们很可能需要发送一个巨大的包,但是不同的链路类型提供了不同的最大包长。路由器能够传输的最大包长等于沿着这个路由器的所有链路中最大包长的最小值。在无连接网络中,包可能被具有不同最大包长要求的路由器转发。而在大多数面向连接的网络中,所有的包都只经过一条路径,因此端节点可以知道该路径中的最大包长信息。
4) 面向连接的网络层的接口要比无连接的网络层的接口简单,因为面向连接的网络层不需要复杂的运输层。
5) 看起来面向连接的网络似乎不如无连接的网络可靠,因为如果这条路径出了故障,整个连接都失败了。但是,在大多数的数据报网络中,路由协议需要花掉足够多的时间来检测出某条链路的故障,并计算出一条新的路径来替代它,以致于传输连接早已结束而中断了。
支持无连接网络的人的理由如下:
1) 在面向连接的网络中,如果某个呼叫所在路径中发生了故障,网络就会自动地中断呼叫。它不能判断哪些包已经达到了目的端,哪些包尚未到达;并且它不能恢复在发生故障的时刻,正处于发送途中的那些包。因此,即便网络层宣称它可以提供可靠服务,该网络的运输层也需要做到全服务。也就是说,面向连接的网络实际上提供了双重的努力。
2) 无连接的网络层的接口要比面向连接的网络层的接口简单,即便需要充分地考虑运输层。但如果第一条是正确的(即不管怎么说都需要一个全服务的运输层),则端节点在面向连接的网络中,其网络层编码会比端节点在无连接的网络中的网络层编码简单得多。
3) 很多应用条件都不需要按顺序发送包。对这些应用来说,包丢失是可以忍受的。其中一个例子是语音包,一定百分比的语音包丢失是可以容忍的,但是延迟到达的语音包将毫无意义,可以直接抛弃。而面向连接的网络中,经常延迟发送一个包,因为它需要等前面丢失的包重发完成以后才能发送下一个包。包无须按序到达的另外一个例子是文件传输。每个包都包含了足够多的信息,当这些包到达目的端时,可以立刻按正确顺序排列,然后存放在磁盘上。当一个文件传输完成时,应用程序可以检查到哪个文件块丢失了,然后直接请求重发该文件块。让这些包按顺序到达目的端毫无必要。在Digital公司所做工作的基础上,已经制定了这样的协议802.1e(组播负载协议,multicast load protocol)。
4) 网络传输经常会超载,因此保留资源是一种浪费。如果某个应用程序试图发送数据,然后又停了一段时间,接着再发送一些数据,当这个端节点没有发送数据时,网络为它所预留的那些带宽就被浪费掉了。很多事情看起来好像不会导致超载的,可实际上,它们确实会让网络超载。比如说文件传输。一般说来,文件传输是不会让网络超载的,但是当发送繁忙时,就可能引起超载。或者,网络的带宽确实比较大,但是在某个时刻,文件的传输高峰就可能会超出带宽的范围。同样,在视频和音频的传输过程中,也可能出现同样的问题。假定在大多数情况下,网络都是超载的,因此最好能够优化资源分配,并且允许网络资源共享(这跟飞机票超额预订的情况有些类似)。如果在同一时刻有多个用户请求资源,数据就会被丢失。但是对允许丢失的服务要求来说,这并不是致命的错误,因为可以通过运输层协议来请求重发被丢失的包。
5) 让该网络上的所有用户公平地降低服务质量,要比让某个幸运的家伙独享网络服务而拒绝其他用户使用的做法好得多。
6) 对大多数的应用来说,特别是在客户端-服务器端的请求-响应模式的应用中,很难做到在服务器端维持状态(或者在为服务器端提供服务的路由器上维持状态),并且监视目前所有的会话,因为一个服务器端可能连接有成百上千个客户端。
如果“面向连接”就意味着可靠服务,而且包括诸如X.25在内,我支持无连接服务。但我认为,面向连接的数据报服务的网络也很有必要。我比较喜欢ATM,除了它那袖珍的包大小外(才48个字节!)。让一个会话中的所有的包按固定的路径发送对运输层来说是件友好的事情,这样它就可以很方便地知道来回时延和最大包大小。并且,根据一个小的数字标识符来查找路由表进行包转发,要比根据复杂的L3层头部信息进行判断好得多。并且,我也认为传输经常会超载,因此保留带宽是一种浪费的表现。我还觉得让网络上所有的用户公平地降低服务质量要比让某些独享网络服务而其他人不允许访问(由于所有的带宽都被保留了)要好得多。具有讽刺意味的是,现在ATM和IP正在朝着一个方向发展(试图提供相同的服务)。现在已经出现了基于ATM、且可发送大的(可变长的)包的协议。IETF的MPLS工作组正在为基于IP包的ATM包头制定标准化协议。
0 Responses to “网络接口:服务模型”
Leave a Reply
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。






