傳輸層7——TCP擁塞控制(重點!!!)

目錄

一、認識擁塞控制

1、什么叫做擁塞?

2、擁塞的特點

3、流量控制 VS 擁塞控制

二、TCP如何防止擁塞?

1、慢開始

2、擁塞避免

3、3重復確認 和 快重傳算法

4、快恢復算法

5、總結

三、主動隊列管理AQM

1、技術背景

2、AQM思

想和實現策略


一、認識擁塞控制

1、什么叫做擁塞?

需求超過可供資源,即不夠用
例如車太多,路不夠寬,即擁塞

資源不夠,我增加資源量不就行了嗎?
不行。
例如:
一,增加節點緩存
可處理機處理速度跟不上 導致 排隊
排隊久了 導致 數據重傳
重傳 導致更多數據發到網絡
更加擁堵

二、增加處理機處理速度
處理機快了,他沒問題了,不代表其他地方沒問題
依舊可能擁塞

好,你可能會疑惑,單個優化解決不了問題
那我tm全部都提高不就行了嗎?
我速度加快,緩存加大,傳輸加快,你變快,我變大,統統加快加大
豈不妙哉?
謬也。
這樣是能夠容許更大的流量
可是,容量總是有限的,并不能無窮無盡
同時,更大的容量將會導致更大擁塞,造成更大的損失

所以,不能從根本上消除擁塞
因此,只能盡量避免擁塞
同時,擁塞會趨于惡化
例如路由器沒有足夠緩存,就會丟棄分組
于是發送方重傳
導致更多的數據進入網絡交通中
更堵

2、擁塞的特點

擁塞的控制是困難的,改進某個局部,
可能會對其他局部帶來影響
因此,擁塞控制需要全盤考慮
這是十分復雜的

常注意的幾個點:
1、分組的分組是擁塞表現,而不是原因
2、擁塞控制機制本身往往導致了網絡擁塞的發生
3、開環控制:設計初期,考慮全局,一旦運行,力求不擁塞
4、閉環控制:不求消除擁塞,而是動態調節,力求避免擁塞(其實就是自主反饋調節機制)

閉環控制方式對擁塞的措施:
1、檢測網絡,以便知道何時、何地發生擁塞
2、把擁塞信息傳到不擁塞,可以處理的地方
3、根據反饋,調節系統運行,消除擁塞

要動態檢測網絡是否擁塞,以及時反饋,總得有個標準
一些常見的擁塞標注:
丟失分組數、超時重傳的分組數、平均分組時延等
這不重要,指標很多,略微分析即可

3、流量控制 VS 擁塞控制

擁塞控制是全局性的問題
是某一個地方除了問題,影響了全局的運行
因此屬于全局性的協調
涉及所有人

流量控制僅僅是TCP鏈接雙方的問題
是端對端之間出了問題
僅僅設計這倆貨

二、TCP如何防止擁塞?

有四種機制:慢開始、擁塞避免、快重傳、快恢復
將上述四種機制加以合適的方法進行搭配使用
即可達到消除擁塞,修正系統,通暢運行的妙用!

在講解機制之前,需要了解的相關知識:
首先,發送方維持一個擁塞窗口cwnd,擁塞窗口取決于擁塞程度
其次,使發送窗口==擁塞窗口cwnd
一般來說,只要沒有擁塞,就盡量增大擁塞窗口,以發送更多數據
相反,擁堵則減少

發送方如何得知到底發生擁塞了沒有?
如何判斷?
一般網絡擁塞,就會導致路由器來不及處理
從而丟掉分組
可是,現代通信的傳輸質量很高
分組丟失的概率遠小于1%
于是,只要發送的超時計時器超過時間
就可以判斷網絡發生了擁塞
因此,對發送方來說:網絡擁塞的標志是:重傳超時

1、慢開始

從小到大逐漸增加發送窗口
那么一開始設置多大呢?
SMSS:發送方最大報文段。單位,字節

慢開始階段的初始cwnd設置規則

SMSS(字節)初始cwnd值(單位:SMSS)
SMSS > 21902 SMSS
1095 < SMSS ≤ 21903 SMSS
SMSS ≤ 10954 SMSS

擁塞窗口的單位實際上是字節數
慢開始規定:
每收到一個新的報文段,擁塞窗口最多增加1個SMSS大小(重傳不算)
因此,每一次擁塞窗口增加的字節數一定小于等于SMSS

慢開始的機制,使得一開始并不發送很多的數據
而是逐步增加,稱為慢開始
為了防止cwnd增加過大,該機制還設置了慢開始門限ssthresh
即發送窗口最大容量

只要慢開始的擁塞窗口大于ssthresh慢開始門限,則啟動擁塞避免機制

2、擁塞避免

機制:每經過一個RTT時間,擁塞窗口增加1
慢開始則是每經過一個RTT時間,確認多少,增加多少
擁塞避免并非消除擁塞,只是減緩擁塞窗口增長速度,使網絡不容易擁塞

當慢開始擁塞窗口大于門限,啟動擁塞避免
讓擁塞窗口增加的慢一點

而當擁塞避免運行到一定程度,擁塞窗口大到一定程度后
發送方開始出現重傳超時
于是,判斷網絡擁塞
怎么辦?
調整門限擁塞窗口cwnd設為1、執行慢開始算法
調整多少?
門限減一半,ssthresh /= 2

因此,如上述,慢開始和擁塞避免兩種機制反復交替運行
就可以達到減少擁塞發生的情況

快重傳、快恢復:啊????那我呢???

事實上,僅僅靠慢開始和擁塞控制并不能真正的減少擁塞
還有新的問題,還有高手

3、3重復確認 和 快重傳算法

如圖:

當時傳送到M3時,分組丟失;但是事實上并沒有發生擁塞
僅僅只是意外丟了一個分組M3
此時如果發送方遲遲收不到確認,就會導致超時重傳
于是,判定網絡阻塞,執行慢開始算法,導致降低傳輸效率

此時,
對于接收方,每收到一個數據分組
不論該數據分組是否是有序到達,接收方必須即時回發確認分組
于是,在超時重傳時間內,
發送方就會收到多個對同一個報文的確定報文
于是,當發送方收到3個對同一個報文的確認報文時
就認為現在并未出現網絡擁塞,
而是僅僅少接收一個報文段M3
因此,啟動快重傳算法:立即進行重傳M3
同時,不啟動慢開始,而是啟動快恢復算法

4、快恢復算法

什么是快恢復算法?
即:
調整門限:ssthresh /= 2
設置擁塞窗口,cwnd ?= ssthresh

執行完快恢復算法后,
開始執行擁塞避免算法

5、總結

慢開始:初始擁塞窗口很小,逐漸快速增大擁塞窗口
擁塞避免:當慢開始cwnd超過門限,啟動擁塞避免,直到發生超時重傳
超時重傳發生,認為擁塞:
于是調整門限 = 當前超時cwnd / 2,cwnd設置為1
啟動慢開始

特殊情況:
當發送方收到3個同樣的ACK確定報文
啟動快重傳算法,迅速對丟失數據重傳
發送方判斷并未發生網絡擁塞
于是不啟動慢開始,啟動快恢復:
調整門限ssthresh = cwnd / 2
cwnd = ssthresh

執行流程圖:(必須理解!重點!!!)


擁塞窗口的增大減小,合起來稱為AIMD算法

發送方的發送窗口 = min(接收方接收窗口, 發送方擁塞窗口)


三、主動隊列管理AQM

1、技術背景

網絡層對TCP擁塞控制影響最大的就是路由器的分組丟棄策略。
路由器按照先進先出的順序進入緩存隊列,如果后來的分組超過了隊列長度
將會丟棄后續的分組,該策略叫做尾部丟棄

而路由器的丟棄往往會導致一連串的分組被丟棄
這就導致發送方判定網絡擁塞,進入慢開始
同時,TCP的鏈接是復用網絡層中的IP數據報的
因此,一個路由器的尾部丟棄可能會同時影響多個TCP鏈接
于是,這就導致許多TCP鏈接同時進入慢開始狀態
從而使得整個網絡的速度一同降低
這個現象就叫做:全局同步

為了避免全局同步問題,需要對路由器的分組丟棄策略進行調整
由是,提出了主動隊列管理

2、AQM思

想和實現策略

導致全局同步問題的主要是分組集中被丟棄,導致多個TCP受到影響
這樣太被動
因此,要逐步的丟棄,在出現擁塞征兆的初期,就逐步的進行部分丟棄
從而減少堆砌的壓力,其實也就是一種預警措施

那么,該什么時候丟棄分組?
為路由器維持兩個參數:隊列最大門限 和 隊列最小門限
于是:每有一個分組抵達,計算一次平均隊列長度
如果平均隊列長度 < 最小門限,加入緩存隊列
如果平均隊列長度 > 最大門限,丟棄分組
如果平均隊列長度在最大和最小之間,按概率P進行丟棄

但是目前概率P并沒有明確的標準


?

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

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

相關文章

PostgreSQL/PostGIS中提升空間查詢(分析)性能(效率)的一些方法

目錄 1. 使用適當的索引 1.1 索引類型 1.2 分析查詢計劃 1.3 覆蓋索引 1.4 復合索引 1.5 維護索引 1.6 刪除不必要的索引 1.7 使用適當的數據類型 2. 建立分區表 2.1 分區表的基本概念 2.2 創建分區表的步驟 2.3 空間數據的分區 2.4 分區表優點 3. 簡化幾何形狀 …

輪播(css+js)

目錄 1.實現效果 2.基礎代碼演示 2.1js代碼 2.1css樣式 2.3實現效果 3.實現點擊切換 3.1給button添加點擊事件 3.2效果圖如下 3.3發現問題 3.3.1不循環 3.3.2循環 1.實現效果 2.基礎代碼演示 2.1js代碼 <div class"out-box"><div class"tes…

簡單的JavaWeb開發示例

以下是一個簡單的JavaWeb開發示例&#xff0c;包含一個使用Servlet和JSP實現的簡單網頁計數器功能&#xff0c;展示了基本的JavaWeb項目結構以及相關代碼邏輯。 1. 項目搭建與環境準備 開發工具&#xff1a;可以使用Eclipse、IntelliJ IDEA等集成開發環境&#xff0c;這里以I…

fastadmin框架同時使用 阿里云oss和阿里云點播

背景 項目的實際需求中既要用到阿里云oss產品又用到阿里云點播系統&#xff0c;實現完美的統一。設置兩個地址downUrl&#xff0c;thirdCode。分別代表阿里云oss上傳路徑和阿里云點播系統vId。 實現 默認框架你已經集成好阿里云oss集成工作&#xff0c;前端html頁面實現 <…

優秀的3d建模是數據可視化的視覺核心1

增強視覺效果&#xff1a;3D建模通過創建三維立體圖像&#xff0c;為觀眾提供了更為真實和直觀的視覺體驗。相比于傳統的二維圖表和圖形&#xff0c;3D模型能夠更準確地展示復雜數據之間的空間關系&#xff0c;使數據可視化大屏上的信息更加生動和易于理解。 提升信息傳達效率&…

flink sink kafka的事務提交現象猜想

現象 查看flink源碼時 sink kafka有事務提交機制&#xff0c;查看源碼發現是使用兩階段提交策略&#xff0c;而事務提交是checkpoint完成后才執行&#xff0c;那么如果checkpoint設置間隔時間比較長時&#xff0c;事務未提交之前&#xff0c;后端應該消費不到數據&#xff0c…

leetcode 3224. 使差值相等的最少數組改動次數

題目鏈接&#xff1a;3224. 使差值相等的最少數組改動次數 題目&#xff1a; 給你一個長度為 n 的整數數組 nums &#xff0c;n 是偶數 &#xff0c;同時給你一個整數 k 。 你可以對數組進行一些操作。每次操作中&#xff0c;你可以將數組中任一元素替換為 0 到 k 之間的任一…

Y3編輯器文檔4:觸發器1(對話、裝備、特效、行為樹、排行榜、不同步問題)

文章目錄 一、觸發器簡介1.1 觸發器界面1.2 ECA語句編輯及快捷鍵1.3 參數設置1.4 變量設置1.5 實體觸發器1.6 函數庫與觸發器復用 二、觸發器的多層結構2.1 子觸發器&#xff08;在游戲內對新的事件進行注冊&#xff09;2.2 觸發器變量作用域2.3 復合條件2.4 循環2.5 計時器2.6…

前端WebSocket應用——聊天實時通信的基本配置

使用 WebSocket 實現實時通信的 Vue 應用 前言1. WebSocketService 類 1.1 類屬性1.2 構造函數和連接初始化1.3 WebSocket 連接1.4 事件處理方法1.5 發送和關閉 WebSocket 消息1.6 狀態查詢與回調注冊1.7 完整代碼 2. 在 Vue 組件中使用 WebSocketService 2.1 定義 WebSocket …

【開源】A065—基于SpringBoot的庫存管理系統的設計與實現

&#x1f64a;作者簡介&#xff1a;在校研究生&#xff0c;擁有計算機專業的研究生開發團隊&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的網站項目。 代碼可以查看項目鏈接獲取??&#xff0c;記得注明來意哦~&#x1f339; 贈送計算機畢業設計600個選題ex…

基于python實現自動化的驗證碼識別:探索與實踐

基于python實現自動化的驗證碼識別&#xff1a;探索與實踐 一、驗證碼的類型及特點&#xff08;一&#xff09;圖像驗證碼&#xff08;二&#xff09;短信驗證碼&#xff08;三&#xff09;語音驗證碼 二、驗證碼識別的方法*&#xff08;一&#xff09;傳統圖像處理方法&#x…

Vue vs. React:兩大前端框架的深度對比與分析(一)

前言 在當今快速發展的前端領域中&#xff0c;Vue和React作為兩個備受矚目的前端框架&#xff0c;已經成為許多開發者的首選。這兩個框架憑借其出色的設計和強大的功能&#xff0c;在構建現代化、高效性能的Web應用方面扮演著重要角色。 Vue和React都以其獨特的特點吸引了眾多開…

windows安裝使用conda

在Windows系統上安裝和使用Conda的詳細步驟如下&#xff1a; 一、下載Conda安裝包 訪問Conda的官方網站Anaconda | The Operating System for AI&#xff0c;點擊“Downloads”按鈕。在下載頁面&#xff0c;選擇適合您系統的安裝包。通常&#xff0c;對于Windows系統&#xf…

websocket 服務 pinia 全局配置

websocket 方法類 // stores/webSocketStore.ts import { defineStore } from "pinia";interface WebSocketStoreState {ws: WebSocket | null; // WebSocket 實例callbacks: ((message: string) > void)[]; // 消息回調函數列表connected: boolean; // 連接狀態…

Ariba Procurement: Administration_Cloud Basics

# SAP Ariba Procurement: Administration_Cloud Basics 認識Ariba Cloud SAP Ariba Procurement 是一個云計算平臺… The Ariba Cloud 平臺需要簡單理解的概念: Datacenter數據中心:SAP Ariba在世界各地有許多數據中心。這些數據中心構成了Ariba云的基本物理基礎設施。 …

vulnhub靶場【shenron】--1

前言 靶機&#xff1a;shenron-1 攻擊&#xff1a;kali 都采用虛擬機&#xff0c;網卡為橋接模式 主機發現 使用arp-scan -l或netdiscover -r 192.168.1.1/24掃描 信息收集 使用nmap掃描端口 網站信息探測 查看頁面&#xff0c;發現是apache2的默認界面&#xff0c;查看…

等保2.0數據庫測評之SQL server數據庫測評

一、SQL server數據庫介紹 SQL server美國Microsoft公司推出的一種關系型數據庫系統。SQL Server是一個可擴展的、高性能的、為分布式客戶機/服務器計算所設計的數據庫管理系統。 本次安裝環境為Windows10專業版操作系統&#xff0c;數據庫版本為Microsoft SQL Server 2019 (…

無人機之報警器的工作原理!

一、電量監測技術 電量監測是無人機電量指示和報警功能的基礎。通過實時監測無人機的電池電量&#xff0c;系統能夠準確判斷電池的剩余使用時間&#xff0c;并在電量不足時發出報警。電量監測技術通常包括以下幾個方面&#xff1a; 電壓檢測&#xff1a;無人機電池內部通常配…

【pyspark學習從入門到精通23】機器學習庫_6

目錄 分割連續變量 標準化連續變量 分類 分割連續變量 我們經常處理高度非線性的連續特征&#xff0c;而且只用一個系數很難擬合到我們的模型中。 在這種情況下&#xff0c;可能很難只通過一個系數來解釋這樣一個特征與目標之間的關系。有時&#xff0c;將值劃分到離散的桶中…

解密時序數據庫的未來:TDengine Open Day技術沙龍精彩回顧

在數字化時代&#xff0c;開源已成為推動技術創新和知識共享的核心力量&#xff0c;尤其在數據領域&#xff0c;開源技術的涌現不僅促進了行業的快速發展&#xff0c;也讓更多的開發者和技術愛好者得以參與其中。隨著物聯網、工業互聯網等技術的廣泛應用&#xff0c;時序數據庫…