Linux 軟件編程(十一)網絡編程:TCP 機制與 HTTP 協議

五、TCP 進階機制

(一)TCP 頭部標志位

TCP 頭部的標志位是控制通信行為的 “開關”,常用標志位功能:

標志位含義典型場景
SYN請求建立連接三次握手第一步,發起連接請求
ACK響應報文確認回復對方,確認已收到數據
PSH攜帶數據通知告訴接收方 “立即從緩沖區取數據”,避免延遲
FIN請求斷開連接四次揮手第一步,發起斷開請求
RST復位連接強制重置異常連接(如網絡擁塞時)
URG緊急數據標識標記 “緊急數據”,需優先處理

(二)TCP 安全可靠傳輸機制

1. 三次握手 & 四次揮手
  • 三次握手:通過?SYN/SYN+ACK/ACK?三次交互,確認雙方收發能力,為可靠通信奠基。
  • 四次揮手:因服務端可能殘留未發數據,需拆分?FIN/ACK/FIN/ACK?四步,保證數據發完再斷開。
2. 應答機制

TCP 采用 **“序列號 + 確認號”** 實現可靠應答:

  • 發送方用 ** 序列號(Sequence Number)** 標記數據段的 “起始編號”;
  • 接收方回復確認號(Acknowledgment Number),值為 “收到的最后一個字節編號 + 1”,告訴發送方 “已收到到這里,下一個該發啥”。

示例:發送方發?[0-999]?數據,序列號為?0;接收方回復確認號?1000,表示 “0-999 已收到,繼續發 1000 開頭的數據”。

3. 超時重傳機制

發送方數據發出后,若超時未收到確認號,則認為數據丟失,觸發重傳。類似 “快遞沒收到,重新發貨”,保障數據不丟包。

4. 滑動窗口機制

TCP 用滑動窗口管理發送與確認:

  • 窗口內是 “已發送但未確認 + 待發送” 的數據;
  • 收到確認號后,窗口 “滑動”,釋放已確認數據的緩沖區,繼續發送新數據。
    ( 理解:已發送并確認、已發送未確認、即將發送、準備好的數據,隨窗口滑動動態變化 )

(三)TCP 效率優化機制

1. 延遲應答機制

發送數據的同時,接收方不立即回復?ACK,而是等待一段時間(攢一批數據再回復),減少 ACK 報文數量,降低網絡開銷。

2. 流量控制機制

通過 TCP 頭部 **“窗口大小(Window Size)”(滑動窗口)** 字段實現:

  • 接收方根據自身緩沖區剩余空間,動態調整 “窗口大小”;
  • 發送方依據窗口大小控制發送速率,避免接收方緩沖區溢出。
3. 捎帶應答機制

ACK?報文有時候不單獨發送,而是 “附著” 在應用層數據里一起發(類似于變為三次揮手),減少單獨發 ACK 的次數,提升效率。

六、HTTP 協議

(一)萬維網通信基礎

  • WWW(萬維網):由網頁、服務器、客戶端(瀏覽器)組成的信息系統,通過 URL 定位資源。
  • URL(統一資源定位符):格式?<協議>://<主機>:<端口>/<路徑>?,示例:https://www.baidu.com/s?wd=關鍵詞?,精準定位網絡資源。
  • HTTP(超文本傳輸協議):應用層協議,基于 TCP 傳輸,默認端口?80/8080,負責客戶端與服務器的請求 - 響應交互。
  • HTML(超文本標記語言):瀏覽器解析后展示網頁內容的語言,HTTP 響應報文里的 “實體主體” 常包含 HTML 代碼。

(二)HTTP 通信流程

  1. 建立 TCP 連接:客戶端與服務器通過 TCP 三次握手建立連接(如訪問百度時,先建 TCP 連接 )。
  2. 發送 HTTP 請求報文:客戶端向服務器發請求,包含 “請求方法(如 GET/POST)、URL、協議版本” 等(示例:GET / HTTP/1.1?表示用 GET 方法請求根路徑資源 )。
  3. 接收 HTTP 響應報文:服務器處理請求后,回復包含 “狀態碼、響應頭、實體主體(如 HTML 內容)” 的報文(示例:HTTP/1.1 200 OK?表示請求成功 )。
  4. 斷開 TCP 連接:默認短連接(Connection: close?)直接斷開;長連接(Connection: keep-alive?)會保持連接一段時間,復用傳輸其他資源。

(三)HTTP 報文格式

1. 請求報文結構(以 GET 為例)
請求行:方法 URL 版本 CRLF  (如:GET /index.html HTTP/1.1\r\n)
首部行:字段名: 值 CRLF    (如:Host: www.baidu.com\r\n)
...(更多首部行)
空行:CRLF
實體主體:(GET 通常無實體主體,POST 可帶數據)
2. 響應報文結構
狀態行:版本 狀態碼 短語 CRLF  (如:HTTP/1.1 200 OK\r\n)
首部行:字段名: 值 CRLF        (如:Content-Type: text/html\r\n)
...(更多首部行)
空行:CRLF
實體主體:(如 HTML 代碼、文件內容等)
3. 狀態碼分類
狀態碼分類含義典型碼值場景
1xx通知信息100表示 “繼續”,常為中間響應
2xx成功200請求成功,服務器正常返回數據
3xx重定向302請求的資源 “搬家了”,需重新定向
4xx客戶端錯誤404資源不存在;400 表示請求語法錯
5xx服務器錯誤500服務器內部故障;502 表示網關錯誤

(四)HTTP 請求方法

HTTP 定義了多種請求方法,控制對資源的操作:

方法含義典型場景
OPTION查詢選項探知服務器支持的方法
GET(常見)請求資源瀏覽網頁、獲取圖片等(參數放 URL 里)
HEAD請求資源頭部只獲取響應頭,不下載實體主體
POST(常見)提交數據登錄、上傳文件(參數放請求體)
PUT上傳文檔在指定 URL 存儲文檔(需權限)
DELETE刪除資源刪除指定 URL 對應的資源(需權限)
TRACE環回測試調試用,查看請求的傳輸路徑
CONNECT代理連接用于代理服務器,建立隧道

(五)爬蟲

爬蟲(Web Crawler)?是一種自動化程序,模擬瀏覽器的 HTTP 請求 - 響應流程,批量抓取網絡資源:

  1. 工作邏輯

    • 構造 HTTP 請求(模仿瀏覽器發 GET/POST),獲取網頁 HTML;
    • 解析 HTML 提取鏈接、數據;
    • 遞歸抓取新鏈接,形成 “自動瀏覽 - 采集” 的流程。

總結

  • TCP 核心:通過 “三次握手建連接、四次揮手斷連接、序列號 + 確認號應答、滑動窗口控速率”,實現可靠且高效的傳輸。
  • HTTP 核心:基于 TCP 傳輸,用請求 - 響應模式交互,通過 URL 定位資源,用狀態碼反饋結果,是萬維網的 “通信語言”。
  • 爬蟲本質:自動化的 HTTP 請求 - 解析工具。

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

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

相關文章

[element-plus] el-table在行單擊時獲取行的index

el-table中添加 row-class-name&#xff0c;綁定row-click事件 <el-table:data"list":row-class-name"tableRowClassName"row-click"handleRowClick" > </el-table>給el-table中的每個row對象里添加index屬性 tableRowClassName({…

真實應急響應案例記錄

成功溯源的應急背景事件背景&#xff1a;服務器被植入博彩黑鏈入侵排查查看日志&#xff1a;發現Struts2漏洞利用痕跡通過process monitor工具監控Web進程(java.exe),發現執行了以下命令:攻擊入侵者服務器查看Web日志,可發現攻擊者的的Ip地址61.139.77.xx (四川省成都市 61.139…

RAG學習(五)——查詢構建、Text2SQL、查詢重構與分發

檢索優化&#xff08;二&#xff09; 一、查詢構建 在前面的章節中&#xff0c;我們探討了如何通過向量嵌入和相似度搜索來從非結構化數據中檢索信息。然而&#xff0c;在實際應用中&#xff0c;我們常常需要處理更加復雜和多樣化的數據&#xff0c;包括結構化數據&#xff0…

【typenum】 28 數組長度和二進制數的位數(Len)

一、源碼 這段代碼實現了一個類型級別的長度計算系統&#xff0c;用于在編譯時計算數組長度和二進制數的位數。 定義&#xff08;type_operators.rs&#xff09; /// A **type operator** that gives the length of an Array or the number of bits in a UInt. #[allow(clippy:…

【Docker項目實戰】使用Docker部署Hibiscus.txt簡單日記工具

【Docker項目實戰】使用Docker部署Hibiscus.txt簡單日記工具一、Hibiscus介紹1.1 Hibiscus簡介1.2 主要特點二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、拉取鏡像五、部署Hibis…

openharmony之啟動恢復子系統詳解

OpenHarmony的啟動恢復子系統負責整個系統的啟動流程&#xff0c;其中init進程是整個系統啟動的第一個用戶態進程&#xff08;PID1&#xff09;&#xff0c;承擔著系統初始化的核心職責 &#x1f3af; 目錄結構 &#x1f4cb; 理論基礎&#x1f50d; 源碼結構分析?? 配置體系…

Jenkins + SonarQube 從原理到實戰四:Jenkins 與 Gerrit 集成并實現自動任務

前言 前面我們已經部署了 SonarQube&#xff0c;并加入了 sonar-cxx 插件&#xff0c;實現了 C/C 代碼掃描&#xff0c;同時打通了 Windows AD 域&#xff0c;實現了 AD 用戶登錄與權限管控。 原計劃本篇&#xff08;第四篇&#xff09;完成 Jenkins Gerrit Sonar 的 CI 部分…

基于Spring Boot與Redis的電商場景面試問答解析

基于Spring Boot與Redis的電商場景面試問答解析 第一輪&#xff1a;基礎問題 面試官&#xff1a; 你好小C&#xff0c;今天我們以電商場景為背景進行技術面試。第一個問題&#xff0c;解釋一下Spring Boot的核心優勢是什么&#xff1f; 小C&#xff1a; Spring Boot就是開箱即用…

CUDA安裝,pytorch庫安裝

一、CUDA安裝 1.查看自己電腦適配的CUDA的最高版本 在命令提示符里輸入nvidia-smi表格右上角顯示的CUDA版本是該電腦適配的最高版本一般下載比該版本低一點的版本&#xff0c;因為會更穩定 由于本機沒有GPU所以會出現這個報錯&#xff0c;如果有GPU會出現如下報告&#xff1a…

力扣 第 463 場周賽

1. 按策略買賣股票的最佳時機 給你兩個整數數組 prices 和 strategy&#xff0c;其中&#xff1a; prices[i] 表示第 i 天某股票的價格。 strategy[i] 表示第 i 天的交易策略&#xff0c;其中&#xff1a; -1 表示買入一單位股票。 0 表示持有股票。 1 表示賣出一單位股票。 同…

Matplotlib 可視化大師系列(六):plt.imshow() - 繪制矩陣與圖像的強大工具

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;六&#xff09;&#xff1a;plt.imshow() - 繪制矩陣與圖像的強大工具一、 plt.imshow() 是什么&#xff1f;何時使用&#xff1f;二、 函數原型與核心參數三、 從入門到精通&#xff1a;代碼示例示…

小游戲AssetBundle加密方案解析

據游戲工委數據統計&#xff0c;2025年1-6月&#xff0c;國內小程序游戲市場實際銷售收入232.76億元&#xff0c;同比增長40.2%。其中內購產生收入153.03億元&#xff0c;占比65.7%&#xff0c;呈逐年提升趨勢。爆款頻出的小游戲&#xff0c;已經成為當下游戲行業的重要增長點。…

linux編程----網絡通信(TCP)

1.TCP特點1.面向數據流&#xff1b;2.有連接通信&#xff1b;3.安全可靠的通信方式&#xff1b;4.機制復雜&#xff0c;網絡資源開銷大&#xff1b;5.本質只能實現一對一的通信&#xff08;可使用TCP的并發方式實現一對多通信&#xff09;&#xff1b;2.TCP的三次握手與四次揮手…

HTTP請求的執行流程

HTTP請求的執行流程是一個系統化的過程&#xff0c;涉及多個網絡協議和交互步驟。以下是完整的流程分解&#xff0c;結合關鍵技術和邏輯順序&#xff1a;&#x1f310; 一、連接準備階段??URL解析與初始化??客戶端&#xff08;瀏覽器/應用&#xff09;解析目標URL&#xff…

聯想win11筆記本音頻失效,顯示差號(x)

該博客可以解答 常見問題詳情 Win10系統安裝更新后右下角聲音出現紅叉&#xff0c;電腦也沒有聲音&#xff0c; 通過設備管理器查看“系統設備”發現“音頻部分“出現黃色感嘆號&#xff0c; 更新驅動、卸載驅動與第三方工具檢測安裝后重啟都不行。 故障原因 應該是用戶曾經…

elasticsearch 7.x elasticsearch 使用scroll滾動查詢中超時問題案例

一 問題 1.1 問題描述 2025-08-21 16:57:53.646 | WARN ||||||||||||| scheduling-1 | ElasticsearchRestTemplate | Could not clear scroll: Unable to parse response body; nested exception is ElasticsearchStatusException [Unable to parse response body]; nested: …

高并發內存池(1)-定長內存池

高并發內存池&#xff08;1&#xff09;-定長內存池 可以采用兩種方式&#xff1a; 方式1&#xff1a; template <size_t N>方式2&#xff1a; template <class T>獲取到T對象大小的內存池&#xff0c;更推薦使用方式二&#xff0c;因為可以動態靈活調整類型 需要的…

第三階段sql server數據-4:數據庫腳本生成,備份與還原,分離與附加操作的圖文步驟

1_生成數據庫腳本&#xff08;1&#xff09;在數據庫上右鍵選擇任務&#xff08;2&#xff09;選擇生成腳本&#xff08;3&#xff09;選擇下一步&#xff0c;如果下次不想顯示此頁面&#xff0c;可勾選不再顯示此頁&#xff08;4&#xff09;如果導出全部數據&#xff0c;選擇…

【C++闖關筆記】STL:string的學習和使用(萬字精講)

?系列文章目錄 第零篇&#xff1a;從C到C入門&#xff1a;C有而C語言沒有的基礎知識總結-CSDN博客 第一篇&#xff1a;【C闖關筆記】封裝①&#xff1a;類與對象-CSDN博客 第二篇&#xff1a;【C闖關筆記】封裝②&#xff1a;友元與模板-CSDN博客 第三篇&#xff1a;【C闖…

06 - spring security角色和權限設置

spring security角色和權限設置 文檔 00 - spring security框架使用01 - spring security自定義登錄頁面02 - spring security基于配置文件及內存的賬號密碼03 - spring security自定義登出頁面04 - spring security關閉csrf攻擊防御05 - spring security權限控制 角色和權限…