Windows - Magas ütközési (collision) szám Windows hálózatokban

forráskód letöltése
Hálózati rendszergazdák tapasztalhatják, hogy Windows NT/2000 operációs rendszert futtató gépek hálózatba kötésével jelentősen megnövekszik a hálózati forgalomban keletkező csomagütközések (collisions) száma. A probléma csak ethernet hálózatokban fordul elő. Cikkünkben megnézzük, hogy mi húzódik a jelenség hátterében és milyen megoldás létezik rá.
Cikkünkhöz mellékeltünk egy registry állományt, melyet futtatva csökkenthető az ethernet hálózatokban megnövekedett csomagütközés szám.
Mi a csomagütközés?
Ütközés akkor keletkezik, ha egynél több hálózati állomás (számítógép, router, stb.) küld egyazon időben adatokat egy ethernet csatornán. Ekkor keletkezik egy esemény, melyet minden érintett fél megkap. Egy speciális algoritmussal, véletlenszerűen későbbre (miliszekundumban értendő) halasztódik a küldés, majd ennek eljövetelekor megismétlődik, amíg sikeresen el nem jut a csomag a célcímhez. A teljes funkció hálózati interfész szintjén zajlik. Tehát egy hálózati kártya önállóan képes megoldani a problémát. Ethernet hálózatokban az ütközés egy teljesen normális jelenség. Igazi problémát akkor jelent, ha nagy számban fordul elő. Figyelembe véve a későbbi ismételt küldéseket, az ütközések száma egyenesen arányos a hálózat lelassulásával. Főleg akkor tapasztalunk ilyet, ha vegyesen van 10 és 100 Mbps-os maximális sebességre képes hálózati hardverünk és több száz MB-os fájlmásolásba kezdünk a hálózaton keresztül. A Windows NT termékvonalban, 3.51-től kezdve a Windows 2000 Datacenter Server-en át a Windows XP-ig csökkenthető a jelenséggel járó káros következmény.
Hogy ellenőrizhető, hogy ütközés lépett fel?
Szoftveresen diagnosztikai programokkal, melyek a hálózati kártya rejtett forgalmát is képesek mérni. Például az NDIS meghajtók szolgáltatnak ütközési statisztikát a következő függvényekkel:
  • OID_802_3_XMIT_ONE_COLLISION - Egy ütközés után sikeresen átvitt keretek (frames).
  • OID_802_3_XMIT_MORE_COLLISIONS - Több ütközés után sikeresen átvitt keretek száma.
  • OID_802_3_XMIT_LATE_COLLISIONS - Egy munkafolyamat alatt keletkezett ütközések száma.
Hardveresen az aktív - forgalmat is jelző - hálózati elemeken - például HUB-okon - lévő led-ek segítségével. Manapság már általánosnak mondható, hogy a legolcsóbb HUB-ok is jelzik valamilyen módon a csomagütközéseket: vagy egy különálló led-el, vagy csatornánként egy-egy led-et villogtatva. Nem szükséges folyamatosan előtte ülni. Próbáljuk ki a következőt: indítsunk el egy nagyobb adatmennyiség (több száz megabájt) másolást két gép között. Nézzük meg azt a HUB-ot, amelyiken átmegy a teljes forgalom. Ha a másolás alkalmával érzékelhetően többször villog az ütközést jelző led, mint egyébként, akkor máris egyszerű módszerekkel sikerült megtapasztalni a problémát.
Megoldások
Ütközési problémákhoz vezethet, ha a hálózat gépein különböző sebesség/duplex beállítások szerepelnek. A lassúbb gépeknél ilyenkor útszűkület (bottleneck - palacknyak) alakul ki. Leggyorsabbá akkor tehetjük a hálózatot, ha mindenhol 100 Mbps/full duplex módot állítunk be. Egyes hálózati kártya meghajtók képesek automatikusan meghatározni a legjobb értéket, alkalmazkodva a lassúbb gépekhez.
Bár a beállítások a meghajtók függvényében változhatnak, legtöbbször az "Eszközkezelő" ("Device Manager") konzolban a kártya tulajdonságlapjának "Speciális" ("Advanced") oldalán található. Válasszuk ki a "Külső PHY" vagy "Link Speed/Duplex Mode" tulajdonságokat. Meghajtónként változik, hogy melyiket vagy milyen néven fordul elő. Irányadóul szolgálhat, hogy a kijelölendő értékek között kell szerepelnie kétszer a 10 Mbps és 100 Mbps feliratoknak.
Nem minden hálózati kártya esetében jelent megoldást a következő regisztrációs adatbázisbeli módosítás, de érdemes megpróbálni:
Indítsuk el a REGEDIT.EXE programot és keressük meg az alábbi kulcsot:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\e100b"x"\Parameters
Ahol az "x" helyén a hálózati csatoló sorszáma szerepel (csak több csatolónál van egynél több alkulcs). Hozzunk létre egy új REG_DWORD típusú bejegyzést "Adaptive_ifs" néven és értéknek adjunk 1-et. Mit tettünk most? Engedélyeztünk egy adaptív algoritmust, amely detektálja és csökkenti az ütközéseket.
Következő megoldásunk ismét a regisztrációs adatbázis szerkesztésével valósítható meg. A TCP/IP beállítások között megadható, hogy a küldő gép várja meg a TCP/IP ACK üzenetét, amelyet a célszámítógép ad vissza, mielőtt folytatja az újabb csomagok küldését. Ez szintén jelentősen csökkenti az ütközések számát. Alapértelmezésben az alábbi bejegyzés nem létezik a Windows-ban, ezért létre kell hozni. Keressük meg az alábbi kulcsot:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Hozzuk létre az új bejegyzést "TcpWindowSize" néven, REG_DWORD típussal és értéknek adjunk decimális 2920-at. Figyeljünk oda, mert alapértelmezésben hexadecimális számot vár tőlünk a REGEDIT. Először váltsunk át decimálisba és csak utána írjuk be a számot.
Az IEEE 802.3 szabvány előírja, hogy adatküldések előtt 9.6 mikroszekundum várakozást kell beiktatnia a hálózati kártyának (interframe gap). Számos gyártó csökkentette ezt az időt a minél gyorsabb adatátvitel érdekében, melynek káros mellékhatása szintén az ütközési szám növekedése. Ha viszont növekszik az ütközési szám, lassul a hálózat. Ilyenkor a gyorsabb a lassúbb. Ennek okán próbálkozhatunk a hálózati kártyák cseréjével is.