在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內(nèi)不再提示

如何標識一個TCP連接

jf_TEuU2tls ? 來源:浩道linux ? 作者:浩道linux ? 2022-10-10 10:33 ? 次閱讀

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

在tcp應用中,server事先在某個固定端口監(jiān)聽,client主動發(fā)起連接,經(jīng)過三路握手后建立tcp連接。那么對單機,其最大并發(fā)tcp連接數(shù)是多少呢?

如何標識一個TCP連接

在確定最大連接數(shù)之前,先來看看系統(tǒng)如何標識一個tcp連接。系統(tǒng)用一個4四元組來唯一標識一個TCP連接:{localip, localport,remoteip,remoteport}。

client最大tcp連接數(shù)

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

server最大tcp連接數(shù)

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

實際的tcp連接數(shù)

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

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

這明顯是進入了思維的誤區(qū),65535是指可用的端口總數(shù),并不代表服務器同時只能接受65535個并發(fā)連接。
舉個例子:

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

28bf9980-47b3-11ed-a3b6-dac502259ad0.jpg

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

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

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

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

28df0b44-47b3-11ed-a3b6-dac502259ad0.jpg

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

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

服務器的IP

服務器的Port

客戶端的IP

客戶端的Port

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

291ae2f4-47b3-11ed-a3b6-dac502259ad0.jpg

一個socket是可以建立多個連接的,一個TCP連接的標記為一個四元組(source_ip, source_port, destination_ip, destination_port),即(源IP,源端口,目的IP,目的端口)四個元素的組合。只要四個元素的組合中有一個元素不一樣,那就可以區(qū)別不同的連接。

舉個例子:

你的主機IP地址是1.1.1.1, 在8080端口監(jiān)聽

當一個來自 2.2.2.2 發(fā)來一條連接請求,端口為5555。這條連接的四元組為(1.1.1.1, 8080, 2.2.2.2, 5555)

這時2.2.2.2又發(fā)來第二條連接請求,端口為6666。新連接的四元組為(1.1.1.1, 8080, 2.2.2.2, 6666)

那么,你主機的8080端口建立了兩條連接;

(2.2.2.2)發(fā)來的第三條連接請求,端口為5555(或6666)。第三條連接的請求就無法建立,因為沒有辦法區(qū)分于上面兩條連接。

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

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

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

65535從哪來的,干啥的?

29462a4a-47b3-11ed-a3b6-dac502259ad0.jpg

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

TCP怎么建立連接,與端口號是什么關(guān)系?

297f960e-47b3-11ed-a3b6-dac502259ad0.jpg

Linux服務器在交互時,一般有兩種身份:客戶端或者服務器端。典型的交互場景是:

服務器端主動創(chuàng)建監(jiān)聽的socket,并綁定對外服務端口port,然后開始監(jiān)聽

客戶端想跟服務器端通信時,就開始連接服務器的端口port

服務端接受客戶端的請求,然后再生成新的socket

服務器和客戶端在新的socket里進行通信

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

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

(1)Linux服務器只作為客戶端

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

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

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

現(xiàn)實中單臺Linux服務器支持的TCP連接數(shù)量

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

29a002ae-47b3-11ed-a3b6-dac502259ad0.jpg

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

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

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關(guān)注

    關(guān)注

    12

    文章

    9615

    瀏覽量

    87049
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7032

    瀏覽量

    124769
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1395

    瀏覽量

    80190
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    1011

    瀏覽量

    32658

原文標題:【有點意思】一臺服務器?最大并發(fā) TCP 連接數(shù)多少?

文章出處:【微信號:浩道linux,微信公眾號:浩道linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    TCP和UDP建立連接的差異和可靠性的差異

    TCP 建立連接需要經(jīng)過三次握手,同時 TCP 斷開連接需要經(jīng)過四次揮手,這也表示 TCP
    發(fā)表于 09-02 16:10 ?920次閱讀

    TCP client例程連接采集板連接不上

    我使用TCP client例程連接網(wǎng)絡調(diào)試助手可以連通,但是連接采集板連接不上,總是超時,對
    發(fā)表于 09-02 14:11

    基于WRED協(xié)議的TCP連接初始化的優(yōu)化方法

    針對數(shù)據(jù)中心中由于SYN包丟失而引起的TCP連接被延遲從而錯過任務時間限制的問題,在無需更換現(xiàn)有設(shè)備以及無需修改應用和TCP的前提下,提出種基于加權(quán)隨機早期檢測(WRED)協(xié)議的
    發(fā)表于 11-29 14:18 ?0次下載
    基于WRED協(xié)議的<b class='flag-5'>TCP</b><b class='flag-5'>連接</b>初始化的優(yōu)化方法

    大神告訴你TCP建立連接為什么是三次握手

    所謂三次握手(Three-Way Handshake)即建立TCP連接,是指建立TCP連接
    的頭像 發(fā)表于 04-16 11:43 ?1.1w次閱讀
    大神告訴你<b class='flag-5'>TCP</b>建立<b class='flag-5'>連接</b>為什么是三次握手

    TCP, ISO- on- TCP, UDP連接

    TSEND“ & ?TRCV “ 發(fā)送和接收數(shù)據(jù)(TCP 和ISO - on- TCP)?TUSEND“ & ?TURCV“ 發(fā)送和接收數(shù)據(jù)(UDP) 自動連接管理的通訊塊( 僅用于S7- 1200)
    的頭像 發(fā)表于 06-12 15:11 ?5329次閱讀
    <b class='flag-5'>TCP</b>, ISO- on- <b class='flag-5'>TCP</b>, UDP<b class='flag-5'>連接</b>

    TCP連接可以對應幾個HTTP請求的原理

    TCP 連接中 HTTP 請求發(fā)送可以起發(fā)送么(比如起發(fā)三
    發(fā)表于 09-22 10:26 ?1244次閱讀

    如何使用Netcat命令建立和測試TCP和UDP連接

    Netcat或nc是命令行程序,它使用TCP或UDP協(xié)議通過網(wǎng)絡連接讀取和寫入數(shù)據(jù)。
    的頭像 發(fā)表于 12-12 17:39 ?7834次閱讀

    TCP連接可以發(fā)多少HTTP請求?

    持久連接:既然維持 TCP 連接好處這么多,HTTP/1.1 就把 Connection 頭寫進標準,并且默認開啟持久連接,除非請求中寫明 Connection: close,那么瀏覽
    的頭像 發(fā)表于 12-19 15:15 ?895次閱讀

    什么是Socket連接?Socket與TCP連接的關(guān)系

    主機 A 的應用程序必須通過 Socket 建立連接才能與主機B的應用程序通信,而建立 Socket 連接需要底層 TCP/IP 協(xié)議來建立 TCP
    發(fā)表于 03-31 15:10 ?1245次閱讀

    TCP狀態(tài)機設(shè)計與實現(xiàn)

    TCP狀態(tài)機是TCP連接的變化過程。TCP在三次握手和四次揮手的過程,就是
    的頭像 發(fā)表于 04-21 11:47 ?2063次閱讀
    <b class='flag-5'>TCP</b>狀態(tài)機設(shè)計與實現(xiàn)

    什么是Socket連接?與TCP連接有什么關(guān)系?

    什么是Socket連接?它與TCP連接有什么關(guān)系? 計算機網(wǎng)絡是我們?nèi)粘I钪胁豢苫蛉钡?b class='flag-5'>一部分,而Socket連接則是網(wǎng)絡通信中必不可少的
    的頭像 發(fā)表于 05-23 11:43 ?925次閱讀

    TCP連接的建立與中止

    TCP三次握手其實,網(wǎng)絡上的傳輸是沒有連接的, TCP樣的 TCP 所謂的 “連接”,其實
    的頭像 發(fā)表于 10-08 16:52 ?875次閱讀

    TCP的長連接和短連接

    TCP在真正開始進行數(shù)據(jù)傳輸之前,Server 和 Client 之間必須建立連接。當數(shù)據(jù)傳輸完成后,雙方不再需要這個連接時,就可以釋放
    的頭像 發(fā)表于 11-13 10:46 ?1235次閱讀

    什么是Socket連接?Socket的工作原理 它與TCP連接有什么關(guān)系?

    什么是Socket連接?Socket的工作原理 它與TCP連接有什么關(guān)系? Socket連接種網(wǎng)絡
    的頭像 發(fā)表于 01-22 16:10 ?2940次閱讀

    socket對應連接

    的接口,允許在不同計算機之間建立連接,進行數(shù)據(jù)交換。socket可以看作是兩程序之間的通信端點,由IP地址和端口號唯
    的頭像 發(fā)表于 08-16 10:55 ?795次閱讀
    主站蜘蛛池模板: 亚洲黄色激情网 | 亚洲高清免费在线观看 | 特级全黄一级毛片免费 | 喷潮白浆| 亚洲最大成人 | 久久婷五月综合 | 亚洲娇小性色xxxx | 99r8这里精品热视频免费看 | 欧美国产三级 | 国产精品亚洲四区在线观看 | 国产视频一二区 | 亚洲影视大全 | 国产又黄又免费aaaa视频 | 天天射狠狠干 | 亚洲日本高清 | 国产一区二区三区影院 | 国产性老妇女做爰在线 | 日本成人小视频 | 毛片.com| 高清午夜线观看免费 | 天天摸天天做天天爽在线 | 日本黄色xxxx| 人人射人人射 | 91在线色| 午夜精品久久久久久 | 奇米色婷婷 | 午夜三级国产精品理论三级 | 国产精品入口免费视频 | 色综合色狠狠天天综合色hd | 色婷婷激婷婷深爱五月老司机 | 5566成人| 快乐你懂的在线视频免费观看 | 模特视频一二三区 | 噜噜色网 | 亚州视频一区二区 | 天天色资料| 天天综合在线观看 | 免费一级欧美在线观看视频片 | 国内精品久久久久久影院老狼 | 小屁孩cao大人免费网站 | 婷婷在线免费观看 |