TCP最大連接不止65535TCP
知識
04-10
問題
一個埠最多接受一個客戶端的65535個TCP連接?
原理
系統通過一個四元組來標識一條TCP連接,結構如:
在IPv4上, 本地IP和遠程IP是32位,本地埠和遠程埠為16位,即IP可以是2^32=4294967296,埠可以是2^16=65536。因此可以有TCP連接2^(32 16 32 16)=79228162514264337593543950336 個,這個是理論值。在IPv6上就更不用說了。
一個服務埠可以建立多少個TCP連接?
一個服務一般埠和IP是綁定的,因此能變的就是遠程IP和遠程埠,即可以建立 2^(32 16)=281474976710656 個TCP連接。
一個服務埠可以和一個客戶端建立多少個TCP連接?
對於服務端來說,確定的是本地IP和埠,一個客戶端表示遠程IP也是固定的,即可以建立 2^16 = 65536 TCP連接。(一般說的65535是不包含0,0不會用)
以上都是理論值。
實際
客戶端一般會有一些保留埠用於自身的服務,不用全部用於遠程連接,因此一般不會達到65535這個極限。
例如客戶端是windows操作系統,一般會有網路鄰居的服務等佔用埠。
cat /proc/sys/net/ipv4/ip_local_port_range
3276860999
註:前面要是偶數,後面要奇數,不然會有告警信息。
還有一些使用nat的網路環境,只有一個公網IP,也會限制客戶端建立TCP連接。
總結
一個埠最多接受一個客戶端的65535個TCP連接,這個主要看客戶端有沒有這麼多埠用,不是服務端的限制。
個人總結,有問題留言一起討論