Internet延迟交谈:通道管理( 五 )


这部分的其他内容涉及对那些希望实现服务器的人来说非凡重要的事情,但是也有些部分
对客户机程序作者很有用 。
5.1追踪最近使用过的通道
这种机制一般叫做“通道延迟”,通常用于前缀是字符‘#’的通道(参见3.1部分
(“标准通道”) 。
当网络发生断连,服务器必须追踪哪些通道由于断连失去了一个‘通道治理员’ 。这
些通道接着就处于一种非凡的状态,并持续一段时间 。在这种非凡状态下,通道不能停
止生存 。假如所有通道成员都离开了,通道就变成不可获取的:只要它是空的,本地客
户就不能加入 。
一旦一个通道不可获取,当远端用户加入通道(最可能因为网络正在恢复)或延迟
期满(这种情况下通道停止生存,可能重新创建),它都会变成可获取的 。通道的死亡推
迟时间的设置需要考虑很多因素,有IRC网络的规模,和网络通常断连的持续时间 。对
一个给定的IRC网络来说,这个时间在所有服务器上应该都是一样的 。
5.2安全通道
这篇文档介绍“安全通道”的概念 。这些通道前缀为字符‘!’,并且尽最大努力避
免此名字空间内的冲突 。冲突并不是不可能的,但是一般不会发生 。
5.2.1通道标识符
通道标识符是时间的一个函数 。当前时间被转换成五个字符的字符串,以
“ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890”为基数(每个字符都有一个十
进制的值,‘A’对应0到‘0’对应35) 。
因此通道标识符的周期为36^5秒(大概700天)
5.2.2通道延迟
这些通道必须服从5.1部分描述的“通道延迟”机制 。但是,这种机制被稍微改
进以运行得更好 。
服务器必须追踪由于网络断连而失去成员的通道,不管失去的用户是不是‘通道治理员’ 。
但是,这些通道从不变的不可获取,即使当它们为空时也可以加入 。
5.2.3滥用窗口
因为周期如此之长,对特定通道的攻击要很长时间才发生一次 。但是,假如有
运气和耐心的话,用户仍然可能引起通道冲突 。为了避免此类事情的发生,服务器必须
‘向长远看’,维持一个通道名字的列表,这些名字的标识符将来要用(比如在未来的几
天里) 。这样的列表应该保持小的规模,不应成为服务器要维持的负担,这些列表用来在
比通道延迟更长的时期内避免相同通道的再创建 。
最后一个服务器程序可能选择扩展这种程序,禁止短名相同的通道的创建(接着忽略通
道标识符) 。
5.2.4保持名字空间内的正常
5.2.2和5.2.3部分描述的机制的结合使用户很难令通道发生冲突 。但是,存在
另外一种形式的滥用,就是创建许多有相同短名但是不同标识符的通道 。为了防止其发
生,假如通道的短名和目前业已存在的通道相同,服务器就必须禁止这个通道的创建 。
5.2.5服务器Reop机制
当一个通道开放时间长于‘reop延迟’时间,并且通道设置了‘r’标志(参见
4.2.7(服务器reop标志)),IRC服务器有责任随机地将通道治理员地位赋给一些成员 。
下面描述目前的实现中为这种机制使用的逻辑 。服务器可能使用不同的逻辑,但是强烈
建议所有在一个IRC网络上的服务器使用相同的逻辑,以保证一致性和公正性 。基于相
同的原因,对一个给定的IRC网络,“reop延迟”的值在所有主机上都应一致 。同“通
道延迟”一样,“reop延迟”值的设置也应该考虑很多因素,包括IRC网络的规模,网
络断连通常的持续时间 。

推荐阅读