Linklaget Feildeteksjon/feilretting - pålitelig overføring Foreleser: Kjell Åge Bringsrud E-mail: kjellb 2/9/2005 1
Stop-and-Wait Grunnleggende svakhet: utnytter linjekapasiteten dårlig Eksempel: Avsender senderen kan bare ha én utestående ramme til enhver tid 1.5Mbps link x 45ms RTT = 67.5Kb (8KB) dvs. 8KB data kan være underveis på linjen anta rammestørrelse 1KB stop-and-wait bruker ca. 1/8 av linjekapasiteten (om ingen feil) Mål: senderen må kunne sende opp til 8 rammer før den må vente på en ACK moralen er: fyll opp røret Mottaker 2/9/2005 2
Fyll opp røret Utnytte linjen bedre. Sender flere pakker rett etter hverandre: A Pakker B Pakker Putte ACK/NAK på ryggen til meldinger som går den andre veien ( piggyback ) 2/9/2005 3
Hvis vi ikke fyller opp røret Lange ledninger. Det tar tid før pakken kommer frem og ACK kommer tilbake. Utnyttelsen av linken kan regnes ut: Bruk av ledningen (pakkebruk): pakkelengde * sendehastighet Forsinkelse tur/retur (RTT): (avstand / utbredelseshastighet) * 2 + pakkebruk + ACKpakkebruk ++ Eksempel: 1500m fiber, 1/2 * 3*10 8 m/s gir 10000 ns hver vei 53 byte pakke, 1G bit/sec, 424 bit gir 424 ns. (samme i ACK) Bruksdel= pakkebruk/rtt = 424/(10000*2 +424+424++) 2% A Sender Pakke 2/9/2005 4 B Mottaker
Glidende vindu Idé: Tillat senderen å sende flere rammer før den mottar ACK for derved å holde røret fullt. Det må være en øvre grense på antall rammer som kan være utestående (som det ikke er mottatt ACK for). sender mottaker Eksempel: maks. 5 utestående rammer 2/9/2005 5
Glidende vindu Flere bufre hos sender og flere bufre hos mottaker, mange pakker med forskjellige nummer og mange ack/nack med forskjellige nummer under veis hele tiden. ACK/NACK Pakker 2/9/2005 6
Glidende vindu Sendt men ikke fått ack, må kanskje sendes på nytt (vil bli resendt om ack aldri mottas) x Disse tre er motatt og kvittert (ack sendt) (men kan ikke sendes videre før x motatt) Pakker ack/nack x Ikke motatt 2/9/2005 7
Glidende vindu: sender Tilordner sekvensnummer til hver ramme (SeqNum) Vedlikeholder tre tilstandsvariable send window size (SWS) last acknowledgment received (LAR) last frame sent (LFS) Vedlikeholder invariant: LFS - LAR SWS Rammer som er bekreftet Rammer som venter på å bli bekreftet Rammer som ikke er sendt N N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8 N+9 N+10N+11 N+12N+13N+14 LAR SWS 2/9/2005 8 LFS Når ACK mottas, økes LAR, og derved kan ny ramme sendes slik at LFS økes. SWS=8 flyt stoppet Buffer for opptil SWS rammer, dvs SWS rammer i røret samtidig
Glidende vindu: mottaker Vedlikeholder tre tilstandsvariable receive window size (RWS) largest acceptable frame (LAF) last frame received (LFR) (with all smaller frames also received) Vedlikeholder invariant: LAF - LFR RWS Rammer som er mottat Rammer som kan mottas (muligens ute av orden) N +2 N+3 N+4 N+1 N N+5 N+6 N+7 N+8 N+9 N+10N+11 N+12N+13N+14 LFR RWS LAF 2/9/2005 9
Glidende vindu: mottaker Kumulativ kvittering ( go back n protokoll), dvs. vi ack-er ikke nye pakker hvis det er hull i sekvensen av mottatte pakker if LFR < MottatRamme.SeqNum < LAF then ta-imot-pakken-og-legg-den-på-plass; beregn-nye-grenser (MottattRamme.SeqNum); // se neste lysark else kast pakken; send ACK (LFR + 1) Rammer som er mottatt Rammer som kan mottas (muligens ute av orden) N +2 N+3 N+4 N+1 N N+5 N+6 N+7 N+8 N+9 N+10N+11 N+12N+13N+14 LFR RWS LAF 2/9/2005 10
Glidende vindu: mottaker Invariant: LFR + 1 er første pakke som ikke er mottatt beregn-nye grenser(seqno) if seqno = LFR + 1 { beregn ny LFR og LAF: for (i= LFR + 1; ramme i er mottatt; i++) { } ; LFR = i-1; LAF = LFR + RWS; } første som ikke er mottatt N +2 N+3 N+4 N+1 N N+5 N+6 N+7 N+8 N+9 N+10N+11 N+12N+13N+14 LFR SeqNum LAF 2/9/2005 11
Glidende vindu: mottaker Varianter til go back n protokoll Negativ kvittering (NAK) mottaker sender NAK på rammer som savnes Selektiv kvittering (SAK) mottaker sender ACK på nøyaktig de rammer som mottas disse behøver da ikke re-sendes Både SAK og NAK øker kompleksiteten til implementasjonen, men kan potensielt bedre utnyttelsen av linjen 2/9/2005 12
Glidende vindu: endelige sekvensnummer I praksis representeres sekvensnummer med et endelig antall biter. n biters sekvensnummer => intervall sekv. nr. = (0..2 n -1) I HDLC: n = 3, dvs. sekvensnummerintervall (0..7) sekvensnummer må gjenbrukes 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 Problem skille mellom ulike inkarnasjoner av samme nummere Minimum krav: sekvensnummerintervallet må være større enn maks. antall utestående rammer 2/9/2005 13
Glidende vindu: endelige sekvensnummer SWS MaxSeqNum+1 er ikke tilstrekkelig anta 3 biters SeqNum felt (0..7) SWS=RWS=8 senderen transmitterer rammene 0..6 mottas uten feil, men ACK går tapt senderens tidsfrist utløper, rammene 0..6 sendes på nytt mottaker forventer 7,0..5, men mottar andre inkarnasjon av 0..5 SWS,RWS (MaxSeqNum+1)/2 er riktig regel 6 5 7 4 0 3 1 2 Hindrer overlapp mellom nedre kant av sendervinduet og øvre kant av mottakervinduet. 2/9/2005 14
Glidende vindu: endelige sekvensnummer Eksempel: SWS, RWS = 4 LAR 7 0 6 1 5 2 4 3 LFS LAR 7 0 6 1 5 2 4 3 LFS send rammer 0..3 ACK 4 send rammer 0..3 NFE 7 0 6 5 1 2 4 3 LFA 7 0 LFA 6 1 5 2 4 3 NFE Hva bør mottaker nå gjøre? 2/9/2005 15
Oppsummering 1 Linklaget abstraherer fysisk lag fra en uendelig sekvens av bit til en sekvens av pakker (rammer) Oppdager og korrigerer feil Tre metoder for innramming Tegn-baserte protokoller med tegn-støffing Bit-baserte protokoller med bit-støffing Klokkebasert protokoller med fast rammestørrelse 2/9/2005 16
Oppsummering 2 Pålitelig overføring av rammer krever metoder for 1. Feildeteksjon 2. Feilkorrigering Metoder for feil-deteksjon Cyclic Redundency Check (CRC) Paritet - to-dimensjonal paritet Sjekksum Metoder for feilkorrigering Forward-error-correction (benyttes relativt lite i datanett) Retransmisjon (stop-and-wait, glidende vindu) 2/9/2005 17