C++ 實現了數百萬個併發反應堆伺服器,從 0.
下|種植 uri":
在網路程式設計中有很多必須了解的基本概念,如OSI、TCP IP、位元組序列等,這些都是開發網路應用的基礎,可以幫助我們更好地理解網路程式的工作原理,一起學習一些重要的概念。
osiopen system interconnection)由國際標準化組織 (ISO) 開發。計算機互聯標準是設計和描述計算機網路通訊的基本框架。OSI 模型將網路通訊分為 7 層:沒有表示層的 TCP IP 協議和會話層,每層對應的 OSI 協議主要如下:
應用層:TFTP、HTTP、FTP等
傳輸層:TCP、UDP
網路層:IP、IGMP等
資料層:MTU等
物理層:ISO 2110、IEEE802等
TCP IP包含很多協議,如TCP、UDP、IP、HTTP、FTP等,這些協議在網際網絡上很常用,一些概念必須了解
傳輸控制協議(TCP):傳輸控制協議
UDP(User Datagram Protocol):使用者資料報協議
網際網路協議(IP):一種網路間協議
超文字傳輸協議 (HTTP):超文字傳輸協議
FTP(檔案傳輸協議):一種文字傳輸協議。
在我改進網路IO模型之前,我先問乙個問題,你知道單台伺服器可以連線多少個客戶端的理論嗎?
相信您知道 TCP 連線是由四重奏唯一確認的,而該四重是:本地 IP、本地埠、對等 IP、對等埠
作為服務提供商,伺服器通常在本地偵聽埠並等待客戶端連線。 因此,伺服器的本地 IP 和埠是固定的,因此對於伺服器端 TCP 連線的四倍,只有對等 IP 和埠會發生變化最大 TCP 連線數 = 客戶端 IP 數 客戶端埠數
對於 IPv4,客戶端上的 IP 數最多為 2 的 32 次方,客戶端上的埠數最多為 2 的 16 次方,即單個伺服器上的最大 TCP 連線數約為 2 的 48 次方
這個理論值已經相當“滿”了,但伺服器肯定承載不了那麼多連線,會受到兩個主要方面的限制:
檔案描述符,套接字實際上是乙個檔案,對應乙個檔案描述符。 在Linux下,單個程序可以開啟的檔案描述符數量是有限制的,未修改的值一般是1024,但是我們可以按ulimit增加檔案描述符的數量;
系統記憶體每個TCP連線在核心中都有對應的資料結構,這意味著每個連線都會占用一定的記憶體量;
如果伺服器只有 2 GB 記憶體,網絡卡是千兆位,它能支援 10,000 個併發請求嗎?
併發 10,000 個請求是經典的 C10k 問題,其中 C 是 Client 的首字母縮寫,C10K 是一台機器同時處理 10,000 個請求的問題。
從硬體資源的角度來看,對於一台擁有2GB記憶體千兆網絡卡的伺服器來說,如果每個請求處理占用的記憶體和網路頻寬小於200KB,則可以滿足10000個併發請求。