Sieci Komputerowe Wykład 7 - teoria 

Część 1: TCP - Podstawy


Protokół służy do utworzenia (i utrzymania) połączenia między dwoma komputerami.
Działa w architekturze klient-serwer i jest stanowy. Serwer tworzy gniazdo nasłuchu (server socket) i czeka na zgłoszenie klientów. Klient inicjuje połączenie do serwera wysyłając pakiet TCP na odpowiedni port. Po wymianie komunikatów uzgadniania połączenia (handshake) obie strony mogą wysyłać i odbierać dane. Protokół zapewnia wiarygodne połączenie. Gwarantuje warstwie aplikacji dostarczenie danych w całości, z zachowaniem kolejności wysyłania. Aby samodzielnie przeanalizować zagadnienia z tego tematu należy uruchomić sniffer wireshark oraz program Echo. Kod źródłowy:Echo.java. Program jest serwerem TCP napisanym w języku JAVA pełniący funkcję Echo (odbija tekst wpisany przez użytkownika).
Poniżej przedstawiono sposób kompilacji programu (proszę nie przejmować się ewentualnymi komunikatami o złym kodowaniu), oraz jego uruchomieniu,

tomek@ZUERST:~/pliki/work/pjwstk.home/sko1> javac Echo.java
Echo.java:40: warning: unmappable character for encoding UTF8
                System.err.println("Gniazdo nie zamkni?te");
                                                      ^
Echo.java:53: warning: unmappable character for encoding UTF8
        System.out.println("Serwer Wystartowa? !!!");
                                             ^
2 warnings
tomek@ZUERST:~/pliki/work/pjwstk.home/sko1> java Echo

Serwer Wystartowa? !!!
_____________________________

Po uruchomieniu serwera w systemie operacyjnym zarezerwowany zostanie port 7777 na usługę Echo.
Z serwerem można się połączyć używając programu telnet. Program ten utworzy połączenie do serwera i umożliwi użytkownikowi wpisanie dowolnego tekstu.
Po zakończeniu pracy wciskamy kombinację klawiszy CTRL+] (kwadratowy nawias zamykający)
a następnie potwierdzamy enterem. Zjawi się wiersz poleceń telnetu, w którą wpisujemy "quit" co powoduje zakończenie połączenia i wyjście z programu telnet. Serwer oczywiście będzie pracować dalej.
poniżej przykłądowa sesja echo z użyciem telnetu:

tomek@ZUERST:~> telnet localhost 7777
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
haloo?
haloo?
dziala
dziala
^]
telnet> quit
Connection closed.

Poniższy rysunek pokazuje DIAGRAM STANÓW DLA POŁĄCZENIA KLIENTA

Rozpoczynamy w stanie CLOSED, po wysłaniu pakietu z flagą SYN klient przechodzi w stan SYN_SENT. Po otrzymaniu pakietu ACK oraz SYN (zapalone obie flagi) klient wysyła ACK, które kończy fazę ustalanie połączenia. Połączenie przechodzi w stan ESTABILISHED. Wymieniane są komunikaty z danymi i potwierdzenia. Strona, która kończy połączenie (w tym przypadku klient) wysyła FIN. Klient przechodzi w stan FIN_WAIT_1, a po odebraniu potwierdzenia pakietu z FIN, przechodzi w FIN_WAIT_2, w którym oczekuje na FIN od serwera. Po otrzymaniu takiego pakietu odsyłane jest ACK i klient przechodzi w tryb TIME_WAIT, po którym to czasie wszystkie zasoby wracają do systemu operacyjnego.


Poniższy rysunek pokazuje DIAGRAM STANÓW DLA POŁĄCZENIA SERWERA

Rozpoczynamy w stanie CLOSED, serwer tworząc gniazdo nasłuchujące wykonuje systemową metode bind i dostaje numer portum na którym rozpoczyna nasłuchiwanie na połączenia. Po otrzymaniu pakietu z flagą SYN od klienta serwer wysyła SYN i ACK a następnie przechodzi w stan SYN_RECEIVED. Po otrzymaniu pakietu ACK kończy się faza ustalanie połączenia, które przechodzi w stan ESTABILISHED. Wymieniane są komunikaty z danymi i potwierdzenia. Strona, która kończy połączenie (w tym przypadku klient) wysyła FIN. Serwer potwierdza pakiet klienta pakietem ACK i przechodzi w stan CLOSE_WAIT. Serwer wysyła flagę FIN kończąc połączenie (przechodzi w stan LAST_ACK). Po odebraniu potwierdzenia pakietu z FIN, przechodzi w stan CLOSED, gdzie zasoby zwracane zostają do systemu operacyjnego.





Część 2: Działanie TCP

Po włączeniu programu wireshark należy wykonać następujące ćwiczenie.
1. Uruchomić serwer Echo.
2. Uruchomić nowe sniffowanie
3. Uruchomić telnet i połączyć się z serwerem Echo
4. Wysłać 1 znak
5. Rozłączyć się telnetem
6. Zakończyć sniffowanie.

Trzy pierwsze pakiety (syn, syn_ack, ack) służą do ustanowienia połączenia, trzy ostatnie (fin, fin_ack, ack) do jego zakończenia. Pozostałe pakiety (psh_ack, ack) zostają przesyłane podczas transmisji danych (zależnie od charakteru uslugi będzie to ruch w inną stronę).

W komunikatach TCP możemy wyróżnić pole "flagi". Rysunek poniżej przedstawia kolejność bitową flag w protokole.

Flaga może mieć ustawiony bit 0 (zgaszona) lub 1 (zapalona). W zależności od użycia flag TCP traktuje pakiet w specjalny sposób:

FlagaOpis

URG

Ta flaga wskazuje, że dane są ważne
ACK

Flaga potwierdza otrzymane dane

PSH

Zapalenie tej flagi powoduje przesłanie bufora warstwy transportowej do warstwy aplikacji (nawet jeżeli jest to 1 bit)

RST

Zresetowanie połączenia

SYN

Ta flaga wskazuje chęć nawiązania połączenia i ustawienia numeru sekwencyjnego.

FIN

Ta flaga wskazuje chęć zakończenia połączenia.



ZADANIE NA OCENĘ (PUNKTOWANE)

Polecenie: wykonaj 6 kroków zgodnie z opisem w na początku części 2 tego wykładu (wysłanie 1 znaku do Echo). Korzystając ze sniffera uzupełnij poniższą tabelę. Rozwiązania w dowolnej postaci cyfrowej (html, doc, jpg) proszę umieszczać do końca listopada w odpowiednim dziale w EDU.

Kierunek

Port źródłowy

Port docelowy

Seq

ACK

Flagi

Dane

Do serwera

Do hosta

Do serwera

Do serwera

Do hosta

Do hosta

Do serwera

Do serwera

Do hosta

Do serwera





Część 3: Opcje TCP

Opcje tcp przesyłane są zwłaszcza w pakietach rozpoczynających połączenie (SYN). Kolejność opcji w nagłówku TCP nie ma znaczenia, jednak różne systemy operacyjne mogą zmieniać ich kolejność. Skutkiem ubocznym jest możliwość pasywnej identyfikacji systemów operacyjnych poprzez sprawdzenie kolejności opcji w przesyłanych pakietach. Opcje TCP są rozbudową protokołu.

  • MSS - maximum segment size. Opcja określa liczbę bajtów możliwą do przesłania tym protokołem bez dzielenia pakietu.
  • NOP - no operation. Opcja służy do "wypełniania" rozmiaru innych opcji do bloków 32-bitowych
  • T_STAMP - time stamp. Opcja do uzyskiwania czasu RTT w połączeniu. Służy do dynamicznego ustalania timeout'u używanego przy retransmisjach.
  • SACK - selective acknowledgement. Opcja służy do potwierdzania nieciągłych bloków danych (szczegóły poniżej)
  • W_SCALE - window scale. Opcja służy do obliczenia rozmiaru okna przesuwnego (szzegóły poniżej)

Selective Acknowledgment (SACK)

Pozwala na potwierdzanie bloków odebranych danych. W przypadku normalnego potwierdzenia, które może potwierdzić dane "do pierwszego nieodebranego bajtu" występuje zbyt dużo retransmisji. Gdy obie strony umożliwiają użycie SACK retransmisje dotyczą tylko faktycznie utraconych danych.
Poniżej 2 linki do stron o tej tematyce:
RFC2018
OPIS DZIAŁANIA

Window Scale

Jest to modyfikacja Flow Control (Kontrola Przepływu).
Pozwala na wyjście poza 16-bitowe (65,535B max) pole Window Size w nagłówku TCP, a (konkretnie do wartości 1,073,741,824 B).
Poniżej link do dokumentacji:
RFC1323

Rozmiar okna przesuwnego używanego w transmisji oblicza się ze wzoru:
Rozmiar = WS * 2 ^ SWS
lub
Rozmiar = WS << SWS





Część 4: Timeout TCP

W przypadku, gdy pakiet nie dotrze do odbiorcy (lub nie przyjdzie ACK) strona wysyłająca powinna jak najszybciej wysłać retransmisję pakietu. Nie jest to jednak łatwe, gdyż czas oczekiwania po którym następuje retransmisja powinien być zależny od czasu w jakim docierają dane do odborcy. Dlatego wykorzystuje się wzorów które pozwalają ustalić wartość timeout'u uwzględniając pomiar RTT (opóźnienie pakietu)

R = oszacowany RTT (estimated)
M = mierzony RTT (sample)
alpha = 0,9

Wzór 1: Mierzony RTT
R = alpha * R + ( 1 - alpha ) * M



beta = 0,25

Nie możemy używać wartości M jako timeout'u, gdyż wiele pakietów (jest to średnia) prawidłowo odebranych zostałoby retransmitowane ze względu na spóźnione ACK. Dlatego dodajemy modyfikator wykrywający "zmiany" opóźnień w sieci.

Wzór 2: BŁĄD_RTT
BŁĄD_RTT = ( 1 - beta ) * BŁĄD_RTT + beta * ( |M-R|)

Wzór 3: Timeout
Timeout = R + 4* BŁĄD_RTT






Zadania 

  1. Ćwiczenie na ocenę: podano w części 2 tego wykładu.

Pliki 

Ten dział zostanie uzupełniony wkrótce...

W sieci