這明顯是進入了思維的誤區,65535是指可用的端口總數,并不代表服務器同時只能接受65535個并發連接。
我們做了一個網站,綁定的是TCP的80端口,結果是所有訪問這個網站的用戶都是通過服務器的80端口訪問,而不是其他端口。可見端口是可以復用的。
01
我們知道兩個進程如果需要進行通訊最基本的一個前提是:能夠唯一的標示一個進程。在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大。
能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了。socket(套接字)是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。
02
1.服務器的IP
2.服務器的Port
3.客戶端的IP
4.客戶端的Port
->你的主機IP地址是1.1.1.1,在8080端口監聽
->當一個來自2.2.2.2發來一條連接請求,端口為5555。這條連接的四元組為(1.1.1.1,8080,2.2.2.2,5555)
->這時2.2.2.2又發來第二條連接請求,端口為6666。新連接的四元組為(1.1.1.1,8080,2.2.2.2,6666)
那么,你主機的8080端口建立了兩條連接;
->(2.2.2.2)發來的第三條連接請求,端口為5555(或6666)。第三條連接的請求就無法建立,因為沒有辦法區分于上面兩條連接。
同理,可以在同一個端口號和IP地址上綁定一個TCPsocket和一個UDPsocket
因為端口號雖然一樣,但由于協議不一樣,所以端口是完全獨立的。
TCP/UDP一般采用五元組來定位一個連接:
source_ip,source_port,destination_ip,destination_port,protocol_type
即(源IP,源端口,目的IP,目的端口,協議號)
綜上所述,服務器的并發數并不是由TCP的65535個端口決定的。服務器同時能夠承受的并發數是由帶寬、硬件、程序設計等多方面因素決定的。
所以也就能理解淘寶、騰訊、頭條、百度、新浪、嗶嗶嗶嗶等為什么能夠承受住每秒種幾億次的并發訪問,是因為他們采用的是服務器集群。服務器集群分布在全國各地的大型機房,當訪問量小的時候會關閉一些服務器,當訪問量大的時候回不斷的開啟新的服務器。