我知道這是一個非常古老的議題,坊間也有許多的軟體可以修改這些限制。但為什麼Windows XP SP2要做這樣的設定?雖然在許多討論區上面都有熱心的網友們解答,但很遺憾的…網友們的解答多數都不是完全正確,一個不小心就會讓各位朋友的電腦癱瘓在網路上。 基於愛與正義的原則,「硬」站不能眼睜睜的看著大家被打攤在網路上(網路是大家的命!!),所以這篇文章就是要用非~~常口語話的方式來說明這整件事情的來龍去脈。
淺談TCP/IP
對於非資訊領域的人來說,這個名詞也許有點陌生,但是卻又不一定那麼陌生(有關注過這個議題的朋友們就更有印象了)。TCP/IP是構成網際網路形成的「通訊協定」的組合,所謂「通訊協定」就是為了要讓網路上所有的設備、電腦都能夠用「相同的語言」進行通訊,因此就訂定了一個「協定」,讓大家都講同樣的話,就像現在大家都要學英文一樣。
TCP/IP是由兩個協定所組成,不過為了避免大家睡著,所以就不討論這個話題,知道就好了!
網路怎麼建立連線?
我們用一張簡單的圖描述一下網路連線建立的流程。
圖中有兩個角色:
- 客戶端(Client)
這可能是你執行的任何網路程式,如:IE、Firefox、FlashGet或BitComet等等。
- 伺服器(Server)
可能是向Yahoo這樣的伺服器,如果在P2P環境上的話,它可能是任何一台電腦(你的電腦也可能會是)
建立連線的方式在資訊領域的用語叫做「三方交握」,流程是這樣子的:
- 「客戶端」向「伺服器」發送一個「SYN」訊息,告訴伺服器「我想跟你連線」
- 「伺服器」準備好以後,就會回傳一個「SYN-ACK」訊息,告訴客戶端「我準備好了,你可以連線」
- 「客戶端」準備好以後,會再向「伺服器」發送一個「ACK」訊號,告訴伺服器「我要開始跟你傳送資料了」
- 接著,資料就會如長江黃河一般滔滔不絕的傳送….直到地老天荒
Windows XP SP2限制只能有10個TCP/IP連線?
這句話只說對了一半,因為XP SP2限制的10個連線數量是指「半開(half-open)」的連線,所謂的「半開」是指在步驟2時,伺服器端收到客戶端發送的訊息以後,會先開啟一個連線等待客戶端連線,在客戶端還沒回應ACK訊息之前就叫做「半開」連線。
那麼為什麼XP SP2要限制「半開連線」的數量呢?這是因為有一種阻斷服務(Denail Of Service, DOS)攻擊,利用TCP/IP三方交握的連線程序,故意不回傳「ACK」訊號給伺服器,並且大量的傳送「SYN」訊號,使伺服器開啟了一堆沒有用的連線,且伺服器會配置部分的資源給予這些連線,當連線所占用的資源超過伺服器的負荷以後,這台伺服器就無法繼續提供服務,其他人也就無法連入了。(感謝C.H.Weng提醒)
Windows XP SP2 的設計就是為了避免惡意的大量「SYN」訊號傳入電腦,因此限制每秒最多只能有10個「半開」連線。如果最後客戶端有回應「ACK」訊號以後,表示連線已經完成建立,就不再受10個連線數量的限制。
微軟故意要扼殺了P2P軟體的發展?
前一小節我們說明了Windows XP SP2 限制連線的原因。但由於P2P網路本身的特性使得回應速度較一般網路架構慢,在大量的查詢時會有較高的機會發生「半開連線」,因此會造成P2P軟體的效能降低也是無可避免的。但應用軟體千百種,P2P軟體只是其中的一種應用,微軟為了顧全「大局」,因此才會做了這樣子的限制。
建議
在一些討論區上面看到有朋友建議用修改程式將連線數量修改為一個很大的數字,我們非常的不建議這樣子的做法,因為你將會有機會遭受到惡意的攻擊而無法連上網路。因此,建議各位在修改連線數量時,是逐量的將連線數量往上調整,寧願損失幾秒鐘P2P搜尋的時間,也不要讓自己電腦完全無法上網。