單機最大的TCP串連數及其修改

來源:互聯網
上載者:User

                                                                                        單機最大的TCP串連數及其修改
一個誤解: 單個伺服器程式可承受最大串連數“理論”上是“65535” .

   65535這個數位由來,很多人想當然地將它與port最大值聯絡起來。的確,TCP的連接埠數,最大值確實為65535。但是,這並不代表一個伺服器可以接受的串連數就是這個值。很多人之所以把這兩個概念搞混淆是因為對socket和port沒有更深的認識和理解。我們先來回想一下伺服器服務的先後過程:
1、伺服器建立監聽socket
2、與對外服務的連接埠號碼綁定
3、開始listen
4、用戶端串連到伺服器對應的port
5、伺服器accept為新的用戶端產生新的socket
6、基於這個新的socket與用戶端交換資料。
從以上流程來看,最大值為65535的“連接埠號碼”這個重要的東東,我們只用了一次,就是執行bind的時候!而以後建立的socket,說白了就是一個可以進行網路IO操作的HANDLE而已。通過查看該HANDLE的RemoteEndPoint能查看到遠程用戶端串連的IP和連接埠號碼(注意,該連接埠是遠程用戶端的連接埠),查看該HANDLE的LocalEndPoint能看到該Socket的Ip和連接埠就是該服務綁定的IP和連接埠。所以,accept的socket值與連接埠號碼無關,又何來65535的“理論”上限?

好了,已經弄明白了伺服器端接收的用戶端串連串連數不受最大連接埠號碼65535的限制。但是,在用戶端,應用程式最多可以建立多少個TCP串連呢?以及如何調整系統參數來調整單機的最大TCP串連數。

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

最大TCP串連數
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
TcpNumConnections = 0x00fffffe (Default = 16,777,214)

 

以上註冊表資訊配置單機的最大允許的TCP串連數,預設為 16M。這個數值看似很大,這個並不是限制最大串連數的唯一條件,還有其他條件會限制到TCP 串連的最大串連數。

最大動態連接埠數
TCP用戶端和伺服器串連時,用戶端必須分配一個動態連接埠,預設情況下這個動態連接埠的分配範圍為 1024-5000 ,也就是說預設情況下,用戶端最多可以同時發起3977 個Socket 串連。我們可以修改如下註冊表來調整這個動態連接埠的範圍

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

 

最大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 串連。

最大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.

 

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建立的速度。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.