目錄
一、PPT
二、總結
(一)可靠數據傳輸原理
關鍵機制
1. 序號機制 (Sequence Numbers)
2. 確認機制 (Acknowledgements - ACKs)
3. 重傳機制 (Retransmission)
4. 校驗和 (Checksum)
5. 流量控制 (Flow Control)
協議實現的核心:滑動窗口協議 (Sliding Window Protocol)
兩種主要變體
(二)可靠數據傳輸協議(Rdt)演進詳解
核心目標
Rdt 1.0:理想信道模型
假設條件
工作機制
缺陷
Rdt 2.0:引入差錯檢測與確認機制
解決核心問題
關鍵技術
有限狀態機(FSM)
缺陷
Rdt 2.1:解決確認信號受損
核心改進
關鍵行為
優勢
Rdt 2.2:無NAK確認協議
核心改進
接收方行為
優勢
Rdt 3.0:解決丟包與超時重傳
解決核心問題
關鍵技術
有限狀態機(FSM)關鍵流程
性能問題
協議演進總結對比
后續演進方向
一、PPT
?
二、總結
(一)可靠數據傳輸原理
核心目標:確保數據在不可靠信道(可能發生比特差錯、分組丟失、亂序、重復)上完整、有序、無重復地交付給接收方。
關鍵機制
1. 序號機制 (Sequence Numbers)
-
作用:標識每個發送的數據段。
-
原理:
-
發送方為每個數據段分配一個唯一的序號(通常是字節流中的偏移量或分組編號)。
-
接收方利用序號:
-
檢測丟失分組:發現序號間隙。
-
檢測重復分組:收到相同序號的分組。
-
按序重組:將亂序到達的分組按序號排序后交付上層。
-
-
-
序號空間:序號需足夠大(模運算處理回繞),常見32位(TCP)。
2. 確認機制 (Acknowledgements - ACKs)
-
作用:接收方通知發送方已成功接收數據。
-
原理:
-
累積確認 (Cumulative ACK):
-
接收方發送?
ACK n
,表示已正確接收序號?n
?之前(包括?n
)的所有數據。 -
優點:簡單,ACK丟失容忍度較高(后續ACK能確認前面的數據)。
-
缺點:不能精確告知哪些分組丟失(只能知道n+1丟失)。
-
-
選擇確認 (Selective ACK - SACK):
-
接收方顯式告知已正確接收的非連續數據塊范圍。
-
優點:更高效地指明丟失分組,減少不必要的重傳。
-
缺點:實現更復雜,需要額外選項字段(TCP SACK)。
-
-
否定確認 (Negative ACK - NAK):
-
接收方顯式通知發送方某個特定分組丟失或損壞(較少使用)。
-
優點:快速通知丟失。
-
缺點:需要額外機制處理NAK丟失。
-
-
3. 重傳機制 (Retransmission)
-
作用:在檢測到數據丟失或損壞時重新發送數據。
-
觸發條件:
-
超時重傳 (Timeout-based):
-
發送方為每個已發送但未確認的分組啟動一個重傳定時器 (Retransmission Timer)。
-
如果在超時時間間隔 (Timeout Interval)?內未收到該分組的ACK,則重傳該分組。
-
-
快速重傳 (Fast Retransmit):
-
發送方收到3個重復ACK (Duplicate ACKs)?時,認為該重復ACK指示的分組已丟失(即使超時未到),立即重傳該分組。
-
顯著減少因等待超時而導致的延遲。
-
-
-
超時時間計算:
-
基于對往返時間 (Round-Trip Time - RTT)?的估計。
-
常用算法:
EstimatedRTT = (1-α) * EstimatedRTT + α * SampleRTT
?(α 常取 0.125)。 -
DevRTT
?估計RTT的偏差。 -
TimeoutInterval = EstimatedRTT + 4 * DevRTT
?(TCP推薦公式)。 -
關鍵點:動態適應網絡變化,避免過早或過晚重傳。
-
4. 校驗和 (Checksum)
-
作用:檢測傳輸過程中數據(頭部+載荷)是否發生比特差錯。
-
原理:
-
發送方:計算待發送數據的校驗和,放入分組頭部。
-
接收方:對接收到的數據(包括校驗和字段)重新計算校驗和。
-
如果接收方計算的校驗和與頭部攜帶的校驗和不匹配(通常為0),則認為數據出錯。
-
處理:丟棄出錯分組(隱式通知丟失),等待重傳。校驗和本身無法糾正錯誤。
-
5. 流量控制 (Flow Control)
-
作用:防止發送方發送速率過快導致接收方緩沖區溢出。
-
原理?(TCP滑動窗口):
-
接收方在ACK中通告其接收窗口大小 (Receive Window Size - rwnd),表示當前可用緩沖區空間。
-
發送方維護一個發送窗口 (Send Window),其大小不超過?
min(擁塞窗口cwnd, 接收窗口rwnd)
。 -
發送方只能發送落在發送窗口內的數據。
-
接收方處理數據并釋放緩沖區后,通過后續ACK更新?
rwnd
,允許發送方發送更多數據。
-
-
關鍵點:匹配發送速率與接收方的處理能力。
協議實現的核心:滑動窗口協議 (Sliding Window Protocol)
結合了序號、確認、重傳和流量控制機制,允許多個分組在信道上“在途飛行”。
-
發送窗口 (Send Window):
-
包含已發送但未確認的分組 (
Sent but not ACKed
) 和可以立即發送的分組 (Can Send Now
)。 -
隨著收到ACK向前“滑動”。
-
-
接收窗口 (Receive Window):
-
包含期望接收的下一個序號 (
Next Expected Seq#
) 及之后可以按序接收的序號范圍。 -
隨著按序交付數據向前“滑動”。
-
兩種主要變體
-
回退N步 (Go-Back-N - GBN):
-
接收方只接受按序到達的分組,丟棄所有亂序分組。
-
發送方收到ACK?
n
?表示?n
?及之前所有分組都已被確認。 -
超時或收到NAK時,重傳所有已發送但未確認的分組(從序號?
n+1
?開始)。 -
優點:接收方實現簡單(只需維護?
expectedseqnum
)。 -
缺點:效率低,一個分組丟失可能導致大量正確分組被重傳。
-
-
選擇重傳 (Selective Repeat - SR):
-
接收方緩存所有正確接收但亂序的分組。
-
發送方為每個分組維護獨立的定時器。
-
超時或收到NAK/SACK時,只重傳特定丟失的分組。
-
優點:效率高,只重傳丟失分組。
-
缺點:發送方和接收方實現更復雜(需要更大的緩沖區管理亂序分組和獨立的定時器管理)。
-
特性 | Go-Back-N (GBN) | Selective Repeat (SR) |
---|---|---|
接收處理 | 只收按序,丟棄亂序 | 緩存所有正確接收的分組 (亂序也存) |
確認機制 | 累積確認 | 選擇確認 (SACK/NAK) |
重傳觸發 | 超時或重復ACK觸發重傳?所有?未確認分組 | 超時或SACK/NAK觸發重傳?單個?丟失分組 |
發送窗口 | 需要管理 | 需要管理 (更復雜) |
接收窗口 | 大小為1 | 大于1 |
效率 | 較低 (一個丟包引發大量重傳) | 較高 (只重傳丟失包) |
復雜度 | 較低 | 較高 |
(二)可靠數據傳輸協議(Rdt)演進詳解
核心目標
在不可靠信道上實現無差錯、無丟失、無重復、按序交付的數據傳輸。
Rdt 1.0:理想信道模型
假設條件
- 底層信道完全可靠(無比特差錯、無丟包)
工作機制
- 發送方
- 將應用層數據打包成分組(Packet)直接發送。
- 接收方
- 直接解包數據交付給應用層。
缺陷
- 不切實際:真實網絡存在比特差錯和丟包。
Rdt 2.0:引入差錯檢測與確認機制
解決核心問題
- 比特級差錯(如傳輸中比特翻轉)
關鍵技術
- 校驗和(Checksum)
- 檢測分組內比特錯誤。
- 確認與重傳
- ACK:接收方顯式確認正確接收。
- NAK:接收方顯式報告錯誤,觸發發送方重傳。
- 停等協議(Stop-and-Wait)
- 發送方每發送一個分組后等待ACK/NAK。
有限狀態機(FSM)
缺陷
-
ACK/NAK受損問題:確認信號本身可能出錯,導致發送方無法判斷接收方狀態。
Rdt 2.1:解決確認信號受損
核心改進
-
添加序列號(Sequence Number)
-
使用?1-bit 序號(0 或 1)標識分組。
-
-
冗余ACK處理
-
接收方檢測到重復分組時,重發上一次的ACK(非NAK)。
-
關鍵行為
-
發送方:
-
收到受損ACK/NAK → 重傳當前分組。
-
收到重復ACK → 忽略(已確認接收方正確接收)。
-
-
接收方:
-
收到重復分組 → 丟棄并重發ACK(避免重復交付)。
-
優勢
-
明確區分新分組?vs?重傳分組。
Rdt 2.2:無NAK確認協議
核心改進
-
完全取消NAK,僅使用ACK + 序號確認。
接收方行為
-
收到正確分組時:
-
發送?ACK + 期望的下一序號(隱式確認當前分組)。
-
例:發送?
ACK0
?表示成功接收?seq=1
(期望下一分組?seq=0
)。
-
-
收到錯誤/非期望分組時:
-
發送?ACK + 最后一次正確接收的序號(觸發發送方重傳)。
-
優勢
-
簡化協議設計,統一反饋機制。
Rdt 3.0:解決丟包與超時重傳
解決核心問題
-
分組丟失(發送方/接收方均可能丟失分組)
-
ACK丟失
關鍵技術
-
倒計時定時器(Countdown Timer)
-
發送方每發一個分組即啟動定時器。
-
-
超時重傳(Timeout Retransmission)
-
定時器到期未收到ACK → 重傳分組。
-
-
序號機制擴展
-
仍使用1-bit序號,但需處理延遲ACK和重復分組。
-
有限狀態機(FSM)關鍵流程
性能問題
-
信道利用率低:
-
鏈路傳播延遲(RTT)期間信道空閑(停等機制限制)。
-
公式:
Utilization = (L/R) / (RTT + L/R)
(L
=分組大小,?R
=帶寬,?RTT
=往返時延)
-
協議演進總結對比
版本 | 解決的核心問題 | 關鍵技術 | 主要缺陷 |
---|---|---|---|
1.0 | 無(理想信道) | 直接發送 | 不適用于真實網絡 |
2.0 | 比特差錯 | 校驗和、ACK/NAK、停等協議 | ACK/NAK受損問題 |
2.1 | ACK/NAK受損 | 1-bit序號、冗余ACK處理 | 仍依賴NAK |
2.2 | 取消NAK | ACK攜帶期望序號(隱式確認) | 未解決丟包問題 |
3.0 | 分組丟失 & ACK丟失 | 超時重傳、定時器機制 | 信道利用率低(停等瓶頸) |
后續演進方向
-
流水線協議(Pipelining):
-
允許連續發送多個分組(滑動窗口:GBN、SR協議)。
-
-
動態調整窗口:
-
TCP擁塞控制(AIMD、慢啟動、快速重傳等)。
-
-
選擇重傳(SR):
-
僅重傳丟失分組,提升效率。
-