網絡連接之隊頭阻塞!!!

一、什么是隊頭阻塞

隊頭阻塞,在網絡模型中簡單理解就是,對于隊列型的請求模型,如HTTP的請求-響應模型、TCP的ACK確認機制,都依賴得到一個具體的響應包,如果收不到這個響應包,那下一個請求就不能發,從而導致網絡連接的阻塞。

二、HTTP隊頭阻塞

上面說了HTTP的隊頭阻塞原因是1.1的請求-響應模型,同一個連接中,下一個請求需要等上一個響應回來才能發出去;

那就很容易想到兩種方式,要么同時建立多個連接,同時多個連接發送請求;但這樣會有一些問題:

  • 導致資源浪費,包括套接字、內存、網絡帶寬等;
  • 實現復雜,客戶端和服務器都要維護多個連接的狀態,防止斷開。

所以瀏覽器一般都會限制最大連接數;因此,這個方法能一定程度上解決隊頭阻塞問題,但效果一般。

那既然多個連接行不通,那就想辦法讓多個請求在一個連接上進行,即多組請求-響應復用同一個連接,多路復用技術。

那怎么實現呢?在HTTP2中,是通過把請求格式改造成二進制幀的方式。

在這里插入圖片描述

客戶端和服務器通過約定streamID的方式,來把同一個連接中,多個請求的stream幀區分組合,得到有效的請求數據。

通過這種方式,不同請求之間就不存在依賴關系了,HTTP2的隊頭阻塞問題也就解決。

三、TCP隊頭阻塞

因為HTTP是基于TCP的,所以對于上面的Stream幀,無論是改變編碼方式、包結構等等方法,對于TCP連接來說,它接收到的都是字節流(沒錯,就是TCP的特性之一,基于字節流傳輸)。

TCP在實際發送連接的過程中,把數據分段傳輸,因此,一個HTTP請求也會被分段發送。而且TCP又是通過序列號來保證可靠傳輸的,必須要前面的數據都收到,服務端才能從緩沖區中完整讀取數據。

因此如果TCP連接中有數據段丟失,那這個請求也就被阻塞了,即TCP的隊頭阻塞。

img

為了解決TCP隊頭阻塞,編寫HTTP3的人想到了UDP,UDP沒有可靠傳輸,在UDP的基礎上,通過算法保證傳輸的可靠性,即QUIC,讓HTTP3不再被TCP的隊頭阻塞困擾。

四、一些總結

在工作的一年中,接觸了很多網絡相關的問題與實現:

比如,通信協議:HTTP、TCP、QUIC、RPC、WebSocket,還有Socket4代理等等。

也遇到了一些實際的網絡問題,像

  • 海外,尤其是東南亞等網絡基建不好的地區,為了解決網絡延遲導致的用戶體驗差而引入QUIC;
  • 為了降低網絡連接建立的開銷,引入長連接;

本文就嘗試通過分析隊頭阻塞,也算是做一個簡單的回顧~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39636.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

4、音視頻封裝格式---FLV

FLV FLV是一種容器封裝格式,是由Adobe公司發布和維護的,用于將視頻編碼流與音頻編碼流進行封裝。對于任意一種封裝格式,都有其頭部區域與數據區域,在FLV中,稱之為FLV Header與Body。 對于FLV Header,一個FL…

python自動移除excel文件密碼(升級v2版本)

歡迎查看第一版 https://blog.csdn.net/weixin_45631815/article/details/140013476?spm1001.2014.3001.5502 一功能改進 此版本主要改進功能有以下: 直接可以調用函數實現可以嘗試多個密碼沒有加密的文件進行保存,可以按實際業務進行改進.思路來源:java 面向對象設計模式.…

煤礦安全大模型:微調internlm2模型實現針對煤礦事故和煤礦安全知識的智能問答

煤礦安全大模型————礦途智護者 使用煤礦歷史事故案例,事故處理報告、安全規程規章制度、技術文檔、煤礦從業人員入職考試題庫等數據,微調internlm2模型實現針對煤礦事故和煤礦安全知識的智能問答。 本項目簡介: 近年來,國家對煤礦安全生產的重視程度不斷提升。為了確…

SpringBoot+mail 輕松實現各類郵件自動推送

一、簡介 在實際的項目開發過程中,經常需要用到郵件通知功能。例如,通過郵箱注冊,郵箱找回密碼,郵箱推送報表等等,實際的應用場景非常的多。 早期的時候,為了能實現郵件的自動發送功能,通常會…

前端期末1111

前端期末 超文本標記語言(英語:HyperText Markup Language,簡稱:HTML) body:在網頁文檔中,所有文本,圖像,音頻和視頻等代碼只能放在標簽內才能呈現給用戶。 HTML中的標…

【STM32入門教學】——串口、定時器與參考資料

機器人工程系列文章目錄 這里羅列了系列文章鏈接 概念總述 STM入門教學 還沒寫完組里急用 文章目錄 機器人工程系列文章目錄概念總述STM入門教學 前言串口串口的概念cubemxkeil5實物實驗關于cubemx生成邏輯printf升級usart.cmain.hretarget.c 定時器定時器的概念cubemxkeil5…

帶電池監控功能的恒流直流負載組

EAK的交流和直流工業電池負載組測試儀對于測試和驗證關鍵電力系統的能力至關重要,旨在實現最佳精度。作為一家客戶至上的公司,我們繼續盡我們所能應對供應鏈挑戰,以提供出色的交貨時間,大約是行業其他公司的一半。 交流負載組 我…

時鐘切換的代碼

目錄 描述 輸入描述: 輸出描述: 參考代碼 描述 題目描述: 存在兩個同步的倍頻時鐘clk0 clk1,已知clk0是clk1的二倍頻,現在要設計一個切換電路,sel選擇時候進行切換,要求沒有毛刺。 信號示意圖&…

學習springMVC

第四章 Spring MVC 第一節 Spring MVC 簡介 1. Spring MVC SpringMVC是一個Java 開源框架, 是Spring Framework生態中的一個獨立模塊,它基于 Spring 實現了Web MVC(數據、業務與展現)設計模式的請求驅動類型的輕量級Web框架&am…

車云匯的元宇宙之旅

在汽車行業持續迎來數字化和科技革新的今天,車云匯作為一個領先的汽車服務平臺,正通過探索元宇宙這一新興概念,將傳統服務與虛擬現實技術相結合,為車主提供全新的互動體驗和服務模式。這一創新不僅有望改變汽車行業的服務面貌&…

匿名內部類在Java編程中的應用與限制

匿名內部類在Java編程中的應用與限制 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 匿名內部類在Java編程中的應用與限制 1. 什么是匿名內部類?…

什么叫創世區塊、創世區塊有什么用、為什么需要創世區塊

創世區塊(Genesis Block)是任何區塊鏈技術中的第一個區塊,它是區塊鏈的起點,標志著該區塊鏈的誕生。在創世區塊之前沒有任何區塊存在,因此它沒有前一個區塊的哈希值,通常這個位置會被設置為零或者一個預定義…

vue3源碼(六)渲染原理-runtime-dom

1、從入口文件看實現 項目入口文件 import { createApp } from vue import ./style.css import App from ./App.vuecreateApp(App).mount(#app)文件位置core\packages\runtime-dom\src\index.ts 保證了render的唯一性 // // rendererOptions 是patchProp 和nodeOps的合集&a…

可視化低代碼平臺之:RayData光啟元的震撼作品。

RayData家的可視化作品,貝格前端工場是經常碰到,制作十分的精良,業內很有影響力。他們也有自己的低代碼平臺,分為了桌面版和網頁版,本期分享一下他們的作品。

徹底掌握 Git:從零基礎到高級實戰的全方位教程

文章目錄 一、Git 簡介二、安裝 Git1. Windows2. macOS3. Linux 三、Git 基本概念四、初次使用 Git1. 配置 Git2. 創建一個新的 Git 倉庫3. 克隆一個遠程倉庫4. 跟蹤文件5. 提交變更6. 查看歷史記錄 五、Git 分支管理1. 創建和切換分支2. 合并分支3. 分支沖突 六、遠程倉庫1. 添…

to_json 出現亂碼的解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

國產分布式數據庫災備高可用實現

最近在進行核心業務系統的切換演練測試,就在想一個最佳的分布式數據庫高可用部署方案是如何保證數據不丟、系統可用的,做到故障時候可切換、可回切,并且業務數據的一致性。本文簡要介紹了OceanBase數據庫和GoldenDB數據庫在災備高可用的部署方…

kafka的架構

一、架構圖 Broker:一臺 kafka 服務器就是一個 broker。一個kakfa集群由多個 broker 組成。一個 broker 可以容納多個 topic。 Producer:消息生產者,就是向 kafka broker 發消息的客戶端 Consumer:消息消費者,向 kafk…

深海電波,智能駕馭:海上發電系統中的先進網關技術

隨著技術的不斷演進,海上風電場逐漸走向深海,隨之而來的高速通信保障成為一大難題。同時,海上風電特殊的環境與部署技術,也給運維帶來了作業難、成本高、響應慢等困難。通過在沿海岸邊建立高站,結合超遠覆蓋、載波聚合…

springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver 應該如何解決

遇到的問題:項目中引用了外部的達夢jar包 在idea中正常使用 也能找到dm.jdbc.driver.DmDriver 驅動 但是當通過jenkins 構建部署到服務器上 總是報 ClassNotFoundException: dm.jdbc.driver.DmDriver 找不到驅動 應用到的驅動代碼如下格式 排查步驟 1.首先看你的項…