91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TCP服務器和客戶端最大連接數是多少

發布時間:2021-10-20 17:17:10 來源:億速云 閱讀:758 作者:柒染 欄目:大數據

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

TCP服務器和客戶端最大連接數是多少

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

對于服務器,每一個tcp連接都要占一個文件描述符,一旦這個文件描述符使用完了,就會返回錯誤。
  • 我們知道操作系統上端口號1024以下是系統保留的,從1024-65535是用戶使用的。由于每個TCP連接都要占一個端口號,所以我們最多可以有60000多個并發連接?但是事實并不是這樣。

  • 我們還知道對于TCP連接是由:原IP,原端口,目的IP,目的端口。但是監聽server端TCP連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因為它是固定在本地的端口上去監聽,所以最大TCP連接為:客戶端ip數×客戶端port數

而對于客戶端,網絡通信過程中服務端監聽一個固定的端口,客戶端主動發起連接請求后要經過三次握手才能與服務器建立起一個TCP連接.客戶端每次發起一個TCP連接時,系統會隨機選取一個空閑的端口,該端口是獨占的不能與其他TCP連接共享,因此理論上一臺機器有多少空閑的端口,就能對外發起多少個TCP連接。
  • 根據TCP/IP協議,端口port使用16位無符號整數unsigned short來存儲,因此本地端口一共有2^16=65536個,即0-65535,其中0~1023是預留端口,0有特殊含義不能使用,1024以下端口都是超級管理員用戶(如root)才可以使用,因此就算使用root權限,一臺機器最多能使用的端口也只有65535個。但是一臺機器最多只能利用28232個端口。

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

常識一:文件句柄限制

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

這時你需要明白操作系統對可以打開的最大文件數的限制。

進程限制

執行 ulimit -n 輸出 1024,說明對于一個進程而言最多只能打開1024個文件,所以你要采用此默認配置最多也就可以并發上千個TCP連接。

臨時修改:ulimit -n 1000000,但是這種臨時修改只對當前登錄用戶目前的使用環境有效,系統重啟或用戶退出后就會失效。

重啟后失效的修改(不過我在CentOS 6.5下測試,重啟后未發現失效):編輯 /etc/security/limits.conf 文件, 修改后內容為

  • soft nofile 1000000

  • hard nofile 1000000

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

ulimit -SHn 1000000

全局限制

執行 cat /proc/sys/fs/file-nr 輸出 9344 0 592026,分別為:1.已經分配的文件句柄數,2.已經分配但沒有使用的文件句柄數,3.最大文件句柄數。但在kernel 2.6版本中第二項的值總為0,這并不是一個錯誤,它實際上意味著已經分配的文件描述符無一浪費的都已經被使用了 。

我們可以把這個數值改大些,用 root 權限修改 /etc/sysctl.conf 文件:

fs.file-max = 1000000

net.ipv4.ip_conntrack_max = 1000000

net.ipv4.netfilter.ip_conntrack_max = 1000000

常識二:端口號范圍限制?

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

我們來分析一下吧

如何標識一個TCP連接:系統用一個4四元組來唯一標識一個TCP連接:{local ip, local port,remote ip,remote port}。好吧,我們拿出《UNIX網絡編程:卷一》第四章中對accept的講解來看看概念性的東西,第二個參數cliaddr代表了客戶端的ip地址和端口號。而我們作為服務端實際只使用了bind時這一個端口,說明端口號65535并不是并發量的限制。

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

上述內容就是TCP服務器和客戶端最大連接數是多少,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

tcp
AI

准格尔旗| 庆城县| 四子王旗| 库车县| 新营市| 北票市| 灌云县| 高淳县| 淮北市| 辽源市| 清原| 黎平县| 安福县| 泰来县| 锦屏县| 临澧县| 沁水县| 盐源县| 准格尔旗| 夹江县| 临沂市| 五家渠市| 夏邑县| 德昌县| 台南县| 和平区| 博爱县| 邵阳市| 会泽县| 大足县| 清新县| 兴山县| 南康市| 桐柏县| 葫芦岛市| 庄河市| 广灵县| 侯马市| 灵台县| 沙河市| 曲水县|