《HTTP權威指南》 第4章 連接管理

帶著問題學習(通常是面試考點)

  • HTTP是如何使用TCP連接的
  • TCP連接的時延、瓶頸及存在的障礙
  • HTTP的優化,包括并行連接、keep-alive(持久連接)和管道化連接
  • 管理連接時應該和不應該做的事

TCP連接

在這里插入圖片描述
在這里插入圖片描述
TCP的數據通過IP分組(或IP數據報)的小數據塊來發送。

協議順序HTTP (>> SSL or TLS) >> TCP >> IP
在這里插入圖片描述

數據傳輸過程:

  1. HTTP以的形式將數據報文通過TCP連接進行按序傳輸
  2. TCP收到數據流后,將數據流砍成小數據塊(稱作),將封裝IP分組中,通過因特網傳輸

IP分組包括:一個IP分組首部(通常20字節) + 一個TCP段首部(通常20字節) + 一個TCP數據塊(0或多個字節)

  • IP分組首部:源和目的IP地址、長度、其他標記
  • TCP段首部:TCP端口號、TCP控制標記、其他數據排序和完整性檢查的數值

TCP連接識別<源IP地址、源端口號、目的IP地址、目的端口號>
TCP通過端口號保持多個連接持續運行,這4個值唯一的定義了一條連接,兩條不同TCP連接不能擁有4個完全相同的地址組件值。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

套接字API允許用戶創建TCP的端點數據結構,將這些端點與遠程服務器的TCP端點進行連接,并對數據流進行讀寫。

對TCP接口進行編程所需的常見套接字接口函數偽代碼
在這里插入圖片描述

TCP客戶端與服務器是如何通過TCP套接字接口進行通信的:
在這里插入圖片描述

HTTP事務的時延

回顧一下:HTTP事務 = 請求命令(HTTP方法)+ 響應結果

串行HTTP事務的時間線 = DNS查詢 + TCP連接&接受應答 + 發送請求 + 處理 + 響應 + 關閉連接
在這里插入圖片描述
HTTP事務的時延原因:

  • DNS解析URI中的主機名為IP地址
  • TCP請求連接需要等待接受應答
  • 發送報文及處理請求報文
  • 服務器回送HTTP響應

TCP網絡時延的大小取決于硬件速度網絡服務器負載報文尺寸客戶端與服務器之間的距離TCP協議的技術復雜性也會對時延產生影響。

常見的TCP時延:

  • TCP建立握手
  • TCP慢啟動擁塞控制
  • 數據聚集的Nagle算法
  • 用于捎帶確認的TCP延遲確認算法
  • TIME_WAIT時延和端口耗盡

TCP連接的握手時延

在發送數據前,TCP要傳送兩個分組來建立連接。
在這里插入圖片描述
TCP三次握手:a SYN請求建立連接 >> b SYN+ACK接受連接 >> c ACK確認成功建立連接

延遲確認

如果是小的HTTP事務,那么TCP連接就占了大量時間,由于確認報文很小,所以TCP允許在發往相同方向的輸出數據分組中對其進行“捎帶”(有點像夾帶私貨…),將返回的確認信息與輸出的數據分組結合,剩下一次請求報文的時間,此行為稱為“延遲確認算法”。

延遲確認算法會在特定窗口時間(200~300ms)內將輸出確認存放在緩存區中,等待能夠捎帶的輸出數據分組,沒有就單獨發送確認。

TCP慢啟動

TCP數據傳輸的性能還取決于TCP連接的使用期
TCP連接會隨著時間自我“調諧”,起初會限制連接的最大速度,如果數據傳輸成功,會隨著時間推移提高傳輸的速度,這種調諧稱為“TCP慢啟動”,用于防止因特網突然過載和擁塞。

TCP慢啟動限制了一個TCP端點在任意時間可以傳輸的分組數。每成功接收一個分組,發送端就有了發送2個分組的權限。有大量數據要發送也無法一次發送出去。必須發一個等待確認,然后發2個,都確認再發4個,以此類推。這種方式稱為“打開擁塞窗口“,所以新連接比已交換過數據的連接慢一些

Nagle算法和TCP NODELAY

Nagle算法鼓勵發送全尺寸的段,將已確認的分組數據緩存起來,等待傳輸中的分組被確認,當緩存積累了足夠發送一個全尺寸的段再將緩存數據發出去。

但小的報文可能無法填滿一個分組會因為等待永不會到來的額外數據而產生時延。且確認分組自身因“延遲確認算法”而延遲100~200毫秒。

所以HTTP應用程序通常會設置參數TCP NODELAY禁用Nagle算法。

TIME_WAIT累計和端口耗盡

當TCP端點關閉連接時,會在內存中維護一個小的控制快,用來記錄最近關閉的IP地址和端口號,保證在一段時間內不會創建相同地址和端口的新連接。這段時間通常是最大分段使用期的兩倍(2MSL,通常2分鐘)。

TCP連接的4個值中:源IP、源端口、目標IP、目標端口,只有源端口可以隨意改變的。

由于源端口的數量有限(比如6萬),2MSL(比如120秒)內連接不能重用,那么連接率上限就為6萬?120秒=500次/秒。不超過500就不會遇到端口耗盡的問題。
要修正這個問題,可以增加客戶端會負載生成機器的數量,或者確保循環使用幾個虛擬IP來增加更多的連接組合。

HTTP連接的處理

串型事務處理時延

連接時延和慢啟動時延疊加
在這里插入圖片描述

HTTP優化1:并行連接

HTTP允許客戶端打開多條連接,并行地執行多個HTTP事務。
在這里插入圖片描述
??注意:如果客戶端網絡帶寬不足,那么大部分時間可能都在傳送數據,多個事務的連接很快會耗盡所有可用的帶寬。同時請求也會造成服務器性能嚴重下降,為了均衡,瀏覽器會限制并行連接的總數為一個較小的值(通常是4個)。

HTTP優化2:持久連接

初始化了對某服務器HTTP請求的應用程序很可能在不久后對該服務器發起更多的請求,這種性質被稱為“站點局部性”。

因此HTTP/1.1允許HTTP設備在事務處理結束后將TCP連接保持打開狀態,以便后續請求重用連接。在事務處理結束后保持打開狀態的TCP連接被稱為“持久連接”。

持久連接降低了時延和連接建立的開銷(已調諧),但是容易產生大量空閑連接,需要特別注意。

持久連接類型1:HTTP/1.0的keep-alive連接

通過Connection: Keep-Alive保持連接

支持max設置希望保持連接的上限數,timeout設置希望保持連接的時間,如:Keep-Alive: max=5, timeout=120,但對方不一定會同意。
在這里插入圖片描述
如果服務器支持keep-alive參數,需要回送一個Connection: Keep-Alive,否則不回送。

很多老的代理都是“盲中繼”,只轉發不對Connection首部作處理。當通過作為盲中繼使用的啞代理連接時,會出現圖示情形:
在這里插入圖片描述
服務器返回響應后,啞代理返回數據后由于等待連接關閉,會忽略連接上的新請求,導致了下一條請求被掛起。這種錯誤的通信會使瀏覽器一直處于掛起狀態,直到連接超時關閉。

為避免出現上述通信問題,現代的代理都絕不能轉發Connection首部和出現在該首部值中的首部。

一個變通做法是,發送非標準的Proxy-Connection擴展首部,啞代理轉發后服務器會忽略此首部,聰明的代理會轉換為Connection首部發送,以收到預期效果。但是如果代理中有啞代理又有聰明的代理就會再次出現問題…😂

持久連接類型2:HTTP/1.1的persistent連接

HTTP/1.1默認所有連接都是持久連接,如果關閉連接就顯式添加一個Connection: Close

HTTP優化3:管道化連接

HTTP/1.1允許在持久連接上可選地使用請求管道,在響應到達之前,將多條請求放入隊列

管道化連接的限制:

  • 若HTTP客戶端無法確認連接是持久的,就不應該使用管道
  • 必須按照與請求相同的順序回送HTTP響應
  • HTTP客戶端必須做好連接會在任意時刻關閉的準備,還要準備好重發未完成的請求
  • HTTP客戶端不應該用管道化的方式發送可能會產生副作用的請求(比如POST),因為出錯時無法安全的重試POST這樣的非冪等請求

    冪等(Idempotent): 一個操作如果執行一次多次對系統狀態產生的改變完全相同(或者說效果等同于只執行一次),那么這個操作就是冪等的。
    非冪等(Non-idempotent): 一個操作如果執行多次與執行一次對系統狀態產生的改變不同(通常會產生額外的副作用),那么這個操作就是非冪等的。

在這里插入圖片描述
要發送一條非冪等的請求,需要等待來自前一條請求的響應狀態。
一定不能自動重試非冪等的方法。比如,大多數瀏覽器會在重載一個緩存的POST響應時提供一個對話框,詢問用戶是否再次發起事務處理。

正常關閉連接

完全關閉:TCP輸入和輸出都關閉
半關閉:單獨關閉TCP輸入或輸出

在這里插入圖片描述
關閉連接的輸出信道總是安全的,關閉連接的輸入信道比較危險
如果另一端向你已關閉的輸入信道發送數據,操作系統就會向另一端回送一條TCP“連接被對端重置”的報文,將刪除對端還未讀取的所有緩存數據
在這里插入圖片描述
正常關閉的應用程序應該首先關閉輸出信道兩端都告訴對方不再發送任何數據之后,再完全關閉連接,就不會有重置的危險。

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

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

相關文章

StartUML入門級使用教程——畫Class類圖

一、破解安裝StartUML StarUML建模工具最新版破解安裝詳細教程https://blog.csdn.net/m0_74146638/article/details/148709643?spm1001.2014.3001.5502 二、類圖實戰 1.主界面 ? 默認打開starUML后&#xff0c;會默認進入類圖模式&#xff0c;各模塊區域功能如下&#x…

中科億海微SoM模組——FPGA+DSP核心板

FPGADSP核心板是基于中科億海微EQ6HL130型FPGA芯片搭配國產DSP開發的高性能核心板卡。對外接口采取郵票孔連接方式&#xff0c;可以極大提高信號傳輸質量和焊接后的機械強度。核心板卡的系統框圖如下圖所示。 圖 FPGADSP核心板系統框圖 FPGA采用中科億海微136K LUT資源EQ6HL130…

CentOS 7 虛擬機網絡配置異常 典型問題:啟動了NetworkManager但是network無法啟動

問題背景 在 VMware 虛擬機中使用 CentOS 7 時&#xff0c;出現以下網絡問題&#xff1a; 命令行重啟網絡服務失敗&#xff0c;提示 RTNETLINK answers: File exists 等沖突錯誤圖形界面網絡設置無法打開&#xff0c;提示需要啟動 NetworkManager網卡 ens33 無法獲取 IPv4 地…

細節/數學/滑動窗口

題目意思&#xff1a; 判斷字符串是否可以按照題目條件縮短。 思路&#xff1a; 用棧的思想寫&#xff0c;對每一次的大小寫都進行滾動判斷。 tips&#xff1a; 這里面要注意的東西就有一點多了&#xff0c;首先是字符串的遍歷問題auto更方便&#xff0c;其次是對小寫和大…

WebeServer實現:學到了哪些東西

前言 這里話就是總結一下之前沒講過的一些東西 系統調用 accept與accept4 ??當我們調用accept接收一個新的fd的時候&#xff0c;往往需要在調用fcntl將這個fd變成非阻塞IO,那么有沒有一個系統調用可以一次性做完這兩件事呢&#xff0c;有的有的就是accept4. // accept 函數…

React 虛擬dom

JSX創建出ReactElement對象 最終形成一個JS樹 將React.createElement對象轉為真實DOM的方法使用render函數 為什么要虛擬 dom 狀態難以跟蹤 ## 操作真實dom開銷大 &#xff0c;并且操作會引起頻繁的回流和重繪&#xff0c;并且不涉及批處理 聲明式編程 從虛擬dom向真實dom去…

Spring MVC異常處理機制

Spring MVC提供了多種異常處理機制,以下是核心處理方式及實現方法: 一、局部異常處理(Controller級別) @ExceptionHandler注解 在Controller內部定義異常處理方法,捕獲當前控制器拋出的指定異常。@Controller public class UserController {@GetMapping("/test"…

MySQL 8.x配置MGR高可用+ProxySQL讀寫分離(一):MGR構建MySQL高可用

#作者&#xff1a;stackofumbrella 文章目錄 簡介MGR優點MGR缺點MGR適用場景單主模式和多主模式組復制介紹組復制插件架構圖單主模式多主模式配置主機名解析安裝MGR插件 MGR故障轉移恢復MGR集群 簡介 MGR&#xff08;MySQL Group Replication&#xff09;是MySQL 5.7.17版本誕…

保安員證考試的理論知識部分,重點考查的法律法規具體有哪些?

保安員證考試理論知識部分&#xff0c;重點考查的法律法規主要有以下幾種&#xff1a; 《保安服務管理條例》&#xff1a;作為保安行業的專門法規&#xff0c;是考試核心。重點考查保安服務活動規范&#xff0c;如保安服務的范圍、資質要求等&#xff1b;保安員的權利與義務&am…

【好用但慎用】Windows 系統中將所有 WSL 發行版從 C 盤遷移到 非系統 盤的完整筆記(附 異常處理)

&#x1f680; 將所有 WSL 發行版從 C 盤遷移到 I 盤的完整教程&#xff08;含 Podman / NVIDIA Workbench / Ubuntu 等&#xff09; 【無標題】使用 Chocolatey 安裝 WSL 管理工具 LxRunOffline-CSDN博客 免責聲明 重要提示 在執行 WSL 遷移操作前&#xff0c;請務必仔細閱讀…

Oracle APEX 通過rtf模板下載PDF文件(BIP)

1. 上傳模板文件 共享組件 > 報表布局 2. 編寫SQL文 共享組件 > 報表查詢 報表布局中選擇1中設置完的報表布局&#xff0c;然后編寫SQL文提供數據 3. 添加下載按鈕 在頁中添加一個下載按鈕&#xff0c;添加動態操作&#xff0c;選擇打印報告 4. 下載PDF文件 點擊Pri…

Web Seach 搜索 MCP 啟動!

&#x1f680; 開啟你的 AI 助手搜索能力&#xff01;開源 Web 搜索 MCP 服務器上線&#xff01; 在 ChatGPT、Claude 等 AI 工具成為生產力新核心的今天&#xff0c;我們往往面臨一個尷尬的問題&#xff1a;模型不知道最新的網絡信息。雖然 GPT-4o 和 Claude 支持聯網功能&am…

005微信小程序npm包_全局數據共享和分包

npm包_全局數據共享和分包 1. 使用npm包1.1 Vant Weapp1.2 API Promise化 2. 全局數據共享3. 分包3.1 分包的加載規則3.2 分包的體積限制3.3 使用分包3.3 獨立分包3.4 分包預下載 1. 使用npm包 小程序對npm進行了支持與限制&#xff0c;限制如下&#xff1a; 不支持依賴于 No…

DPO直接偏好函數的學習解讀

DPO, Direct Preference Optimization&#xff0c;采用直接優化策略滿足人類偏好&#xff0c;使得LLM對于給定輸入&#xff0c;生成能用輸出的概率高于生成不能用輸出的概率。 1&#xff09;DPO優化目標 在DPO訓練過程中&#xff0c;模型通過最大化可用回答相對于不可用回答的…

【開源初探】基于 Qwen2.5VL的文檔解析工具:docext

源碼地址&#xff1a; https://github.com/NanoNets/docext 概述 docext 是一個由視覺語言模型&#xff08;vlm&#xff09;提供支持的全面的本地文檔智能工具包。vlm 使用的是基于 Qwen2.5VL-3B 的模型&#xff0c;應該是在此模型基礎上進行的微調。 它提供了三個核心功能&…

Python 正確重載運算符(增量賦值運算符)

增量賦值運算符 Vector 類已經支持增量賦值運算符 和 * 了&#xff0c;如示例 13-15 所示。 示例 13-15 增量賦值不會修改不可變目標&#xff0c;而是新建實例&#xff0c;然后 重新綁定 >>> v1 Vector([1, 2, 3]) >>> v1_alias v1 # ? >>> …

XCUITest + Objective-C 詳細示例

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】

redis分布式鎖 Redisson在電商平臺開發中的實際應用

目錄 概述 Redis分布式鎖的實現方式 1. 基于SETNX命令&#xff08;String類型&#xff09; 2. 使用SET命令的NX和EX參數&#xff08;推薦方式&#xff09; 3. 基于Lua腳本實現復雜邏輯 4. RedLock算法&#xff08;多節點Redis實現&#xff09; Redisson的分布式鎖 Redis…

joomla 使用nginx服務器只能打開首頁,其他頁面404的解決方案

最近一個客戶將Joomla4網站從原先的Apache服務器改為Nginx服務器&#xff0c;整個過程一切順利&#xff0c;但還原網站后發現只能打開首頁&#xff0c;其他頁面都是404。這個問題需要修改nginx的配置文件來解決。 偽靜態 在Apache中使用.htaccess來完成偽靜態路由的轉發&…

湖北理元理律師事務所企業債務紓困路徑:司法重整中的再生之道

中小企業債務危機常呈現“擔保鏈擴散”特征&#xff0c;單一債務可能引發企業崩盤。湖北理元理律師事務所通過預重整制度與企業債務重組技術&#xff0c;探索出“司法保護商業談判”的紓困模式。 一、企業債務風險處置四步法 緊急止血 申請司法保護&#xff1a;通過訴前調解…