Linklaget - direkte forbindelser mellom noder Foreleser: Kjell Åge Bringsrud E-mail: kjellb 2/6/2006 1
Referansemodeller disse er bygget opp hierarkisk; lagdelt for å lette forståelsen for å abstrahere vekk detaljer samle i et lag funksjonalitet som naturlig hører sammen et lag bygger på tjenester fra laget under, og tilbyr en verdiøket tjeneste til laget over verdiøkningen skjer gjennom samarbeid med det tilsvarende lag i motsvarende maskin 2/6/2006 2
Referansemodeller vi har tre aktuelle referansemodeller å forholde oss til: ISO s ref.modell for Åpne systemer Internet modellen mellomvare-modellen (tre-lags) ingen motsetning mellom disse, men de har litt forskjellig abstraksjonsmål 2/6/2006 3
Internet modellen Applikasjon Transport IP Nettverk adapter_ 1 ende-til-ende Ruter Transpor t IP Nettverk adapter_ 2 Nett_1 Nett_2 2/6/2006 4
Mellomvare-modellen Applikasjon Mellomvare Nettverk Plattform Mellomvare Nettverk Komm.nett 2/6/2006 5
ISO s ref.modell Node/ svitsj Endesystem Endesystem Applikasjon Applikasjon Presentasjon Sesjon Transport Nett Link Fysisk ende-til-ende Svitsj Applikasjon Presentasjon Sesjon Transport Nett Link Fysisk Komm.-medium Komm.-medium 2/6/2006 6
Generelt om Link-laget Hensikt? Å forbinde to noder i nettet (og ende-maskinene til første node i nettet) Simplex, Half duplex, Full duplex enten eller begge veier samtidig Spesialtilfeller: Flere noder koblet til samme ledning (Ethernet) Flere noder koblet i ring (simplex mellom nodene): (Token ring, FDDI) 2/6/2006 7
Linklaget - utfordringer Utfordringer Rammeinndeling/innramming Feildeteksjon/feilretting Flytkontroll Spesialtilfelle flere noder deler en link (som i Ethernet) => Behov for adgangskontroll til linken (mediet) 2/6/2006 8
Rammeinndeling Problem: Dele sekvensen av bit opp i rammer Implementeres typisk av nettverksadapter Adapter henter (legger) rammer fra (i) nodens internlager Avsendernode bit-overføring node Mottager- Adapter Adapter ramme-overføring Abstraksjon av linjen: uendelig sekvens av bit. Hvordan bestemme start og slutt til rammen? 2/6/2006 9
Rammer (engelsk: frames) Overføringsenhet mellom noder/adaptere En ramme = data (bit) som utgjør en naturlig helhet (variabelt eller fast antall bit/byte) Bit som skal overføres (f.eks. pakke): Bit som skal overføres, pakkes inn i en ramme: Ekstra biter settes inn bak og/eller foran, og noen ganger inne i dataene som overføres. Hensikt? avgrense rammen detektere feil kontrollere flyt 2/6/2006 10
Hvert lag gir overhead Komm. nett 2/6/2006 11
Innramming i forhold til OSI-lagene Nettverkslag Linklag Fysisk lag 2/6/2006 12
Byte-orienterte protokoller Tidlig tilnærming til innramming opphav i byte/character orienterte terminaler (byte= oktett) BISYNC (Binary Synchronous Communication) IBM 60-tallet PPP (Point-to-Point Protocol) kommunikasjon over modem, f.eks. mellom hjemme-pc og ISP 2/6/2006 13
Byte-orienterte protokoller Bruk av vokter BISYNC S Y N 8 8 8 8 8 16 S Y N S O H S T X Header Body E T X CRC vokter tegn Problem: Hva skjer når SOH, STX og ETX forekommer i datadelen av rammen? Løsning: Markerer disse med DLE foran (og DLE i data med DLE DLE) Kalles gjerne tegn-støffing (character stuffing) S Y N 8 8 8 8 8 16 S Y N S O H D L E E T X S T X D L E S O H E T X CRC 2/6/2006 14
Byte-orienterte protokoller Bruk av byte-teller (antall) S Y N 8 8 8 14 42 16 S Y N Count Header Body CRC Class Problem: Hva skjer når Count feltet har bit-feil? Løsning: oppdages når CRC feiler vente til neste SYN; prøve på nytt derfra rammetap For større sikkerhet (redundans): både End-of-Text og teller 2/6/2006 15
Bit-orienterte protokoller Regnes som mer moderne enn byte-orienterte En ramme er en samling bit HDLC (også SDLC): avgrenser rammen med en spesiel bit-sekvens 01111110 16 16 01111110 Header Body CRC 01111110 flag-byte 2/6/2006 16
Bit-orienterte protokoller Problem: spesielle bit-sekvens forekommer i datadelen Løsning: bit-støffing sender: hver gang fem 1-ere oppdages, settes en ekstra 0 inn 11111 111110 garanterer at flag-byte ikke kan forekomme i datadelen flag-byte er (selvsagt) ikke gjenstand for bit-stuffing mottaker: hver gang fem 1-ere oppdages dersom neste bit er 0, fjern den og fortsett mottaket dersom neste bit er 1 dersom neste bit deretter er 0 slutt på rammen dersom neste bit deretter er 1 rammefeil; vente på neste flag-byte 2/6/2006 17
Tegn- og bit-støffing Fast rammestørrelse er umulig Fordi: antall ekstra tegn (DLE) eller bit (0) er avhengig av hva slags data det er i rammen 2/6/2006 18
Klokke-basert innramming Fast rammestørrelse Klokke-basert er et dårlig navn Prinsipp: mottaker ser etter et bestemt bitmønster som gjentas med fast avstand i bitstrømmen (f.eks. hver 810 byte som i SONET) når det spesielle bit-mønstret dukker opp på rett plass tilstrekkelig antall ganger, konkluderer mottaker at den er synkron med sender og tolker rammen korrekt 2/6/2006 19
Feildeteksjon/feilretting Oppgaver: 1. Finne feil 2. Rette feil To alternativer til å rette feil: A. Ha nok informasjon til å rette opp feil i de mottatte dataene B. Be om at dataene (rammen) blir sendt en gang til (C. Gi blanke, det er ikke så farlig å miste litt data) 2/6/2006 20
Feil-deteksjon Bit-feil i rammer behov for mekanismer som oppdager bit-feil Teknikker som ofte benyttes i datanett Cyclic Redundency Check (CRC) svært utbredt Paritet - to-dimensjonal paritet BISYNC ved ASCII overføring Sjekksum flere Internett-protokoller 2/6/2006 21
Paritet (tverrsum) Ett paritetsbit: F.eks. 7 bit data, sendes som 8 bit Like paritet dvs. et like antall enere i resultatet 0110001 sendes som 01100011 Odde paritet dvs. et odde antall enere i resultatet Odde paritet: 0110001 sendes som 01100010 Generelt: Jo mer data til redundans, jo flere feil oppdages. 2/6/2006 22
To-dimensjonal paritet Rad paritet Kolonne paritet Oppdager alle 1,2 og 3 bit feil og de fleste 4 bit feil I eksemplet: 14 bit redundant informasjon, og 42 bit melding ramme paritets byte 0 1 0 1 0 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 1 paritets biter 0 1 1 1 0 0 2/6/2006 23
CRC: Cyclic Redundancy Check Generalisering av paritet: Kodeord Data (med hode) Sjekk/CRC Like paritet: Kodeordet delt på 2 skal ikke gi rest CRC: Kodeordet delt på et tall, G, skal ikke gi rest Dette tallet vi deler på kaller vi Generatorpolynomet Deling foregår med modulo-2 regning, dvs ikke mente eller låning. 2/6/2006 24
Cyclic Redundency Check Kodeord Data (med hode) Sjekk/CRC m biter r biter CRC: Kodeordet delt på et Generatortall skal ikke gi rest Hvordan finner vi Sjekk/CRC? Jo, slik: 1. Generatortallet kaller vi G. G er på r+1 biter. 2. Lag et stort tall av Data med r 0-biter bak Divider dette store tallet på G Bruk modulo-2 regning (XOR, dvs. ikke noe mente) 3. Resten av divisjonen er alltid på r eller færre biter! Denne resten blir Sjekk/CRC Data (med hode) 000 00 m biter r biter Da vil Kodeordet være delelig på G (med 0 i rest) 2/6/2006 25
Eksempel på CRC-utregning Kodeord Data (med hode) Sjekk 1101011011 0000 Anta G er 10011 11010110110000 : 10011 = 1100001010 med rest 1110 11010110110000-1110 = 11010110111110 1101011011 1110 11010110111110 : 10011= 1100001010 nøyaktig 2/6/2006 26
CRC baserer seg på polynomer CRC-algoritmen ser på binærtall som polynomer. F.eks. betraktes 1 0 0 1 1 som polynomet x + x + 1= x + x + x = 1* x + 0* x + 0* x + 1* x + 1* x 4 4 1 0 4 3 2 1 0 Og 1 1 0 0 0 1 som polynomet x 5 + x 4 + 1 = x 5 + x 4 + x 0 NB: Hvis polynomet er av grad r, har binærtallet r+1 biter 2/6/2006 27
Vanlige CRC polynom CRC CRC-8 CRC-10 CRC-12 CRC-16 CRC-CCITT CRC-32 C(x) x 8 +x 2 +x 1 +1 =100000111 x 10 +x 9 +x 5 +x 4 +x 1 +1 x 12 +x 11 +x 3 +x 2 +x 1 +1 =1100000001111 x 16 +x 15 +x 2 +1 =11000000000000101 x 16 +x 12 +x 5 +1 =10001000000100001 x 32 +x 26 +x 23 +x 22 +x 16 +x 12 +x 11 +x 10 + x 8 +x 7 +x 5 +x 4 +x 2 +x+1 2/6/2006 28
Egenskaper CRC-16 Alle enkle og doble bitfeil Alle feil i et odde antall bit Alle kaskadefeil av lengde mindre enn 17 99,997 % av alle 17 biters kaskader 99,998 % av alle 18 biters kaskader 2/6/2006 29
Hva bør beskyttes av CRC? Hele rammen Hele hodet ikke data Deler av hodet Vikigst: mottakeradresse og pakkelengde Kast en pakke så fort som mulig i det en CRCfeil oppdages! 2/6/2006 30
Feilretting uten retransmisjon Kalles Forward Error Correction To-dimensjonal paritet og Hammingkoder kan benyttes Kan også sende alle pakker to ganger og sammenlikne 2/6/2006 31
Feil-korrigerende koder Bruk av Hamming-kode for å korrigere burst feil. 2/6/2006 32
Pålitelig overføring Pakker med feil CRC kastes Fint om vi kan rette opp feilen Hvis feilen ikke kan rettes opp, og vi trenger pakken, da må den sendes en gang til! Også her er det en avveiing: Ende-til ende eller mellom noder? (Problemkomplekset med doblet/triplet (mm.) funksjonalitet) 2/6/2006 33
Pålitelig overføring Når omsending av pakker er nødvendig: To fundamentale mekanismer kvitteringer (engelsk: acknowledgements, ack) tidsfrister (timeouts) vha. vekkeklokke (timer) Husk at også kvitteringer kan bli borte Ønsker vi at pakkene skal komme frem i riktig rekkefølge? 2/6/2006 34
Stop-and-Wait (stopp og vent) Sender Mottaker 2. ACK A B 1. Pakke Mottaker sender ack tilbake når en ramme er mottatt, og først når sender mottar ack, sendes ny ramme. På denne måten blir ikke mottaker oversvømmet av pakker, og avsender vet at alle pakker er kommet trygt fram. Men hva hvis pakker blir borte? 2/6/2006 35
Stop-and-Wait (stopp og vent) Grunnleggende algoritme: send én ramme og vent på kvittering (ACK ramme) dersom ACK ikke mottatt innen gitt tidsfrist, send rammen på nytt. ramme ramme ACK tidsfrist tidsfrist ramme ACK tidsfrist 2/6/2006 36
Stop-and-Wait Problem 1 med grunnleggende algoritme: Men kanskje det var ACK som ble borte Vi må kunne sende den samme rammen på nytt, selv om den allerede er kommet riktig frem ramme ACK ramme ACK tidsfrist tidsfrist 2/6/2006 37
Stop-and-Wait Problem 2 med grunnleggende algoritme: Kanskje vi sendte rammen om igjen for tidlig Vi må godta at ACK kommer for sent ramme ACK ramme ACK tidsfrist tidsfrist 2/6/2006 38
Stop-and-Wait ramme ramme Må sende rammen på nytt og på nytt helt til ACK kommer tilbake Hvordan vet mottaker at det er den samme rammen som sendes på nytt? ramme tidsfrist tidsfrist tidsfrist ACK ramme ACK ACK 2/6/2006 39
Løsning: sekvensnummer ACK (send meg k+1) k+1 k+1 k+1 Mottaker A B k+1 k k k k k Ramme nr. k Det er nok med en en-bit teller (0 og 1) k, k+1 regnes da ut modulo 2. (En buffers Sliding window protokoll) 2/6/2006 40
Sekvensnummer som 0 og 1 0 og 1 som sekvensnummere En bit er nok når vi sender én ramme av gangen og venter på kvittering ACK 1: Send ramme med odde sekvensnummer ACK 0: Send ramme med like sekvensnummer Altså: ramme 0, 1, 2, 3, 4, 5, sendes som ramme 0, 1, 0, 1, 0, 1, Går dette bra? Hva betyr det at det går bra? 2/6/2006 41
0-1 sekvensnummer Egenskaper til korrekt løsning? Mottaker leverer aldri samme ramme to eller flere ganger til laget over (nettlaget) Ingen rammer går tapt (forutsatt at alle meldinger før eller siden kommer frem når de resendes tilstrekkelig antall ganger) Rammene leveres i samme rekkefølge hos mottager som de sendes i av senderen (forutsatt at en ramme leveres straks den er korrekt mottat og ikke mottatt før) 2/6/2006 42
0-1 sekvensnummer ramme 0 Analyse av sender ramme 0 - like ramme (0) sendes ut - ignorerer (gamle) ACK 0 - resender like ramme (0) tidsfrist tidsfrist tidsfrist ramme 0 ACK 1 ramme 0 ramme 1 ACK 1 ACK 0 ACK 1 I det ACK 1 kommer: - odde ramme (1) sendes ut - ignorerer (gamle) ACK 1 - resender odde ramme (1) I det ACK 0 kommer: - like ramme (0) sendes ut - ignorerer (gamle) ACK 0 - resender like ramme (0) I det ACK 1 kommer: osv. Vanskelig? levér ramme 0 ignorér ramme 0 ignorér ramme 0 levér ramme 1 ramme 0 2/6/2006 43
Stop-and-Wait Grunnleggende svakhet: utnytter linjekapasiteten dårlig senderen kan bare ha én utestående ramme til enhver tid Eksempel: 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 Avsender Mottaker 2/6/2006 44
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/6/2006 45
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/6/2006 46
Glidende vindu Sendt men ikke fått ack, må kanskje sendes på nytt (vil bli resendt om ack aldri mottas) Disse tre er motatt og kvittert (ack sendt) (men kan ikke sendes videre før x motatt) Ikke motatt ack/nack x x Pakker 2/6/2006 47
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 venter Rammer som er bekreftet 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+10 N+11 N+12 N+13N+14 LAR SWS 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 2/6/2006 48
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 N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8 N+9 N+10 N+11 N+12 N+13N+14 LFR RWS LAF 2/6/2006 49
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 N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8 N+9 N+10 N+11 N+12 N+13N+14 LFR RWS LAF 2/6/2006 50
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 N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8 N+9 N+10 N+11 N+12 N+13N+14 SeqNum LFR LAF 2/6/2006 51
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/6/2006 52
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/6/2006 53
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 0 Hindrer overlapp mellom 1 4 3 2 nedre kant av sendervinduet og øvre kant av mottakervinduet. 2/6/2006 54
Glidende vindu: endelige sekvensnummer Eksempel: SWS, RWS = 4 LAR 7 0 6 1 5 2 4 3 LFS LAR NFE 7 0 6 1 5 2 4 3 LFA send rammer 0..3 LFA 7 0 6 1 ACK 4 7 0 6 1 5 2 4 3 LFS 5 2 4 3 NFE Hva bør mottaker nå gjøre? send rammer 0..3 2/6/2006 55
Oppsummering 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/6/2006 56