Materiały edukacyjne z informatyki
Protokoły pracujące w warstwie transportowej modelu TCP/IP dbają o dostarczenie danych przenoszonych przez protokół IP w pożądanej przez aplikacje kolejności i formacie. Protokoły te rozdzielają napływające informacje do odpowiednich procesów pracujących w warstwie aplikacji, które identyfikowane są dzięki unikalnej kombinacji adresu IP oraz 16-bitowej liczby oznaczającej port zarezerwowany przez dany proces. Kombinacja ta, tzn. adres IP oraz nr portu wykorzystywanego przez proces nazywa się gniazdem (socket). Wśród możliwych numerów portów (0-65535) istnieje zakres zarezerwowany (od 0 do 1024) dobrze znanych portów (well-known port number), wykorzystywanych przez takie usługi warstwy aplikacji, jak np. WWW, FTP, telnet. Ich lista w systemach Linux przechowywana jest w pliku /etc/services
. Porty o numerach wyższych od 256 oznaczają usługi charakterystyczne dla systemów uniksowych. Przy nawiązywaniu połączenia proces na komputerze lokalnym rezerwować sobie jakiś port wysoki (większy niż 1024; zwłaszcza w systemach Linux, gdzie niskie porty zarezerwowane są dla procesów z uprawnieniami roota).
Protokół UDP (User Datagram Protocol) obsługuje bezpołączeniowe (tzn. bez ustanawiania połączenia i bez sprawdzania, czy dane dotarły) dostarczanie danych zawartych w pakietach.
Budowa pakietu UDP
MAC header | IP header | UDP header | DANE |
---|
0 | 16 | 31 |
Port źródłowy (source port) | Port przeznaczenia (destination port) | |
Długość (pakietu w bajtach) | Suma kontrolna (checksum) | |
DANE... |
Protokół TCP (Transmission Control Protocol) jest protokołem niezawodnym i połączeniowym, tzn. sprawdza, czy dane zostały dostarczone poprawnie i w odpowiedniej kolejności. Działa na strumieniach bajtów, jednostką przesyłanych danych jest segment.
Budowa segmentu TCP
MAC header | IP header | TCP header | DANE |
---|
Nagłówek TCP | ||||||||
słowa/bity | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28-31 |
1 | Port źródłowy | Port przeznaczenia | ||||||
2 | Numer kolejny | |||||||
3 | Numer potwierdzenia | |||||||
4 | Przes. | Zarezerw. | Flagi | |||||
5 | Suma kontrolna (nagłówka i danych) | Wskaźnik pilności | ||||||
6 | Opcje | Uzupełnienie | ||||||
7 | DANE... |
Maksymalna długość segmentu TCP to 65 535 bajtów, ale w praktyce jest o wiele mniejsza, ponieważ np. Ethernet może przenieść jednorazowo jedynie 1500 bajtów. Długość ta jest negocjowana przez TCP przy użyciu opcji Maximum Segment Size. Niezawodność transmisji osiągana jest dzięki mechanizmowi potwierdzenia z retransmisją, tzn. że dane przesyłane są dopóty, dopóki nadawca nie otrzyma potwierdzenia, że dane dotarły bezbłędnie.
Polecenie tcpdump
– umożliwia w systemie Linux wyświetlanie nagłówków segmentów TCP z wybranego interfejsu sieciowego:
# tcpdump [opcje] [wyrażenie]
-i eth1
– ogranicz nasłuch do interfejsu eth1
-n
– nie zmieniaj adresów i numerów portów na nazwy
-w plik
– zapisz pakiety do pliku
-e
– wypisz zawartość nagłówka warstwy dostępu do sieci (najczęściej nagł. ethernetowego)
-v[v][v]
– zwiększ ilość wyświetlanych informacji
-t
– nie wypisuj czasu pojawienia się segmentu
Pole wyrażenie
służy do filtrowania wyświetlanych segmentów:
[dst] [src] host [net] komputerA [networkA]
– wyświetl wszystkie pakiety wysłane [dst] lub otrzymane [src] od/do komputerA [networkA w formacie 221.51.192.0/24].
Polecenie netstat – służy do uzyskiwania informacji nt. podsystemu sieciowego:
# netstat -nap
– podaje informacje o adresach IP i wszystkich (-a) portach (w formie numerycznej -n) oraz identyfikatorach procesów (-p) aktualnie wykorzystanych na komputerze lokalnym.
# netstat -r
– podaje tablicę routingu
# netstat -i
– podaje statystyki interfejsów sieciowych
# netstat -se
– podaje statystyki protokołów IP, ICMP, TCP i UDP
# netstat -c
– podaje informacje co 1s (w Windows podajemy liczbę sekund)