單機單網卡最大 tcp 長鏈接數是 65535 嗎

 

在Linux裏,若是是做爲客戶端或者負載均衡器的節點鏈接多個服務器,在connect()服務器以前,
調用bind()先綁定IP地址(一般是在多網卡的場景),即便使用bind(IP, port=0),
Kernel也會幫你選定一個端口。這樣就會出現只能使用~65k的鏈接。

直到Kernel 4.2版本,一個新的socket option IP_BIND_ADDRESS_NO_PORT的引入,這個問題纔算解決。
IP_BIND_ADDRESS_NO_PORT (since Linux 4.2)     

Inform the kernel to not reserve an ephemeral port when

usingbind(2) with a port number of 0. The port will later be auto‐ matically

chosen at connect(2) time, in a way that allows

sharing a source port as long as the 4-tuple is unique.

 

1.7版的haproxy開啓了IP_BIND_ADDRESS_NO_PORT支持 ,便可以複用source port,這樣能夠從更基礎的內核層面解決這個問題,惟一不足是須要將內核升級到4.2以上版本才能夠。
html

特殊網絡設備服務器

/dev/net/tun網絡

參考:
http://www.haproxy.org/download/1.7/src/CHANGELOG
https://kernelnewbies.org/Linux_4.2#head-8ccffc90738ffcb0c20caa96bae6799694b8ba3a
http://blog.sina.com.cn/s/blog_704836f40101jv9h.html

關於 TCP 併發鏈接的幾個思考題與試驗併發

相關文章
相關標籤/搜索