再将该分组丢弃或将该捎带好消息的分组保存在刚空出的缓冲区中。 cO&(&*J r
(3)定额控制法。这种方法在通信子网中设置适当数量的称做“许可证”的特殊信息,一部分许可证在通信子网开始工作前预先以某种策略分配给各个源节点,另一部分则在子网开始工作后在网中四处环游。当源节点要发送来自源端系统的分组时,它必须首先拥有许可证,并且每发送一个分组注销一张许可证。目的节点方则每收到一个分组并将其递交给目的端系统后,便生成一张许可证。这样便可确保子网中分组数不会超过许可证的数量,从而防止了阻塞的发生。 cO&(&*J r
cO&(&*J r
2.死锁及其防止 cO&(&*J r
cO&(&*J r
阻塞的极端后是死锁。死锁是网络中最容易发生的故障之一,即使在网络负荷不很重时也会发生.死锁发生时,一组节点由于没有空闲缓冲区而无法接收和转发分组,节点之间相互等待,既不能接收分组也不能转发分组,并一直保持这一僵局,严重时 至导致整个网络的瘫痪.此时,只能靠人工干预来重新启动网络,解除死锁.但重新启动后并未消除引起死锁的隐患,所以可能再次发生死锁.死锁是由于控制技术方面的某些缺陷所引起的,起因通常难以捉摸、难以发现,即使发现,也常常不能立即修复。因此,在各层协议中都必须考 如何避免死锁问题。 cO&(&*J r
(1)存储转发死锁及其防止。最常见的死锁是发生在两个节点之间的直接存储转发死锁。例如,A节点的所有缓冲区装满了等待输出到B节点的分组,而B节点的所有缓冲区也全部装满了等待输出到A节点的分组;此时,A节点不能从B节点接收分组,B节点也不能从A节点接收分组,从而造成两节点间的死锁。这种情况也可能发生在一组节点之间,例如,A节点企图向B节点发送分组、B节点企图向C节点发送分组,这种情形称做间接存储转发死锁。当一个节点处于死锁状态时,所有与之相连的链路将完全被阻塞。 cO&(&*J r
一种防止存储处于死锁的方法是,每个节点设置M+1个缓冲区,并以0到M编号。M为通信子网的直径,即从任一源节点到任一目的节点间的最大链路段数。每个源节点仅当其为0号缓冲区时才能接收源端系统来的分组,而此分组仅能转发给1号缓冲区空闲的相邻节点,再由该节点将分组转发给它的2号缓冲区空闲的相邻节点......最后,该公组或者顺利到达目的节点并被递交给目的端系统,或者到了某个节点编号为M 的缓冲区中再也转发不下去,此时一定发生了循环,应该将该分组丢弃。由于每个分组都是接照编号递增规则分配缓冲区,所以节点之间不会相互等待空闲缓冲区而发生死锁现象。这种方法的不足之处在于,当某节点虽然有空闲缓冲区,但正巧没有所需要的特性编号的缓冲区时,分组仍要等待,从而造成了缓冲区和链路的浪费。 cO&(&*J r
另一种防止存储转发死锁的方法是,使每个分组上都携带一个全局性的惟一的“时间戳”,每个节点要为每条链路保留一个特殊的接收缓冲区,而其它缓冲区均可用于存放中转分组。在每条输出链路的队列上分组时间戳顺序排队。例如,节点A要将分组送到节点B,若B节点没有空闲缓冲区,但正巧有要送到A节点的分组,此时A、B节点可通过特殊的接收缓冲区交换分组;若B节点既没有空闲缓冲区,也没有要送