目錄
三種可靠傳輸機制(數據鏈路層)
停止-等待(Stop and Wait,SW)協議
回退N幀(Go-back-N,GBN)協議
選擇重傳(Selective Repeat,SR)協議
傳輸控制協議 (Transmission Control Protocol, TCP)
滑動窗口 (Sliding Window)
所有這些協議都基于滑動窗口機制,用于在不可靠的、但能檢測錯誤的信道(如 IP)?上實現可靠、有序的數據傳輸。
窗口機制的核心思想是:
發送窗口 (Sending Window):?允許發送方連續發送多個數據包(幀)而無需等待每個包的確認 (ACK)。窗口大小定義了當前可以發送的最大未確認包數。
接收窗口 (Receiving Window):?定義了接收方愿意接收并緩存的數據包范圍。接收方維護一個按序接收的期望序列號。
滑動:?當發送方收到對窗口內最老(最早發送)的數據包的 ACK 時,發送窗口向前“滑動”,允許發送新的數據包。接收窗口在成功按序交付數據后也向前滑動。
特性 停止等待 (SW) 回退 N 幀 (GBN) 選擇重傳 (SR) TCP (核心機制) 發送窗口大小 1 N (N > 1) N (N > 1) 動態可變 (cwnd + rwnd) 接收窗口大小 1 1 N (N > 1) 動態可變 (rwnd) 確認機制 單獨確認 (Individual ACK) 累積確認 (Cumulative ACK) 選擇確認 (Selective ACK / SACK) 累積確認 (ACK) + 選擇確認擴展 (SACK) 重傳策略 僅重傳超時或出錯的那個包 重傳所有未確認的包 (從出錯包開始到窗口末尾) 僅重傳超時或明確未收到的包 超時重傳 (GBN式) / 快速重傳 (SR式,基于重復ACK) 接收方處理亂序包 丟棄 丟棄 緩存 (直到可以按序交付) 緩存 (直到可以按序交付) 接收方確認策略 收到一個有效包,發一個ACK 僅對按序到達的最高序列號包發累積ACK 對任何按序或亂序但有效的包都發ACK (通常是SACK) 發送期望接收序列號的累積ACK,SACK選項報告收到的亂序塊 主要優點 實現極其簡單 比SW吞吐量高,實現相對簡單 帶寬利用率最高 (只重傳丟失包),適合高誤碼率 可靠、有序、流量控制、擁塞控制、廣泛應用 主要缺點 信道利用率極低 (尤其高延遲鏈路) 亂序或丟包導致大量不必要重傳 (尤其大窗口/高誤碼) 發送方和接收方邏輯更復雜,需要更大的緩存 協議復雜,實現復雜,開銷相對大 適用場景 理論模型,極少實際使用 鏈路延遲低、誤碼率低的簡單環境 (如舊式鏈路) 鏈路延遲高、誤碼率較高的環境 互聯網主流傳輸層協議,處理各種復雜網絡環境 本質 滑動窗口大小為1的特例 發送方滑動窗口 >1,接收方窗口=1 發送方和接收方滑動窗口 >1 結合了GBN(累積ACK)和SR(SACK/緩存)思想的混合協議,并加入擁塞控制
【計算機網絡】第四章 數據鏈路層-CSDN博客
三種可靠傳輸機制(數據鏈路層)
停止-等待(Stop and Wait,SW)協議
分組重復--分組加上序號(1bit,0/1)
丟失重復的書分組,再發送一個確認ACK(補發)
回退N幀(Go-back-N,GBN)協議
發送窗口
(一口氣發出的量)
𝟏<?
?≤ (
?𝟏)? ? ? ? ? ? ? ?n比特(
)
(
,
為停-等協議)
接收窗口
超時重傳
失序(序號不匹配)? ? ? ? ? ? ? ? 補發ACK(上一次最后收到的正確ACK)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 重復確認---重發
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 超時---自動重傳
接收方采用累計確認
選擇重傳(Selective Repeat,SR)協議
n個比特給分組編號(n>1)
傳輸控制協議 (Transmission Control Protocol, TCP)
【計算機網絡】第七章 運輸層-CSDN博客
停止等待 (Stop-and-Wait, SW):
核心:?最簡單的形式,發送窗口大小=1,接收窗口大小=1。
過程:
發送方發送一個數據包 (Seq Num = x)。
等待接收方對該包 (x) 的確認 (ACK x)。
收到 ACK x 后,發送下一個包 (Seq Num = x+1)。
如果超時未收到 ACK x,則重發包 x。
優點:?概念簡單,實現容易。
缺點:?信道利用率極低。發送方大部分時間在等待 ACK,尤其在鏈路延遲 (RTT) 大或帶寬高時。公式:
利用率 ≈ (Packet Size / Bandwidth) / RTT
。RTT 越大,利用率越低。定位:?主要是理解可靠傳輸的基礎概念,實際網絡幾乎不用。
回退 N 幀 (Go-Back-N, GBN):
核心:?發送方有一個大小為 N 的發送窗口,可以連續發送最多 N 個未確認的包。接收方窗口大小固定為 1。
過程:
發送方連續發送窗口內的包 (Seq Num 從 base 到 base+N-1)。
接收方只接收按序到達且序列號等于期望值 (next expected)?的包。
如果收到期望的包 (Seq Num = next expected):交付給上層,發送一個累積 ACK (ACK next expected),該 ACK 表示所有小于 next expected 的包都已正確接收。
next expected++
。如果收到亂序的包 (Seq Num > next expected):直接丟棄!?但仍會為最近按序接收的包發送一個重復的累積 ACK (ACK next expected - 1)。(這是觸發重傳的關鍵)。
如果收到損壞的包:丟棄,不發送任何 ACK。
發送方:
如果收到對包?
n
?的累積 ACK (ACK n):這表示所有序號 <= n 的包都已被正確接收。發送窗口滑動到 n+1 (base = n+1
)。如果發生超時:發送方重傳所有已發送但未確認的包?(即整個發送窗口 base 到 base+N-1 的包)。
如果收到重復的累積 ACK?(例如連續收到 3 個相同的 ACK):在基礎 GBN 中,通常只依賴超時觸發重傳。但在 TCP 中,重復 ACK 是觸發快速重傳的關鍵信號。
優點:?比 SW 吞吐量高很多,尤其在低延遲鏈路中。實現比 SR 簡單(接收方邏輯簡單)。
缺點:
效率低下:?任何單個包丟失或亂序都會導致發送方重傳該包及其之后窗口內所有已發送但未確認的包,即使這些包可能已經被接收方正確接收(只是由于前面的包丟失/亂序而被接收方丟棄了)。這在誤碼率高或窗口大時尤其浪費帶寬。
接收方緩存要求低:?只需要緩存一個包(等待按序交付)。
定位:?比 SW 更高效,但重傳策略比較“粗暴”。適合鏈路質量較好、延遲較低的環境。是理解累積 ACK 和窗口滑動的基礎。
選擇重傳 (Selective Repeat, SR):
核心:?發送方和接收方窗口大小都大于 1 (通常相等為 N)。?目標是只重傳真正丟失或損壞的包。
過程:
接收方:
維護一個接收窗口,緩存所有落在窗口內的、正確接收但尚未按序交付給上層的包(無論是否按序到達)。
當一個包按序到達 (Seq Num = next expected):
交付該包給上層。
next expected++
。檢查緩存中是否有連續的包可以接著交付(滑動接收窗口)。
當一個包亂序但落在窗口內且正確接收:
緩存該包。
立即發送一個針對該特定包的 ACK (選擇確認 SACK)。即使它是亂序的!
發送?ACK?(通常是 SACK 形式)?給任何正確接收的包(按序或亂序)。
發送方:
為發送窗口內的每個包維護一個獨立的定時器。
收到一個 ACK (SACK):
如果該 ACK 確認的包在發送窗口內,標記該包為已確認。
如果該包是發送窗口的起始位置 (
base
):
將窗口滑動到最小未確認序列號處 (
base
?移動到新的位置)。超時:?如果某個包的定時器超時,僅重傳那個超時的包。
(可選優化) 收到一定次數的重復 ACK (表明某個特定包可能丟失) 也可以觸發對該包的快速重傳(類似 TCP)。
優點:
帶寬效率最高:?只重傳丟失或損壞的包,避免了 GBN 的不必要重傳。在高誤碼率或高延遲網絡中優勢明顯。
接收方緩存允許接收和處理亂序包。
缺點:
實現最復雜:?發送方需要為每個包管理獨立定時器;接收方需要更大的緩存來存儲亂序包,并管理更復雜的確認 (SACK) 邏輯。
序列號空間要求:?為了避免歧義(新舊包的序列號重疊),序列號空間大小通常需要至少是窗口大小的兩倍 (2N)。
定位:?理論效率最高的滑動窗口協議,但實現復雜度高。是理解選擇性重傳和緩存的基礎。許多可靠傳輸協議借鑒了其思想(如 TCP 的 SACK)。
傳輸控制協議 (TCP - Transmission Control Protocol):
核心:?TCP 是一個極其復雜的、面向連接的、提供可靠字節流傳輸服務的實際協議。它融合了 GBN 和 SR 的思想,并加入了關鍵的擁塞控制機制。
關鍵機制與對比:
字節流 & 序列號:?TCP 傳輸的是字節流,序列號基于字節編號。這與 SW/GBN/SR 基于“包”或“幀”的序列號不同。
累積確認 (GBN 思想):?TCP 接收方發送的?ACK 號是期望收到的下一個字節的序列號。這隱含地確認了所有在該序列號之前的字節都已正確按序接收。這是累積確認的核心思想(來自 GBN)。
選擇確認擴展 - SACK (SR 思想):?標準的 TCP ACK 是累積的。但是,TCP 有一個重要的可選擴展?SACK (Selective Acknowledgment)。啟用 SACK 后,接收方可以在 ACK 包中攜帶額外的 SACK 選項,明確指出接收方已經收到的、但尚未按序交付的亂序數據塊。這為發送方提供了 SR 式的選擇確認信息。
重傳機制 - 混合策略:
超時重傳 (RTO - Retransmission Timeout):?類似于 GBN,當發送方檢測到某個數據段(可以看作一個包)超時未確認時,它會重傳那個最早未確認的數據段 (
snd.una
)。但是,TCP 的重傳粒度是段,并且 RTO 是動態計算且復雜的(基于 RTT 測量)。注意:?TCP 通常只重傳超時的段,而不是整個窗口(這點更像 SR 的目標,但觸發機制像 GBN的超時重傳整個最早的未確認段)。快速重傳 (Fast Retransmit - SR 思想):?這是 TCP 提高效率的關鍵機制。當發送方連續收到 3 個重復的 ACK (DupACK)?時(例如 ACK 50, ACK 50, ACK 50),它強烈暗示某個特定的數據段(序列號在 50 之后的某個段)可能丟失了,而后續的數據段已經到達接收方(觸發了重復的累積 ACK)。發送方不等超時,立即重傳這個被認為丟失的段。這直接借鑒了 SR 中“只重傳丟失包”的思想,并利用重復累積 ACK 作為 SR 中 SACK 的一種替代信號。
接收方緩存 (SR 思想):?TCP 接收方有接收緩沖區 (rwnd),可以緩存亂序到達的正確數據段,等待前面的缺失部分到達后再按序交付給應用層。這是 SR 的核心思想。
流量控制 (rwnd):?接收方通過 TCP 頭部中的?
rwnd
?(接收窗口)?字段動態告知發送方自己還有多少空閑緩沖區。發送方保證未確認數據量 (Flight Size
) 不超過?min(cwnd, rwnd)
。這是滑動窗口的直接應用。擁塞控制 (cwnd):?TCP 最核心的創新之一。發送方維護一個擁塞窗口 (cwnd),它是對網絡承載能力的估計。實際的發送窗口大小是?
min(cwnd, rwnd)
。TCP 通過復雜的算法(慢啟動、擁塞避免、快速恢復等)動態調整?cwnd
?來探測可用帶寬、響應丟包(視為擁塞信號),避免壓垮網絡。這是 SW/GBN/SR 等理論協議完全沒有考慮的關鍵部分,也是 TCP 能主導互聯網的根本原因之一。窗口動態可變:?
cwnd
?和?rwnd
?都是動態變化的,導致 TCP 的實際發送窗口大小不斷變化。這與 SW/GBN/SR 通常假設固定窗口大小不同。定位:?實際互聯網的基石協議。它不是一個“純”的 GBN 或 SR,而是取其精華(GBN 的累積確認簡單性、SR 的選擇性重傳/緩存高效性),并加入了革命性的擁塞控制機制和面向字節流的抽象,以應對復雜多變的互聯網環境。
總結:
-
SW:?基礎模型,效率最低,僅用于理解概念。
-
GBN:?使用累積確認和發送窗口 >1 來提高效率,但接收窗口=1 導致亂序包被丟棄和大量不必要重傳。實現相對簡單。
-
SR:?使用選擇確認 (SACK) 和接收緩存 (接收窗口>1) 來最大化效率(只重傳丟失包),但實現最復雜。
-
TCP:?實際標準協議。核心使用累積確認 (GBN 思想)?和接收緩存 (SR 思想)。通過SACK 擴展 (SR 思想)?和快速重傳機制 (基于重復ACK)?實現高效的選擇性重傳 (SR 思想)。其超時重傳行為更接近 GBN(重傳最早未確認段)。最大的創新和核心是動態的擁塞控制 (cwnd)。TCP 是一個融合了 GBN 和 SR 優點,并加入擁塞控制、流量控制、面向字節流等復雜機制的混合體,專門為應對互聯網的挑戰而設計。