一開始我無法理解,單機怎么可能實現(xiàn)百萬并發(fā)連接,因為系統(tǒng)可用端口數(shù)只有:65535 - 1024 = 64511,每個TCP連接需要占用一個獨立的端口,那最多也只能做到6W多并發(fā)連接。然而我忽視了一個很基本的問題,端口號在同一個IP下不能重復,但我們可以給一個網(wǎng)卡綁定多個IP地址,如果單機要主動發(fā)起100萬并發(fā)連接,我們最少需要使用17個IP地址。
TCP連接標識符
- src-ip
- src-port
- dest-ip
- dest-port
- protocol
TCP服務(wù)端SOCKET
TCP服務(wù)器監(jiān)聽在指定端口接收客戶端連接后,創(chuàng)建一個新的socket用于同客戶端進行讀寫數(shù)據(jù),但該socket并不需要也不會綁定一個新的端口,所以對于TCP服務(wù)器來說,不存在端口不夠用的情況,TCP服務(wù)器能夠保持多少個并發(fā)連接取決于服務(wù)器性能、內(nèi)存大小、帶寬大小以及服務(wù)器端設(shè)置(例如:進程能打開的文件數(shù)等)。以100W連接數(shù)為例,所需要總內(nèi)存大小大約為:1,000,00020K = 20G, 廣播一個1KB的消息需要占用的帶寬:1,000,0001K = 1000M,所需打開文件描述符1,000,000個。
對于TCP服務(wù)器連接數(shù)壓力測試來說,瓶頸在客戶端,因為每個客戶端要連接到TCP服務(wù)端需要使用一個本地端口,而對于一個IP地址來說,端口范圍就是:0-65536,其中還要一些端口被系統(tǒng)或其他程序使用。所以從一臺主機單個IP上發(fā)起同TCP服務(wù)器的連接數(shù)理論最大值為65535,當然我們可以給該主機綁定N個IP地址,同時從多個IP發(fā)起連接,所以理論上客戶端可以發(fā)起的連接數(shù)為:IP數(shù)*65535,這時客戶端的CPU、內(nèi)存和帶寬以及文件句柄資源就是限制。