Go-Back-N (GBN) är ett ARQ-protokoll med glidande fönster som gör att avsändaren kan sända flera ramar (upp till en definierad fönsterstorlek) utan att vänta på individuella bekräftelser.
returnerar arrayer i java
- Om ett paket försvinner eller skadas återsänder avsändaren det paketet och alla efterföljande paket i fönstret.
- Exempel: Om paket 1–5 sänds och paket 3 går förlorat så återsänds paket 3 4 och 5.
Denna mekanism säkerställer tillförlitlighet men kan slösa bandbredd om fel uppstår ofta.
De tre huvudsakliga egenskaperna hos GBN är:
1. Avsändarfönsterstorlek (W s )
Det är N själv. Om vi säger att protokollet är GB10 så är Ws = 10. N bör alltid vara större än 1 för att implementera pipelining. För N = 1 reduceras den till Stop and Wait-protokoll .
Effektivitet för GBN = N/(1+2a)
där
a = Tsid/Tt
Tsid= Utbredningsfördröjning
Tt= Sändningsfördröjning av avsändaren
Vad blir effektiviteten om bearbetningsfördröjning köfördröjning och överföringsfördröjning av bekräftelse inte är noll?
Effektivitet = N * (Användbar tid) / (Total tid)
där användbar tid=Tt
Total tid = Tt+ 2 * Tsid+ Pr+ Pq + Tt(ack)
där
- T t =Sändningsfördröjning av avsändarsidan
- T sid = Utbredningsfördröjning
- Pr = Bearbetningsfördröjning
- Pq = Köfördröjning
- T t (ack) = Sändningsfördröjning av bekräftelse
Om B är bandbredden för kanalen då
Effektiv bandbredd eller genomströmning
= Effektivitet * Bandbredd
= (N/(1+2a)) * B
2. Mottagarens fönsterstorlek (W R )
- Alltid 1 i GBN.
- Mottagaren accepterar bara nästa förväntade paket.
- Out-of-order paket kasseras.
3. Bekräftelser
Bekräftelser (ACK) är signaler som skickas av mottagaren för att bekräfta framgångsrik mottagning av datapaket. De säkerställer tillförlitlig kommunikation mellan avsändare och mottagare. Om ett ACK inte tas emot inom en bestämd tid antar avsändaren att paketet är förlorat och återsänder det.
Typer av ACK
Kumulativ ACK
- En enda bekräftelse bekräftar mottagandet av alla paket fram till en viss punkt.
- Fördel: Mindre trafik (färre ACK).
- Nackdel: Mindre tillförlitlig om en ACK försvinner. Flera paket verkar obekräftade.
Oberoende ACK
- Varje paket kvitteras individuellt.
- Fördel: Hög tillförlitlighet.
- Nackdel: Högre trafik på grund av fler ACK.
Arbetar med GB-N Protocol
Skickar sida
- Behåller ett fönster i storlek N (t.ex. GB4 fönsterstorlek = 4).
- Kan skicka upp till N okvitterade paket.
- Varje sänt paket har en timer.
- Om ett ACK tas emot glider fönstret framåt.
- Om en timeout inträffar (för ett saknat paket) återsänder avsändaren det paketet och alla efterföljande i fönstret.
Mottagarens sida
- Bibehåller en fönsterstorlek på 1 (WR = 1).
- Accepterar endast det förväntade paketet i sekvens.
- Om rätt paket anländer: skickar ett ACK och går till nästa förväntade sekvensnummer.
- Om ett paket som inte är i ordning anländer: kasserar det och skickar ACK igen för det senast korrekt mottagna paketet.
Förhållandet mellan fönsterstorlek och sekvensnummer
De fönsterstorlek och sekvensnummer i ett glidande fönster är protokoll som Go-Back-N eller Selective Repeat nära besläktade.
- De fönsterstorlek bestämmer hur många paket avsändaren kan sända utan att behöva en bekräftelse. Det är som en gräns för hur mycket data som kan skickas innan avsändaren måste stanna och vänta på bekräftelse.
- Sekvensnummer används för att märka paket så att mottagaren vet deras ordning och kan upptäcka eventuella saknade paket.
De fönsterstorlek bör vara mindre än eller lika med utbudet av tillgängliga sekvensnummer . Om fönsterstorleken är för stor jämfört med sekvensnummerintervallet kan mottagaren bli förvirrad eftersom samma sekvensnummer kan återanvändas innan det första bekräftas. Detta skulle göra det svårt att veta om ett paket är nytt eller en dubblett.
Relationen mellan fönsterstorlek och sekvensnummer ges av formeln:
Is+ WR<= ASN
där Wsär avsändarens fönsterstorlek och WRär mottagarfönsterstorlek och ASN är tillgängligt sekvensnummer.
Is+ 1<= ASN because WR= 1 i GB-N-protokoll
Så minsta sekvensnummer som krävs i GBN = N + 1
Bitar som krävs i GBN = ⌈ logg2(N + 1)⌉
Den extra 1:an krävs för att undvika problemet med dubbletter av paket.
Exempel på GB-N-protokoll
Tänk på ett exempel på GB4.
- Avsändarens fönsterstorlek är 4, därför kräver vi minst 4 sekvensnummer för att märka varje paket i fönstret.
- Anta nu att mottagaren har tagit emot alla paket (0 1 2 och 3 skickade av avsändaren) och därför nu väntar på paketnummer 0 igen (Vi kan inte använda 4 här eftersom vi bara har 4 sekvensnummer tillgängliga eftersom N = 4).
- Anta nu att det kumulativa acket för ovanstående 4 paket går förlorat i nätverket.
- På avsändarsidan kommer det att finnas timeout för paket 0 och därför kommer alla 4 paket att sändas igen.
- Problemet är nu att mottagaren väntar på en ny uppsättning paket som borde ha börjat från 0 men nu kommer den att ta emot dubblettkopiorna av de tidigare accepterade paketen.
- För att undvika detta behöver vi ett extra sekvensnummer.
- Nu kunde mottagaren enkelt avvisa alla dubbletter av paket som började från 0 för nu kommer den att vänta på paket nummer 4 (Vi har lagt till ett extra sekvensnummer nu).
Detta förklaras med hjälp av illustrationerna nedan. Försöker med sekvensnummer 4.
Försöker nu med ett extra sekvensnummer.
Nu är det klart varför vi behöver en extra 1 bit i GBN-protokollet.
konvertera ett heltal till en sträng
Fördelar med GBN Protocol
- Enkel att implementera och effektiv för pålitlig kommunikation.
- Bättre prestanda än stopp-och-vänta-protokoll för felfria nätverk eller nätverk med låga fel.
Nackdelar med GBN-protokollet
- Ineffektivt om fel är frekventa eftersom flera ramar kan behöva sändas om i onödan.
- Bandbredd kan slösas bort på grund av redundanta återsändningar.