網絡原理 4-TCP3

上篇文章,我們講了TCP協議的連接管理(”三次握手“和”四次揮手“的過程)。

4、滑動窗口

這個滑動窗口是TCP中非常有特點的機制。我們知道,TCP是通過前面講的三個機制:確認應答,超時重傳,連接管理,實現了可靠傳輸。

但是,為了實現可靠傳輸,同時也付出代價,單位時間傳輸的數據量變少了(傳輸效率降低了)。

在確認應答機制下,每次發送方收到一個ack才會發送下一個數據,就會導致有大量時間都消耗在等待ack上了,此處等待消耗的時間成本是非常多的。我們希望的是,在保證可靠傳輸的前提下,盡可能讓效率高些,讓消耗的時間成本少些。

滑動窗口這個機制就是為了解決上述問題的,滑動窗口可以在保證可靠傳輸的基礎上,提高效率。(這里的提高效率,其實是降低了時間的損耗,而不是增加了傳輸速度)。

雖然通過滑動窗口這個機制,一定程度上提高了效率,但還是不可能高于UDP這種不需要可靠性的協議。?

滑動窗口,其實就是批量傳輸:發一個數據,然后不等ack,再發下一條,繼續往下發,連續發了一定的數據之后,統一等一波ack。——把多次請求等待ack的時間,使用同一份時間進行等待了,減少了總的等待時間。

為啥會叫滑動窗口呢?—— 批量傳輸數據的過程,就像下圖窗口滑動的過程,返回一個ack,就窗口就往后移動(發送下一組數據)。?

在這幅圖上面,黃色區域中的四份數據已經批量傳輸出去了,傳輸出這四份數據之后,就等待ack?,暫時先不傳輸數據了。我們就把黃色區域(不等待ack,能夠批量傳輸的數據量)稱為“窗口大小”。

注意:這里并不是等所有ack回來再開始發下一組數據(5001~6001)的,而是等回來一個ack就開始往后發一組數據。

上述發送/返回ack過程都會很快,窗口快速地向后面移動,也就形成一個“滑動”的效果了。因此就把上述過程稱為滑動窗口了。

出現丟包的處理

滑動窗口是我們為了提升傳輸效率的一個機制,但TCP安身立命之本還是可靠性。提升效率的大前提一定是傳輸是可靠的,如果“滑動窗口”傳輸的過程中丟包會這么處理呢?

情況一:數據報已經到達,但是ACK丟包了

如上圖,主機A的數據都是完好的傳到了主機B,但是主機B返回的一些ack出現丟包了,這種情況并不會對我們數據的傳輸造成影響,我們無需進行任何處理。

注意:這里返回ack 確認序號的含義,比如說返回一個5001,代表5001之前的數據,我(主機B)都已經收到了,就相當于告訴主機A 4001 之前的數據我也已經收到了。

情況二:數據報丟了

數據丟了的情況,此時就需要重傳了

如上圖1001~2000的數據報丟失了,解決這份數據報丟失的關鍵要點:在主機A繼續向發送數據的時候,主機B的應答報文中返回的確認序號是1001,相當于在向對方索要1001~2000的數據。當發送方向接收方重傳了1001~2000的數據報之后(此時已經傳到3001~4000的數據了),確認序號就變為了當前所傳數據的下一序號(4001)。

在上述重傳的過程中,整體的效率是非常高的,這里做到了“針對性重傳”。只需要把那個丟了的數據重傳,已經收到的數據就不必重傳了,我們就把這種重傳稱為“快速重傳”。

注意:

我們前面講的幾個機制:確認應答、超時重傳、滑動窗口、快速重傳,他們是并不沖突的。

?

滑動窗口中當然也有確認應答,只不過把等待策略稍作調整,轉成批量的了。批量的前提是:你短時間內發了很多數據。如果你發的數據很少,此時滑動窗口滑不起來,就變成了確認應答。

如果當前傳輸過程是按照滑動窗口(短時間內傳輸了大量數據)就按照快速重傳保證可靠性,此時判定丟包的標準就是看有連續多個ack索要同一個數據。

如果當前傳輸過程是不是按照滑動窗口(沒有傳輸很多數據),此時仍然按照之前的超時重傳保證數據的可靠性,此時判定丟包的標準就是達到超時時間還沒有ack到達。

5、流量控制

我們前面講,通過滑動窗口,可以提高傳輸速率,窗口大小越大,就有更多的數據復用同一塊時間等待ack,效率就越高。

窗口大小是不可能無限大的,因為TCP的安生立命之本是可靠傳輸,任何提升效率的行為,都不能影響可靠性(如果接收方的接收緩沖區飽和了,你繼續再給他發就會丟包了,此時重傳也可能沒用,反而會浪費硬件資源)。

這就像我們小學數學的蓄水池問題:?與其等接收方的接收緩沖區滿了,發送方再停止發送,還不如讓發送方提前感知到接收方接收緩沖區的情況,提前減慢發送速度,讓發送方發送數據和接收方處理數據的速度,可以做到步調一致。這也就是流量控制。

在TCP報頭中,有一個16位窗口大小,就是用來做這個的:

通過這個字段來給發送方反饋接收方的接收能力(接收方接收緩沖區的剩余大小),發送方就會知道接下來的窗口大小要設置成多少合適。

補充:

我們這里TCP報頭中,窗口大小是16位,但窗口大小并非是64KB(2的16次方是65535,64KB = 64*1024 = 65535),實際上,TCP報頭選項中,還包含了一個參數,叫窗口擴展因字,實際上真是要設置的窗口大小是:16位窗口大小*2^窗口擴展因子。

如上圖,當接收方的接收緩沖區為0的時候,此時接收方就應該暫停發送,發送方什么時候恢復發送呢?發送方會周期性地發送一個"窗口探測包",這個窗口探測包,并不會攜帶任何載荷,這樣地包對于業務并不產生影響,只是為了觸發接收方的ack,一旦查詢出的結果是非0時,就什么緩沖區又有空位了,發送方就又可以繼續發送了。

?

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

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

相關文章

【使用 Loki + Promtail + Grafana 搭建輕量級容器日志分析平臺】

使用 Loki Promtail Grafana 搭建輕量級容器日志分析平臺 摘要 本文介紹如何通過 Docker Compose 快速搭建 Loki 日志存儲、Promtail 日志采集和 Grafana 日志可視化/告警的完整流程。用最小化示例演示核心配置、常見問題排查和告警規則設置,幫助讀者快速上手。…

CRMEB 中 PHP 快遞查詢擴展實現:涵蓋一號通、阿里云、騰訊云

目前已有一號通快遞查詢、阿里云快遞查詢擴展 擴展入口文件 文件目錄 crmeb\services\express\Express.php 默認一號通快遞查詢 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自動化 Word 文檔樣式復制與內容生成

在辦公自動化領域,如何高效地處理 Word 文檔的樣式和內容復制是一個常見需求。本文將通過一個完整的代碼示例,展示如何利用 Python 的 python-docx 庫實現 Word 文檔樣式的深度復制 和 動態內容生成,并結合知識庫中的最佳實踐優化文檔處理流程…

【MATLAB代碼】基于MCC(最大相關熵)的EKF,一維濾波,用于解決觀測噪聲的異常|附完整代碼,訂閱專欄后可直接查看

本文所述的代碼實現了一種基于最大相關熵準則(Maximum Correntropy Criterion, MCC)的魯棒性卡爾曼濾波算法(MCC-KF),重點解決傳統卡爾曼濾波在觀測噪聲存在異常值時估計精度下降的問題。通過引入高斯核函數對殘差進行加權處理,有效降低了異常觀測值對狀態估計的干擾。訂…

46、web實驗-遍歷數據與頁面bug修改

46、web實驗-遍歷數據與頁面bug修改 在Web開發中,遍歷數據和修改頁面bug是常見的任務。以下是關于這兩個主題的講解: ### 一、遍歷數據 **目的**:在頁面上動態展示數據,例如用戶列表、商品信息等。 **常用方法**: ####…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手

華為云FlexusDeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺,覆蓋從數據準備到模型部署的全生命周期管理,幫助…

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token 目錄 Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token功能解析工作機制應用場景舉例說明技術要點在自然語言處理(NLP)領域 都是<CLS> + <SEP>嗎?一、CLS和SEP的作用與常見用法1. **CLS標…

R語言AI模型部署方案:精準離線運行詳解

R語言AI模型部署方案:精準離線運行詳解 一、項目概述 本文將構建一個完整的R語言AI部署解決方案,實現鳶尾花分類模型的訓練、保存、離線部署和預測功能。核心特點: 100%離線運行能力自包含環境依賴生產級錯誤處理跨平臺兼容性模型版本管理# 文件結構說明 Iris_AI_Deployme…

JAVA畢業設計224—基于Java+Springboot+vue的家政服務系統(源代碼+數據庫)

畢設所有選題: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的家政服務系統(源代碼數據庫)224 一、系統介紹 本項目前后端分離,分為用戶、家政人員、管理員三種角色 1、用戶: 登錄、注冊、輪播…

滴滴 服務端 面經

一、緩存與數據庫的使用場景及性能差異 1. 緩存的適用場景 高頻讀、低頻寫場景:如商品詳情頁、用戶信息等讀多寫少的數據,減少數據庫壓力。實時性要求不高的數據:如首頁推薦列表、統計數據(非實時更新),允…

linux操作系統---網絡協議

目錄 案例演練----網絡搭建 路由啟配置 多個路由情況下如何聯通 靜態路由 案例演練----網絡搭建 Cisco交換機的命令行用戶模式1 switch> 特權模式1 switch>enable disable回到用戶模式 2 switch#全局配置模式1 switch#config terminal 2 switch(co…

華為OD機試_2025 B卷_計算某個字符出現次數(Python,100分)(附詳細解題思路)

文章目錄 題目描述字符計數解析:簡單高效的統計方法核心解題思路完整代碼實現應用場景擴展 題目描述 寫出一個程序,接受一個由字母、數字和空格組成的字符串,和一個字符,然后輸出"輸入字符串(第二行輸入的字符&a…

華為倉頡語言初識:并發編程之同步機制(上)

前言 線程同步機制是多線程下解決線程對共享資源競爭的主要方式,華為倉頡語言提供了三種常見的同步機制用來保證線程同步安全,分別是原子操作,互斥鎖和條件變量。本篇文章詳細介紹主要倉頡語言解決同步機制的方法,建議點贊收藏&a…

樹莓派遠程登陸RealVNC Viewer出現卡頓

原因是:沒有連接顯示屏,圖像傳輸會受到限制。 沒有顯示屏怎么解決: 📝 樹莓派5虛擬顯示器配置教程(強制啟用全性能GPU渲染) 🔧 步驟1:安裝虛擬顯示驅動 bash 復制 下載 # 更…

go-zero微服務入門案例

一、go-zero微服務環境安裝 1、go-zero腳手架的安裝 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安裝下載地址根據自己電腦操作系統下載對應的版本,具體的使用自己查閱文章 二、創建一個user-rpc服務 1、定義user.proto文件 syntax &qu…

[BIOS]VSCode zx-6000 編譯問題

前提:Python 3.6.6及以上版本安裝成功,Python 3.6.6路徑加到了環境變量# DEVITS工具包準備好 問題:添加環境變量 1:出現環境變量錯誤,“py -3” is not installed or added to environment variables #先在C:\Windows里…

【Linux】系統部分——進程控制

11.進程控制 文章目錄 11.進程控制一、進程創建二、進程終止退出碼進程終止的方式 三、進程等待進程等待的方式獲取?進程status小程序阻塞與非阻塞等待 四、進程程序替換替換原理進程程序替換的接口——exec替換函數 五、總結 一、進程創建 之前學習了fork()函數創建子進程&a…

【讀論文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷積神經網絡

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知識卷積激活函數池化上采樣、上池化、反卷積softmax 歸一化函數交叉熵損失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper:https://arxiv.org/ab…

藍牙音樂(A2DP)音頻延遲的一些感想跟分析,讓你對A2DP體驗更佳深入

零.聲明 最近做藍牙協議棧的過程中遇到一些客戶偶爾提報音頻延遲的問題,所以引發了一些感想,跟大家分享下,音頻延遲主要的影響范圍是對一些要求實時性比較高的場景有比較差的體驗 連接藍牙看視頻的過程中,發現音畫不同步&#x…

MySQL 8.0 綠色版安裝和配置過程

MySQL作為云計算時代,被廣泛使用的一款數據庫,他的安裝方式有很多種,有yum安裝、rpm安裝、二進制文件安裝,當然也有本文提到的綠色版安裝,因綠色版與系統無關,且可快速復制生成,具有較強的優勢。…