網路斷裂

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