回覆列表
-
1 # mdflt28874
-
2 # 王小佳的慧慧
資料傳輸舉例 TCP資料傳輸傳送方首先發送第一個包含序列號為1(可變化)和1460位元組資料的TCP報文段給接收方。接收方以一個沒有資料的TCP報文段來回復(只含報頭),用確認號1461來表示已完全收到並請求下一個報文段。 傳送方然後傳送第二個包含序列號為1461和1460位元組資料的TCP報文段給接收方。正常情況下,接收方以一個沒有資料的TCP報文段來回復,用確認號2921來表示已完全收到並請求下一個報文段。傳送接收這樣繼續下去。 然而當這些資料包都是相連的情況下,接收方沒有必要每一次都回應。比如,他收到第1到5條TCP報文段,只需迴應第五條就行了。在例子中第3條TCP報文段被丟失了,所以儘管他收到了第4和5條,然而他只能迴應第2條。 傳送方在傳送了第三條以後,沒能收到迴應,因此當時鍾(timer)過時(expire)時,他重發第三條。(每次傳送者傳送一條TCP報文段後,都會重啟動一次時鐘:RTT)。 這次第三條被成功接收,接收方可以直接確認第5條,因為4,5兩條已收到。 這是一個例子,希望LZ先透過這個例子瞭解TCP是如何傳輸的。然後所說的情況,比如傳送方傳送了5條TCP報文段,而接收方在接收到第3條報文段的時候傳送出的確認報文丟失了,但是之後接收完全部5條報文段的時候又發出了一個對第5條的確認報文,那麼傳送方收到後就能夠知道接收方已經成功收到了全部的5條TCP報文段,因此不會再去重傳。
如果使用停止等待協議,那麼傳送方必須收到接收方的確認報文後才會傳送下一個分組,所以是不存在應答包丟失而傳送反不重傳該資料包;但是,如果我們使用流水線傳輸時,涉及到連續ARQ協議,該協議採用累積確認的方式,就是說,接收方不必對收到的分組逐個傳送確認報文,而是在收到幾個分組後,對按序到達的最後一個分組傳送確認,表示到這個分組為止所有分組已正確收到。題主的問題就可以解釋了:假如傳送方先發3個分組,然後再發3個分組,假設接收方在第3個和第6個分組都發送了確認報文,然而第3組的確認報文丟失了,不過傳送方得到了第6個分組的確認報文,就認為這6個分組都正確收到了,故應答包丟失不一定導致該資料包重傳。。上述均為個人理解