03.26 TCP服務器和客戶端最大連接數

TCP服務器和客戶端最大連接數

只要資源 (內存硬盤cpu)足夠,理論上可以接收無限個鏈接。所謂65535的限制,是針對客戶端的,客戶機每鏈接一個服務,就必須開一個tcp端口與之對應。這樣,鏈接到65535個服務後,本地端口就被佔滿。服務端口僅僅使用一個。一個tcp鏈接,是四個元素決定的,server IP:port+client IP:port。

對於服務器,每一個tcp連接都要佔一個文件描述符,一旦這個文件描述符使用完了,就會返回錯誤。

我們知道操作系統上端口號1024以下是系統保留的,從1024-65535是用戶使用的。由於每個TCP連接都要佔一個端口號,所以我們最多可以有60000多個併發連接?但是事實並不是這樣。

我們還知道對於TCP連接是由:原IP,原端口,目的IP,目的端口。但是監聽server端TCP連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因為它是固定在本地的端口上去監聽,所以最大TCP連接為:客戶端ip數×客戶端port數

而對於客戶端,網絡通信過程中服務端監聽一個固定的端口,客戶端主動發起連接請求後要經過三次握手才能與服務器建立起一個TCP連接.客戶端每次發起一個TCP連接時,系統會隨機選取一個空閒的端口,該端口是獨佔的不能與其他TCP連接共享,因此理論上一臺機器有多少空閒的端口,就能對外發起多少個TCP連接。

根據TCP/IP協議,端口port使用16位無符號整數unsigned short來存儲,因此本地端口一共有2^16=65536個,即0-65535,其中0~1023是預留端口,0有特殊含義不能使用,1024以下端口都是超級管理員用戶(如root)才可以使用,因此就算使用root權限,一臺機器最多能使用的端口也只有65535個。但是一臺機器最多隻能利用28232個端口。

拓展

端口號範圍限制?

操作系統上端口號1024以下是系統保留的,從1024-65535是用戶使用的。

最大動態端口數 MaxUserPort (Default = 5000, Max = 65534) TCP客戶端和服務器連接時,客戶端必須分配一個動態端口,默認情況下這個動態端口的分配範圍為 1024-5000 ,也就是說默認情況下,客戶端最多可以同時發起3977 Socket 連接

最大TCB 數量 MaxFreeTcbs

系統為每個TCP 連接分配一個TCP 控制塊(TCP control block or TCB),這個控制塊用於緩存TCP連接的一些參數,每個TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就說,每個TCP連接會佔用 1KB 的系統內存。

非Server版本,MaxFreeTcbs 的默認值為1000 (64M 以上物理內存)Server 版本,這個的默認值為 2000。也就是說,默認情況下,Server 版本最多同時可以建立並保持2000個TCP 連接。

最大TCB Hash table 數量 MaxHashTableSize TCB 是通過Hash table 來管理的。

這個值指明分配 pagepool 內存的數量,也就是說,如果MaxFreeTcbs = 1000 , 則 pagepool 的內存數量為 500KB那麼 MaxHashTableSize 應大於 500 才行。這個數量越大,則Hash table 的冗餘度就越高,每次分配和查找 TCP 連接用時就越少。這個值必須是2的冪,且最大為65536.


分享到:


相關文章: