請注意,這里有兩個詞分別被我標記上了引號,一個是“理論”,一個是“65535”。強調“理論”這個詞,是想特別明確誤解者的意思:就是說,這個值是不可能被打破的,是鐵板釘丁的。而65535這個數字的由來,很多人想當然地將它與port最大值聯系起來。的確,TCP的端口數,最大值確實為65535。但是,這並不代表一個服務器可以接受的連接數就是這個值,很多人之所以把這兩個概念搞混淆是因為對socket和port沒有更深的認識和理解。我們先來回想一下服務器服務的先后過程:服務器創建監聽socket- >與對外服務的端口號綁定->開始listen->客戶端連接到服務器對應的port->服務器accept為新的客戶端產生新的socket->基於這個新的socket與客戶端交換數據。從以上流程來看,最大值為65535的“端口號”這個重要的東東,我們只用了一次,就是執行bind的時候!而以后創建的socket,說白了就是一個可以進行網絡IO操作的HANDLE而已,它跟端口號的牽扯僅限bind以及作為客戶端連接服務器的識別端口號的時候,一旦accept產生了socket,這個端口號,對服務器和新客戶端的通信而言就不再有任何意義。而服務器可承載的連接數最大量,不就是能產生多少個客戶端的socket嗎?這個socket值即使與端口號無關,又何來65535的“理論”上限?我再一次地將“理論”二字用引號括起,是因為在有的操作系統中,默認的配置會將socket最大值設定為65535,但這個值是可以改的!端口號僅僅是門牌地址,不能因為鳥巢體育場能容納10萬名觀眾就搞10萬個門牌號碼吧,那電話簿要多厚啊!
remark:端口和連接數是兩個不同的概念,連接數只和CPU處理能力、內存大小等有關。端口是OS用來標記進行通訊的進程的編號,用1個16位整數表示,故最大65535