1. 程式人生 > >TCP可靠傳輸的保證

TCP可靠傳輸的保證

報文 會有 strong 兩種 都是 其中 span ron 大小為n

我們知道傳輸層提供最主要的兩種協議,TCP和UDP,其中TCP是保證可靠傳輸,為什麽他要保證可靠傳輸呢,IP說:當然是我不能,我只提供盡力而為的服務,不保證你能不能交付,不保證能不能正確的交付,不保證能不能按順序交付。要不然幹嘛要你保證呢。說的好有道理,我呵呵一笑。

那麽可靠數據傳輸到底能保證什麽呢?

1.不錯:就是傳輸的數據包沒有錯誤

2.不丟:傳輸的數據包不丟失

3.不亂:傳輸的數據包順序要保持正確的交付。

可靠傳輸協議憑什麽能做出這樣的保證呢?

1.差錯檢測:TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。

2.超時重發和確認機制:當TCP發出一個報文段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。當TCP收到發自TCP連接另一端的數據,它將發送一個確認。

3.緩存機制:每個分組都會有一個序列號,對於後一個序列號分組先到的情況,接收端會先進行緩存,等待前一個序列號到達,然後一起交付上層。

重點講一下流水線可靠傳輸協議,其實也就是滑動窗問題。

對於使用流水線可靠傳輸協議,如果出現丟包,損壞或超時會有哪些方法來解決呢?兩種方法:回退N步(Go-Back-N,GBN)和選擇重傳(Selective Repeat,SR)

GBN協議

發送端維持這一個長度為N的滑動窗口,你也可以理解為一個數組。

1.窗口裏含有發送但是沒收到確認的分組,以及剩下可用的坑位,如果有可用的坑位,上層需要發送數據,則直接發送,否者緩存或返回給上層。

2.接收端實行累積確認,也就是說當接收端傳送的確認號為100,也就是前面的序號都是收到了,

3.如果超時未收到確認,發送端會重傳所有發送但未確認的分組。只有一個定時器,用來記錄窗口的最前端,也就是最早發送的分組。

4.因為此協議是使用的累積確認,所以所有為按序到達的分組都會被丟棄。

選擇重傳

1.發送端和接收端都會維持一個窗口,大小為N。

2.接收端每收到一個分組就會發送一個確認,並且會緩存不是按序到達的分組

3.發送端會標記已經被確認的分組,當窗口第一個值被確認後,窗口向後滑動。每一個分組為此自己的定時器。

4.當一個分組超時了,只會重傳超時的分組。

窗口長度必須小於或等於序號空間大小的一半。

TCP的可靠傳輸協議是GBN和SR的混合的

1.他是基於累積確認的,

2.但是他是可以緩存的,不會丟棄亂序的分組,

3.只有一個定時器,記錄發送端窗口的第一個未確認的分組的時間,超時發送第一個分組。



TCP可靠傳輸的保證