[網路相關] Windows XP 10個連線數的迷思
我知道這是一個非常古老的議題,坊間也有許多的軟體可以修改這些限制。但為什麼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搜尋的時間,也不要讓自己電腦完全無法上網。



伺服器(Server)
可能是"像"Yahoo這樣的伺服器,如果在P2P環境上的話,它可能是任何一台電腦(你的電腦也可能會是)
我是寧願犧牲"可能無法上網"也要減少p2p搜尋時間的人^^
伺服器的連線數量並不是只能有 65536 個喔。會有這個誤解,可能是因為 Port 號最多只到 65536 的緣故吧?
雖然一個 Port 對外只能建立一個連線,所以一台電腦同時建立的對外連線數只有 65536 個沒錯。不過別忘了,伺服器是接受從外連入的連線,同一個 Port 可以與多台客戶端連線。否則,通常只走 Port 80 的網頁伺服器,豈不是同時只能接受一個連線?
被 DOS 攻擊的主機之所以會癱瘓,是因為 CPU 與 RAM 資源被過多的連線請求耗盡,或是被要求大量資訊而導致頻寬用盡,而不是同時連線數量被佔滿的緣故。
另一個反例是台灣最大 BBS 站批踢踢實業坊,其最大同時上站人數已經遠超過 65536,不過事實上整個站還是只有一台 Server 而已喔。
To C.H.Weng:
一時把這兩個東西搞混了 = = 也許我應該分開來說明會比較好
文章的部分已經修正了。 謝謝你的提醒
其實這個限制對一般電腦並沒什麼意義, 因為一般的電腦並不會架 Server...
倒不如作成一個選項, 懂得人可以自由修改那個數字
不懂的人不會去動
而不是做死成 10 個連線...微軟一堆博士都不知道在想啥
應該是避免那種惡意軟體在大家的電腦上故意開太多'半開連線syn-ack'給特定中毒電腦
然後中毒的電腦再發一堆syn signal造成一傳十,十傳百的癱瘓效應
就是因為不會架Server才換限制
不然怎麼會有windows server 的os呢?
會做成十個也不是博士生決定的
明明是版本的區隔和安全上的顧慮...
就如Gene說的這樣,雖然多數人的電腦都不是Server,但是只要連上網路的電腦都有可能被當作攻擊或者發動攻擊的機器。如果這個病毒一秒鐘可以發動10台電腦啟動SYN攻擊,而遭受攻擊的電腦也同樣的以這種方式擴散發動攻擊,不出一分鐘全世界的電腦、網路就會停擺了。 因此微軟這樣子作其實是經過慎重的考量的。
感謝Gene幫我回答了這個問題,昨天想要回但是都跑去弄其他事情了...:P
感謝站長,提供這篇口語易懂的文章,順便請教,
不知道經常使用P2P軟體的眾生們,連線數究竟該設定多少呢?
又或者什麼樣的條件下應該設定多少的連線數比較恰當呢?
這可能是更讓人關心的議題,再麻煩您開釋~
謝謝!
To Keigo:
其實連線數要設定多少並沒有一個準則。以我自己來說,我甚至沒有改過Windows XP的預設值(就保持10個),不過我倒是覺得連線速度也沒有很明顯的變慢。反正P2P嘛.....慢慢的!
這網站真的是蠻好玩的耶.什麻都教.要找電腦問題.來這就對了.真是一堆鬼才.佩服呀
謝謝您的三方交握資料,這個網站不錯喔,我的最愛
留言還缺你一個哦!
一週熱門
Facebook 粉絲團
最新文章
最新回應
主題分類
友站連結
贊助連結
授權模式
● 可自由引用本站文章
● 禁止全文轉貼
● 請清楚標示文章出處
● 勿隨意冒用、隱匿、覆蓋或以任何方式誤導文章之原始出處
聯絡我們
若您有任何問題,或者欲與我們合作,可透過以下方式與我們聯絡:
contact [at] soft4fun.net (請將 at 替換成 @ )
網站統計