跳至內容

網路斷裂

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
在正常情況的網路irc.foo.bar.net能夠維持各個伺服器之間的交流。
在網路分裂後,irc.foo.bar.net的四個伺服器中,A、B伺服器的客端無法和C、D伺服器交流。

網路斷裂netsplit)是流行於IRC社群中的一個術語,用來形容一個完整的虛擬IRC網路,當其實際的伺服器之間斷線時,在頻道中所發生的孤島現象。這個現象只會發生在以多個伺服器運行單一網域的IRC網路,因為這些伺服器之間仍然需要實體的連線,甚至這些連線不是架設在LAN內,而是透過WAN和另一個地方、或另一個國家的伺服器溝通。由於Internet路由複雜、延遲(latency)等諸多因素,伺服器之間斷線是極有可能發生的,並且由於IRC自身是採用無序的形式連接每一台服務器,只要任何兩台服務器之間的連接斷開便會將整個網絡分裂成兩大塊。

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