Sieci komputerowe Karol Krysiak |
![]() |
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.
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.
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.
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 Karol Krysiak |
![]() |