拷貝黏貼
單機最大tcp
連線數
網路程式設計
在tcp
應用中,
server
事先在某個固定埠監聽,
client
主動發起連線,經過三路握手後建立
tcp連線。那麼對單機,其最大併發
tcp連線數是多少?
如何標識乙個tcp連線
在確定最大連線數之前,先來看看系統如何標識乙個tcp
連線。系統用乙個
4四元組來唯一標識乙個
tcp連線:。
client
最大tcp
連線數
client
每次發起
tcp連線請求時,除非繫結埠,通常會讓系統選取乙個空閒的本地埠(
local port
),該埠是獨佔的,不能和其他
tcp連線共享。
tcp埠的資料型別是
unsigned short
,因此本地埠個數最大只有
65536
,埠0
有特殊含義,不能使用,這樣可用埠最多只有
65535
,所以在全部作為
client
端的情況下,最大
tcp連線數為
65535
,這些連線可以連到不同的
server ip。
server
最大tcp
連線數
server
通常固定在某個本地埠上監聽,等待
client
的連線請求。不考慮位址重用(
unix
的so_reuseaddr
選項)的情況下,即使
server
端有多個
ip,本地監聽埠也是獨佔的,因此
server
端tcp連線4
元組中只有
remote ip
(也就是
client ip
)和remote port
(客戶端
port
)是可變的,因此最大
tcp連線為客戶端ip數
×客戶端
port
數,對ipv4
,不考慮
ip位址分類等因素,最大
tcp連線數約為2的
32次方(
ip數)×2的
16次方(
port
數),也就是
server
端單機最大
tcp連線數約為2的
48次方。
實際的tcp
連線數
上面給出的是理論上的單機最大連線數,在實際環境中,受到機器資源、作業系統等的限制,特別是sever
端,其最大併發
tcp連線數遠不能達到理論上限。在
unix/linux
下限制連線數的主要因素是記憶體和允許的檔案描述符個數(每個
tcp連線都要占用一定記憶體,每個
socket
就是乙個檔案描述符),另外
1024
以下的埠通常為保留埠。
在預設2.6
核心配置下,經過試驗,每個
socket
占用內存在
15~20k
之間。
影響乙個
socket
占用記憶體的引數包括:
rmem_max
wmem_max
tcp_rmem
tcp_wmem
tcp_mem
grep skbuff /proc/slabinfo
對server
端,通過增加記憶體、修改最大檔案描述符個數等引數,單機最大併發
tcp連線數超過
10萬 是沒問題的,國外
urban airship
公司在產品環境中已做到
50 萬併發 。在實際應用中,對大規模網路應用,還需要考慮
c10k
問題。
原文:
Windows 下單機最大TCP連線數
在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...
Windows 下單機最大TCP連線數
在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...
Windows 下單機最大TCP連線數
在做socket 程式設計時,我們經常會要問,單機最多可以建立多少個 tcp 連線,本文將介紹如何調整系統引數來調整單機的最大tcp連線數。windows 下單機的tcp連線數有多個引數共同決定,下面一一介紹 hkey local machine system currentcontrolset s...