4. fejezet: Adatkapcsolati protokollok
A protokollok feladata egy összeállított keret átvitele két csomópont között. Az adatokat a hálózati rétegtől kapja az adatkapcsolati réteg, és az általa összeállított információcsomagokat, vagy más néven kereteket átadja a fizikai rétegnek, ami bitenként küldi át a fizikai közegen.
A keretek átvitele két csomópont között első gondolatra egyszerűnek látszik, de az csak a látszat, hiszen az ADÓ és VEVŐ tulajdonságai, a keretek adatútját jelentő csatorna minősége, a váratlan eseményekre való felkészülés mind igényeket támaszt a protokollal szemben, ami ezért változó bonyolultságú lehet.
73. ábra: Információk a rétegekben
Mivel nincs olyan eljárás amely folyamatos tetszőleges bitfolyamban a hibát képes jelezni, az átküldés hibátlanságát valahogy ellenőrizni kell, ezért a bitfolyamot keretekké kell tördelni, és mindegyik keretet egy ellenőrző összeggel kell kiegészíteni. A keret megérkezése után ez az ellenőrző összeg a vételi oldalon a vett adatokból is kiszámításra kerül, és ha nem egyezik meg a küldő által számítottal, akkor a keretet a vevő eldobja, és a küldőnek ismételten el kell küldenie.
A bitfolyam átvitele bár bitenként történik, azonban sokszor célszerűbb a bitcsoportos átvitelt alkalmazni. A bitcsoportok bár tetszőlegesek lehetnek, de legtöbbször az ASCII kódolású karakter kódolást alkalmazzuk. Ilyenkor az átvitel során mindig a egész számú karaktert viszünk át, azaz az átvitt információ alapegysége a karakter.
Ez a karakterorientált átvitel (szöveges információ átvitele esetén nem is rossz választás.). Amennyiben a bitfolyam bitjeit bitenként értelmezzük bitorientált átvitelről beszélünk, ami általános információ átvitelekor rugalmasabb megoldás.
Elsőként a keretek képzéséről, majd a hibakezelésről írunk, majd a különféle protokollokat mutatjuk be.
Keretek képzése
A bitfolyam keretekké tördelésére több módszer használatos:
Karakterszámláló módszer: a keret fejlécében megadjuk a keretben lévő karakterek számát. Ez a VEVŐ oldalán meghatározhatóvá teszi a keret végét.
Kezdő és végkarakterek alkalmazása karakterbeszúrással: az előző módszernél a keret karaktereinek vételénél egy számlálót is folyamatosan kell egyesével csökkenteni (dekrementálni), amely kezdeti értékét is a keretből töltjük fel. Amikor a számláló értéke nulla, akkor értük el a keret végét. Jobb megoldás az ha egy speciális karaktersorozattal jelöljük a keret kezdetét és végét. Szokásos megoldás a DLE STX karakterkettőssel jelezni a keret kezdetét és DLE ETX-el a keret végét. Ezek speciális, az ASCII kódtáblában megtalálható karakterek, és keret adatrészében lévő esetleges szövegekben nem fordulnak elő. Más a helyzet, ha karakteralapú módszerrel bináris adatokat (pl. egy programkódot) kívánunk átvinni. Ilyenkor, mivel bármilyen bináris bitcsoport előfordulhat, az adatmezőben megjelenhet a fenti két karakterkombináció, és ez hibás kerethatárt jelez. A megoldás: az ADÓ a kert összeállításakor az adatmezőben megjelenő minden DLE kód után, azonnal beszúr még egy DLE karaktert. A VEVŐ pedig, ha a DLE karakter vétele után ismét DLE következik, egyszerűen a második DLE-t eldobja.
A hálózati réteg által küldött üzenet:
I T T E Z DLE V O L T
Az ADÓ adatkapcsolati réteg keretképzése és karakter beszúrása:
DLE STX I T T E Z DLE DLE V O L T DLE ETX
Az VEVŐ adatkapcsolati rétege leválasztja a kettőzött beszúrt karaktert:
DLE STX I T T E Z DLE V O L T DLE ETX
A VEVŐ hálózati rétegének átadott üzenet:
I T T E Z DLE V O L T
Kezdő és végjelzők bitbeszúrással: ezt a módszert a rugalmasabb bitorientált átvitelnél használják. Minden keret egy speciális (a gyakorlatban legtöbbször) 01111110 bitmintával kezdődik és végződik. Ha az ADÓ öt egymást követő 1-est tartalmazó mintát talál az adatmezőben, akkor egy 0 bitet szúr be utána. A VEVŐ a másik oldalon pedig ezt a beszúrt bitet az öt egymás utáni 1-es bit érzékelése után kiveszi a bitfolyamból.
A hálózati réteg által küldött üzenet:
11111111110111
Az ADÓ adatkapcsolati réteg keretképzése és bitbeszúrása:
01111110 1111101111100111 01111110
Az VEVŐ adatkapcsolati rétege leválasztja a beszúrt biteket:
01111110 11111111110111 01111110
A VEVŐ hálózati rétegének átadott üzenet:
11111111110111
Ha a 0 és 1 bitek kódolásán kívül még létezik nem használt kód, ez a keretképzésre felhasználható. A következő ábrán az információt egy bit átvitelének közepén lévő átmenet (állapotváltás) hordozza. Mivel az állapotváltás hiánya nem tartozik a kódoláshoz, ezért ez felhasználható a keret kezdetének és végének a jelzésére. Speciális információ jelzésére használható még az RS232C soros szabvány brake jelzése is. Ez azt jelenti, hogy az eredetileg MARK állapotú vonalat nem csak a START bit, és azt követő bitcsoport átvitel idejére tartjuk SPACE állapotban, hanem olyan hosszú ideig, hogy az egyértelműen külön állapotnak legyen tekinthető.
74. ábra: Keretezés nem használt állapottal
Hibakezelés
Az adatátvitel és a kommunikáció fontos kérdése az átvitel során fellépő hibák kezelése. A rétegfelosztást figyelembe véve ezt az alsó három rétegben kell megoldani.
Az első hibakezelést a fizikai rétegben, a bitek és karakterek átvitelénél kell megoldani. A vonalakon fellépő hibákat különböző fizikai jelenségek okozzák: termikus zaj, a vonalakat kapcsoló berendezések impulzus zaja, a légköri jelenségek (villámlás) okozta zajok. A zajok időtartamából következően lehetnek egyedi és csoportos bithibák. A gyakoribb esetben a hibák fennállási ideje általában egy bit átviteli idejének a többszöröse, ezért ezek a hibák csoportosan, hibacsomók formájában jelentkeznek. Mivel az adatátvitel blokkos (keretes) formában történik, ezért az eredmény egy-egy blokk tönkremenése.
Egyedi bithibák kezelésére a hibajavító (error correcting codes - ECC) és hibajelző kódok (error detecting codes) alkalmazása ad lehetőséget. Mindkét esetben az adatblokkokat redundanciával küldik, hogy a vevő az esetleges hiba tényét felfedezhesse (hibajelzés) illetve megállapíthassa hogy minek kellett volna jönnie (hibajavítás).
A redundáns kódok alkalmazásakor a bitcsoportot alkotó eredetileg m bites kódot r darab bittel egészítik ki, így a redundáns bitcsoport aminek általános elnevezése kódszó n=m+r bitből fog állni.
Két tetszőleges kódszót megadva, mindig megállapítható, hogy hány bitben különböznek egymástól: a két szó kizáró vagy (XOR) kapcsolata által adott eredményben az 1-esek száma adja a különbséget, és ezt szokták a két kódszó Hamming távolságának nevezni.
Ennek az a jelentősége, hogy ha két kódszó k Hamming távolságú, akkor az egyik a másikba k darab egyedi hibával konvertálódhat át.
Egy teljes kódszó rendszer Hamming távolságát úgy határozzuk meg, hogy képezzük minden lehetséges kódszó pár közötti Hamming távolságot, és ezek közül a legkisebb lesz az eredmény.
A paritásvizsgálat során is olyan kódszavakat generálunk, amelyek hossza eggyel nagyobb mint az eredeti kódszó. Ezért a Hamming távolságuk 1, és egyszeres bithibák kimutatására alkalmasak.
Ha egy kódszavakból álló blokkhoz szavanként egyetlen paritásbitet adunk, akkor csoportos hiba esetén a hibajelzés valószínűsége csak 0.5 lesz (pl. a kódszóban lévő valamelyik két bit ellentétére változik, vagy egyszerre kettő azonos módon változik).
A hibajelzés valószínűsége olyan módon növelhető, hogy a blokkot n*k elemű mátrixnak tekintjük, ahol n a paritásbittel kiegészített kódszó hossza, és k a blokkban lévő kódszavak száma. A paritásbitet oszloponként is kiszámítjuk, és a mátrix utolsó soraként azt is elküldjük. A vett blokkot a vevő mindkét paritás szerint ellenőrzi. A módszer egyetlen n bites csoporthiba észlelésére képes, mert oszloponként 1 bit változik csak.
CRC - Cyclic Redundancy Check
Csoportos bithibák esetén inkább egy másik módszert használnak, Ez a hibavédelmi eljárás úgy működik, hogy egy keretnyi adatot egy előre meghatározott bitsorozattal “elosztunk”, és a “maradékot” a keret részeként továbbítjuk. A vevő oldalon ugyanezt az osztást végezzük el, és ha ez a keret részeként átküldött maradékkal egyezik, akkor hibátlannak fogadjuk el a keretet. A módszer részletezésétől helyhiány miatt eltekintünk.
Három szabványos bitsorozat terjedt el:
CRC-12 6 bites karakterek átvitelekor használt
CRC-16 8 bites karakterek átvitelekor használt
CRC-CCITT 8 bites karakterek átvitelekor használt
Az olyan 16 bites ellenőrző összeg, amit a az utóbbi két módszer alapján állítunk elő, észleli az összes egyes és kettős hibát, az összes páratlan hibás bitet tartalmazó hibát, az összes 16 vagy ennél rövidebb csoporthibát, a 17 bites csoporthibák 99.997%-át, valamint a 18 bites és annál hosszabb csoporthibák 99.998%-át. [1]
z
A következőkben a röviden az ADÓ és VEVŐ közti keretek segítségével megvalósított adatkapcsolati protokollokat mutatjuk be. Az adatkapcsolati réteg tördeli keretekké a bitfolyamot, és látja el fejrésszel, amelyet a VEVŐ oldali adatkapcsolati réteg távolít el, és állítja vissza a bitfolyamot. A hálózati és adatkapcsolati réteg teljes elkülönítése érdekében a hálózati rétegnek a keretekre tördelésről, annak fejléccel történő ellátásáról nincs információja.
1.fejezet: A hálózatok célja, alkalmazása, alapfogalmak
2.fejezet: Fizikai átviteli jellemzők és módszerek
3.fejezet: Közeg-hozzáférési módszerek
4.fejezet: Adatkapcsolati protokollok folytatás: Korlátozás nélküli egyirányú (szimplex) protokoll, Egyirányú "megáll és vár" protokoll, Egyirányú összetett protokoll, Kétirányú protokollok, Egybites csúszóablakos protokoll, Visszalépés n-el technikájú protokoll, Szelektív ismétlő protokoll, CCITT V.41-es ajánlása, IBM BISYNC, HDLC, Ellenőrző kérdések
8.fejezet: A TCP/IP protokoll és az Internet