Sokszor a hibakeresésnél fontos lenne, ám nem tudjuk: hogyan is működnek az alapok. Éppen ezért ebben a cikksorozatban az Internetet szedjük szét, kezdve a legalsó szoftveres réteggel: hogyan működik a helyi hálózat, hogyan működik az Ethernet, pontosabban az Ethernet II.

Mi is az az Ethernet?

Ma talán az Ethernet már egyet jelent a helyi hálózattal, azonban ez nem mindig volt így. Számos konkurense volt, mint például a token ring, illetve a mai napig vannak nem Ethernet hálózatok. De mi is az az Ethernet?

Az Ethernet egy olyan problémát kíván megoldani, amin talán ma már nem sokat gondolkozunk: itt van egy helyi hálózat, hogyan juttatom el az én adathalmazomat a címzett gépnek, amely ugyanezen a hálózaton lóg. Nyilván valamilyen rézdróton vagy száloptikán, de ezen belül hogy?

Erre a kérdésre igyekszik választ adni az Ethernet, ami először úgynevezett koax kábelen, minden gépet láncba fűzve működött. Ezt aztán később lecserélte a csillag-topológiás kábelezés, hubok, majd később switchek közbeiktatásával. (Magyarán a későbbiekben egy kábellel csak két eszköz került összekötésre.)

Fizikai réteg

Az Ethernet eredeti koncepciója az volt, hogy az adatok ugyanazon a médiumon közlekedjenek, mint az egyéb távközlési formák, éppen ezért ugyanazt a BNC kábelezést használták. A számítógépeket és egyéb eszközöket egy láncra fűzték, a lánc végére pedig lezáró dugót (ellenállást) kellett helyezni.

Ennek a hálózatnak az volt a jellegzetessége, hogy mivel mindenki azonos kábelezésen volt, könnyen előfordulhattak ütközések, amikor két készülék egyszerre akart adatot küldeni. Az ehhez készült hálózati kártyákat éppen ezért felszerelték egy olyan algoritmussal, ami észlelte ezt az ütközést, és ezután véletlenszerű időintervallumot várt.

Természetesen ahogy a hálózatok és az adatmennyiség fejlődött, ez a fajta hibakezelés már nem működött, szükség volt a pont-pont alapú kábelezésre, avagy a ma használatos CAT-5, CAT-5E és CAT-6 (vagy közismertebb nevén Ethernet) kábelekre.

Adatcsomagok

Az Ethernet csomag-alapú, tehát egy meghatározott adatmennyiséget küld egy csomagban. Ha ennél több adatot akarunk küldeni, akkor azt több csomagra kell bontani.

PreambulumSFDSource MACDestination MACEthertypePayloadFCS
7 byte1 byte6 byte6 byte2 byte4 bytes

 

Maga az adatcsomag egy úgynevezett preambulummal, vagyis csomagkezdő jellel indul, ami nem más, mint egy meghatározott bitsorozat. Ethernet esetén ez egy 57 bites (7 byte hosszú) bitsorozat, aminek a szabvány szerinti értéket kell tartalmaznia: 0x55 0x55 0x55 0x55 0x55 0x55 0x55.

A preambulumot egy úgynevezett Space Frame Delimiter (SFD) követi, ami egy byte hosszú és arra szolgál, hogy jelezze a tényleges Ethernet Frame kezdetét, konkrétan: 0xD5.

Az SFD után jön a küldő eszköz MAC címe, majd a céleszköz MAC címe, összesen 2×6 byte hosszban, majd ezután az Ethertype.

Az Ethertype egy érdekes jószág: ha az értéke 1500 vagy az alatt van, akkor a frame-ben foglalt hasznos adat hosszát tartalmazza. Ha 1536, vagy efölötti értéket tartalmaz, akkor azt jelöli, hogy milyen csomag van a hasznos adat részben. Ez esetben a frame végét a framet követő Frame Check Sequence, valamint a framet követő csomagok közti szünet jelöli.

Az Ethertype után következik maga a hasznos adat (payload). Ebben sok minden lehet, például egy IP csomag (amiről a következő cikkben lesz szó), vagy egy IPX csomag, stb. Ennek a hossza elméletben nem korlátozott, azonban a gyakorlatban a mai hálózatok 1500 byte hosszú MTU-t (Maximum Transmission Unit) használnak.

A csomagot utolsó eleme a Frame Check Sequence, azaz az ellenőrzőszám. Ezt a küldő eszköz a CRC32 algoritmussal számolja ki, a címzett pedig ugyanezzel az algoritmussal ellenőrzi. Ezt pedig követi egy 12 byte hosszú interpacket gap, azaz egy szünet a csomagok között.

Ethernet a gyakorlatban

Wireshark

Nade, hogy ne csak elméletben beszélgessünk az Ethernetről, nézzük meg mindezt a gyakorlatban. Ehhez a Wireshark nevű eszközt fogjuk használni, ami minden modern operációs rendszerre ingyenesen érhető el.

A Wiresharkot megnyitva a List Capture Interfaces gomb megnyomásával elkezdhetjük a gépünk hálózati forgalmát monitorozni, vagy adott esetben megnyithatunk egy tcpdump programmal előállított, például egy szerverről származó filet. Ez aztán így néz ki:

wireshark

Az egyes sorok az egyes adatcsomagokat jelentik, amikre duplán kattintva megtekinthetjük a csomag részleteit:

wireshark-details

Mint látható, az Ethernet frame részleteit szépen ki lehet olvasni a rögzített adatokból.

tcpdump

A tcpdump eszköz a legtöbb Linux/UNIX rendszergazda szerszámkészletében jelen van, gyakorlatilag a defacto szabvány hálózatmonitorozó szoftver ezeken a platformokon.

Ha az Ethernet fejlécekbe szeretnénk belekukkantani, azt igen egyszerűen megtehetjük:

tcpdump -i any -n -e -XX host 77.74.49.66 and host 77.74.49.75

Ebben a példában korlátozom a monitorozást a két nevezett gépre, de természetesen enélkül is futtatható a parancs. A tcpdump különböző lehetséges kapcsolóiról a man tcpdump parancs ad részletesebb felvilágosítást.

Ha a fenti parancsot lefuttatjuk, ilyeneket fogunk látni:

19:56:16.387450 Out 00:25:90:c1:93:8a ethertype ARP (0x0806), length 44:
        Request who-has 77.74.49.75 tell 77.74.49.66, length 28
        0x0000:  0004 0001 0006 0025 90c1 938a 0000 0806  .......%........
        0x0010:  0001 0800 0604 0001 0025 90c1 938a 4d4a  .........%....MJ
        0x0020:  3142 0000 0000 0000 4d4a 314b            1B......MJ1K

Koránt sem olyan szép, mint a Wireshark, de ha éppen nincs kéznél grafikus felülettel rendelkező számítógép, vagy gyorsan kell eredményre jutnunk, ez is tökéletes eszköz.

A sorozat következő részében

A sorozat következő cikkében arról fogunk tárgyalni, hogy mit is lehet elküldeni egy Ethernet frameben, és hogyan léphetjük át a helyi hálózatunk határait.

Források