溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TCP服務(wù)器和客戶端最大連接數(shù)是多少

發(fā)布時(shí)間:2021-10-20 17:17:10 來(lái)源:億速云 閱讀:752 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了TCP服務(wù)器和客戶端最大連接數(shù)是多少,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

TCP服務(wù)器和客戶端最大連接數(shù)是多少

只要資源 (內(nèi)存硬盤(pán)cpu)足夠,理論上可以接收無(wú)限個(gè)鏈接。所謂65535的限制,是針對(duì)客戶端的,客戶機(jī)每鏈接一個(gè)服務(wù),就必須開(kāi)一個(gè)tcp端口與之對(duì)應(yīng)。這樣,鏈接到65535個(gè)服務(wù)后,本地端口就被占滿。服務(wù)端口僅僅使用一個(gè)。一個(gè)tcp鏈接,是四個(gè)元素決定的,server IP:port+client IP:port。(local ip, local port,remote ip,remote port)

對(duì)于服務(wù)器,每一個(gè)tcp連接都要占一個(gè)文件描述符,一旦這個(gè)文件描述符使用完了,就會(huì)返回錯(cuò)誤。
  • 我們知道操作系統(tǒng)上端口號(hào)1024以下是系統(tǒng)保留的,從1024-65535是用戶使用的。由于每個(gè)TCP連接都要占一個(gè)端口號(hào),所以我們最多可以有60000多個(gè)并發(fā)連接?但是事實(shí)并不是這樣。

  • 我們還知道對(duì)于TCP連接是由:原IP,原端口,目的IP,目的端口。但是監(jiān)聽(tīng)server端TCP連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因?yàn)樗枪潭ㄔ诒镜氐亩丝谏先ケO(jiān)聽(tīng),所以最大TCP連接為:客戶端ip數(shù)×客戶端port數(shù)

而對(duì)于客戶端,網(wǎng)絡(luò)通信過(guò)程中服務(wù)端監(jiān)聽(tīng)一個(gè)固定的端口,客戶端主動(dòng)發(fā)起連接請(qǐng)求后要經(jīng)過(guò)三次握手才能與服務(wù)器建立起一個(gè)TCP連接.客戶端每次發(fā)起一個(gè)TCP連接時(shí),系統(tǒng)會(huì)隨機(jī)選取一個(gè)空閑的端口,該端口是獨(dú)占的不能與其他TCP連接共享,因此理論上一臺(tái)機(jī)器有多少空閑的端口,就能對(duì)外發(fā)起多少個(gè)TCP連接。
  • 根據(jù)TCP/IP協(xié)議,端口port使用16位無(wú)符號(hào)整數(shù)unsigned short來(lái)存儲(chǔ),因此本地端口一共有2^16=65536個(gè),即0-65535,其中0~1023是預(yù)留端口,0有特殊含義不能使用,1024以下端口都是超級(jí)管理員用戶(如root)才可以使用,因此就算使用root權(quán)限,一臺(tái)機(jī)器最多能使用的端口也只有65535個(gè)。但是一臺(tái)機(jī)器最多只能利用28232個(gè)端口。

下面再詳解一下文件句柄限制和端口限制兩大常識(shí)

常識(shí)一:文件句柄限制

在linux下編寫(xiě)網(wǎng)絡(luò)服務(wù)器程序的朋友肯定都知道每一個(gè)tcp連接都要占一個(gè)文件描述符,一旦這個(gè)文件描述符使用完了,新的連接到來(lái)返回給我們的錯(cuò)誤是“Socket/File:Can't open so many files”。

這時(shí)你需要明白操作系統(tǒng)對(duì)可以打開(kāi)的最大文件數(shù)的限制。

進(jìn)程限制

執(zhí)行 ulimit -n 輸出 1024,說(shuō)明對(duì)于一個(gè)進(jìn)程而言最多只能打開(kāi)1024個(gè)文件,所以你要采用此默認(rèn)配置最多也就可以并發(fā)上千個(gè)TCP連接。

臨時(shí)修改:ulimit -n 1000000,但是這種臨時(shí)修改只對(duì)當(dāng)前登錄用戶目前的使用環(huán)境有效,系統(tǒng)重啟或用戶退出后就會(huì)失效。

重啟后失效的修改(不過(guò)我在CentOS 6.5下測(cè)試,重啟后未發(fā)現(xiàn)失效):編輯 /etc/security/limits.conf 文件, 修改后內(nèi)容為

  • soft nofile 1000000

  • hard nofile 1000000

永久修改:編輯/etc/rc.local,在其后添加如下內(nèi)容

ulimit -SHn 1000000

全局限制

執(zhí)行 cat /proc/sys/fs/file-nr 輸出 9344 0 592026,分別為:1.已經(jīng)分配的文件句柄數(shù),2.已經(jīng)分配但沒(méi)有使用的文件句柄數(shù),3.最大文件句柄數(shù)。但在kernel 2.6版本中第二項(xiàng)的值總為0,這并不是一個(gè)錯(cuò)誤,它實(shí)際上意味著已經(jīng)分配的文件描述符無(wú)一浪費(fèi)的都已經(jīng)被使用了 。

我們可以把這個(gè)數(shù)值改大些,用 root 權(quán)限修改 /etc/sysctl.conf 文件:

fs.file-max = 1000000

net.ipv4.ip_conntrack_max = 1000000

net.ipv4.netfilter.ip_conntrack_max = 1000000

常識(shí)二:端口號(hào)范圍限制?

操作系統(tǒng)上端口號(hào)1024以下是系統(tǒng)保留的,從1024-65535是用戶使用的。由于每個(gè)TCP連接都要占一個(gè)端口號(hào),所以我們最多可以有60000多個(gè)并發(fā)連接。我想有這種錯(cuò)誤思路朋友不在少數(shù)吧?(其中我過(guò)去就一直這么認(rèn)為)

我們來(lái)分析一下吧

如何標(biāo)識(shí)一個(gè)TCP連接:系統(tǒng)用一個(gè)4四元組來(lái)唯一標(biāo)識(shí)一個(gè)TCP連接:{local ip, local port,remote ip,remote port}。好吧,我們拿出《UNIX網(wǎng)絡(luò)編程:卷一》第四章中對(duì)accept的講解來(lái)看看概念性的東西,第二個(gè)參數(shù)cliaddr代表了客戶端的ip地址和端口號(hào)。而我們作為服務(wù)端實(shí)際只使用了bind時(shí)這一個(gè)端口,說(shuō)明端口號(hào)65535并不是并發(fā)量的限制。

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

上述內(nèi)容就是TCP服務(wù)器和客戶端最大連接數(shù)是多少,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

tcp
AI