Sieci  komputerowe 
Kompendium 

Karol Krysiak

Sieci komputerowe. Kompendium.

Włóż do koszyka

Więcej informacji


5. Warstwa transportowa [2].

W warstwie transportowej znajdują się dwa protokoły zapewniające transport danych pomiędzy protokołem IP a aplikacjami. Ponieważ dane wędrują przez sieć w datagramach IP, a aplikacje najczęściej wykorzystują inny format i rozmiar informacji, to protokoły warstwy transportowej muszą zapewniać dostarczenie danych w pożądanej kolejności i umieć poskładać je w odpowiednie struktury. Ponadto protokół IP zapewnia jedynie dostarczenie danych do komputera, a przecież na każdym komputerze może pracować wiele procesów (programów) i usług sieciowych korzystających jednocześnie z transmisji IP.

5.1 Porty, gniazda.

Zadaniem protokołów warstwy transportowej jest rozdzielenie nadchodzących informacji z warstwy Internetu i dostarczenie ich do odpowiednich procesów pracujących w warstwie aplikacji. Identyfikacja przynależności danej transmisji do konkretnego procesu odbywa się na podstawie numeru portu. Numer portu jest liczbą 16 bitową związaną z procesem komunikującym się w sieci. Proces chcąc transmitować lub odbierać dane poprzez IP rezerwuje sobie taką liczbę i w ten sposób uzyskuje dostęp do sieci.

Każda transmisja w sieci Internet jest identyfikowana za pomocą kilku liczb. Po pierwsze jest to adres IP komputera wysyłającego dane, czyli np.: 212.51.219.50 oraz numer portu na tym komputerze, z którego nadaje proces transmitujący. Może to być np.: 23. W tym momencie mamy już liczby identyfikujące transmisję z jednej strony: 212.51.219.50.23. Połączenie numeru IP komputera i portu na którym odbywa się komunikacja nazywamy gniazdem (socket). Podobnie komputer odbierający dane ma swój numer IP: 212.51.219.4 oraz port, na którym proces z nim skojarzony odbiera dane np.: 60000. I w tym momencie mamy już dwa gniazda jednoznacznie definiujące w danej chwili tę transmisję w całym Internecie, można to zapisać w ten sposób:

212.51.219.50.23 : 212.51.219.4.6000

Istnieje kilka zasad przyznawania numerów portów w systemach sieciowych. Jak już napisałem, numer portu jest liczbą 16 bitową, czyli może przyjmować wartości od 0 do  65535. Jednak zakres od 0 do 1024 jest zarezerwowany dla tzw. dobrze znanych portów (dobrze znanych usług). W tym zakresie rezydują takie usługi warstwy aplikacji jak: WWW, FTP, telnet i inne. Lista dobrze znanych portów znajduje się w systemach Unixowych w pliku /etc/services. Wygląda ona mniej więcej tak jak poniższa – pozostawiłem najważniejsze usługi.

ftp-data  20/tcp    # File Transfer [Default Data]
ftp-data  20/udp    # File Transfer [Default Data]
ftp       21/tcp    # File Transfer [Control]
ftp       21/udp    # File Transfer [Control]
ssh       22/tcp    # Secure Shell Login
ssh       22/udp    # Secure Shell Login
telnet    23/tcp
telnet    23/udp
smtp     25/tcp        mail
domain   53/tcp        nameserver    # name-domain server
domain   53/udp        nameserver
tftp     69/udp
finger   79/tcp
www      80/tcp        http # WorldWideWeb HTTP
www      80/udp        # HyperText Transfer Protocol
pop3     110/tcp       # POP version 3
pop3     110/udp
nntp     119/tcp       #USENET News Transfer Protocol
ntp      123/tcp
ntp      123/udp       # Network Time Protocol
netbios-ns    137/tcp  # NETBIOS Name Service
netbios-ns    137/udp
netbios-dgm   138/tcp  # NETBIOS Datagram Service
netbios-dgm   138/udp
netbios-ssn   139/tcp  # NETBIOS session service
netbios-ssn   139/udp
snmp     161/udp       # Simple Net Mgmt Proto
snmp-trap 162/udp       snmptrap # Traps for SNMP
irc      194/tcp       # Internet Relay Chat
irc      194/udp

# UNIX specific services

login    513/tcp
who      513/udp       whod
syslog   514/udp
printer  515/tcp       spooler       # line printer spooler
talk     517/udp
route    520/udp       router routed # RIP

Tab 4.2 Plik /etc/services – numery usług (portów) sieciowych.

Numer portu występuje razem z protokołem transportowym ze względu na możliwość wykorzystania tego samego portu przez kilka różnych protokołów. Powyżej numeru 256 występują usługi charakterystyczne dla systemów Unixowych. Przy nawiązywaniu połączenia proces na komputerze lokalnym musi zarezerwować sobie port o numerze powyżej 1024, ze względu na opisaną wcześniej rezerwację tego zakresu.



5.2 Protokół UDP.

            Protokół pakietów użytkownika UDP (User Datagram Protocol) wykonuje usługę bezpołączeniowego dostarczania datagramów, tzn. nie ustanawia w żaden sposób połączenia i nie sprawdza gotowości odległego komputera do odebrania przesyłanych danych. W zamian za to zmniejszona została ilość informacji kontrolnych, co zwiększa efektywność tego protokołu przy przesyłaniu danych. Daje on aplikacjom bezpośredni dostęp do usług rozsyłania datagramów, przy wykorzystaniu minimalnego nakładu środków.

Bity

0

16                                                                  31

Port źródłowy

Port przeznaczenia

Długość

Suma kontrolna

DANE ...

Rys 5.1 Budowa pakietu UDP.      

            Pierwsze dwa bajty nagłówka zawierają adres portu źródłowego, następne adres portu docelowego pakietu UDP. Protokół UDP jest dobrym rozwiązaniem, jeżeli ilość przesyłanych danych jest niewielka. W tym przypadku obciążenie wynikające z dodania informacji dotyczących kontroli poprawności połączenia mogłoby stać się porównywalne z ilością przesyłanych informacji. Ponadto niektóre aplikacje same dbają o kontrolę poprawności transmisji i wykorzystywanie do ich transmisji protokołu połączeniowego byłoby dublowaniem tych samych funkcji.


5.3 Protokół TCP.

            Protokół kontroli transmisji TCP (Transmission Control Protocol) jest protokołem niezawodnym, połączeniowym działającym na strumieniach bajtów. Oznacza to, że sprawdza on czy dane zostały dostarczone przez sieć poprawnie i w określonej kolejności. Dane dostarczane przez ten protokół mogą być traktowane jak strumień.

 

 

bity

 

słowa

0

4

8

12

16

20

24

28     31

1

Port źródłowy

Port przeznaczenia

Nagłówek

2

Numer kolejny

3

Numer potwierdzenia

4

Przesunięcie

Zarezerwowane

Flagi

Okno

5

Suma kontrolna

Priorytet

6

Opcje

Uzupełnienie

7

DANE ...

 

Rys 5.2 Budowa segmentu TCP.

Numer kolejny – numer kolejny pierwszego bajtu przesyłanych danych w tym segmencie. Jeśli flaga SYN jest ustawiona, to numer kolejny jest pierwszym numerem kolejnym (ISN - Initial Sequence Number), a pierwszy bajt danych to ISN+1.

Numer potwierdzenia – jeśli jest ustawiona flaga ACK, pole to zawiera wartość następnego numeru kolejnego, który nadawca spodziewa się otrzymać. Gdy połączenie już zostanie ustalone to wartość ta jest zawsze wysyłana.

Przesunięcie [4 bity] – przesunięcie danych – liczba 32-bitowych słów w nagłówku TCP. Wskazuje początek danych.

Zarezerwowane [6 bitów] – zarezerwowane do przyszłego wykorzystania, musi mieć wartość zero.

Flagi [6 bitów] – kolejne bity oznaczają:

            URG    – oznaczenia pola pilnego wskaźnika,

            ACK   – oznaczenia pola potwierdzenia,

            PSH     – funkcja przepychania,

            RST     – zresetuj połączenie,

            SYN    – zsynchronizuj kolejne numery,

            FIN     – nie pobieraj więcej danych od nadawcy.

Okno [16 bitów] – liczba bajtów danych, które nadawca zgodzi się przyjąć. Pole to służy do sterowania przepływem danych. Okno o wartości zero, informuje nadawcę, że powinien wstrzymać transmisję, dopóki nie otrzyma segmentu z inną wartością w tym polu.

Protokół TCP w celu zapewnienia niezawodności wykorzystuje mechanizm potwierdzenia z retransmisją (Positive Acknowledgment with Re-transmission) PAR. Dane są przesyłane dopóty, dopóki system wysyłający nie otrzyma potwierdzenia, że dane przeszły bezbłędnie. Każdy segment TCP zawiera sumę kontrolną wykorzystywaną przez odbiorcę do sprawdzenie poprawności przesłanych danych. Jeżeli segment danych został odebrany bezbłędnie, wysyłane jest potwierdzenie odebrania danych.  Jeżeli segment jest uszkodzony, odbiorca nie wysyła potwierdzenia. Po pewnym czasie nadawca retransmituje segment, dla którego nie doszło do niego potwierdzenie.

Połączenie jest nawiązywane poprzez przesłania komunikatów kontrolnych, tzw. handshake. O tym, czy dany segment jest kontrolny świadczy ustawienie bitu SYN w polu flagi. TCP stosuje potwierdzenie trójpoziomowe:

1.      Host A nawiązujący połączenie wysyła do hosta B segment z ustawionym bitem SYN. W segmencie tym podany jest początkowy numer sekwencji danych, które zostaną przesłane przez host A.

2.      Host B odpowiada segmentem z ustawionymi bitami ACK (potwierdzenia) i SYN (synchronizacja), potwierdzając odebranie poprzedniego segmentu. W polu numer kolejny podaje jaki będzie numer początkowy sekwencji przesłanych przez niego danych.

3.      Host A wysyła segment potwierdzający odbiór segmentu od B (ustawiony bit ACK) i zawierający pierwsze przesyłane dane.

Po zakończeniu transmisji danych hosty wymieniają trzy segmenty potwierdzenia z ustawionym bitem FIN (koniec danych), co powoduje zerwanie połączenia między nimi.

            Ponieważ dane dostarczane przez TCP są traktowane jako strumień, musi on dbać o ich kolejność. Nie jest istotne od jakiej liczby systemy zaczną numerację danych, może być ona dowolna i dla tego wartości te są wymieniane podczas nawiązywania połączenia (przy ustawionych bitach SYN) w polach numer kolejny. Liczby te określa się mianem początkowy numer sekwencji (Initial Sequence Numbe) ISN. Bajtom danych nadawane są numery począwszy od ISN+1.

            Segmenty z ustawionym bitem potwierdzenia ACK pełnią dwie funkcje: potwierdzają otrzymanie danych i sterują ich przepływem. Standard TCP nie wymaga potwierdzania każdego segmentu danych. Segment z ustawionym bitem ACK potwierdza odebranie wszystkich danych od początku transmisji. Wartość w polu numer potwierdzenia jest równa ilości prawidłowo odebranych danych w bajtach.

Sieci  komputerowe 
Kompendium 

Karol Krysiak

Sieci komputerowe. Kompendium.

Włóż do koszyka

Więcej informacji