Most már látjuk, hogyan is működik az Ethernet hálózat, miként kerülnek az adatok - csomagok formájában - továbbításra rajta. De vajon a magasabb szintű protokollok, esetleg az alkalmazások hogyan kommunikálnak az Ethernet kártyákkal?
 
Bár az Ethernet szabványok garantálják a különböző Ethernet-eszközök problémamentes interoperábilitását egymással, azonban nem egységesítik a szóban forgó eszközök másik irányba, az alkalmazások és magasabb szintű protokollok felé történő illesztését. (Megj.: nem is lenne szerencsés, ha a szabvány erre is kiterjedne.)
 
Ez tehát azt jelenti, hogy pl. a különböző gyártók által előállított lapkakészletekre épülő Ethernet-kártyákat különböző módon kell programozni, ami lehetetlenné teszi az alkalmazások számára a kártyák közvetlen vezérlését. Ugyanakkor ez utóbbi megoldás meglehetősen szerencsétlen lenne, hiszen lehetetlenné tenné az Ethernet kártya, mint osztott erőforrás felhasználását, mert nem lenne mód több program párhuzamos működésének biztosítására (tehát pl. ugyanazon a gépen nem futhatna egy Novell IPX protokollt használó kliens, és egy ettől független, mondjuk Microsoft TCP/IP protocol stack).
 
A probléma megoldása azon alapul, hogy a hálózati kártya kezelését egyetlen, független szoftver-komponensre (az ún. meghajtó-programra) kell bízni, amelynek azonban gondoskodnia kell az erőforrás különböző folyamatok közti megosztásáról is: a hozzáférések szinkronizálásáról, a beérkezett csomagok szétosztásáról, stb. A meghajtó-programot maga a hálózati eszköz gyártója készíti el és mellékeli berendezéséhez, ezáltal lehetővé téve azon a különböző hálózati alkalmazások futtatását.
 
A szóban forgó technikai megvalósítására számos gyártó jó néhány specifikációt dolgozott ki (pl. NDIS, ODI, stb.), melyek technikai megoldásai némely esetekben alapvetően eltértek, de közös jellemzőjük a fent felvázolt erőforrás-megosztási technika valamilyen szintű megvalósítása. Sajnos ezen megoldások legnagyobb részében (szerzői jogi értelemben) védett megoldásokat (is) alkalmaztak, amelyek eleve lehetetlenné tették az interfész használatát külső programok által, másrészt elsősorban az illető gyártó egyedi hálózati szoftvereit szolgálták ki, és általában véve nem voltak elegendően rugalmasak az egyre gyarapodó és egyre sokrétűbbé váló hálózati alkalmazások számára.
 
Adott körülmények között nem csoda, hogy a legnépszerűbbé és legelterjedtebbé egy olyan specifikáció vált, amelynek megalkotásakor pont, hogy ezen egyedi alkalmazások igényeit vették figyelembe, és amelyet szerzői szabadon hozzáférhetővé és felhasználhatóvá tettek bárki számára. Ez az FTP Software által kidolgozott "Packet Driver Specification" volt.
 
A packet driver specifikáció
 
Bár a szabványt eredetileg az FTP Software is saját, PC/TCP nevű hálózati szoftvercsomagja számára dolgozta ki, azonban nagyon okosan nem ragadt le annak igényeinél, hanem egy teljesen általános célú interfészt alkotott meg. A specifikáció olyan jól sikeredett, hogy minden idők legelterjedtebb és a programozók körében legnépszerűbb alacsony szintű DOS-os hálózati interfészévé vált.
 
A specifikáció megjelenésekor még kénytelenek voltak lelkes "amatőrök" elkészíteni a különböző (akkor még viszonylag alacsony számú) meglévő hálózati kártyákhoz a megfelelő meghajtóprogramokat, az idő múlásával azonban kőkemény követelménnyé vált az újonnan megjelenő kártyákkal szemben, hogy a legújabb Windows és *nix verziókhoz készült meghajtók mellett a kártyához készült packet driver program is ott "csücsüljön" az eszközhöz mellékelt lemezen.
 
A siker kulcsa az interfész technikai és morális értelemben vett nyíltságában rejlett: mindenki számára könnyűszerrel hozzáférhető, és ugyanilyen könnyen használható megoldást nyújtott a hálózati eszközök az adatkapcsolati réteg szintjén történő kezelésére.
 
A működési elv
 
A packet driver specifikáció lehetővé teszi, hogy egyetlen hálózati kártyát több alkalmazás is használjon egyidejűleg, pontosabban, hogy azok az eszközön keresztül zajló teljes forgalmat azok felosszák egymás között. A packet driver a tényleges fizikai átviteli réteg egyedi jellemzőit elfedve, egy, a médiatípusra általánosságban jellemző funkciókat szolgáltató interfészt bocsát az alkalmazások rendelkezésére, aminek köszönhetően azok függetlenné válnak a ténylegesen alkalmazott hálózati eszköztől és módosítás nélküli futásra képesek bármilyen, azonos karakterisztikákkal rendelkező (vagy azt emulálni képes) másik eszközön. Ez egyben azonban azt is jelenti, hogy - tekintve, hogy az absztrakció az adatkapcsolati réteg szintjén valósul meg - az alkalmazások továbbra is erősen függenek a fizikai átviteli réteg, az alkalmazott hálózati média jellemzőitől, és a különböző hálózati architektúrák számukra nem átjárhatóak. (Kivételt képez, ha egy adott hálózati architektúrán könnyűszerrel emulálható egy másik architektúra, hiszen ilyenkor a megfelelő emulációt biztosító packet driver segítségével a probléma áthidalható.) A specifikáció az egymás között csereszabatos hálózati eszközöket (esetlegesen architektúrákat) az osztály (class) fogalmával illeti. Az azonos karakterisztikájú (csereszabatos) eszközök egyetlen osztályba kerülnek besorolásra (pl. Class 1 eszközök a DIX Ethernet szabvány szerint készült adapterek), melyeken belül a típus (type) azonosítója különbözteti meg az egyes modelleket (pl. Western Digital WD8003-as adapterének típus-azonosítója a 14).
 
A csomagok szétosztása - az alkalmazott alacsonyabb szintű hálózati rétegtől függően - a standard csomag-típus, vagy speciális, a csomagtípust közvetve meghatározó szekvenciák, az ún. service access point-ok alapján történik meg.
 
Funkciók
 
A packet driver által nyújtott funkciók a működési mechanizmus alapján alapvetően két kategóriába sorolhatók. Az első kategóriába tartoznak azok a funkciók, amelyekkel az alkalmazás adott típusú csomagok a szétosztás (demultiplexing v. dispatching) során hozzá történő irányítását kéri, valamint ezt a kérelmet törli, illetve amely funkciókkal az alkalmazás maga kérheti egy adott csomag elküldését. A másik csoportot azok a funkciók alkotják, amelyekkel a hálózati interfészről ill. magáról az illesztőprogramról tud az alkalmazás információkat, statisztikákat begyűjteni ill. néhány paraméterét állítani.
 
Maga a specifikáció a definiált funkciókat egy másik szempont alapján is csoportosítja. Ez alapján a funkciók összesen három kategóriába: az alap (basic), kiterjesztett (extended) és nagyteljesítményű (high-performance) csoportba kerülnek besorolásra. Az alap-funkciókat minden a specifikációnak megfelelni kívánó illesztőnek támogatnia kell (pl. ide tartoznak a csomagok fogadásával és küldésével kapcsolatos funkciók), míg a másik két kategóriába sorolt funkciók implementálása opcionálisnak tekinthető (egymástól függetlenül).
 
A kiterjesztett funkciókat is implementáló illesztők statisztikai információkat is nyújtanak az alkalmazások számára és egyéb, ritkán alkalmazott funkciókat (pl. multicast) is rendelkezésükre bocsátanak. A nagyteljesítményű kategóriába sorolt, aszinkron lefutású funkciókkal rendelkező meghajtók pedig értelemszerűen előnyösen befolyásolhatják az alkalmazások teljesítményét.
 
A programozói interfész
 
A packet driverek funkciói a PC-s világban megszokott módon, szoftver megszakításokon keresztül érhetők el. A specifikáció szerint egy adott interfészhez (adapterhez) tartozó driver a 0x60-0x80 tartományban bármely tetszőleges (szabad) szoftver-megszakítást használhatja. (Az alkalmazni kívánt megszakítás-vektor számát általában a meghajtóprogram betöltésekor a parancssorban meg lehet adni.)
 
Az érvényes packet driver megszakításokat (és így az elérhető interfészeket) az alkalmazás egy speciális mechanizmus segítségével térképezheti fel. A detektálás során az alkalmazásnak sorra kell vennie a fent megadott intervallumban a megszakítás-vektorokat és a megszakítás-kezelők címeit a vektor-táblázatból kiolvasva, meg kell vizsgálnia az azt követő 12 bájtot. Amennyiben ebben a vizsgált bájtsorozat tartalmazza a "PKT DRVR" karaktersort, úgy a vektor érvényes packet driver megszakítási vektornak tekintendő és ennek megfelelően biztonságosan hívható.
 
Mellékelve megtalálható Packet Driver Specification teljes szövege, a PACKET_D.109 szövegfájlban.
Ugyancsak itt található egy Pascal és C nyelvű interfész, a teljes CrynWare packet driver gyűjtemény forráskódokkal együtt, valamint számos a packet driver interfészt használó monitorozó és segédprogram is.
Melléklet: forráskód!