Adatkapcsolati réteg

Az adatkapcsolati réteg 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.

14. á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.

Keretek képzése

A bitfolyam keretekké tördelésére több módszer használatos:

  1. 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.
  2. 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 keret ö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

  3. 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
    A 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ő.

15. ábra: Keretezés nem használt állapottal

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.