1. 對於服務器,每一個tcp連接都要占一個文件描述符,一旦這個文件描述符使用完了,就會返回錯誤。
我們知道操作系統上端口號1024以下是系統保留的,從1024-65535是用戶使用的。由於每個TCP連接都要占一個端口號,所以我們最多可以有60000多個並發連接?但是事實並不是這樣。
我們還知道對於TCP連接是由:原IP,原端口,目的IP,目的端口。但是監聽server端TCP連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因為它是固定在本地的端口上去監聽,所以最大TCP連接為:客戶端ip數×客戶端port數
2. 而對於客戶端,網絡通信過程中服務端監聽一個固定的端口,客戶端主動發起連接請求后要經過三次握手才能與服務器建立起一個TCP連接.客戶端每次發起一個TCP連接時,系統會隨機選取一個空閑的端口,該端口是獨占的不能與其他TCP連接共享,因此理論上一台機器有多少空閑的端口,就能對外發起多少個TCP連接。根據TCP/IP協議,端口port使用16位無符號整數unsigned short來存儲,因此本地端口一共有2^16=65536個,即0-65535,其中0~1023是預留端口,0有特殊含義不能使用,1024以下端口都是超級管理員用戶(如root)才可以使用,因此就算使用root權限,一台機器最多能使用的端口也只有65535個。但是一台機器最多只能利用28232個端口。具體的細節解釋可以看這里https://www.jianshu.com/p/c77e7026531a