色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

linux的TCP連接數量最大不能超過65535個嗎,那服務器是如何應對百萬千萬的并發的?

方一強2年前17瀏覽0評論

這明顯是進入了思維的誤區,65535是指可用的端口總數,并不代表服務器同時只能接受65535個并發連接。

舉個例子:

我們做了一個網站,綁定的是TCP的80端口,結果是所有訪問這個網站的用戶都是通過服務器的80端口訪問,而不是其他端口。可見端口是可以復用的。即使Linux服務器只在80端口偵聽服務,也允許有10萬、100萬個用戶連接服務器。Linux系統不會限制連接數至于服務器能不能承受住這么多的連接,取決于服務器的硬件配置、軟件架構及優化。

01

我們知道兩個進程如果需要進行通訊最基本的一個前提是:能夠唯一的標示一個進程。在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大。

這時候就需要另辟它徑了,IP地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機的一個進程,這樣可以利用IP地址+協議+端口號唯一標示網絡中的一個進程。

能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了。socket(套接字)是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。socket源自Unix,是一種"打開—讀/寫—關閉"模式的實現,服務器和客戶端各自維護一個"文件",在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。

02

唯一能夠確定一個連接有4個東西:

1.服務器的IP

2.服務器的Port

3.客戶端的IP

4.客戶端的Port

服務器的IP和Port可以保持不變,只要客戶端的IP和Port彼此不同就可以確定一個連接數。一個socket是可以建立多個連接的,一個TCP連接的標記為一個四元組(source_ip,source_port,destination_ip,destination_port),即(源IP,源端口,目的IP,目的端口)四個元素的組合。只要四個元素的組合中有一個元素不一樣,那就可以區別不同的連接。

舉個例子:

->你的主機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個端口決定的。服務器同時能夠承受的并發數是由帶寬、硬件、程序設計等多方面因素決定的

所以也就能理解淘寶、騰訊、頭條、百度、新浪、嗶嗶嗶嗶等為什么能夠承受住每秒種幾億次的并發訪問,是因為他們采用的是服務器集群。服務器集群分布在全國各地的大型機房,當訪問量小的時候會關閉一些服務器,當訪問量大的時候回不斷的開啟新的服務器。


以上個人淺見,歡迎批評指正。

認同我的看法,請點個贊再走,感謝!

喜歡我的,請關注我,再次感謝!