28.11.2012 Views

Flödeskontroll och feldetektering Flödeskontroll Flödeskontroll ...

Flödeskontroll och feldetektering Flödeskontroll Flödeskontroll ...

Flödeskontroll och feldetektering Flödeskontroll Flödeskontroll ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Flödeskontroll</strong> <strong>och</strong> <strong>feldetektering</strong><br />

● <strong>Flödeskontroll</strong><br />

● Felkontroll<br />

● Feldetektering<br />

● Felkorrektion<br />

<strong>Flödeskontroll</strong><br />

● Problem:<br />

Sändaren skickar mer än mottagaren kan hantera<br />

- Ramar anländer så snabbt att de inte hinner behandlas<br />

- De buffertar där ramarna mellanlagras blir överfulla<br />

så att ramar går förlorade<br />

● Kombination av flödeskontroll <strong>och</strong> felkontroll<br />

- Metoder baserade på återskickning<br />

<strong>Flödeskontroll</strong><br />

● Fysiska lagret: Överföring av ramar över en länk<br />

- Fysiska överföringsmediet (typ av kabel etc.)<br />

- Dataöverföring med elektromagnetiska vågor<br />

* Linjekodning<br />

* Modulering<br />

- Synkronisering (att hålla reda på ”takten”)<br />

● Ytterligare problem att lösas<br />

- Anpassa sändarens hastighet till mottagarens kapacitet<br />

- Detektera fel i ramar <strong>och</strong> korrigera dessa (hör till felkontroll)<br />

etc<br />

<strong>Flödeskontroll</strong><br />

● Metoder för flödeskontroll (utan felkontroll):<br />

- Stop and wait<br />

- Sliding window


<strong>Flödeskontroll</strong><br />

<strong>Flödeskontroll</strong><br />

● Sändaren<br />

- Skickar en ram<br />

- Väntar på bekräftelse<br />

(acknowledgement)<br />

- Skickar nästa ram<br />

● Mottagaren<br />

- Väntar på ram<br />

- Skickar bekräftelse<br />

- Väntar på nästa ram<br />

● Utbredningstid<br />

(propagation time)<br />

* Tiden som det tar för en bit<br />

att färdas över hela länken<br />

= länklängd / utbredningshastighet<br />

= utbredningstiden för en ram<br />

= utbredningstiden för en<br />

bekräftelse<br />

(acknowledgement)<br />

Utnyttjandegrad<br />

(utilization)<br />

<strong>Flödeskontroll</strong><br />

<strong>Flödeskontroll</strong><br />

● För symmetriska länkar gäller<br />

● Överföringstid<br />

(transmission time)<br />

* Tid mellan första <strong>och</strong> sista<br />

biten i en ram<br />

= ramlängden / bithastigheten<br />

● Totaltiden<br />

* Tid från då första biten sänts<br />

till då bekräftelse mottagits<br />

● Antagande<br />

- Överföringstid för<br />

bekräftelse försummas (= 0)<br />

- Tolkning av parametern a:<br />

Hur många ramar som får plats på länken samtidigt (packade)<br />

(om t.ex. a = 2 så tar en ram upp precis halva länkens längd)<br />

- ”Längden” av en bit = utbredningshastigheten ( 2 ⋅10 m/s i fiber)<br />

dividerat med länkkapaciteten (bithastigheten)<br />

Exempel: 1 kb/s – 200 km, 1 Mb/s – 200 m, 1Gb/s – 20 cm<br />

8


<strong>Flödeskontroll</strong><br />

<strong>Flödeskontroll</strong><br />

● Sliding Window<br />

- Ökad utnyttjandegrad<br />

genom sändande av flera<br />

ramar (N st) åt gången innan<br />

bekräftelse mottagits<br />

- Ramar med sekvensnummer<br />

- Varje bekräftelse innehåller<br />

det sekvensnummer som<br />

nästa ram förväntas ha<br />

● Sliding windows:<br />

Exempel med N = 3<br />

Observera att ACK-numret<br />

är nästa förväntade<br />

ramnummer!<br />

<strong>Flödeskontroll</strong><br />

● Sliding window (hos sändaren)<br />

Senast sända ram<br />

Fönstret krymper<br />

när ramar sänds<br />

Sliding Window:<br />

<strong>Flödeskontroll</strong><br />

Ramar som kan sändas<br />

Fönstret vidgas<br />

när bekräftelser mottages<br />

● U > 1<br />

- Sändaren får bekräftelse<br />

innan fönstret ”stängts”<br />

- Sändning kan ske utan<br />

avbrott<br />

- Verklig utnyttjandegrad<br />

blir dock aldrig > 1<br />

● U < 1<br />

- Sändaren får stanna <strong>och</strong><br />

vänta på bekräftelse då<br />

fönstret stängts (efter N ramar)<br />

- Utnyttjandegraden är så stor<br />

del av tiden som vi inte väntar


● Hur stort fönster?<br />

- N = 1: Stop and wait<br />

<strong>Flödeskontroll</strong><br />

- a litet N litet<br />

* LAN (Local Area Network): N = 8 (3 bitars sekvensnummer)<br />

- a stort N stort<br />

* TCP använder 32-bitars sekvensnummer (N ungefär 4<br />

miljarder)<br />

Felkontroll<br />

● ARQ (Automatic Repeat Request)<br />

- Felkontroll – När ramar eller bekräftelser ”tappas bort”<br />

* Bygger på flödeskontroll<br />

- Stop-and-wait flödeskontroll<br />

* Stop-and-wait ARQ<br />

* ”Alternating Bit Protocol”:<br />

Endast två sekvensnummer (0 <strong>och</strong> 1)<br />

- Sliding window flödeskontroll<br />

* Go-back-N ARQ<br />

* Selective-reject ARQ<br />

<strong>Flödeskontroll</strong><br />

● Typer av bekräftelser (acknowledgements)<br />

- Positiv: ACK (Acknowledgement)<br />

- Negativ: NAK (Negative Acknowledgement)<br />

● Sätt att sända bekräftelser<br />

- Som separata ramar<br />

- Tillsammans med data från mottagaren till sändaren<br />

”Piggybacking”<br />

Felkontroll<br />

● Stop-and-wait ARQ<br />

- Sändaren<br />

* S = Sekvensnumret för senast<br />

sända ram<br />

* Sparar en kopia av senast sända ram<br />

* Startar timer för varje sänd ram<br />

* Stannar timer när ACK mottagits<br />

* Omsändning vid time-out<br />

(+timer-reset)<br />

- Mottagaren<br />

* R = Nästa förväntade ramnummer<br />

* För varje mottagen ram skickas ACK<br />

med nästa förväntade ramnummer<br />

* Slänger mottagen ram om det har<br />

felaktigt sekvensnummer


Felkontroll<br />

● Stop-and-wait ARQ:<br />

Missad bekräftelse<br />

- Borttappad ACK för F1<br />

- Time-out medför återsändning<br />

- Mottagaren får felaktigt sekvensnr<br />

1. Fimpar ramen<br />

2. Skickar ACK med förväntat<br />

sekvensnummer<br />

- Sändaren kan nu sända nästa ram<br />

Felkontroll<br />

● Go-back-N ARQ<br />

- Baserat på sliding window<br />

- Sändaren kan skicka N ramar utan bekräftelse.<br />

Kopior på alla obekräftade ramar sparas i en buffert.<br />

Vid timeout omskickas alla dessa.<br />

- Mottagaren kastar alla ramar med icke förväntade<br />

sekvensnummer<br />

Felkontroll<br />

● Kontinuerlig ARQ<br />

- Mer effektivt än stop-and-wait ARQ<br />

- Sekvensnummer med sliding window<br />

- ACK <strong>och</strong> NAK<br />

- Time out<br />

Felkontroll<br />

● Tappad bekräftelse (N=3)<br />

- Samtliga obekräftade ramar<br />

skickas om (F , F <strong>och</strong> F )<br />

0<br />

1 2


Felkontroll<br />

● Med k-bitars sekvensnummer<br />

kan fönsterbredden vara högst 2<br />

I annat fall kan samma ram<br />

felaktigt mottagas flera gånger.<br />

k ­1<br />

Exempel med k = 2 där bredden<br />

är felaktigt satt till 4 (skulle vara<br />

högst 3). Ramarna från 0 till 3<br />

skickas om (se bilden) trots att<br />

de redan mottagits. Felaktigheten<br />

består i att dessa tas emot som<br />

”nya” ramar trots att de är ”gamla”<br />

<strong>och</strong> borde ha slängts.<br />

● Selective Repeat ARQ<br />

Felkontroll<br />

Felkontroll<br />

● Selective Repeat ARQ<br />

- Kallas även Selective Reject ARQ (SREJ)<br />

- Omskicka bara precis de ramar som tappats<br />

- Använd negativ bekräftelse (NAK) för att markera<br />

vilka ramar som måste skickas om<br />

- Även omskickning av ramar vid timeout<br />

- Mottagaren accepterar bara sekvensnummer<br />

inom mottagarfönstret<br />

Felkontroll<br />

● Selective Repeat ARQ - Fönsterbredd


Feldetektering<br />

● Typer av överföringsfel<br />

- Tappade ramar<br />

- Korrupta ramar (med bitfel)<br />

- Enstaka bitfel (single bit error)<br />

- Skurvisa bitfel (burst errors)<br />

* Hela sekvenser av bitar felaktiga<br />

* Orsakas ofta av bruspåverkan<br />

Feldetektering<br />

● Paritetskontroll: Extra bit (paritetsbit) läggs till i slutet<br />

- Antalet ettor jämnt (jämn paritet) eller udda (udda paritet)<br />

- Mottagaren kontrollerar antalet ettor<br />

● Fördelar<br />

- Enkelt (vanlig binär addition)<br />

- Kostar bara en extra bit per dataenhet<br />

● Nackdel<br />

- Detekterar bara enkla bitfel (eller skurfel med udda antal bitfel)<br />

Paritetsbit<br />

Feldetektering<br />

● Grundidé<br />

- Lägg till extra (redundant) information för<br />

<strong>feldetektering</strong><br />

* Paritetskontroll<br />

* Checksumma<br />

* CRC (Cyclic Redundancy Check)<br />

- Sändaren beräknar funktion av data <strong>och</strong> lägger till<br />

denna<br />

- Mottagaren beräknar samma funktion <strong>och</strong> jämför<br />

* Om resultatet skiljer sig finns det något fel i data<br />

Feldetektering<br />

● CRC (Cyclic Redundancy Check)<br />

- Data M byggs ut med n nollor i slutet <strong>och</strong> divideras med<br />

ett fixt (n+1)-siffrigt binärt tal P<br />

- Resten vid divisionen läggs till efter M (istället för nollorna)<br />

- Resultatet M' skickas <strong>och</strong> tas emot som M''<br />

- Om M'' får resten 0 vid division med P är det OK annars fel


● CRC - Exempel:<br />

- Dividera fram resten<br />

<strong>och</strong> lägg till den i slutet<br />

efter M (detta ger M')<br />

- Skicka M' som data<br />

(Kom ihåg att subtraktion<br />

<strong>och</strong> addition är samma sak<br />

(xor) för modulo-2-räkning!)<br />

Feldetektering<br />

Feldetektering<br />

● Generatorpolynom<br />

- Binära tal kan representeras med polynom där<br />

varje koefficient bestäms av bitvärdet <strong>och</strong><br />

motsvarande exponent bestäms av bitpositionen<br />

Exempel: 10110010111 svarar mot polynomet<br />

1 ⋅x 10 �0 ⋅x 9 �1 ⋅x 8 �1 ⋅x 7 �0 ⋅x 6 �0 ⋅x 5 �1 ⋅x 4 �0 ⋅x 3 �1 ⋅x 2 �1 ⋅x 1 �1 ⋅x 0<br />

x 10 �x 8 �x 7 �x 4 �x 2 =<br />

�x�1<br />

● Exempel på standardpolynom<br />

CRC-8:<br />

CRC-16:<br />

CRC-32: 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<br />

�x�1<br />

8 �x 2 �x�1<br />

x 16 �x 12 �x 5 �1<br />

● CRC – Exempel<br />

- Mottagna data M'<br />

divideras med P<br />

- Om resten blir 0 kan<br />

kan korrekt meddelande M<br />

fås genom att ta bort<br />

CRC-delen<br />

- Om resten inte blir 0<br />

förkastas data<br />

Feldetektering<br />

Feldetektering<br />

● Checksumma<br />

- Dela in data i block om k delar med n bitar i varje del<br />

- Använd summering (1-komplementär) <strong>och</strong> komplementering<br />

enligt följande


Feldetektering<br />

● Checksumma: Exempel<br />

Följande data ska sändas: 10101001 00111001<br />

Checksumman beräknas enligt<br />

Summa<br />

Checksumma<br />

Checksumman läggs till i slutet efter själva datadelen<br />

så att följande skickas:<br />

Feldetektering<br />

● Jämförelse mellan CRC <strong>och</strong> checksumma<br />

● CRC<br />

- Kan detektera<br />

* Alla skurfel som påverkas av ett udda antal bitar<br />

* Alla skurfel av längd högst = polynomets gradtal<br />

* Med hög sannolikhet även längre sekvenser av fel<br />

● Checksumma<br />

- Kan detektera<br />

* Alla fel som påverkas av ett udda antal bitar<br />

* De flesta fel som påverkas av ett jämnt antal bitar<br />

Feldetektering<br />

● Checksumma: Exempel (forts.)<br />

Om inga fel inträffar får mottagaren<br />

Summering <strong>och</strong> komplementering ger sen följande<br />

Summa<br />

Komplement<br />

Detta resultat gör att data accepteras som felfria.<br />

Pröva själv vad som händer om ett bitfel introduceras i data!<br />

Felkorrektion<br />

● FEC (Forward Error Correction)<br />

- Felkorrigerande koder (t.ex. hammingkod)<br />

som automatiskt korrigerar eventuella fel<br />

- Kräver större redundans (fler ”extrabitar”)<br />

än vid enbart detektering av fel<br />

● Omskickning av data (ARQ av olika typer)<br />

- Kan användas både då bitfel inträffat <strong>och</strong><br />

då ramar tappats<br />

- Skadade ramar kastas <strong>och</strong> data skickas om


Felkorrektion<br />

● Hammingkod - Stoppa in 4 paritetsbitar bland 7 databitar (d):<br />

● Ett enstaka bitfel kan<br />

alltid korrigeras då<br />

hammingkod används<br />

Felkorrektion<br />

Felkorrektion<br />

● Hammingkod: Exempel

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!