网络断裂

网络断裂netsplit)是流行于IRC社群中的一个术语,用来形容一个完整的虚拟IRC网络,当其实际的伺服器之间断线时,在频道中所发生的孤岛现象。这个现象只会发生在以多个伺服器运行单一网域的IRC网络,因为这些伺服器之间仍然需要实体的连线,甚至这些连线不是架设在LAN内,而是透过WAN和另一个地方、或另一个国家的伺服器沟通。由于Internet路由复杂、延迟(latency)等诸多因素,伺服器之间断线是极有可能发生的,并且由于IRC自身是采用无序的形式连接每一台伺服器,只要任何两台伺服器之间的连接断开便会将整个网络分裂成两大块。

在正常情况的网络irc.foo.bar.net能够维持各个伺服器之间的交流。
在网络分裂后,irc.foo.bar.net的四个伺服器中,A、B伺服器的客端无法和C、D伺服器交流。

事实上,所谓的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伺服器中通过时间戳解决,即只保留旧的。比如两个用户昵称一样,谁后使用这个昵称谁就被断开。又或者两个频道名字一样,后建立的频道中所有用户的所有特权都会被取消。