<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          到底一臺服務(wù)器能夠支持多少TCP并發(fā)連接?

          共 1628字,需瀏覽 4分鐘

           ·

          2020-08-01 06:34

          回復(fù)“1024”獲取?2000+?道互聯(lián)網(wǎng)大廠面試題


          作者 | 朱小廝

          來源 |?公眾號「朱小廝的博客」

          曾幾何時我們還在尋求網(wǎng)絡(luò)編程中 C10K 問題的解決方案,但是現(xiàn)在從硬件和操作系統(tǒng)支持來看單臺服務(wù)器支持上萬并發(fā)連接已經(jīng)沒有多少挑戰(zhàn)性了。有關(guān) C10K(即單機(jī)1萬個并發(fā)連接問題)的信息可以參考《上一個10年,著名的C10K并發(fā)連接問題[1]》和《The C10K problem[2]》這兩篇文章。

          我們先假設(shè)單臺服務(wù)器最多只能支持萬級并發(fā)連接,其實對絕大多數(shù)應(yīng)用來說已經(jīng)遠(yuǎn)遠(yuǎn)足夠了,但是對于一些擁有很大用戶基數(shù)的互聯(lián)網(wǎng)公司,往往面臨的并發(fā)連接數(shù)是百萬、千萬、甚至上億。雖然現(xiàn)在的集群,分布式技術(shù)可以為我們將并發(fā)負(fù)載分擔(dān)在多臺服務(wù)器上,那我們只需要擴(kuò)展出數(shù)十臺電腦就可以解決問題,但是我們更希望能更大的挖掘單臺服務(wù)器的資源,先努力垂直擴(kuò)展,再進(jìn)行水平擴(kuò)展,這樣可以有效的節(jié)省服務(wù)器相關(guān)的開支(硬件資源、機(jī)房、運(yùn)維人力、電力其實也是一筆不小的開支)。

          那么到底一臺服務(wù)器能夠支持多少TCP并發(fā)連接呢?

          首先需要考慮文件句柄的限制。在linux下編寫網(wǎng)絡(luò)服務(wù)器程序的朋友肯定都知道每一個tcp連接都要占一個文件描述符,一旦這個文件描述符使用完了,新的連接到來返回給我們的錯誤是“Socket/File:Can't open so many files”。這時你需要明白操作系統(tǒng)對可以打開的最大文件數(shù)的限制。我們可以通過?ulimit -n命令、/etc/security/limits.conf 文件 以及 /etc/sysctl.conf 文件等來修改文件句柄數(shù)。更多細(xì)節(jié)可以參閱 「朱小廝的博客」里的這篇文章《文件句柄?文件描述符?傻傻分不清楚》。

          其次要考慮的是端口范圍的限制。操作系統(tǒng)上端口號1024以下是系統(tǒng)保留的,從1024-65535是用戶使用的。由于每個TCP連接都要占一個端口號,所以我們最多可以有60000多個并發(fā)連接。我想有這種錯誤思路朋友不在少數(shù)吧?面試官也比較喜歡在這里引導(dǎo)挖坑,類似的問題還有:一個UDP連接可以復(fù)用已經(jīng)被TCP連接占用的端口嘛?(可以在下方留言區(qū)留下你的答案。)

          如何標(biāo)識一個TCP連接??系統(tǒng)使用一個4四元組來唯一標(biāo)識一個TCP連接:本地端口號 local port、本地IP地址 local ip、遠(yuǎn)端端口號 remote port、遠(yuǎn)端IP地址 remote ip。server通常固定在某個本地端口上監(jiān)聽,等待client的連接請求。不考慮地址重用(unix的SO_REUSEADDR選項)的情況下,即使server端有多個ip,本地監(jiān)聽端口也是獨占的,因此server端tcp連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因此最大tcp連接為客戶端ip數(shù)×客戶端port數(shù),對IPV4,不考慮ip地址分類等因素,最大tcp連接數(shù)約為2的32次方(ip數(shù))×2的16次方(port數(shù)),也就是server端單機(jī)最大tcp連接數(shù)約為2的48次方。

          上面給出的結(jié)論都是理論上的單機(jī)TCP并發(fā)連接數(shù),實際上單機(jī)并發(fā)連接數(shù)肯定要受硬件資源(內(nèi)存)、網(wǎng)絡(luò)資源(帶寬)的限制,至少對我們的需求現(xiàn)在可以做到數(shù)十萬級的并發(fā)了。


          END


          免費領(lǐng)取 1000+ 道面試資料??!小編這里有一份面試寶典《Java 核心知識點.pdf》,覆蓋了 JVM,鎖、高并發(fā)、Spring原理、微服務(wù)、數(shù)據(jù)庫、Zookeep人、數(shù)據(jù)結(jié)構(gòu)等等知識點,包含 Java 后端知識點 1000+ 個,部分如下:

          如何獲???加小編微信,回復(fù)【1024】



          瀏覽 45
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狼人香蕉网| 天堂综合网久久 | 欧美日韩高清一区二区三区 | 国产无码免费在线 | 抽插美女|