基本介紹
- 中文名:網路斷裂
- 外文名:netsplit
簡介,示例,不當套用,
簡介
網上斷裂(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伺服器中通過時間戳解決,既只保留舊的。比如兩個用戶暱稱一樣,誰後使用這個暱稱誰就被斷開。又或者兩個頻道名字一樣,後創建的頻道中所有用戶的所有特權都會被取消。