精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux的TCP連接數量最大不能超過65535?

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-03-17 11:41 ? 次閱讀

最大并發tcp連接數是多少呢?

首先,問題中描述的65535個連接指的是客戶端連接數的限制。

在tcp應用中,server事先在某個固定端口監聽,client主動發起連接,經過三次握手后建立tcp連接。那么對單機,其最大并發tcp連接數是多少呢?

如何標識一個TCP連接

在確定最大連接數之前,先來看看系統如何標識一個tcp連接。系統用一個4四元組來唯一標識一個TCP連接:{localip, localport,remoteip,remoteport} = {本地ip,本地port,遠程ip,遠程port}

client最大tcp連接數

client每次發起tcp連接請求時,除非綁定端口,通常會讓系統選取一個空閑的本地端口(local port),該端口是獨占的,不能和其他tcp連接共享。tcp端口的數據類型是unsigned short,因此本地端口個數最大只有65536,端口0有特殊含義,不能使用,這樣可用端口最多只有65535,所以在全部作為client端的情況下,一個client最大tcp連接數為65535,這些連接可以連到不同的serverip。

server最大tcp連接數

server通常固定在某個本地端口上監聽,等待client的連接請求。不考慮地址重用(unix的SO_REUSEADDR選項)的情況下,即使server端有多個ip,本地監聽端口也是獨占的,因此server端tcp連接4元組中只有remoteip(也就是clientip)和remote port(客戶端port)是可變的,因此最大tcp連接為客戶端ip數×客戶端port數,對IPV4,不考慮ip地址分類等因素,最大tcp連接數約為2的32次方(ip數)×2的16次方(port數),也就是server端單機最大tcp連接數約為2的48次方。

實際的tcp連接數

上面給出的是理論上的單機最大連接數,在實際環境中,受到機器資源、操作系統等的限制,特別是sever端,其最大并發tcp連接數遠不能達到理論上限。在unix/linux下限制連接數的主要因素是內存和允許的文件描述符個數(每個tcp連接都要占用一定內存,每個socket就是一個文件描述符),另外1024以下的端口通常為保留端口。

所以,對server端,通過增加內存、修改最大文件描述符個數等參數,單機最大并發TCP連接數超過10萬,甚至上百萬是沒問題的。

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

舉個例子:

我們做了一個網站,綁定的是TCP的80端口,結果是所有訪問這個網站的用戶都是通過服務器的80端口訪問,而不是其他端口。可見端口是可以復用的。

fde3125a-c426-11ed-bfe3-dac502259ad0.jpg

即使Linux服務器只在80端口偵聽服務, 也允許有10萬、100萬個用戶連接服務器。Linux系統不會限制連接數至于服務器能不能承受住這么多的連接,取決于服務器的硬件配置、軟件架構及優化。

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

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

能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了。socket(套接字)是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用以實現進程在網絡中通信。

fe028f0e-c426-11ed-bfe3-dac502259ad0.jpg

socket源自Unix,是一種"打開—讀/寫—關閉"模式的實現,服務器和客戶端各自維護一個"文件",在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。

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

服務器的IP

服務器的Port

客戶端的IP

客戶端的Port

服務器的IP和Port可以保持不變,只要客戶端的IP和Port彼此不同就可以確定一個連接數。

fe269e94-c426-11ed-bfe3-dac502259ad0.jpg

一個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地址上綁定一個TCP socket和一個UDP socket因為端口號雖然一樣,但由于協議不一樣,所以端口是完全獨立的。TCP/UDP一般采用五元組來定位一個連接:source_ip, source_port, destination_ip, destination_port, protocol_type即(源IP,源端口,目的IP,目的端口,協議號)

綜上所述,服務器的并發數并不是由TCP的65535個端口決定的。服務器同時能夠承受的并發數是由帶寬、硬件、程序設計等多方面因素決定的。

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

轉載自 https://blog.csdn.net/daocaokafei/article/details/115410761

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

65535從哪來的,干啥的?

fe46db1e-c426-11ed-bfe3-dac502259ad0.jpg

要解釋好這個問題,就要先說清楚65535的含義。在Linux系統中,如果兩個機器要通信,那么相互之間需要建立TCP連接,為了讓雙方互相認識,Linux系統用一個四元組來唯一標識一個TCP連接:{local ip, local port, remote ip, remote port},即本機IP、本機端口、遠程IP、遠程端口,IP和端口就相當于小區地址和門牌號,只有拿到這些信息,通信的雙方才能互相認知。在Linux系統中,表示端口號(port)的變量占16位,這就決定了端口號最多有2的16次方個,即65536個,另外端口0有特殊含義不給使用,這樣每個服務器最多就有65535個端口可用。因此,65535代表Linux系統支持的TCP端口號數量,在TCP建立連接時會使用。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

TCP怎么建立連接,與端口號是什么關系?

Linux服務器在交互時,一般有兩種身份:客戶端或者服務器端。典型的交互場景是:(1)服務器端主動創建監聽的socket,并綁定對外服務端口port,然后開始監聽(2)客戶端想跟服務器端通信時,就開始連接服務器的端口port(3)服務端接受客戶端的請求,然后再生成新的socket(4)服務器和客戶端在新的socket里進行通信

可以看到,端口port主要用在服務器和客戶端的“握手認識”過程,一旦互相認識了,就會生成新的socket進行通信,這時候port就不再需要了,可以給別的socket通信去使用,所以很明顯TCP連接的數量可以大于TCP端口號的數量65,535。

考慮一下兩個極端場景,即某臺Linux服務器只作為客戶端或者服務器端(1)Linux服務器只作為客戶端

這時候每發起一個TCP請求,系統就會指定一個空閑的本地端口給你用,而且是獨占式的,不會被別的TCP連接搶走,這樣最多可以建立65535個連接,每個連接都與不同的服務器進行交互。這種場景,就是題主所描述的樣子,但是由于條件過于苛刻,屬于小概率事件,所以更多的還是理論上的可能,現實的環境中幾乎不會出現。

(2)Linux服務器只作為服務端

這種場景下,服務端就會固定的監聽本地端口port,等著客戶端來向它發起請求。為了計算簡單,我們假設服務器端的IP跟端口是多對一的,這樣TCP四元組里面就有remote ip和remote port是可變的,因此最大支持創建TCP個數為2的32次方(IP地址是32位的)乘以2的16次方(port是16位的)等于2的48次方。

現實中單臺Linux服務器支持的TCP連接數量通過前面的分析我們知道,在現實場景中,由于存在端口port復用的情況,服務器可同時支持的TCP連接數跟65535沒有一一對應關系,事實上,真正影響TCP連接數量的,是服務器的內存以及允許單一進程同時打開文件的數量,因為每創建一個TCP連接都要創建一個socket句柄,每個socket句柄都占用一部分系統內存,當系統內存被占用殆盡,允許的TCP并發連接數也就到了上限。一般來講,通過增加服務器內存、修改最大文件描述符個數等,可以做到單臺服務器支持10萬+的TCP并發。

fe56102a-c426-11ed-bfe3-dac502259ad0.jpg

當然,在真實的商用場景下,單臺服務器都會編入分布式集群,通過負載均衡算法動態的調度不同用戶的請求給最空閑的服務器,如果服務器平均內存使用超過80%的警戒線,那么就會及時采用限流或者擴展集群的方式來保證服務,絕對不會出現服務器的內存被耗盡的情況,那樣就算事故了。

總之,65535只是Linux系統中可使用端口port數量的上限,端口port數量與TCP連接數量并非完全一一對應的關系,服務器支持的TCP并發連接數量主要跟服務器的內存以及允許單個進程同時打開的文件數量有關系,通過端口復用及調整服務器參數等手段,單臺服務器支持的TCP并發連接數是可以高于65535的。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11229

    瀏覽量

    208931
  • 服務器
    +關注

    關注

    12

    文章

    9021

    瀏覽量

    85185
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1350

    瀏覽量

    78987

原文標題:Linux的TCP連接數量最大不能超過65535?那服務器是如何應對百萬千萬的并發的?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何標識一個TCP連接

    tcp應用中,server事先在某個固定端口監聽,client主動發起連接,經過三路握手后建立tcp連接。那么對單機,其最大并發
    的頭像 發表于 10-10 10:33 ?2894次閱讀

    請問如何增加CYW43455的最大LE連接數

    平臺:樹莓派 4 芯片:cyw43455 在環境上測試后,LE 連接數量為 5 個設備。 順便說一句,連接的設備是筆記本電腦和手機。 如何增加CYW43455的最大LE
    發表于 02-29 07:29

    ESP32-C3超過最大站點連接數如何解決?

    C3為服務端,一個設備不停的斷開連接再重新連接C3,站點數也會增加,在斷開連接時并不會減少站點數.導致多次以后,超過最大站點
    發表于 06-20 08:23

    TAS5717的MCLK如果是12.288MHZ,這個頻率的上下誤差最大不能超過多少呢?

    TAS5717的MCLK如果是12.288MHZ,這個頻率的上下誤差最大不能超過多少?
    發表于 11-05 08:23

    使用CYW20706怎么實現最大連接數

    sensor.3232i獲得吞吐量的損失不能連接超過4傳感器沒有至少一sensor.6464i獲得吞吐量的損失不能超過4固定連接沒有至少一個
    發表于 10-08 16:18

    使用STM32F107網絡來傳輸ov7670視頻數據長度不能超過65535嗎?

    _write(struct tcp_pcb *pcb, const void *data, u16_t len, u8_t apiflags)這個函數的里數集長度為 u16_t類型 也就是數據長度不能超過65535
    發表于 12-28 09:12

    請問TAS5717的MCLK是12.288MHZ那頻率的上下誤差最大不能超過多少?

    TAS5717的MCLK如果是12.288MHZ,這個頻率的上下誤差最大不能超過多少?
    發表于 08-06 10:49

    LinuxTCP Server最大連接數是多少?

    無論是Linux還是Windows作為服務器都可以支持眾多的Client的長連接,例如我實驗的在單臺I7 4790+8G內存的機器上搭建的服務器可以支持90W個連接沒有問題,但是在ARM Li
    發表于 05-17 23:30

    關于單片機位數的思考(8位、16位、32位)精選資料分享

    參與運算的數據最大不能超過255。而16位機的字長是16位,其數據表達范圍是0~65535,即每次參與運算的數據最大不能超過65535;32位單片機的字長是32位,其數據表達范圍是0~
    發表于 07-15 09:01

    TCP/IP在單次并行循環里,穩定使用的最大并發數量上限確認及優化問題

    漏接收報文,連接數量再多的情況會出現丟幀和亂碼情況。電腦是八核1.6Ghz的CPU。各位有好的思路優化或者其它建議么?
    發表于 04-06 09:32

    ESP32-C3-MINI socket連接,超過最大站點連接數,請問有什么解決辦法嗎?

    C3為服務端,一個設備不停的斷開連接再重新連接C3,站點數也會增加,在斷開連接時并不會減少站點數.導致多次以后,超過最大站點
    發表于 02-20 09:02

    影響無線路由器的最大連接數因素分析

     路由器的設置,比如路由器存在默認的最大連接數設置,以及可以編輯的最大連接數,大于限制以外的節點不被關聯。
    發表于 01-27 16:36 ?3253次閱讀
    影響無線路由器的<b class='flag-5'>最大連接數</b>因素分析

    預計到2025年授權的低功率蜂窩連接數量將增至9億

    Strategy Analytics物聯網戰略服務最新發布的研究報告《物聯網授權的低功率蜂窩連接按垂直市場劃分》預測,盡管在中國境外啟動緩慢,但到2025年,授權的低功率LPWA連接數量將增長到近9億,這將大大超過同期的未授權的
    的頭像 發表于 06-15 16:22 ?1936次閱讀

    我國移動物聯網連接數超過“人對人”連接的手機用戶數量

      據工業和信息化部最新統計,截至8月底,中國移動物聯網連接數量達到16.98億,首次超過代表“人對人”連接的手機用戶數量(16.78億)。
    的頭像 發表于 09-23 17:37 ?1427次閱讀

    單臺服務器支持的TCP并發連接數

    總之,65535只是Linux系統中可使用端口port數量的上限,端口port數量TCP連接數量
    的頭像 發表于 11-06 19:36 ?1560次閱讀