一台机器理论能支持的连接数
這里再補充一點小知識,理論上一臺機器能夠支撐多少個連接,有沒有同學知道??
首先,在確定最大連接數之前,大家先跟我來先了解一下系統如何標識一個tcp連接。系統用一個四元組來唯一標識一個TCP連接:(source_ip, source_port, destination_ip, destination_port)。即(源IP,源端口,目的IP,目的端口)四個元素的組合。只要四個元素的組合中有一個元素不一樣,那就可以區別不同的連接,?
比如: 你的IP地址是11.1.2.3, 在8080端口監聽?
那么當一個來自 22.4.5.6,端口為5555的連接到達后,那么建立的這條連接的四元組為 : (11.1.2.3, 8080, 22.4.5.6, 5555)?
這時,假設上面的那個客戶(22.4.5.6)發來第二條連接請求,端口為6666,那么,新連接的四元組為(11.1.2.3, 8080, 22.4.5.6, 5555)?
那么,你主機的8080端口建立了兩條連接;?
通常來說,服務端是固定一個監聽端口,比如8080,等待客戶端的連接請求。在不考慮地址重用的情況下,及時server端有多個ip,但是本地監聽的端口是獨立的。所以對于tcp連接的4元組中,如果destination_ip和destination_port不變。那么只有source_ip和source_port是可變的,因此最大的tcp連接數應該為 客戶端的ip數 乘以 客戶端的端口數。在IPV4中,不考慮ip分類等因素,最大的ip數為 2的32次方 ;客戶端最大的端口數為2的16次方,也就是65536.?也就是服務端單機最大的tcp連接數約為2的48次方。?
當然,這只是一個理論值,以linux服務器為例,實際的連接數還取決于?
1. 內存大小(因為每個TCP連接都要占用一定的內存)、?
2. 文件句柄限制,每一個tcp連接都需要占一個文件描述符,一旦這個文件描述符使用完了,新來的連接會返回一個“Can’t open so many files”的異常。如果大家知道對于操作系統最大可以打開的文件數限制,就知道怎么去調整這個限制?
a) 可以執行【ulimit -n】得到當前一個進程最大能打開1024個文件,所以你要采用此默認配置最多也就可以并發上千個TCP連接。?
b) 可以通過【vim /etc/security/limits.conf】去修改系統最大文件打開數的限制 c) 可以通過【cat /proc/sys/fs/file-max】查看linux系統級最大打開文件數限制,表示當前這個服務器最多能同時打開多少個文件?
*?
soft nofile 2048?
* hard?nofile 2048?
*?
表示修改所有用戶限制、soft/hard表示軟限制還是硬限制,2048表示修改以后的值?
當然,這塊還有其他很多的優化的點
3. 帶寬資源的限制?
總結?
基于http請求通信到tcp,再到tcp通信的原理以及IO阻塞這塊了解了通信的一些基本知識,如果對于這塊有感興趣的同學,可以去找再去找一些資料研究研究,實際上我們只需要掌握到我講解的程度就行。?
?
總結
以上是生活随笔為你收集整理的一台机器理论能支持的连接数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多路复用的好处
- 下一篇: http通信协议的基本原理