【計算機網絡】TCP協議相關總結,TCP可靠性的生動講解

TCP 可靠性 = 確保快遞不丟、不亂、不過載

機制作用(快遞類比)防止的問題
檢驗和檢查包裹是否損壞,損壞就重新發數據出錯
序列號給每個包裹編號,按順序整理亂序、重復
確認應答每送到一件,就讓收件人簽收丟失
滑動窗口控制一次寄幾件,避免堆積過載
超時重傳快遞超時未送達,自動補發丟失
擁塞控制高峰期限流,減少派送壓力網絡堵塞
流量控制收件人快遞放不下了,暫停派送過載
  • 滑動窗口和流量控制的個人理解:
  • 滑動窗口是限制某一刻的發送大小,而流量控制更像所需發送的全部流量的限制大小
  • 滑動窗口 就像一條限流高速公路,最多同時允許 5 輛車行駛(窗口大小 = 5)。
  • 流量控制 相當于整個高速的容量,如果總流量太大(接收端處理不過來),就會限速或關閉部分入口(縮小窗口)。

TCP 如何保證可靠性?

1?? 檢驗和:接收端檢測數據是否出錯,若有錯誤則丟棄并請求重傳。

2?? 序列號 & 確認應答

  • 序列號:保證數據按序傳輸,去重重復數據。
  • 確認應答(ACK):接收方收到數據后,發送 ACK 確認,告知發送方已接收的數據范圍及下次應發送的位置。

3?? 滑動窗口:動態調整發送數據量,提高傳輸效率,防止接收端超載。

4?? 超時重傳:若發送數據超時未收到 ACK,認為丟失并重新發送,超時時間動態計算。

5?? 擁塞控制:監測網絡狀態,避免因發送速率過高導致網絡擁堵,保證數據高效傳輸。

6?? 流量控制:接收端通過窗口大小告知發送方自身處理能力,避免數據過載和丟包。


TCP 滑動窗口詳解

1. 滑動窗口是什么?

TCP 滑動窗口(Sliding Window)是一種流量控制機制,用于管理發送端和接收端的數據傳輸速率,確保高效傳輸的同時,防止接收端超載。
窗口大小指的是不需要等待確認應答包而可以繼續發送數據包的最大值。

核心作用:

  • 提高傳輸效率:無需等待每個數據包的 ACK 確認才能繼續發送,而是允許發送多個數據包,提高帶寬利用率。
  • 避免接收方過載:根據接收方的處理能力調整發送速率,防止數據溢出。

2. 滑動窗口的工作過程

假設發送端一次最多發送 5 個數據包,窗口大小 = 5(每個數據包用 ①②③④⑤ 表示):

1?? 初始狀態(發送窗口 = 5)

[①②③④⑤] ⑥⑦⑧⑨🔟 ...  (窗口大小 = 5,最多可發送 5 個)
  • 發送方先發送 ①②③④⑤,等待 ACK 確認。

2?? 收到部分 ACK(窗口右移)

?① ?② [③④⑤⑥⑦] ⑧⑨🔟 ...  
  • ①② 已收到 ACK,窗口向前滑動 2 位,允許發送 ⑥⑦。

3?? 持續滑動(高效傳輸)

?① ?② ?③ ?④ ?⑤ [⑥⑦⑧⑨🔟] ...  
  • 每次收到 ACK,窗口繼續滑動,提高傳輸效率。

3. 窗口大小如何調整?

1?? 流量控制(Flow Control)

  • 接收端調整窗口大小(rwnd,防止緩存溢出。例如:

    • 緩存充足 → 窗口大 → 發送方可發送更多數據。

    • 緩存快滿了 → 窗口縮小 → 發送方減少數據發送。

    • 緩存滿了 → 窗口變 0 → 發送方暫停發送,等待窗口恢復。

2?? 擁塞控制(Congestion Control)

  • 發送端根據網絡情況調整窗口大小(cwnd,防止網絡擁堵。例如:

    • 網絡暢通cwnd 增加,提高發送速率。

    • 檢測到丟包cwnd 減小,降低發送速率。


TCP 擁塞控制詳細解析

四大算法:

  • 慢開始(Slow Start)

  • 擁塞避免(Congestion Avoidance)

  • 快速重傳(Fast Retransmit)

  • 快速恢復(Fast Recovery)


明確擁塞產生的基礎過程:A發送報文,B回一個ACK表示收到,循環操作

慢開始

初始階段指數增長,避免一開始就占滿帶寬,即每收到一次ACK就指數增長下一次發送報文的大小,但由此帶來的問題是,從1開始的指數增長會不會也變得很大,導致擁塞,于是引出擁塞避免

擁塞避免

為慢開始的指數增長設定一個閾值,一旦超過后,不再指數增長,而是每次+1

快速重傳

TCP 規定:當發送方連續收到 3 個重復 ACK,說明某個數據包丟失了。發送方立即重傳丟失的數據包,而不等待超時。

  • 例:發送方發送 pkt1, pkt2, pkt3, pkt4。
    pkt2 丟失,接收方收到 pkt3 后,發送 重復 (在很短的時間內)ACK(pkt2)。

  • 發送方收到 3 個 ACK(pkt2),立即重傳 pkt2,無需等待超時。(如果沒有快速重傳機制,正常是接收方每收到pkt2,所以一直不發送pkt2的ACK導致發送方沒接到這個ACK最終超時,才進行重新發送)

快速恢復

避免慢開始,從丟包前的一半窗口大小開始,隨后采用擁塞避免算法逐步增加窗口

  • 設想一下當前鏈路每次傳輸100,突然丟包,如果沒有快速恢復,則根據慢開始算法從1開始,重新增長速度,太低效,因此規定,減少窗口大小到1/2而不從1開始,即,從50開始,同時停止指數增長,每次+1,復用擁塞避免的邏輯而不使用慢開始,這就是快速恢復。

什么是 SYN洪泛攻擊?如何防范?

SYN洪泛攻擊屬于 DOS 攻擊的一種,它利用 TCP 協議缺陷,通過發送大量的半連接請求,耗費 CPU 和內存資源。

1. 什么是半連接(Half-Open Connect)

在 TCP 三次握手過程中,服務器發送 [SYN/ACK] 后(第二次握手后),進入 SYN_RECV 狀態,等待客戶端的 [ACK]

  • 若收到 [ACK],連接建立。
  • 若未收到,服務器會 重發 [SYN/ACK] 直至超時,占用資源。
2. SYN 攻擊原理

攻擊者偽造 大量不存在的 IP 地址,向服務器發送 [SYN],服務器回復 [SYN/ACK] 并等待 ACK,但客戶端 不會響應

  • 影響:大量半連接占滿隊列,導致正常請求無法處理,甚至服務器癱瘓。
  • 檢測:若服務器出現 大量 SYN_RECV 連接,且來源 IP 隨機,基本可判定為 SYN 攻擊。
3. SYN 攻擊防范
  • 網絡層防護
    • 通過 防火墻/路由器 過濾異常流量。
    • 限制 每個 IP 的 SYN 速率
  • TCP/IP 協議棧優化
    • 增加最大半連接數,提高抗攻擊能力。
    • 縮短 SYN 超時時間,減少資源占用。
  • SYN Cookies 技術
    • SYN/ACK 中嵌入 特殊編碼(Cookie),不分配資源,只有客戶端回復正確的 ACK 才真正建立連接。
    • 特點:無需維護半連接隊列,可有效抵御 SYN 攻擊。

https://github.com/0voice

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

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

相關文章

Go基于協程池的延遲任務調度器

原理 通過用一個goroutine以及堆來存儲要待調度的延遲任務,當達到調度時間后,將其添加到協程池中去執行。 主要是使用了chan、Mutex、atomic及ants協程池來實現。 用途 主要是用于高并發及大量定時任務要處理的情況,如果使用Go協程來實現每…

杰發科技AC7801——滴答定時器獲取時間戳

1. 滴答定時器 杰發科技7801內部有一個滴答定時器,該定時器是M0核自帶的,因此可以直接用該定時器來獲取時間戳。 同樣,7803也可以使用該方式獲取時間戳。 2. 滴答定時器原理 SysTick是一個24位的遞減計數器,它從預設的重裝載值…

湖倉一體概述

湖倉一體之前,數據分析經歷了數據庫、數據倉庫和數據湖分析三個時代。 首先是數據庫,它是一個最基礎的概念,主要負責聯機事務處理,也提供基本的數據分析能力。 隨著數據量的增長,出現了數據倉庫,它存儲的是…

第十五屆藍橋杯單片機組4T模擬賽三(第二套)

本套試題在4T平臺中的名字為第15屆藍橋杯單片機組模擬考試三,不知道哪套是4T的模擬賽,所以兩套都敲一遍練練手感。 為了代碼呈現美觀,本文章前面的各個模塊在main函數中的處理函數均未添加退出處理,在最后給出的完整代碼中體現。 …

CT技術變遷史——CT是如何誕生的?

第一代CT(平移-旋轉) X線球管為固定陽極,發射X線為直線筆形束,一個探測器,采用直線和旋轉掃描相結合,即直線掃描后,旋轉1次,再行直線掃描,旋轉180完成一層面掃描,掃描時間3~6分鐘。矩陣象素256256或320320。僅用于顱腦檢查。 第二代CT (平移-旋轉) 與第一代無質…

Virtual Box虛擬機安裝蘋果Monterey和big sur版本實踐

虛擬機安裝蘋果實踐,在Windows10系統,安裝Virtual Box7.1.6,安裝虛擬蘋果Monterey版本Monterey (macOS 12) 。碰到的主要問題是安裝光盤不像Windows那么容易拿到,而且根據網上很多文章制作的光盤,在viritualBox里都無法…

dify基礎之prompts

摘要:在大型語言模型(LLM)應用中,Prompt(提示詞)是連接用戶意圖與模型輸出的核心工具。本文從概念、組成、設計原則到實踐案例,系統講解如何通過Prompt解鎖LLM的潛能,提升生成內容的…

【學寫LibreCAD】0 仿寫LibreCAD簡介

一、LibreCAD 核心模塊: 核心模塊(Core) 功能:處理 CAD 的核心邏輯,如幾何計算、圖形對象管理、坐標系轉換等。關鍵組件: 圖形對象:如直線、圓、圓弧、多段線等。數學工具:向量、矩…

HTML元素,標簽到底指的哪塊部分?單雙標簽何時使用?

1. 標簽&#xff08;Tag&#xff09; vs 元素&#xff08;Element&#xff09; 標簽&#xff08;Tag&#xff09; 標簽是 HTML 中用于定義元素的符號&#xff0c;用尖括號 < > 包裹。例如 <img> 是標簽。元素&#xff08;Element&#xff09; 元素是由 標簽 內容…

Android APK組成編譯打包流程詳解

Android APK&#xff08;Android Package&#xff09;是 Android 應用的安裝包文件&#xff0c;其組成和打包流程涉及多個步驟和文件結構。以下是詳細的說明&#xff1a; 一、APK 的組成 APK 是一個 ZIP 格式的壓縮包&#xff0c;包含應用運行所需的所有文件。解壓后主要包含以…

Token相關設計

文章目錄 1. 雙Token 機制概述1.1 訪問令牌&#xff08;Access Token&#xff09;1.2 刷新令牌&#xff08;Refresh Token&#xff09; 2. 雙Token 認證流程3. Spring Boot 具體實現3.1 生成 Token&#xff08;使用 JWT&#xff09;3.2 解析 Token3.3 登錄接口&#xff08;返回…

HTTP 請求時傳遞多部分表單數據

HTTP 請求時傳遞多部分表單數據&#xff08;multipart/form-data&#xff09; --data-raw $------demo11111\r\nContent-Disposition: form-data; name"Filedata"; filename"截屏2025-02-27 15.45.46.png"\r\nContent-Type: image/png\r\n\r\n\r\n------d…

Java基礎關鍵_013_日期處理

目 錄 一、傳統 API 1.System.currentTimeMillis() &#xff08;1&#xff09;說明 &#xff08;2&#xff09;實例 2.構造方法 &#xff08;1&#xff09;說明 &#xff08;2&#xff09;無參構造 &#xff08;3&#xff09;有參構造 3.日期格式化 &#xff08;1&am…

51單片機中reg52.h與regx52.h在進行位操作時的不同

reg52.h中不能使用例如 P2_0;這樣的定義 而只能使用 P2^0;這樣的定義 但是都不可以對位進行直接賦值操作&#xff1b; 而 regx52.h中可以使用 P2_0和P2^0&#xff1b;但是只有使用下劃線的才可以對位進行賦值操作 例如P2_0 1; 但不可以是P2^0 1; 在 C 語言中&#xff0c;…

基于Rook的Ceph云原生存儲部署與實踐指南(上)

#作者&#xff1a;任少近 文章目錄 1 Ceph環境準備2 rook部署ceph群集2.1 Rook 幫助地址2.2 安裝ceph2.3 獲取csi鏡像2.4 Master參加到osd2.5 設置默認存儲 3 Rook部署云原生RBD塊存儲3.1 部署storageclass資源3.2 部署WordPress使用RBD3.3 WordPress訪問 4 Rook部署云原生RGW…

FastExcel與Reactor響應式編程深度集成技術解析

一、技術融合背景與核心價值 在2025年企業級應用開發中&#xff0c;大規模異步Excel處理與響應式系統架構的結合已成為技術剛需。FastExcel與Reactor的整合方案&#xff0c;通過以下技術協同實現突破性性能&#xff1a; 內存效率革命&#xff1a;FastExcel的流式字節操作與Re…

DeepSeek R1/V3滿血版——在線體驗與API調用

前言&#xff1a;在人工智能的大模型發展進程中&#xff0c;每一次新模型的亮相都宛如一顆投入湖面的石子&#xff0c;激起層層波瀾。如今&#xff0c;DeepSeek R1/V3 滿血版強勢登場&#xff0c;為大模型應用領域帶來了全新的活力與變革。 本文不但介紹在線體驗 DeepSeek R1/…

Spring Data JPA 中的分頁實現:從 BasePage 到 Pageable

文章目錄 Spring Data JPA 中的分頁實現&#xff1a;從 BasePage 到 Pageable背景&#xff1a;為什么需要分頁&#xff1f;認識 BasePage 類深入 toPageable() 方法1. 處理頁碼和頁面大小2. 處理排序方向3. 處理排序字段4. 生成 Pageable 對象 實戰&#xff1a;如何使用 BasePa…

Android Studio 新版本Gradle發布本地Maven倉庫示例

發布代碼到JitPack示例&#xff1a;https://blog.csdn.net/loutengyuan/article/details/145938967 以下是基于 Android Studio 24.2.2&#xff08;Gradle 8.10.2 AGP 8.8.0 JDK17&#xff09; 的本地 Maven 倉庫發布示例&#xff0c;包含aar和jar的不同配置&#xff1a; 1.…

python量化交易——金融數據管理最佳實踐——qteasy創建本地數據源

文章目錄 qteasy金融歷史數據管理總體介紹本地數據源——DataSource對象默認數據源查看數據表查看數據源的整體信息最重要的數據表其他的數據表 從數據表中獲取數據向數據表中添加數據刪除數據表 —— 請盡量小心&#xff0c;刪除后無法恢復&#xff01;&#xff01;總結 qteas…