网络断裂
此条目没有列出任何参考或来源。 (2018年1月21日) |
网络断裂(netsplit)是流行于IRC社群中的一个术语,用来形容一个完整的虚拟IRC网络,当其实际的服务器之间断线时,在频道中所发生的孤岛现象。这个现象只会发生在以多个服务器运行单一网域的IRC网络,因为这些服务器之间仍然需要实体的连线,甚至这些连线不是架设在LAN内,而是透过WAN和另一个地方、或另一个国家的服务器沟通。由于Internet路由复杂、延迟(latency)等诸多因素,服务器之间断线是极有可能发生的,并且由于IRC自身是采用无序树的形式连接每一台服务器,只要任何两台服务器之间的连接断开便会将整个网络分裂成两大块。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Netsplit_intact.svg/400px-Netsplit_intact.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Netsplit_split.svg/400px-Netsplit_split.svg.png)
事实上,所谓的netsplit不只发生于IRC社交网络中,而是网络常见的现象。只是基于IRC客端的特性,netsplit比起其他的情况更容易被观察到。例如在分布式数据库中,架设在同一个网域的服务器也有可能产生netsplit,不过在客端上,由于服务的层级不同,我们很难看出应用程序的错误来自底层的数据库网络[谁?]。
示例
编辑服务器A、B、C、D都是独自运行的IRC服务器。在它们的底层连线则将它们之间的通信串连起来,并以一个irc.foo.bar.net网域服务器来指派。所以虽然user1和其他用户不同服务器,但在频道上也是看得到彼此,能够相互沟通的。事实上,跨越不同地区或国家的IRC服务器,对于一特定网络irc.foo.bar.net就是借由DNS直接指向该地区的IRC服务器。
在图标中,user1在连到一个虚拟网域irc.foo.bar.net之后,被导向服务器A,他的消息交由服务器A转交给user2-user5、服务器B、C、D,再由服务器各自转交给它们的客端。假如user15说话了,他的消息依照同样逻辑,发送到其他人的客端上。
假如服务器B和C之间的连线断掉了,user1-user10和user11-user20之间将会形成孤岛,这两个群体之间无法再以该网络途径进行交谈。具体上,用户会看到频道中的用户大批的离线,或者大批的加入(假如连线恢复的话)。虽然他们都属于irc.foo.bar.net,实则这个IRC网络已经成为破碎的状态。
网络断裂一明显的特征是管理用户ChanServ会离线,因为ChanServ这个服务通常是由一个master server提供的,并依频道的要求加入频道。
不当应用
编辑经常有用户通过IRC网络恢复时的数据合并问题进行一些操作,以此来获取某个频道的控制权,或者是加入某个私密频道。
例如上述例子中,有一个名为#foobar的频道,并且只有C、D两个服务器的用户加入了这个频道。当B、C连接断开,A、B两台服务器上没有任何一个用户在#foobar这个私密频道上,这个频道会在A、B服务器被注销,此时A、B服务器上某个用户可能会恶意建立这个频道,并且会获得这个频道的操作员权限。当B、C连接恢复,这个用户就会因为合并频道用户的关系被加入到这个私密频道中并成为频道操作员。
还有一个常见手法是昵称碰撞。同样使用上述例子,B、C连接断开后,A、B服务器上一个用户(攻击者)把自己的昵称改成和C、D服务器上某个人(受害者)的一样,随后B、C服务器重新连接。此时因为两个用户使用了同一个昵称,两个用户都被IRC服务器断开连接。此时攻击者迅速重新连接服务器,或者是更改自己到服务器的另一条连接所使用的昵称,以达到占用他人昵称的目的。
以上两个问题在多数现代的IRC服务器中通过时间戳解决,即只保留旧的。比如两个用户昵称一样,谁后使用这个昵称谁就被断开。又或者两个频道名字一样,后建立的频道中所有用户的所有特权都会被取消。