網路斷裂

網路斷裂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伺服器中通過時間戳解決,即只保留舊的。比如兩個使用者暱稱一樣,誰後使用這個暱稱誰就被斷開。又或者兩個頻道名字一樣,後建立的頻道中所有使用者的所有特權都會被取消。