Written on 2008年10月16日 @ 10:01 | by houlihu237 | Tags: 网络互连(第2版)网桥·路由器·交换机和互连协议  

这里是面向无连接网络层服务的一般问题。无连接网络层协议,如IP、IPX、AppleTalk、CLNP和DECnet。为什么要花时间去描述已经过时的协议呢?为什么不是仅仅描述世界的基本潮流—I P呢?主要是基于以下各种原因。
• 如果你懂得其他协议,就会对IP有更深的理解。
• 很多有趣的思想,包括好的和不好的,会出现在其他协议上。把它们记录下来很重要。这样,未来的设计者们就能运用好的思想,并从不好的部分得到启发。
• 大多数协议并不是完全消失。有时需要去研究其中一种不常用的协议,因此把它们放在一个地方来总结很有用。
• 从历史的角度来说,知道某些思想从何而来是件好事,这样它的发明者们将受到赞誉。

数据传输
一个面向无连接的接口主要包括一个数据的头格式,因为没有必要去建立和拆除连接。你还可以把接口想像成有三层,就像在X.25一样。终端节点必须和某种链路连接起来,这种链路可以是点对点的互连、一个LAN或者是一整个网状网如ATM。有一个物理层(所使用的电缆)、一个数据链路层(例如以太网、HDLC、FDDI或者ATM)以及一个网络层(如IP或IPX)。一个面向无连接的网络层十分简单—或者说根本不需要复杂—但一个委员会可以对任何问题提出一个复杂的解决方案。包的头部包括源和目的地址以及一个跳计数,用来监测和消灭丢失和无目的地徘徊的无用的包。头可能还会包括分段和重组的信息和一些诸如优先级那样的特别服务请求。

地址
各种面向无连接的网络层协议—例如IP、IPX、AppleTalk和IPv6—之间最主要的区别就是地址的大小。通常,较大的地址空间使分配地址更加容易,配置也最少,虽然AppleTalk很奇怪地仅用3个字节的地址空间就能完成很好的自动配置任务。不定长的地址空间明显是最有适应性的。它们不需要选择固定长度的地址来满足永远的需要,它们还在小地址空间就能满足的小网络中保留带宽。但它们使得头部更难分析。

跳计数
不幸的是,当由于链路和路由器的增加或减少使得拓扑结构改变时,路由的协议要花一定的时间来适应新的拓扑结构。在这段时间里,路由器中的数据库可能会处于一个不一致的状态,这样包就会循环流动。由于这种原因有必要在头部中留一个域来监测和删除不断循环的包。我认为消灭不断循环的包是这个域存在的唯一理由。不幸的是,这个跳计数在CLNP和IP协议中都被称为生存时间(TTL—time to live)。在设计IP时,认为端节点可能会有某些业务(比如packet voice),如果时延超过生存时间会被丢弃,而网络能足够精确地测量所经过的时间。在实际应用中,TTL域没有粒度性,时延也不能以足够的精度来测量,因为TTL比一个简单的跳计数器更加有用。通常,实现把这个域当作是一个跳计数(也就是说,每次前进,这个值就改变1)。C L N P基本上是复制I P的头部,但使地址空间更大,而且是可变长度的,因此CLNP也称这个域为“生存时间”,并明确地表示它应该代表时间。其他的协议(IPX、AppleTalk、DECnet、IPv6)只有一个跳计数。在IPX中,计数器是不断增加的,而在其他协议中它是减少的。它能产生什么影响吗?如果对于“太多的跳”有一个全局的值,这不会有什么影响。然而,网络的大小会有很大的差异,像16这样的值,在数年前作为极限值似乎是合理的,但随着时间的推移,就不够大了。所以极限值必须是一个在各个路由器中独立设置的参数,如果计数器增加的话。但如果一些路由器恰好设置了一个太小的值,调试就会变得困难。经过那些路由器的路径会对于用户来说是不可解释的,有时甚至失败。另一方面,如果计数器是减少的,源可以以任何认为合理的值来开始发送一个包,而且路由器不会独立地做出决定。把一个不断减少的值称为“跳计数”似乎不正确。在IPv6中采用跳数限制这个术语。让源来选择跳数限制还有其他好处。如果源知道目的地在附近,它可以设置较少的跳数。这样,如果路由器的算法是一个临时的循环,就可以减少带宽的浪费。而且让源来选择跳数限制有一个在IP中称为“追踪路由”的用途。这个有用的调试工具使得源可以找到到达指定目的地的路径。首先,源发出“生存时间”为1的包。第一个路由器R1,减小该值,并发现包已经过期了,然后返回一个错误。源就能(从是谁返回的错误信息中)知道R1是路径中的第一个路由器。然后源发出一个跳数限制值为2的包,来找出路径中的第二个路由器。这样不断重复,直到包到达目的地。注意到如果IP路由器的实现不是用一个跳计数来表示“生存时间”,则追踪路由就不能很好地工作。

服务类型信息
服务类别信息告诉网络属于这个包的任何特别的需要。比如优先级或对不按包计费的路由的请求。这类似于X.25的facilities域,这个域只有在呼叫请求(call request)包才有。在面向无连接的网络层,这样的信息要在每个包中都配备。

优先级
“优先级是为了在计算机网络中体现傲慢与嫉妒。”优先级带出了各种的问题。高优先级的传输一定要在绝对数量上比低优先级的传输高吗?也就是说,如果有足够多的高优先级传输来用完所有的带宽,那么低优先级的传输是否就没有可用的带宽了呢?如果不是的话,那么就应该有一个算法来为每一类的优先级保留一定比例的缓冲区。例如,你可能会为高优先级的传输保证20 %的带宽,而为低优先级的传输保证10 %的带宽。违反直觉的是,如果真的有足够多的高优先级传输来使用100 %的带宽,而且只有足够的低优先级传输来使用10 %的带宽,这样,使用这种算法的低优先级的传输能得到更好的服务。那也许真的就是我们所需要的。人们真正的需要是不明显的。关于优先级的一个更困难的问题是保证人们能把它设置成一个合理的值。如果网络对更好的服务没有强制措施(例如收更多的钱),每个人都会要求最高的优先级。

带宽预留和服务保证
带宽预留不应该是面向无连接网络的一部分,因为它需要建立连接并保持网络面向连接的状态。RSVP(RFC 2205 )尝试去做这样一件事情,但网络供应商并不打算这样做,因为他们害怕如果每一次会话时都允许网络呈现面向连接的状态,状态的总量会被消耗掉。我并不热衷于带宽预留。我的直觉认为带宽的大小是突发的,为最坏的情况预留带宽将会是一种浪费。同时,绝大多数人认为需要带宽预留,例如视频,即使损失一些数据也能做得很好。我情愿看到网络对每个人都能够很好地服务,而不是让极少数先到的幸运者得到最好的效果。有人会争辩说,对某些应用来说,如果得不到适当的服务也不会有很大的影响。但在这种情况下,我希望至少可以知道什么时候能够得到那种服务—并为以后作出预留—而不是在反复尝试后,仍然得到忙的信号。在理想的情况下,网络应该比它的用户先知道网络如同加州高速公路在高峰时期那样繁忙的情景,从而使网络提早增加带宽。

特别的路由计算
特别的路由计算指具有多种度量,这样你就可以用某一方面(如时延)来优化你的路径,而其他人可能正在用另一方面(如带宽)进行优化。通过使路径上的总花费最少来计算路径,一般是通过为链路增加单独的花费。但链路的花费是什么?它是基于时延、带宽,还是其他别的?如果我要一个路由器通过最小的时延来计算,而你要它通过最大的带宽来计算,那么会怎么样呢?IP定义了三个度量:时延、带宽和残留差错率,在理论上它是指链路的不正常程度。CLNP基本上是IP的拷贝,并作了些补充,它又增加了一个度量,也就是钱。所有这些都似乎很合理。为什么每个人都应该根据相同的度量来计算路由呢?下面我解释不喜欢它的原因。
1) 每一个度量都需要在链路上配置一个额外的数字。它还要求在路由协议中传输额外的信息和增加额外的计算(每一个度量都要计算一整套的路径)。还必须保留独立的前向数据库。
2) 时延和带宽之间的差别实际上是很小的。一个低带宽的链路,即使是轻微的堵塞,也会变成一个高时延的链路。所以不必麻烦地去为它们设计不同的度量。钱度量似乎是一个很好的思想,但因它而产生区别的情况极少会碰到。一个简单的方法是在昂贵的链路上设置一个高的花费(按照我推荐使用的度量)。至于残留差错率度量他们在想些什么?没有人使用它。如果链路是不正常的,你应该修复它,或者运行一个数据链路协议来监测和重传损坏的包。所以,没有足够的好处来担保额外的设置和带宽、金钱和CPU的耗费。

网络反馈
除了接收和传输数据包以外,一个终端节点或许会从网络上接收一定类型的辅助信息。两个最常见的例子是:
1) 差错报告,指示一个包由于某些原因而不能被传输。通常,差错报告会给出那个原因的提示。例如,目的地可能不可达或者包的格式非法或太大了。
2) 堵塞信息,指示网络已经超负荷,并且端节点应该通过把运输层窗口设小来减少对网络的使用。

分段和重组

X.25用头部一个单独的位(M位)来实现分段和重组。但这一机制并不适用于数据报的网络,在那里分段可以丢失、复制或者不按次序到达。路由器用“分段号”标记每个分段的机制也不行;一个路由器可以把一个包分成段1、段2、段3和段4,然后经过几次传递,段2可能会遇到一个需要把段2继续分段的链路。通常的方法是在网络层的数据包中包含一个offset字段。例如,如果一个大小为8000字节的包遇到一个只能处理4000字节的包的连接,那么路由器可能将这个包分成两片,每片4000字节(每个分段必须包含头信息,以便路由器计算分段的大小时考虑头的大小)。第一个分段的偏移为0;第二个分段的偏移为4000。如果第二个分段遇到一个需要进一步分段的连接—例如,分成1000字节的分段—那么第二个分段就将成为四个分段,偏移为4000、5000、6000和7000。有必要让目标知道包被正确地重组。一个问题是它要知道包在分段之前的总长度。ISO的CLNP(无连接网络协议)在total length字段中提供了这个信息。IP则提供了一个more fragments标志,这个标志在除了最后一个分段以外的所有分段上被置1。尽管IP有一个total length字段,但它并不提供和CLNP的total length字段相同的信息。CLNP提供了分段之前的总长度,而IP仅仅提供了分段的长度(包括分段的头)。当目标收到最后一个包时,它仍然不知道是否能够成功地重新组装包,因为有些分段可能丢失了。它也不能对字节进行计数,因为有些片可能收到了两次。即使完全相同的片被丢弃,也不能用字节计数的方法,因为不同的片可能通过不同的路由,从而在不同的地方以不同的方式被分段。一个可能的方法是使用掩码:在重组缓冲中对每个字节使用一个一位的掩码。数据到达后,会被复制到相应的缓冲区,并且对应的掩码置零。这个方法要求掩码要有重组缓冲的1/8大小。然而,IP和CLNP都要求重组8字节的分段,所以掩码可以为重组缓冲的1/64。另一个方法是在重组缓冲中对尚未放置数据的地方设置指针(见下图)。开始时,一个特定长度的重组缓冲被分配,例如8000字节(在CLNP中,每个分段的头部都有包的分段大小,从而可以知道所需缓冲的大小)。与重组缓冲相联系的是一个指向包缓冲中尚未有数据的区域的一个指针。开始时,指针指向缓冲的起始位置。在指针所指的位置,有一个指向下一个位置的类似指针,以及当前“空洞”的大小。分段到达后,指针和长度会做相应修改。当起始指针指向缓冲尾部时,包就重组结束了。

重组算法

另一个要由目标解决的问题是何时抛弃已经部包装好的包。如果有一个分段在传输过程中丢失,那么这个包是不可能正确重组的。应该为将来的包释放内存。如果一个包到达时,所有的缓冲都被部包装的包占用,而到达的包不属于它们之中的任何一个,那么可以有多种策略进行下一步操作。目标可以丢弃最近接收的分段,也可以丢弃非最近接收的分段,也可以丢弃一个随机包。网络层重组要占用很多CPU时间,因为经常要在目标复制信息。对带宽要求较高的应用可以选择一个适当的包大小,从而使它们不必在网络层分段。理想的情况是,源可能会要求最大可能的包大小。因为如果包太小,会降低吞吐率;如果包太大,将需要在网络层进行分段。对于无连接网络,最大包是一个困难的问题。即使对一个特定的路径发现了一个合适的大小,网络仍有可能对包重新路由或者实行路径分割。

最大包的发现
找到一个不需分段的最大包称为找到MTU(最大传输单元, Maximum Transmission Unit)。IP和CNLP在头中都有一个表示能否分段的标志。如果路由器要将一个包转发到一个需要分段的路径,而包的头信息表明不能分段,就会返回一个出错信息。出错信息说明因为必须进行分段,而这个包不允许分段,因此这个包必须被丢弃。一个IETF工作组决定,出错信息需要包含能够使用的包大小。仅仅说“太大了”是很奇怪的,要说“1000字节就可以”。令人惊讶的是,这个信息(能使用的包大小)对决定MTU并助。存在多少种不同包大小?这个数目是8。它们是以太网(1500)、FDDI(4500),或许还有其他3或4种,然而一般不会多于8。在寻找最佳分组大小的时候有什么策略可用?
1) 假设出错信息是“太大”。你可以对包大小做一个二分查找。因为只有8个值,所以只需3次即可找到正确的大小。
2) 假定出错信息给出了一个可行的大小。问题是,这个大小并不适用于整个路径,而仅仅是第一个瓶颈的大小。如果出错信息中有这个大小,一个显然的策略是,首先使用最大的数值,然后使用出错信息中的数值,接着再次使用出错信息中的大小,直到通过为止。但是,对于最坏的情况,你可能要试n次(n是网络链路上包大小的个数),而不是logn次。有些信息可能产生一个更坏的情况。当然,这种最坏情况不会很多,然而我们仍然看不出,忽略出错信息中包大小提示的二分查找法不是最好的策略。
3) 假定路由器会截断包,而不是返回一个出错信息,然后对截断的包进行标记;或者使用一个特殊的可以被路由器截断的包,然后用这个包找到路径上的MTU。在这种情况下,一个可以被截断的包就能到达目标。到达目标后,目标通知源MTU的大小,只用一次探查。我喜欢这个策略,但不知道是否有网络层这样做。
4) 另一个策略是(没有实行)让路由器在分段时总保证有一个最大的分段。例如,连接的大小是1000字节,包大小为1200字节。那么路由器可以分段为1000和200。然后目标就可以决定最大的包大小就是接收到的最大的分段的大小。注意当包沿着不同的路径路由时,这些方案可能是错误的。

相关文章:

面向连接的网络:X.25和ATM  (2008-10-15 14:37:2)

网络接口:服务模型  (2008-10-14 9:51:32)

集线器、交换机、虚拟局域网与快速以太网  (2008-10-14 1:7:40)

源路由网桥  (2008-10-13 11:36:14)

透明网桥  (2008-10-12 23:2:39)

影响网桥和路由器的数据链路层问题  (2008-10-10 13:25:50)

网络的基本概念  (2008-10-8 20:41:29)

  1. 0 Response to “一般的无连接的服务”

Post a Comment

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

About Me

成功的定义就是:每天在各方面持续不断地进步一点点.
欢迎有共同爱好的朋友相互交流。 邮箱:houlihu237@126.com
QQ:383153740 手机:13750888314

Find entries :
实用电子书籍 小学教育光盘
图像处理教程 淘宝相关服务
淘宝店铺装修 网络营销推广
图像图像设计 其他相关服务