計算機網絡學習筆記:TCP流控、擁塞控制

文章目錄

  • 前言
  • 一、TCP流量控制
    • 1.1、案例:三次流量控制
    • 1.2、持續計時器
  • 二、TCP擁塞控制
    • 2.1、擁塞控制的指標
    • 2.2、慢開始算法和擁塞避免算法
    • 2.3、快重傳算法和快恢復算法
    • 2.4、練習
  • 三、TCP擁塞控制與網際層擁塞控制
  • 總結


前言

??TCP協議中的流量和擁塞,是兩個關鍵的控制指標,兩者的側重點也是不一樣的:

  • 流量控制:側重于控制點對點通信中發送方與接收方的流量,保證發送方的發送速率不高于接收方的接收速率,避免接收方的緩存溢出。
  • 擁塞控制:側重于控制全局網絡中的主機,路由器,按照擁塞控制算法,自行控制發送速率。防止過多的數據注入到網絡中,使網絡可以承受現有的負荷。

一、TCP流量控制

??流量控制的目的,是為了避免發送方的發送速率高于接收方的接收速率,具體是接收方根據自己的接收能力,控制發送方的發送速率。
??控制手段則是通過發送方的發送窗口swnd(s:send)和接收方的接收窗口rwnd(r:receive)

1.1、案例:三次流量控制

??TCP流量控制的過程,假設我有A和B兩臺主機,A是發送方,B是接收方。那么在建立連接時,B應該通知A,自己的接收窗口是多少,A相應地將自己的發送窗口也設置相同的大小:
在這里插入圖片描述
??A發送出第一個報文段,對應的是1-100:
在這里插入圖片描述
??A發送出第二個報文段,對應的是101-200:
在這里插入圖片描述
??發送第三個報文段,丟失:
在這里插入圖片描述
??主機B給主機A發送累計確認報文段,對seq為201之前的數據進行累計確認
在這里插入圖片描述
??在累計確認的同時,接收方通知發送方,自己的rwnd大小發生了變更,則發送方在將自己發送數據的滑動窗口向前滑動時,也要將自己的swnd同步變更,當前的rwnd和滑動窗口如圖所示,這是第一次流量控制的體現
在這里插入圖片描述
??隨后發送301~500的數據。
在這里插入圖片描述
??201到300的重傳計時器超時了,主機A將其重新封裝成一個TCP報文段進行發送,主機B發送一個確認報文段,同時調整自身的接收窗口為100:
在這里插入圖片描述
??這是第二次流量控制的體現
在這里插入圖片描述
??最后發送501~600的數據,并且接收方進行確認,并進行最后一次流量控制,將rwnd設置為0,表示不再接受數據,有可能是因為接收方的緩存區已滿。
在這里插入圖片描述
??上述的過程,就是一次完整的流量控制。

1.2、持續計時器

??接著上面的案例,假設最后一次流量控制之后,接收方B處理完成了數據,緩存區又有了空間,準備繼續接收發送方A的數據,這時B需要再次對A進行流量控制,將自身的rwnd調整至300:
在這里插入圖片描述
??但是消息在發送的過程中丟失了,那么就會出現A一直等待B的非零窗口通知,B一直等待A發送消息,造成通信死鎖的情況。
??為了解決這樣的問題,TCP給每一個連接都設置了一個持續計時器,并且規定,即使接收窗口值為0,也必須接受零窗口探測報文段,確認報文段以及攜帶有緊急數據的報文段

在這里插入圖片描述
在這里插入圖片描述

二、TCP擁塞控制

??網絡擁塞問題是指網絡中傳輸的數據過多,超過了網絡設備(如路由器、交換機)或鏈路的處理能力,導致網絡性能下降的現象。就像高峰期的馬路:

  • 如果車(數據包)太多,馬路(網絡)就會堵;
  • 堵車后,不僅原來開的慢,新車也進不來;
  • 嚴重時還可能發生車輛回退(丟包)、繞路(重傳)甚至“交通癱瘓”(網絡崩潰)。

??如果不加以控制,導致的就是整個網絡的崩潰,類似于微服務的雪崩
在這里插入圖片描述
??擁塞控制的基本方法,分為開環控制閉環控制

  • 開環控制側重于從設計的角度避免出現擁塞的問題,前提是要提前知道進行控制的網絡的參數和流量。
  • 閉環控制側重于從運行時的角度避免擁塞的問題,即對于網絡進行監控,及時接受反饋并且調整。

在這里插入圖片描述
??閉環控制,又可以分為顯式控制算法隱式控制算法

  • 顯式控制算法指的是,路由器向源點反饋網絡的擁塞狀態,即路由器擁塞,丟棄IP數據報,并且通知源站,通知同樣需要利用網絡通信,通知的行為,可能會造成網絡更加擁堵。可以在路由器的轉發分組中,保留一個字段,該字段的值表示網絡的擁塞狀態。
  • 隱式控制算法指的是,源站點自己對網絡的指標進行觀察,判斷網絡是否發生擁塞。TCP使用的就是隱式控制算法

在這里插入圖片描述

2.1、擁塞控制的指標

??對于發送方而言,指標有發送窗口swnd(s:send),擁塞窗口cwnd(c:crowded),對于接收方而言,指標有接收窗口rwnd(r:reveive)
??只有序號落入swnd的數據,發送方才可以進行發送,swnd的取值,是cwnd和rwnd的最小值。
??rwnd用于控制流量,cwnd用于控制擁塞
在這里插入圖片描述
在這里插入圖片描述

2.2、慢開始算法和擁塞避免算法

??慢開始算法擁塞避免算法,通常配合使用,這里加入了一個ssthresh慢開始門限的指標
在這里插入圖片描述
??使用慢開始算法和擁塞避免算法組合時,首先運用的是慢開始算法將cwnd進行逐次指數累加,直到到達ssthresh的值:
在這里插入圖片描述
??然后改用擁塞避免算法每個輪次cwnd的值只能 + 1,而不像慢開始算法,可以指數增長,當發生了重傳和報文段丟失的情況,說明網絡中出現了擁塞,就需要調整擁塞窗口cwnd和ssthresh的值,然后重新執行慢開始算法

  1. ssthresh的值調整為發生擁塞時,擁塞窗口cwnd值的一半。
  2. cwnd的值重置為1。

在這里插入圖片描述
??最終的曲線如下:
在這里插入圖片描述

2.3、快重傳算法和快恢復算法

??快重傳算法快恢復算法是對于慢開始算法擁塞避免算法的改進。因為后者可能會存在一個問題,也就是如果路由器是因為請求出現了誤碼,才將其丟棄**(非網絡出現擁塞)**,源站是無法判斷這種情況的,會將cwnd的值重置為1重新開始,降低了效率。
??快重傳算法的目的是讓發送方盡快知道TCP報文段的丟失,從而盡快地進行重新傳輸,就要求接收方在收到消息后,立刻進行ack。
在這里插入圖片描述
??如下圖,如果TCP沒有接收到3號報文段,就會在后續報文段到達時,**發送對未收到報文段的重復確認。**當發送方接收到3次重復確認后,就對丟失的報文進行立刻重傳(接收方在接收到M4后,發現M3并沒有接收到,于是重復確認M2,重復確認M2到達3次后,發送方立刻重傳M2)
在這里插入圖片描述
??當發送方接收到3次重復確認后,同時也會執行快恢復算法 + 擁塞避免算法

  1. ssthresh的值調整為cwnd值的一半。
  2. cwnd的值調整為cwnd值的一半。

在這里插入圖片描述
??最終的曲線如下圖:
在這里插入圖片描述
在這里插入圖片描述

2.4、練習

在這里插入圖片描述
??這道題的答案是C。擁塞窗口為16KB時發生了超時,那么此時的指標:

  • ssthresh:16/2 = 8
  • cwnd:1

??然后重新使用慢開始算法

RTTcwnd
12
24
38(到達了ssthresh,轉換為擁塞避免算法
48 + 1 = 9

在這里插入圖片描述
??這道題的答案是A。同樣地,擁塞窗口為8KB時發生了超時,那么此時的指標:

  • ssthresh:8/2 = 4
  • cwnd:1

??然后重新使用慢開始算法

RTTcwnd
12
24(到達了ssthresh,轉換為擁塞避免算法
35
46
57
1012

??這一題比上一題多了一個考察點,發送窗口swnd 是 rwnd 和 cwnd 的較小值。 min(12,10)= 10。


在這里插入圖片描述
??這道題的答案選A:
在這里插入圖片描述

三、TCP擁塞控制與網際層擁塞控制

??與運輸層TCP擁塞控制相關的,是網際層路由器對于IP數據報的丟棄策略。由于路由器的緩存隊列是標準的“先進先出”的結構,隊列已滿,則會丟棄最后的元素。
??當多個發送行為觸發尾部丟棄時,這些發送方都會進入慢開始狀態,稱為全局同步,會導致同一時刻網絡流量的驟降,以及之后的持續增高。
??為了避免這樣的問題,提出了主動隊列管理的概念,其核心思想在于避免出現路由器緩存隊列已滿的情況,當隊列長度達到某個閾值時,就觸發丟棄策略:
在這里插入圖片描述
在這里插入圖片描述

總結

在這里插入圖片描述

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

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

相關文章

【Linux】Tomcat搭建

前言 Tomcat Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。 JSP JSP是一種跨平臺的動態網頁技術標準,可以…

Ajax 核心知識點全面總結

文章目錄 Ajax 核心知識點全面總結一、Ajax 基礎概念1、定義2、核心特點 二、Ajax 工作原理與核心組件1、工作流程2、XMLHttpRequest(XHR)對象 三、Ajax 請求方法與參數1、常見請求方法2、請求參數處理 四、Ajax 異步與錯誤處理1、異步處理2、錯誤處理 五…

SpinFlowSim:用于癌癥組織學信息驅動的擴散MRI微血管映射的血流模擬框架|文獻速遞-深度學習醫療AI最新文獻

Title 題目 SpinFlowSim: A blood flow simulation framework for histology-informeddiffusion MRI microvasculature mapping in cancer SpinFlowSim:用于癌癥組織學信息驅動的擴散MRI微血管映射的血流模擬框架 01 文獻速遞介紹 在擴散磁共振成像&#xff08…

量化面試綠皮書:21. 拋硬幣游戲

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 21. 拋硬幣游戲 兩個賭徒正在玩一個拋硬幣游戲。 賭徒A有(n1)枚均勻硬幣,賭徒B有n枚均勻硬幣。 Q: 如果兩人同時拋擲所有硬幣&a…

OpenLayers 框架體系

注:當前使用的是 ol 9.2.4 版本,天地圖使用的key請到天地圖官網申請,并替換為自己的key OpenLayers框架組織結構龐大,只通過官網API進行查看,對框架結構缺少一個整體、全面的看法。借助樹形結構圖或思維導圖&#xff0…

緩存系統-基本概述

目錄 一、系統概述 二、名詞解釋 三、淘汰策略 1、LRU 2、LFU 3、FIFO 4、TTL 5、Random 四、讀寫模式 1、Cache Aside(旁路緩存) 2、Write Through(直寫) 3、Write Back(回寫) 五、問題方案 …

基于GNU Radio Companion搭建的BPSK收發通信實驗

目錄 一、實驗目的和要求 二、實驗內容 1.Lab5 仿真設計一個BPSK的數字收發射系統 Lab6 實際使用RTLSDR解調BPSK信號 一、實驗目的和要求 1.了解軟FM的工作方式和原理,數字通信的碼間串擾及星座圖 2.掌握并正確使用RTL-SDL硬件和Gnuradio軟件 3.正確使用Gnraduo軟件,建…

華為OD機試-返回矩陣中非1的元素、個數/數值同化-BFS(JAVA 2025B卷)

import java.util.*;/*** author 308413* version Ver 1.0* date 2025/6/18* description 返回矩陣中非1的元素*/ public class Non1ElementInMatrix {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int N scanner.nextInt();int M scan…

Redis學習筆記——黑馬點評 消息隊列25-30

前言: 學習收獲: Redis消息隊列: 消息隊列(Message Queue),字面意思就是存放消息的隊列。最簡單的消息隊列包括3個角色: 消息隊列:存儲和管理消息,也被稱為消息代理生…

基于Django+Vue3的草莓病害檢測系統設計與實現,Web前后端分離,YOLOv8 Web目標檢測系統

這里寫自定義目錄標題 基于DjangoVue3的草莓病害檢測系統 基于DjangoVue3的草莓病害檢測系統 本項目結合 YOLOv8 與 Django Vue3 ,構建了一個通用的 Web 前后端系統,便于用戶進行目標檢測的操作和展示,實現對圖片、視頻實時目標檢測和攝像頭…

【MFC】樹控件的使用詳解

目錄 添加線條鏈接 添加折疊小按鈕 設置樹控件的節點和對應的圖標 設置默認選中項 設置選中項切換響應函數 涉及接口介紹: 首先我們通過資源視圖可以添加一個樹形控件,如下: 添加線條鏈接 在樹形控件中,有一個屬性“Has…

跨境賣家警報。抽繩背包版權案立案,TRO在即速排查

近日Shenzhenshi Jingyida Trading Co., LTD委托律所Dewitty And Associates, Chtd.對其熱銷的抽繩設計多功能運動背包發起跨境版權維權,保護范圍涵蓋產品外觀設計。 案件基本情況: 起訴時間:2025-6-12 案件號:25-cv-06509 原…

Android Activity全面解析:從創建到生命周期的完整指南

Activity作為Android四大組件之一,是構建用戶界面的核心單元。筆者通過郭霖著的第一行代碼入門安卓,內容基本都取自書中,這篇博客作為筆者的筆記同時精簡了一些書中內容分享在csdn中 一、Activity的創建與基礎配置 1.1 創建Activity的基本步…

深入理解 Python 的 secrets 模塊:打造更安全的隨機數生成機制

深入理解 Python 的 secrets 模塊:打造更安全的隨機數生成機制 在構建涉及用戶身份認證、權限管理、加密通信等系統時,開發者最不能忽視的一個問題就是“安全性”。安全問題的核心之一在于“隨機性”——尤其是密碼、驗證碼、Token、Session、API Key 的…

CHAPTER 19 Concurrency Models in Python

一、A Bit of Jargon 1、關鍵術語解析 1.1 并發 (Concurrency) 定義: 并發是指同時處理多個待處理任務的能力,這些任務可以依次或并行(如果可能)進行,最終每個任務都會成功或失敗。 理解: 單核 CPU: 即使是單核 CPU 也可以實…

DCM4CHEE Archive Light 開發環境部署(5)-IDEA集成調試配置

系列文章目錄 DCM4CHEE Archive light 開發環境部署(1)-前言DCM4CHEE Archive light 開發環境部署(2)-PostgreSQLDCM4CHEE Archive light 開發環境部署(3)-OpenLDAPDCM4CHEE Archive light 開發環境部署(4)-Wildfly(JBoss)DCM4CHEE Archive light 開發環境部署(5)-IDEA集成…

在rust中執行命令行輸出中文亂碼解決辦法

如果你使用標準的依賴庫執行命令中包含中文的話, 就會發現中文亂碼,如果你的輸出中沒有中文,就可以正常輸出,因為windows的命令行默認使用的是gbk編碼。。。。。 #[tauri::command] pub async fn run_command(command: String) -…

判斷當前瀏覽器卡不卡

方法一:使用 requestAnimationFrame 和時間戳計算平均 FPS let frameCount 0; let lastTime performance.now(); let fps 0; let isSlow false; // 是否卡頓的標志function calculateFPS(currentTime) {frameCount;// 每隔大約 1000 毫秒(1秒&#…

51c嵌入式~電路~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11748634 一、延長電子元器件的貨架壽命 本文探討了電子元器件的貨架壽命問題,重點討論了氧化、濕度敏感等級(MSL)與貨架壽命之間的關系。文章通過具體例子說明了氧化對電子元器件可…

Eureka 與 Feign(一)

Eureka 與 Feign 知識解析 1. Eureka Spring Cloud Eureka 是服務發現組件,包含: Eureka Server:注冊中心,管理服務實例Eureka Client:服務實例,向注冊中心注冊/獲取服務信息 核心功能: 服…