RDT3.0 -protokollet hanterar inte i sig en omordning om meddelandet. Dess kärnmekanism förlitar sig på sekventiell meddelandemeddelande och erkännande för att säkerställa tillförlitlig leverans, * förutsatt att * meddelanden anländer i ordning. Om meddelanden omordnas av nätverket kommer RDT3.0 att misslyckas.
Diagrammet nedan illustrerar detta fel. Vi förenklar diagrammet och fokuserar på de avgörande aspekterna av omordningen om meddelandet och protokollets uppdelning.
`` `
+--------+nätverk (ombeställning)+--------+
| Avsändare | ----------------------------> | Mottagare |
+--------+<----------------------------+--------+
| |
| Paket 2 (seqnum =1) |
V ^
+--------+-------> [nätverk] <-------+-------++
| | | Paket 1 (seqnum =0)
| Paket 1 (seqnum =0) |
+--------+-------> [nätverk] <-------+-------++
+-----------------++-----------------+
| Avsändare åtgärder | | Mottagaråtgärder |
+-----------------++-----------------+
| Skickar paket 1 | | Tar emot paket 2 (seqnum =1) - oväntat! |
| Skickar paket 2 | | (Paket 2 är i ordning, RDT3.0 Hanterar inte detta) |
| | | Mottagaren väntar på sekvensnummer 0. |
+-----------------++-----------------+
^ |
| (Timeout inträffar så småningom i avsändaren om ingen ACK tas emot) |
| V
| Avsändare retransmits paket 1 | Mottagaren får så småningom paket 1 (seqnum =0) - men ändå potentiellt problematisk på grund av duplikationer om ACK missades.
`` `
Förklaring:
1. avsändare: Skickar paket 1 (seqnum =0) och paket 2 (seqnum =1).
2. Network: Nätverket omordnar paketen och levererar paket 2 före paket 1 till mottagaren.
3. mottagare: Mottagaren räknar med paket 1 (seqnum =0) men tar emot paket 2 (seqnum =1). RDT3.0:s design dikterar att den kommer att kasta paket 2 eftersom det inte är det förväntade sekvensnumret. Den kommer inte att skicka en ACK för Packet 2 eftersom det är ur ordning.
4. Fel: Avsändaren är tid att vänta på en ACK för paket 1 (eller eventuellt paket 2 beroende på implementering av timeout). Det retransmits, vilket leder till potentiell duplicering vid mottagaren. Mottagaren kan ha problem med att bearbeta de duplicerade paketen och korrekt sekvenseringshändelser om en mekanism för att hantera detta inte implementerades.
avgörande punkt: RDT3.0 förlitar sig på det underliggande nätverket för att leverera paket i den ordning de skickades. Om nätverket omordnar paketen bryts protokollets enkla bekräftelsemekanism, vilket resulterar i opålitlig dataleverans. För att hantera leverans utanför beställningen skulle ett mer sofistikerat protokoll (som TCP:s glidfönstermekanism eller ett protokoll som uttryckligen utformats för att hantera omordning) vara nödvändig.