Warstwowy model architektury internetowej, cz. II
część I
część II
część III
część IV
Warstwowy
model architektury internetowej
Andrzej Sopala
2.
Warstwa IP
Warstwa IP jest podstawą architektury Internetowej. Zapewnia
dostarczanie pakietów do dowolnego komputera dołączonego do sieci
Internet. Każdy komputer w Internecie nazywać będziemy hostem.
Przy przekazywaniu pakietów warstwa IP korzysta z protokołu IP
(Internet Protocol). Na protokół ten składają się operacje:
kierowania pakietu do właściwej sieci i hosta (routing),
tłumaczenia adresów hostów na adresy fizyczne związane z daną
siecią fizyczną (protokół arp),
segmentacji i składania pakietów.
Routing, czyli kierowanie pakietu do odpowiedniego hosta
polega na takim wyznaczaniu trasy pakietu, aby dotarł on do
przeznaczenia w możliwie krótkim czasie (i w ogóle żeby dotarł).
Pakiet, aby dojść do adresata, przejść musi przez kilka fizycznych
sieci komputerowych - konkretnie przez specjalne komputery zwane
routerami. To one realizują algorytmy wyznaczania trasy pakietu.
Należy zaznaczyć, że algorytmy routingu są rozproszone, czyli nie
istnieje jakiś specjalny ośrodek (komputer) w Internecie, który zna
położenie wszystkich hostów. Wiedza o tym jest "podzielona" między
routerami, które przy pomocy specjalnych komunikatów potrafią ją
sobie przekazywać. W tej książce nie będziemy się zajmować
problemami routowania.
Artykuł jest
fragmentem z książki Pisanie programów
internetowych publikowanym za uprzejmą zgodą autora
i Wydawnictwa MIKOM.
Księgarnia
internetowaWydawnictwa MIKOM Zamów książkę przez
Internet
Protokół IP nazywany jest zawodnym, gdyż nie zapewnia
dostarczenia pakietu do odbiorcy. Host nadający wysyła pakiet i od tej
pory nie ma nad nim żadnej kontroli - nie wie, czy dotarł on do odbiorcy,
czy nie. Nie ma żadnych potwierdzeń, ani żądań powtórnej transmisji
pakietu. Pakiet może "zniknąć" (nie dotrzeć do adresata) przy bardzo
obciążonej sieci. Podobnie jest z kolejnością pakietów - tu również
ujawnia się zawodność protokołu. Nie gwarantuje on, że pakiety dotrą do
odbiorcy w takiej samej kolejności w jakiej zostały wysłane. Zawodność
protokołu IP nie jest jednak jego niedogodnością. Dzięki temu
implementacja protokołu jest prosta, a niezawodność dostarczania danych
zapewnia warstwa transportowa.
Warstwa IP korzysta również z protokołu ICMP, który steruje pracą
sieci. Zapewnia on między innymi:
sterowanie przepływem (host odbiorczy lub router może wysłać do
nadawcy pakietów komunikat z żądaniem ograniczenia ilości wysyłanych
pakietów);
sprawdzanie osiągalności danego hosta w Internecie;
wspomaganie routowania.
2.1.
Adresy IP
Nie będziemy tu szczegółowo opisywać warstwy IP - z reguły wiedza o
tej części oprogramowania sieciowego nie jest potrzebna przy konstruowaniu
typowych aplikacji Internetowych. Jednak istnieje pewien aspekt związany z
tą warstwą, który trzeba koniecznie znać, aby napisać nawet najprostszy
program korzystający z protokołu TCP/IP. Tym ważnym elementem są adresy
IP.
Każdy host w Internecie posiada swój unikalny na skalę całego
Internetu numer (adres) IP. Składa się on (w obecnej wersji 4. protokołu)
z 32 bitów (4 bajtów). Numer ten identyfikuje nie tylko pojedynczy host,
ale przede wszystkim sieć fizyczną do której jest on podłączony.
Konkretnie adres IP składa się z adresu sieci i adresu hosta w ramach tej
sieci. Komputer przeniesiony do innej sieci musi mieć zmieniony adres IP.
Istnieją cztery klasy adresów IP:
Klasa A - przedrostek: 0; 7 bitów na adres sieci; 24 bity na adres
hosta.
Klasa B - przedrostek: 10; 14 bitów na adres sieci; 16 bitów na
adres hosta.
Klasa C - przedrostek: 110; 21 bitów na adres sieci; 8 bitów na
adres hosta.
Klasa D - przedrostek: 1110; 28 bitów na adres rozgłoszeniowy.
Struktura adresu, czy przynależność adresu do danej klasy nie są
sprawami istotnymi w czasie pisania programów Internetowych. Program taki
dostaje adres IP i niewiele więcej go "obchodzi". Interpretacją adresu
zajmuje się właśnie warstwa IP. Adresy najczęściej zapisuje się w
postaci czterech bajtów. W pamięci umieszczone są w tzw. sieciowym
porządku bajtów (z reguły nie ma potrzeby bezpośrednio "grzebać" w
pamięci, w której zapisany jest adres - są odpowiednie funkcje, które
zapisują i odczytują adres z pamięci). Adres IP zapisuje się często w
postaci tekstowej w formacie tzw. zapisu dziesiętnego z kropkami. Są to
cztery bajty zapisane dziesiętnie oddzielone od siebie kropkami np.:
153.19.40.230Do
konwersji między tymi postaciami służą funkcje inet_addr (z tekstu
na postać w pamięci) oraz inet_ntoa (odwrotnie). Opisujemy je w książce,
w częściach poświęconych systemom UNIX i Windows.
Kilka adresów (zakresów adresów) jest zarezerwowanych dla specjalnych
celów. Spośród nich jednym z ważniejszych jest adres 127.0.0.1, który
zawsze wskazuje na host lokalny, czyli na samego siebie.
Klasa D adresów wskazuje na jeszcze jedną możliwość protokołu IP -
transmisję rozgłoszeniową. Nie jest ona często stosowana w typowych,
prostych programach internetowych - nie będziemy się tym tematem zajmować.
3.
Warstwa transportowa
Warstwa IP nie współpracuje bezpośrednio z programem użytkownika
umiejscowionym w warstwie zastosowań. Pomiędzy nimi znajduje się warstwa
transportowa. Warstwa ta ma w ogólności za zadanie zorganizować transport
danych przekazanych z warstwy zastosowań do warstwy zastosowań w hoście
odległym. Warstwa transportowa korzysta przy tym z usług warstwy IP,
której usługi - jak napisaliśmy - są zawodne. Musi więc sama zapewnić
niezawodność przesyłanych danych. Realizuje to protokół TCP. W warstwie
transportowej znajduje się też protokół nie zapewniający niezawodności,
korzystający bardziej "surowo" z usług warstwy IP - mianowicie UDP. Oba
opiszemy dokładniej.
3.1.
Protokół TCP
TCP (Transmission Control Protocol) realizuje transmisje w
trybie połączeniowym. Oznacza to, że między komunikującymi się hostami
zestawiane jest wirtualne połączenie. Protokół TCP utrzymuje to połączenie
i zapewnia niezawodny transfer danych między hostami. Realizowane
jest to poprzez operacje potwierdzania pakietów i retransmitowania
pakietów zagubionych. Dokonują tego specjalne algorytmy. W rezultacie
program wysyłający dane może mieć pewność ich dostarczenia do odległego
hosta.
Utworzone połączenie wirtualne zapewnia kanał transmisji, w którym
dane przyjmują postać strumienia bajtów. Konkretnie są to dwa strumienie,
gdyż transmisja jest dwustronna. Strumień ten nie ma żadnej struktury, nie
jest podzielony na żadne rekordy lub inne mniejsze części. Oczywiście
przesyłany jest on przy pomocy pakietów (porcji danych) jednak podział
strumienia na mniejsze części danych dokonywany przez protokół TCP nie
powinien być wiążący dla strony odbierającej. Nadal powinna ona traktować
nadchodzące we fragmentach dane jako część strumienia. Jest to dość ważna
uwaga - przekonamy się o tym przy konstruowaniu konkretnych programów -
protokół TCP nie zawsze zachowuje podział danych jaki mu sugeruje warstwa
zastosowań po stronie wysyłającej. Czasem łączy mniejsze fragmenty, czasem
dzieli większe. Przykładowo jeśli program wysyła dwa komunikaty
bezpośrednio następujące po sobie, warstwa transportowa może je wysłać w
jednym pakiecie. Program odbierający, jeśli zastosuje proste odbieranie
danych, może potraktować porcję danych jako jeden komunikat i w rezultacie
nastąpi błąd.
Dodatkowo protokół TCP zapewnia obsługę tzw. danych pilnych OOB (ang.
urgent data Out-Of-Band). Są to dane przekazywane poza normalnym
strumieniem danych, obok niego. Jeśli np. strona wysyłająca wysłała 100
bajtów w normalnym trybie, a odbierająca odebrała dopiero 10 (reszta czeka
w buforach wewnętrznych strony odbierającej - tj. zatrzymała się w jednej
z warstw), do tego należy się spodziewać, że nieprędko pobierze następne
(np. długo przetwarza otrzymane dane) to strona nadająca nie ma możliwości
skontaktować się (powiadomić o czymś) strony odbierającej do czasu
"przetrawienia" przez nią wszystkich danych. Wprowadzono możliwość
wysyłania komunikatów poza kolejką. Wysłane w tym trybie dane pojawią się
na początku danych "nie przetrawionych" przez stronę odbierającą. Tym
sposobem następna operacja czytania danych z warstwy transportowej po
stronie odbierającej, zwróci dane pilne. W rzeczywistości rzadko się
korzysta z możliwości przesyłania danych pilnych, ich zastosowanie
komplikuje program i protokół warstwy zastosowań. Należy się wystrzegać
stosowania tej możliwości, jeśli dany problem można rozwiązać stosując
wyłączenie podstawowy strumień. Spośród popularnych protokołów warstwy
zastosowań jedynie TELNET używa danych pilnych i to tylko w wyjątkowych
przypadkach. W niniejszej książce bardzo mało miejsca poświęcimy obsłudze
danych pilnych.
Podsumowując: Protokół TCP dostarcza niezawodny, połączeniowy,
strumieniowy system transmisji danych.
3.2.
Protokół UDP
Protokół UDP (User Datagram Protocol) jest dużo prostszym protokołem
od TCP. Korzysta w sposób mniej wyszukany z warstwy IP. - Wysyła dane z
warstwy zastosowań niemalże bez żadnych dodatkowych operacji do warstwy
IP. Jedynie dodaje krótki nagłówek m.in. z numerem portu (o numerach
portów piszemy niżej). Można więc powiedzieć, że dane wysłane przy pomocy
tego protokołu wędrują więc po sieci jako pakiety IP. Protokół UDP ma więc
podobne wady i zalety jak IP. Jest przede wszystkim zawodny - i o tym
trzeba zawsze pamiętać. Warstwa zastosowań wysyłając datagram nie ma
żadnej pewności, że ten dotrze do adresata i że kolejność odbierania
datagramów będzie taka jak nadawania. Musi więc sama zapewniać mechanizmy
niezawodności (potwierdzanie, retransmisję itp.). Dlaczego więc
wprowadzono ten protokół? - Ze względu na zalety protokołu IP, które UDP
przejmuje. Jest to przede wszystkim szybkość. Protokół TCP "traci" dużo
czasu na operacje zarządzania połączeniem, potwierdzania danych i
retransmisji pakietów utraconych. Czas ten jest niedopuszczalny dla
niektórych zastosowań. Niektóre programy korzystają z UDP, zwłaszcza
jeśli:
"zależy im na czasie", czyli stosują protokół czasu rzeczywistego
(np. daytime);
stosują bardzo prosty protokół warstwy zastosowań: jedno pytanie,
jedna odpowiedź - wtedy odpowiedź jest jednocześnie potwierdzeniem
dostarczenia pytania;
utrata jednego lub kilku datagramów nie jest rzeczą "tragiczną" (np.
w protokołach transmisji głosu będą krótkie przerwy w transmisji).
z różnych innych względów korzystniej jest skonstruować algorytm
zapewniania niezawodności, niż korzystać z protokołu TCP;
Podsumujmy: Protokół UDP dostarcza zawodnej, bezpołączeniowej usługi
przesyłania datagramów.
Bardziej skupimy się tu na protokole TCP - jako częściej używanym i
popularniejszym.
3.3.
Porty
Pisaliśmy o adresach IP - określają one jednoznacznie komputer w sieci
Internet. Dzięki temu pakiety IP potrafią dotrzeć do odpowiedniego
komputera. Nie jest to jednak wystarczające. Często na jednym komputerze
pracuje kilka aplikacji, które korzystają z Internetu. Gdybyśmy używali
jedynie adresów IP jako identyfikatora adresata, system nie wiedziałby do
której aplikacji odebrane dane są skierowane. Warstwa transportowa
wprowadza pojęcie portów. Port jest dodatkowym polem adresowym, które
identyfikuje proces na komputerze odbiorczym. Dzięki temu host "wie" dokąd
(do którego programu) ma przekazać dane.
Porty są numerowane przy pomocy 16-bitowej liczby dodatniej i w
praktyce są częścią (wraz z adresem IP) adresu internetowego. W
interfejsach programistycznych istnieje struktura sockaddr_in, która
mieści adres IP oraz numer portu. Porty w pamięci zapisuje się w tzw.
sieciowym porządku bajtów. Różne komputery w różny sposób zapisują w
pamięci wartości kilkubajtowe - raz młodszy bajt zajmuje niższy adres,
innym razem jest odwrotnie. Sposób wymiany wartości kilkubajtowych (np.
portów w nagłówkach warstwy transportowej) jest oczywiście w standardach
sieci dokładnie określony - najpierw bajt starszy, potem młodszy. Nie
musimy tego pamiętać, konwersję między różnymi postaciami zapisu (zapis
komputerowy i zapis sieciowy) realizują za nas odpowiedni funkcje, które
jednak trzeba jawnie użyć. W przypadku numerów portów będą to funkcje
htons (z komputerowego na sieciowy) oraz ntohs (odwrotnie) - będziemy
dalej opisywać te funkcje. Należy pamiętać o konwersji postaci numerów
portów - częste źródło błędów logicznych.
Numery portów pełnią ważną funkcję w zastosowaniach Internetu. Każda
standardowa usługa (np. http, POP3, TELNET) ma przypisany ogólnie znany
numer portu, który identyfikuje na danym hoście program odpowiedzialny za
jej udzielenie. Należy więc pamiętać o tym, aby nowym usługom, stworzonym
na potrzeby jednego programu przydzielać numery różne od zarezerwowanych
na standardowe usługi. Bezpiecznie jest używać numerów portów większych od
1024. Przestrzenie adresowe portów dla protokołów TCP i UDP są
odrębne. Oznacza to, że można używać jednocześnie jednakowego numeru w
stosunku do protokołów TCP i UDP. Nie wchodzą sobie one w drogę.
część III
http://www.e-marketing.pl/
Justyna Szumacher (justsz@webmaster.pl)
Wyszukiwarka
Podobne podstrony:
Warstwowy model architektury internetowej, cz IVWarstwowy model architektury internetowej, cz IWarstwowy model architektury internetowej, cz IIIWarstwowy model architektury internetowejWarstwowy model architektury internetowejStosunki Międzynarodowe International Relations, tom 40, 2009, cz II2009 SP Kat prawo cywilne cz II413 (B2007) Kapitał własny wycena i prezentacja w bilansie cz IIFotografia ślubna zdjęcia w plenerze, cz IIChoroby obturacyjne górnych dróg oddechowych u koni cz II(1)4 połączenia śrubowe cz IIAparat czy kamera Każdemu wg potrzeb, cz II – kamery zaawansowanewięcej podobnych podstron