Wielu z was zapewne miaîo (ma, bëdzie miaîo) kontakt z sieciâ. Bâdú to rozlegîâ (jak np. InterNet), bâdú to lokalnâ (jak np. NetWare Novell). Artykuî ten nie ma na celu ich opisywania, ani teû nie jest instrukcjâ obsîugi. Tym razem chcë napisaê nieco o teoretycznej stronie sieciowania. Przypuszczam, ûe dla wielu z Was bëdzie on bâdú opisem rzeczy trywialnych, lub teû zupeînie niezrozumiaîâ zbieraninâ nikomu niepotrzebnych danych.
Drobna dygresja... Wiecie jakie sâ najkrótsze definicje teorii i praktyki? Teoria - gdy wszyscy wiedzâ jak coô powinno dziaîaê a to nie dziaîa, Praktyka - gdy coô dziaîa a nikt nie wie jak i dlaczego (vide Fat Agnus #17) A co to jest poîâczenie teorii i praktyki? Gdy coô nie dziaîa i nikt nie wie czemu...
Transmisja danych to wîaônie takie poîâczenie teorii i praktyki.
Ale wracam do tematu. Obecnie panujâcym standardem jest OSI (Open System Interconnection) przyjëty przez ISO, IEEE i CCITT (czyli praktycznie przez wszystkich). Jest to standard bardzo interesujâcy ze wzglëdu na swojâ budowë.
Ideâ przyôwiecajâcâ twórcâ standardu byîa jego maksymalna elastycznoôê, a takûe konieczna îatwoôê wprowadzania zmian. Dlatego zdecydowano sië na model warstwowy.
Moûesz zapytaê, co to takiego jest model warstwowy? Aby to wyjaôniê, posîuûë sië prostâ analogiâ. Wyobraú sobie, ûe chcesz przekazaê pilnâ informacjë komuô w innym mieôcie. Postanawiasz wysîaê depeszë. Moûesz zauwaûyê, ûe proces przekazywania telegramu moûna podzieliê na wiele etapów np:
Wymyôlasz treôê depeszy
Wychodzisz na pocztë
Podajesz treôê panience w okienku
Panienka jâ zapisuje
... itd. itd.
I to jest wîaônie model warstwowy czynnoôci. Podziaî na podstawowe elementy pozwala na doôê îatwâ modyfikacjë systemu - zmiana w jednym z nich nie pociâga za sobâ zmian w innych. Poza tym zapewniony jest przewidywalny przepîyw informacji, gdyû kaûda warstwa kontaktuje sië tylko z co najwyûej dwoma innymi warstwami (nadrzëdnâ i podrzëdnâ).
W standardzie OSI wydziela sië siedem warstw:
Ûeby byîo zabawniej przyjëto numerowaê je od... doîu i tak warstwa fizyczna ma numer 1, a warstwa aplikacji numer 7.
Dobrym przykîadem zgodnoôci ze standardem ISO jest Novell Netware, gdzie kaûdej warstwa jest mocno wyodrëbniona, w odróûnieniu np. do sieci opartych na TCP/IP, gdzie czëôê warstw zostaîo poîâczonych ze sobâ.
Przy przekazywaniu danych od warstwy najwyûszej ku doîowi dane sukcesywnie "puchnâ", a dzieje sië tak, gdyû kaûda z warstw dodaje pewne wîasne dane, które sâ niezbëdne do poprawnej transmisji.
A wyglâda to mniej wiëcej tak - do warstwy najwyûszej docierajâ dane:
+-------+
|D A N E|
+-------+
Do warstwy przezentacji dociera juû:
+--+-------+
|HA|D A N E|
+--+-------+
gdzie HA to nagîówek nadany informacjom przez warstwë aplikacji. Warstwa sesji otrzymuje:
+--+--+-------+
|HP|HA|D A N E|
+--+--+-------+
a HP to nagîówek warstwy prezentacji...
i tak dalej aû juû po najniûszej warstwie uzyskujemy:
+--+--+--+--+--+--+--+-------+
|HH|HL|HN|HT|HS|HP|HA|D A N E|
+--+--+--+--+--+--+--+-------+
gdzie:
HH - nagîówek warstwy fizycznej
HL - nagîówek warstwy poîâczeï liniowych
HN - nagîówek warstwy sieciowej
HT - transportowej itd.
Przy odbiorze przy przechodzeniu przez wszystkie warstwy zachodzi dokîadnie odwrotna operacja, tzn. kaûda warstwa "zdejmuje" te dane które sâ przeznaczone tylko dla niej.
Przejdúmy teraz do bliûszego omówienia poszczególnych warstw.
Warstwa najniûszâ (1) jest warstwa fizyczna - odpowiada ona za fizyczne przesyîanie danych pomiëdzy dwoma komputerami naleûâ do niej np. ôwiatîowody. Warstwa ta rozróûnia tylko ciâgi bitów - wogóle ich nie interpretuje. Przy wysyîaniu danych musi ona pobraê informacjë do przesîania z warstwy poîâczeï liniowych, a nastëpnie modyfikowaê (modulowaê) odpowiednio sygnaî noônej.
Rozróûniamy trzy rodzaje modulacji:
Obecnie praktycznie nie stosuje sië tych modulacji w czystych postaciach. Dzieje sië tak dlatego, ûe np. modulacja AM pozwalaîa na osiâgniëcie prëdkoôci do 1200 bodów (w przypadku jednej linii przesyîowej pojëcia bod i bit/s sâ toûsame), FM do 4800/9600, zaô nigdy nie stosowano samej PM ze wzglëdu na to, ûe osiâgi te byîyby porównywalne co najwyûej z AM przy nieporównywalnie wyûszych kosztach. Dlategoteû przy prëdkoôciach powyûej 9600 bodów stosuje sië modulacje mieszane AM/PM.
Kolejnâ warstwâ (2) jest warstwa poîâczeï liniowych - ma ona za zadanie synchronizowaê przesyîanie bitów danych - do tej warstwy moûna zaliczyê np. LAPBi HDLC. Warstwa ta operuje juû na pakietach bitów. Pakiety te zwyczajowo nazywane sâ ramkami. Tutaj naleûaîoby wspomnieê o tym, ûe protokoîy liniowe sâ pierwszymi, które sprawdzajâ poprawnoôê przesyîanych danych na poziomie ramki. Stâd we wszyskich programach komunikacyjnych moûna znaleúê takie opcje jak:
Wynika to z tego, ûe zîâcze szeregowe stosowane w ogromnej wiëkszoôci komputerów to RS232c, który jest zîâczem asynchronicznym, co oznacza, ûe poszczególne ramki mogâ przychodziê w róûnych odstëpach czasu. (Na marginesie naleûy tu wtrâciê, ûe RS232c jest standardem leûâcym wîaôciwie na poîâczeniu dwóch warstw, gdyû pomimo, ûe fizycznie przekazuje informacje, to jednak posiada elementy specyficzne dla warstwy poîâczeï liniowych) Pociâga to za sobâ koniecznoôê kaûdorazowej synchronizacji przy przesyîaniu informacji. Zwyczajowo stanem jaîowym jest nie 0 lecz 1. Dzieki temu wystarczy aby bit startu ramki byî zerem, aby znaleúê poczâtek transmisji danych.
Bit parzystoôci jest najprostszâ sumâ kontrolnâ jakâ moûna sobie wyobraziê. Gdy Parity bits jest ustawiony na EVEN to bit parzystoôci bëdzie ustawiony, gdy iloôê zapalonych bitów w ramce jest parzysta (jeôli ODD to bëdzie ustawiony gdy iloôê jest nieparzysta). Przy ustawieniu NONE bit ten wogóle nie jest wysyîany. To ostatnie ustawienie jest najpopularniejsze, a to dlatego, ûe brak kontroli parzystoôci i tak nie wpîywa na transmisjë gdyû ewentualne bîedy sâ wychwytywane i korygowane przy zastosowaniu protokoîów zainstalowanych w wyûszych warstwach.
Iloôê bitów danych (Data Bits) oznacza ile bitów z danych pobranych z wyûszej warstwy (sieciowej) ma byê wysîanych w pojedynczej ramce. Iloôê tych bitów moûe byê teoretycznie dowolna, lecz przy wiëkszej ich iloôci istnieje niebezpieczeïstwo rozsynchronizowania sië îâcza, gdyû sygnaîy te nie sâ w ûaden sposób zewnëtrznie synchronizowane. Dlatego teû przyjëto, ûe nieprzekraczalnâ granicâ jest 8 bitów. Moûna to zauwaûyê w niektórych programach komunikacyjnych, które uniemoûliwiajâ ustawienia tego parametru poniûej 7 i powyûej 8 bitów. Zwiâzane jest to takûe z pewnoôciâ prawidîowoôci przesîanych danych. Im mniej bitów danych tym prawdopodobieïstwo wystâpienia bîëdu jest mniejsze, lecz powoduje takûe (co chyba zrozumiaîe) spadek prëdkoôci przesyîania danych.
Iloôê bitów stopu informuje ile bitów ma zostaê przeznaczonych na zakoïczenie ramki. Moûe byê to wartoôê 1 lub 2. Przyjëîo sië stosowaê 1 bit stopu co zwiëksza prëdkoôê transmisji.
W tym miejscu naleûy wspomnieê o przesyîaniu póî i peînodupleksowym. Róûniâ sië one tym, ûe gdy przy transmisji póîdupleksowej nadaje jedna maszyna, to druga musi czekaê na koniec przekazu i w tym czasie sama nie moûe nadawaê. W peînym dupleksie obie maszyny mogâ nadawaê jednoczeônie. Dziaîanie peînego dupleksu na dobrâ sprawë jest widoczne dopiero przy zîâczach posiadajâcych poza kanaîem podstawowym takûe kanaî pomocniczy. Dzieje sië tak dlatego, ûe wtedy w kanale pomocnicznym przekazywane sâ informacje zwrotne. Przy zîâczach jednokanaîowych peîen dupleks moûe byê tylko emulowany. W rzeczywistoôci stosuje sië wtedy poîâczenie póîdupleksowe, lecz obie maszyny przekazujâ sobie informacje naprzemiennie, co moûe wywoîaê wraûenie jednoczesnoôci.
W warstwie tej przeprowadzana jest pierwsza korekcja bîëdów i w wypadku ich wystâpienia uszkodzone ramki sâ retransmitowane. Dobrym przykîadem dziaîania pierwszych dwóch warstw jest modem, przy pomocy którego moûna nawiâzaê poîâczenie z innym komputerem.
Nastëpnâ warstwâ (3) jest warstwa sieciowa - odpowiedzialna jest ona za znalezienie odbiorcy i przesîanie mu informacji okreôlonâ drogâ, a takûe, jeôli to moûliwe zoptymalizowaê jâ wzglëdem odlegîoôci, czasu, niezawodnoôci lub kosztu transmisji.
W przypadku usîug poîâczeniowych (takich, ktore wymagajâ przed wîaôciwâ transmisjâ okreôlenia drogi) w warstwie tej prowadzona jest trasa którâ bëdâ biegîy dane - tworzony jest logiczny kanaî pomiëdzy obiema maszynami.
W przypadku usîug bezpoîâczeniowych dane przekazywane sâ z wëzîa do wëzîa sieci i kaûdy z nich decyduje gdzie dalej jâ przesîaê. Jednym z ciekawszych algorytmów rozsyîania danych w sieci jest algorytm rozpîywowy, w którym kaûdy wëzeî po otrzymaniu pakietu danych, sprawdza, czy pakiet juû przezeï zostaî kiedyô odebrany, jeûeli nie to wysyîa go do wszystkich "sâsiednich" wëzîów, za wyjâtkiem tego z którego go otrzymaî. Innym ciekawym jest algorytm "gorâcego ziemniaka", w którym to wëzeî przekazuje dane do najmniej obciâûonej linii.
W warstwie tej muszâ byê zgromadzone informacje o wszystkich nawiâzanych poîâczeniach, o adresie nadawcy informacji i adresie ich odbiorcy.
Kolejnâ warstwâ (4) jest warstwa transportowa - jest to ostatnia warstwa komunikacyjna. Ponad niâ buduje sië juû aplikacje. Obsîuguje ona wszelkie bîëdy, które wystâpiîy podczas transmisji, a ponad niâ juû nie wydostajâ sië juû ûadne informacje o zgubionych czy utraconych pakietach.
Dopiero teraz moûna wspomnieê o tym, ûe poprzednia warstwa takûe ma pewne wyróûniki, lecz sâ one ôciôle powiâzane z róûnymi cechami warstwy transportowej. Rozróûniamy 3 typy warstwy sieciowej:
A - najlepsza, uwzglëdnia wszystko, co przewiduje protokóî transmisji, obsîuguje bîëdy transmisji, nie dopuszcza do jej zerwania, lub utracenia logicznego poîâczenia pomiëdzy maszynami. Wtedy warstwa transportowa ogranicza sië praktycznie tylko do przekazywania informacji z warstwy wyûszej.
B - nieco gorsza, ma wiele zabezpieczeï, ale np. nie obsîuguje zerwania poîâczenia (co wiâûe sië z powtórzeniem caîej transmisji)
C - najsîabsza - praktycznie nie ma ûadnych zabezpieczeï przeciw bîëdom. W tym przypadku koniecznoôê ich korekcji spada na warstwë transportowâ.
A rozróûniamy aû 5 klas warstw transportowej (numerowanych od 0 do 4)
0 - klasa, która dostarcza minimum zabezpieczeï - praktycznie przekazuje tylko dane niûej - dostosowana jest do typu A warstwy sieciowej
1 - stosuje sië do typu B warstwy sieciowej.
2 - stosuje sië do typu A, tak jak 0, tyle tylko, ûe dane wysyîane do jednego odbiorcy sâ îâczone.
3 - analogicznie do 1, ale teû z moûîiwoôciâ îâczenia.
4 - stosowana z typem C - bardzo dobra - prowadzi peînâ obsîugë bîëdów
Warstwa transportowa jako pierwsza z warstw "widzi" poîâczenie w caîoôci - tzn. znane jest jej peîna droga jakâ przebiega informacja.
Warstwa sesji (5) jest piâtâ z kolei i jest odpowiedzialna za uporzâdkowane przesyîania danych pomiëdzy dwoma aplikacjami. W warstwie tej takûe szereguje sië pakiety tak, aby ich kolejnoôê byîa odpowiednia. Dzieje sië tak, gdyû nic nie stoi na przeszkodzie, aby np. pakiet 3 dotarî do celu przed pakietem 1 (w przypadku usîug bezpoîâczeniowych). W takim przypadku, bez ich numerowania dane pomimo dobrze przeprowadzonej transmisji dane docierajâ niepoprawne.
Warstwa ta odwzorowuje adres sesji zorientowany na uûytkownika na adres transportowy, który jest zorientowany sieciowo.
Sposób synchronizacji dialogu pomiëdzy dwoma aplikacjami jest bardzo zróûnicowany, lecz najczëôciej jest to dokonywane przez "przekazywanie ûetonu" tzn. gdy jeden z komputerów ma "ûeton" to np. nadaje - w tym czasie drugi odbiera, nastëpnie "ûeton" jest przekazywany drugiej maszynie, a role sië odwracajâ.
Warstwa prezentacji (6) jest powîokâ w sumie bardzo teoretycznâ - tak naprawdë powinna byê stosowana, lecz w praktyce (szczególnie w sieciach rozlegîych) jest nagminnie ignorowana. Dzieje sië tak dlatego, ûe jest to warstwa "przechodnia". Ma za zadanie zaîoûenie pewnych wspólnych struktur, którymi bëdâ posîugiwaîy sië programy. W odniesieniu do Amigowej rzeczywistoôci jej odpowiednikiem sâ datatypy - stanowiâ one pomost pomiëdzy programem, a danymi - powodujâ, ûe pomimo róûnych formatów danych aplikacja jest w stanie je poprawnie obsîuûyê. Ciekawâ rzeczâ jest, ûe informacja pomiëdzy tâ warstwâ a najwyûszâ dokonuje sië przy pomocy pewnej abstrakcyjnej skîadni (np. ASN.1)- czegoô na wzór jëzyka wyûszego rzëdu.
Warstwâ najwyûszâ jest warstwa aplikacji i do niej naleûâ juû konkretne programy dziaîajâce w sieci. Do standardowych aplikacji naleûâ:
Tyle by byîo o modelu OSI... no ale przecieû sieê to nie tylko protokoîy, lecz takûe "druty". Gdy zastanowiê sië przez chwilë nad sposobem poîâczenia wielu komputerów moûna zauwaûyê mnogoôê rozwiâzaï. Najprostszym sposobem byîoby poîâczyê komputery kierujâc sië zasadâ "kaûdy z kaûdym", lecz koszt stworzenia i, przede wszystkim, utrzymania z tym zwiâzany byîby przeogromny. Dlatego teû wymyôlono kilka alternatyw.
Moûe byê to np. poîâczenie typu "pierôcieï", gdzie informacja przekazywana jest od komputera do komputera aû dotrze do adresata. Albo typu "gwiazda" gdzie istnieje jeden wyróûniony komputer, przez który przechodzâ wszystkie poîâczenia. Doï dochodzâ informacje i on przekazuje je adresatowi. Jest to rozwiâzanie bardzo podobne do tego, które znamy z telekomunikacji.
Jednâk ogromnâ popularnoôê, szczególnie wôród "niebieskiej braci", zdobyî ETHERNET. Jest to rozwiâzanie bardzo proste (ûeby nie powiedzieê prymitywne). Ideâ jest to, aby wszystkie komputery podîâczyê do wspólnej szyny przez co kaûdy komputer bëdzie mógî wychwyciê pakiety dla niego przeznaczone. Lecz napotkano tu na kolejny problem - co zrobiê, jeôli dwie maszyny zechcâ nadawaê jednoczeônie? Przy jednej szynie jest to problem bardzo istotny, gdyû w takim wypadku czëôê danych byîoby traconych. Dlatego teû wprowadzono kilka protokoîów uniemoûliwiajâcych powstanie takich sytuacji.
Pierwszym protokoîem, stosowanym gîównie w sieciach Novell Netware, jest CSMA/CD. Ten sposób nadawania informacji charakteryzuje sië tym, ûe maszyna przed nadawaniem sprawdza czy nie trwa transmisja. Jeôli trwa to odczekuje losowâ iloôê czasu po czym ponawia próbë. Jeûeli jednak nie trwa transmisja to zgîasza gotowoôê do transmisji i nasîuchuje czy inny komputer nie wysîaî takûe sygnaîu gotowoôci. Jeûeli nie wysîaî to przystëpuje do transmisji. W wypadku stwierdzenie obcej gotowoôci do nadawania maszyna odczekuje losowâ iloôê czasu i ponawia próbë od poczâtku.
Sposób ten ma swoje wady i zalety. Do niewâtpliwych zalet naleûy zaliczyê prostotë i niski przez to koszt. Niestety zasadniczâ wadâ jest jego wydajnoôê. Proszë sobie wyobraziê, ûe maksymalna (sensowna) obciâûalnoôê sieci tego typu ksztaîtuje sië w okolicach 10-20%. Po przekroczeniu tego progu iloôê detekcji kolizji (a co za tym idzie powtórzenie transmisji) roônie tak lawinowo, ûe jakakolwiek praca przestaje byê moûliwa.
Alternatywâ dla powyûszego jest "pierôcieï logiczny". Sposób ten polega na tym, ûe prawo do nadawania jest po kolei przekazywane od komputera do komputera. Metoda ta okazuje sië dobra w przypadku sieci gdzie iloôê informacji wciâû przekazywanych jest bardzo duûa. Dzieje sië tak dlatego, ûe w protokole tym faktycznie przyznawane sâ poszczególnym maszynom kanaîy czasowe, czyli gdy komputer nie wysyîa danych, jego kanaî pozostaje niewykorzystany. Wyjôciem w takich sytuacjach, jest dynamiczne przydzielanie kanaîu na czas transmisji, lecz w takim przypadku konieczne jest istnienie maszyny zarzâdzajâcej, która bëdzie przyznawaê prawo do nadawania. Przykîadem "pierôcienia logicznego" moûe byê karta ARCNet takûe stosowana w Novellu.
I to byîoby wszystko co miaîem do powiedzenia tym razem.