Windows 下單機最大TCP連接數之設置

在做Socket 編程時,我們經常會要問,單機最多可以建立多少個 TCP 連接,本文將介紹如何調整系統參數來調整單機的最大TCP連接數

Windows下單機的TCP連接數有多個參數共同決定,下面一一介紹:

 

l        最大TCP連接數

[HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /Tcpip /Parameters]
TcpNumConnections = 0x00fffffe (Default = 16,777,214)

以上註冊表信息配置單機的最大允許的TCP連接數,默認爲 16M。這個數值看似很大,這個並不是限制最大連接數的唯一條件,還有其他條件會限制到TCP 連接的最大連接數。

 

l        最大動態端口數

TCP客戶端和服務器連接時,客戶端必須分配一個動態端口,默認情況下這個動態端口的分配範圍爲 1024-5000 ,也就是說默認情況下,客戶端最多可以同時發起3977 個Socket 連接。我們可以修改如下注冊表來調整這個動態端口的範圍

[HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /Tcpip /Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)

 

l        最大TCB 數量

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

系統的最大TCB數量由如下注冊表設置決定

[HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /Tcpip /Parameters]
MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)

非Server版本,MaxFreeTcbs 的默認值爲1000 (64M 以上物理內存)

Server 版本,這個的默認值爲 2000

也就是說,默認情況下,Server 版本最多同時可以建立並保持2000個TCP 連接。

 

l        最大TCB Hash table 數量

TCB 是通過Hash table 來管理的,下面註冊表設置決定了這個Hash table 的大小

HKEY_LOCAL_MACHINE /System /CurrentControlSet /services /Tcpip /Parameters]
MaxHashTableSize = 512 (Default = 512, Range = 64-65536)

這個值指明分配 pagepool 內存的數量,也就是說,如果MaxFreeTcbs = 1000 , 則 pagepool 的內存數量爲 500KB

那麼 MaxHashTableSize 應大於 500 纔行。這個數量越大,則Hash table 的冗餘度就越高,每次分配和查找 TCP  連接用時就越少。這個值必須是2的冪,且最大爲65536.

 

l        IBM WebSphere Voice Server 在windows server 2003 下的典型配置

這是IBM WebSphere Voice Server 的典型配置,大家可以做個參考。原文參見

IBM Web Sphere Voice Server 配置

  • MaxUserPort = 65534 (Decimal)
  • MaxHashTableSize = 65536 (Decimal)
  • MaxFreeTcbs = 16000 (Decimal)

這裏我們可以看到 MaxHashTableSize 被配置爲比MaxFreeTcbs 大4倍,這樣可以大大增加TCP建立的速度。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章