[網路] TCP out of order? packet順序不依序來?

  • 0
底下有完整教學
這裡先給大家參考看看我問廖婉君老師的問題

Q:
TCP到底需不需要去handle received packet out of order這件事呢?
還是說TCP本身本來就看不到?
或著說就算他收到packet1 3 4 5, ACK number依然會設成1,並請求sender2過來
等一下雖然會一併收到2 3 4 5 但是我補齊了就OK了?
還有,Selective repeat 跟 GBN 是真的會實作在裡面嗎? 還是說只是個概念?
又,方法是什麼呢?

A:
Ensuring in order delivery is one of tcp's key functions. So, it will resend pkt 2 once it detects pkt was lost in transit. Basically, tcp is a mix of sr and gbn, while tcp does have an option to implement selective repeat. 


資料傳輸舉例



TCP資料傳輸
  1. 發送方首先發送第一個包含序列號為1(可變化)和1460位元組資料的TCP報文段給接收方。接收方以一個沒有資料的TCP報文段來回復(只含報頭),用確認號1461來表示已完全收到並請求下一個報文段。

  2. 發送方然後發送第二個包含序列號為1461和1460位元組資料的TCP報文段給接收方。正常情況下,接收方以一個沒有資料的TCP報文段來回復,用確認號2921(1461+1460)來表示已完全收到並請求下一個報文段。發送接收這樣繼續下去。

  3. 然而當這些資料包都是相連的情況下,接收方沒有必要每一次都回應。比如,他收到第1到5條TCP報文段,只需回應第五條就行了。在例子中第3條TCP報文段被遺失了,所以儘管他收到了第4和5條,然而他只能回應第2條。

  4. 發送方在發送了第三條以後,沒能收到回應,因此當時鐘(timer)過時(expire)時,他重發第三條。(每次發送者發送一條TCP報文段後,都會重新開機動一次時鐘:RTT)。
  5. 這次第三條被成功接收,接收方可以直接確認第5條,因為4,5兩條已收到。
    額外參考資料(討論) http://goo.gl/Gh7Ht
    宅學習筆記 http://goo.gl/fskJt

      所以由上面我們可以知道(尤其從第3條),其實TCP本身是不會看到"順序不對"這件事情的,因為TCP是 cumulative ACK,也就是如果我現在傳出去的ACK是No. 10, 就表示10號以前的packet我都收到了,但是之後的有沒有收到並不重要。
      簡而言之,就算我收到了4, 5,沒收到3的話就會回傳No.2的ACK,等sender端送來pipelined 3, 4, 5,我就補齊3了!

    沒有留言 :

    張貼留言