Go-Back-N (GBN) er en skyvevindu ARQ-protokoll som lar avsenderen overføre flere rammer (opp til en definert vindusstørrelse) uten å vente på individuelle bekreftelser.
instansiert java
- Hvis en pakke går tapt eller ødelagt, sender avsenderen den pakken og alle påfølgende pakker i vinduet på nytt.
- Eksempel: Hvis pakke 1–5 sendes og pakke 3 går tapt, blir pakke 3 4 og 5 sendt på nytt.
Denne mekanismen sikrer pålitelighet, men kan kaste bort båndbredde hvis feil oppstår ofte.
De tre hovedkarakteristiske egenskapene til GBN er:
1. Avsendervindusstørrelse (W s )
Det er N selv. Hvis vi sier at protokollen er GB10, så er Ws = 10. N bør alltid være større enn 1 for å implementere pipelining. For N = 1 reduseres det til Stopp og vent-protokoll .
Effektivitet av GBN = N/(1+2a)
hvor
a = Ts/Tt
Ts= Utbredelsesforsinkelse
Tt= Sendingsforsinkelse av avsender
Hva vil effektiviteten være hvis behandlingsforsinkelse i kø-forsinkelse og overføringsforsinkelse av bekreftelse ikke er null?
Effektivitet = N * (nyttig tid) / (total tid)
hvor nyttig tid=Tt
Total tid = Tt+ 2 * Ts+ Pr+ Pq + Tt(ack)
hvor
- T t =Sendingsforsinkelse av sendersiden
- T s = Utbredelsesforsinkelse
- Pr = Behandlingsforsinkelse
- Pq = Køforsinkelse
- T t (ack) = Overføringsforsinkelse av bekreftelse
Hvis B er båndbredden til kanalen da
Effektiv båndbredde eller gjennomstrømning
= Effektivitet * Båndbredde
= (N/(1+2a)) * B
2. Mottakervindusstørrelse (W R )
- Alltid 1 i GBN.
- Mottakeren godtar bare den neste forventede pakken.
- Pakker som ikke er i bruk blir forkastet.
3. Anerkjennelser
Bekreftelser (ACKer) er signaler som sendes av mottakeren for å bekrefte vellykket mottak av datapakker. De sikrer pålitelig kommunikasjon mellom sender og mottaker. Hvis en ACK ikke mottas innen en fastsatt tid, antar avsenderen at pakken er tapt og sender den på nytt.
Typer ACKer
Kumulativ ACK
- En enkelt bekreftelse bekrefter mottak av alle pakker opp til et visst punkt.
- Fordel: Mindre trafikk (færre ACK).
- Ulempe: Mindre pålitelig hvis en ACK går tapt, ser flere pakker ikke ut som bekreftet.
Uavhengig ACK
- Hver pakke bekreftes individuelt.
- Fordel: Høy pålitelighet.
- Ulempe: Høyere trafikk på grunn av flere ACK-er.
Arbeidet med GB-N-protokollen
Sender side
- Opprettholder et vindu i størrelse N (f.eks. GB4 vindustørrelse = 4).
- Kan sende opptil N ubekreftede pakker.
- Hver overført pakke har en timer.
- Hvis en ACK mottas, glir vinduet fremover.
- Hvis det oppstår et tidsavbrudd (for en manglende pakke) sender avsenderen den pakken og alle påfølgende i vinduet på nytt.
Mottakerside
- Opprettholder en vindusstørrelse på 1 (WR = 1).
- Godtar bare den forventede pakken i rekkefølge.
- Hvis riktig pakke kommer: sender en ACK og går til neste forventede sekvensnummer.
- Hvis en pakke som ikke er i orden ankommer: Kast den og sender ACK på nytt for den siste riktig mottatte pakken.
Forholdet mellom vindusstørrelse og sekvensnummer
De vindusstørrelse og sekvensnummer i et skyvevindu er protokoller som Go-Back-N eller Selective Repeat nært beslektet.
- De vindusstørrelse bestemmer hvor mange pakker avsenderen kan sende uten å kreve en bekreftelse. Det er som en grense for hvor mye data som kan sendes før avsenderen må stoppe og vente på bekreftelse.
- Sekvensnummer brukes til å merke pakker slik at mottakeren kjenner rekkefølgen deres og kan oppdage eventuelle manglende pakker.
De vindusstørrelse bør være mindre enn eller lik rekkevidden av tilgjengelig sekvensnummer . Hvis vindusstørrelsen er for stor sammenlignet med sekvensnummerområdet, kan mottakeren bli forvirret fordi det samme sekvensnummeret kan gjenbrukes før det første er bekreftet. Dette vil gjøre det vanskelig å vite om en pakke er ny eller en duplikat.
Forholdet mellom vindusstørrelse og sekvensnummer er gitt av formelen:
Is+ WR<= ASN
hvor Wser avsendervindusstørrelse og WRer mottakervindusstørrelse og ASN er tilgjengelig sekvensnummer.
Is+ 1<= ASN because WR= 1 i GB-N protokoll
Så minimumssekvensnummer som kreves i GBN = N + 1
Bits som kreves i GBN = ⌈ logg2(N + 1)⌉
Den ekstra 1 er nødvendig for å unngå problemet med dupliserte pakker.
boolsk til streng
Eksempel på GB-N-protokoll
Tenk på et eksempel på GB4.
- Avsendervindusstørrelsen er 4, derfor krever vi minimum 4 sekvensnumre for å merke hver pakke i vinduet.
- Anta at mottakeren har mottatt alle pakkene (0 1 2 og 3 sendt av avsender) og derfor venter på pakkenummer 0 igjen (Vi kan ikke bruke 4 her da vi kun har 4 sekvensnumre tilgjengelig siden N = 4).
- Anta nå at den kumulative kvitteringen for de fire ovennevnte pakkene er tapt i nettverket.
- På avsendersiden vil det være timeout for pakke 0, og derfor vil alle de 4 pakkene bli sendt på nytt.
- Problemet nå er at mottakeren venter på nytt sett med pakker som burde ha startet fra 0, men nå vil den motta duplikatkopiene av de tidligere aksepterte pakkene.
- For å unngå dette trenger vi ett ekstra sekvensnummer.
- Nå kunne mottakeren enkelt avvise alle duplikatpakkene som startet fra 0 fordi nå vil den vente på pakke nummer 4 (Vi har lagt til et ekstra sekvensnummer nå).
Dette er forklart ved hjelp av illustrasjonene nedenfor. Prøver med sekvensnummer 4.
Prøver nå med ett ekstra sekvensnummer.
Nå er det klart hvorfor vi trenger en ekstra 1 bit i GBN-protokollen.
Fordeler med GBN Protocol
- Enkel å implementere og effektiv for pålitelig kommunikasjon.
- Bedre ytelse enn stopp-og-vent-protokoller for feilfrie eller lav-feil nettverk.
Ulemper med GBN-protokollen
- Ineffektiv hvis feil er hyppige, da flere rammer kanskje må sendes på nytt unødvendig.
- Båndbredde kan være bortkastet på grunn av redundante reoverføringer.