TCP可靠傳輸的工作原理
一、停止等待協議
1.1.簡介
- 在發送完一個分組后,必須暫時保留已發送的分組的副本。
- 分組和確認分組都必須進行編號。
- 超時計時器的重傳時間應當比數據在分組傳輸的平均往返時間更長一些。
1.2.確認數據包丟失和遲到
- 當確認M1的數據包丟失時,A經過一段超時時間后重傳M1,B接收並丟棄重復的M1之后,重傳確認M1數據包;
- 當B發送的確認M1數據包由於網絡原因,繞遠路了,在A端規定的超時時間內未到達A,A端就會重傳M1,B接收並丟棄重復的M1之后,重傳確認M1數據包,並繼續通信。當遲到的確認M1數據包到達A時,A收下數據包但什么也不做。
記住一點:只要沒有告訴我你收到了,就表明你沒收到,我就要重發。
1.3.可靠通信的實現
- 使用上述的確認和重傳機制,我們就可以在不可靠的傳輸網絡上實現可靠的通信。
- 這種可靠傳輸協議常稱為自動重傳請求ARQ (Automatic Repeat reQuest)。
- ARQ 表明重傳的請求是自動進行的。接收方不需要請求發送方重傳某個出錯的分組 。
1.4.信道利用率
停止等待協議的優點是簡單,但缺點是信道利用率太低。
-
TD表示發送分組數據包用的時間,RTT是數據包傳輸往返的時間,TA是接受確認用的時間。
-
信道的利用率 U :
可以到這樣信道的利用率U是很低的。
1.5.流水線傳輸
由以上公式可知,只要提高發送數據包時間TD就可以提高信道利用率U,采用流水線傳輸方式。
- 發送方可連續發送多個分組,不必每發完一個分組就停頓下來等待對方的確認。
- 由於信道上一直有數據不間斷地傳送,這種傳輸方式可獲得很高的信道利用率 。
ACK表示確認報文。
現在大多采用這種方式,那如何保證可靠傳輸呢?采用連續ARQ協議。
1.6.連續 ARQ 協議
- 假設發送窗口是5,也就是發送方一次性能發5個數據包。當發送方收到數據包1的接收確認后表示接收方接收了數據包1,之后發送窗口向前滑動一個數據包,在發送窗口中刪除數據包1的緩存。
- 即如果發送了5個數據包后沒有收到確認信息就會停止繼續發送數據包。
- 滑動窗口方式仍需每個數據包對應一個確認,效率不高,接收端可采用累積確認。
1.7.累積確認
- 接收方一般采用累積確認的方式。即不必對收到的分組逐個發送確認,而是對按序到達的最后一個分組發送確認,這樣就表示:到這個分組為止的所有分組都已正確收到了。
- 累積確認有的優點是:容易實現,即使確認丟失也不必重傳。缺點是:不能向發送方反映出接收方已經正確收到的有分組的信息。
1.8.Go-back-N(回退 N)
- 如果發送方發送了前 5 個分組,而中間的第 3 個分組丟失了。這時接收方只能對前兩個分組發出確認。發送方無法知道后面三個分組的下落,而只好把后面的三個分組都再重傳一次。
- 這就叫做 Go-back-N(回退 N),表示需要再退回來重傳已發送過的 N 個分組。
- 可見當通信線路質量不好時,連續 ARQ 協議會帶來負面的影響。
1.9.TCP 可靠通信的具體實現
- TCP 連接的每一端都必須設有兩個窗口——一個發送窗口和一個接收窗口。
- TCP 的可靠傳輸機制用字節的序號進行控制。TCP 所有的確認都是基於序號而不是基於報文段。
- TCP 兩端的四個窗口經常處於動態變化之中。
- TCP連接的往返時間 RTT 也不是固定不變的。需要使用特定的算法估算較為合理的重傳時間。