INTERNETOWE
PROTOKOŁY STERUJĄCE
Protokół ICMP
Protokół ICMP
• ICMP (ang. Internet Control Message Protocol, internetowy protokół komunikatów sterujących) – opisany w RFC 792, wykorzystywany w diagnostyce sieci oraz trasowaniu.
• Pełni przede wszystkim funkcję kontroli transmisji w sieci.
• Jest wykorzystywany w programach ping oraz traceroute.
• Protokół ICMP jest zestawem komunikatów,
przesyłanych w datagramach IP i zdolnych do zgłaszania błędów w dostarczaniu innych datagramów IP.
Nagłówek ICMP
Bit 0-7 Bit 8-15 Bit 16-31 Typ Kod Suma kontrolna
Dane (opcjonalne)
Lista typów wiadomości
Typ Znaczenie
0 Echo Reply (zwrot echa – "odpowiedź na ping") 1 - 2 Zarezerwowane
3 Destination Unreachable (nieosiągalność miejsca przeznaczenia) 4 Source Quench (tłumienie nadawcy)
5 Redirect Message (zmień trasowanie)
6 Alternate Host Address (alternatywny adres hosta)
7 Zarezerwowane
8 Echo Request (żądanie echa)
9 Router Advertisement (ogłoszenie routera) 10 Router Solicitation (wybór routera)
11 Time Exceeded (przekroczenie limitu czasu) 12 Parameter Problem (Problem z parametrem) 13 Timestamp (żądanie sygnatury czasowej) 14 Timestamp Reply (zwrot sygnatury czasowej) 15 Information Request (żądanie informacji) 16 Information Reply (zwrot informacji)
17 Address Mask Request (żądanie maski adresowej) 18 Address Mask Reply (zwrot maski adresowej)
… …
Kiedy komunikaty ICMP nie są generowane?
• Procedury obsługi błędów nie tworzą komunikatu o błędach, gdy błąd został spowodowany przez pakiet IP niosący komunikat ICMP.
• Komunikaty ICMP nigdy nie zostaną wysłane w odpowiedzi na pakiety rozgłoszeniowe czy
multicast.
• Jeśli fragmentacja pakietu IP jest uszkodzona, wiadomość ICMP jest wysyłana dopiero po
otrzymaniu pierwszego uszkodzonego fragmentu,
ponieważ nadawca będzie nadal retransmitował
cały pakiet IP.
Protokół ARP
Protokół ARP
• Interfejsy sieciowe wysyłają i odbierają ramki na podstawie 48-bitowych adresów Ethernet.
• Potrzebny jest jakiś sposób na znalezienie docelowego adresu Ethernet, do którego adresowana będzie ramka.
• Address Resolution Protocol, protokół rozwiązywania adresów (ARP) - protokół sieciowy umożliwiający
mapowanie logicznych adresów warstwy sieciowej na fizyczne adresy warstwy łącza danych.
• Protokół ten nie ogranicza się tylko do konwersji adresów IP na adres MAC stosowany w sieciach Ethernet.
• Zdefiniowany jest w RFC 826.
Dwie sieci lokalne Ethernet
połączone routerem IP
Tablica ARP
• Protokół ARP opisuje także zachowanie systemu operacyjnego, który zarządza tzw. tablicą ARP.
• Znajdują się w niej pary: adres warstwy sieciowej i przypisany do niego adres fizyczny.
• Zapobiega to wysyłaniu zapytania ARP przy próbie
wysłania każdego pakietu do hosta znajdującego się w tej samej sieci.
• Protokół ARP nie jest niezbędny do działania sieci komputerowych, może zostać zastąpiony przez
statyczne wpisy w tablicy ARP, przyporządkowujące adresom warstwy sieciowej adresy fizyczne na stałe.
Format komunikatu ARP
Bity 0 - 7 8 - 15 16 - 31
0 Typ warstwy fizycznej (HTYPE) Typ protokołu wyższej warstwy (PTYPE)
32
Długość adresu sprzętowego (HLEN)
Długość protokołu wyższej warstwy (PLEN)
Operacja (OPER)
64 Adres sprzętowy źródła (SHA)
? Adres protokołu wyższej warstwy źródła (SPA)
? Adres sprzętowy przeznaczenia (THA)
? Adres protokołu wyższej warstwy przeznaczenia (TPA)
Nadmiarowy ARP (gratuitous ARP)
• Każda maszyna rozgłasza swoje mapowanie w momencie jej konfigurowania.
• Owo rozgłoszenie odbywa się zasadniczo w formie pakietu ARP, kiedy maszyna ogłasza swój adres IP.
• Przede wszystkim nie spodziewa się żadnej
odpowiedzi, a samo rozgłoszenie jest mimowolnym źródłem danych dla pozostałych hostów w sieci.
• Jeśli odpowiedź jednak przyjdzie, w sieci pojawią
się dwie maszyny o tym samym adresie IP.
APR z pośrednikiem (proxy ARP)
• Możliwe jest też wysłanie pakietu od hosta A do hosta B bez wiedzy, że host docelowy znajduje się w innej sieci.
• Wystarczy, żeby na wykonane przez hosta zapytanie ARP o adres docelowy odpowiedział router, podając własny adres ethernetowy jako adres przeznaczenia.
• Host B nie może odpowiedzieć bezpośrednio, ponieważ nie ma dostępu do żądania ARP (routery nie rozprowadzają
rozgłoszeń na poziomie warstwy łącza danych).
• Router otrzyma wtedy ramkę adresowaną do B i będzie mógł przekazać ją do sieci odbiorcy.
• Stosuje się proxy ARP w przypadkach szczególnych, kiedy host chce być widoczny w sieci, mimo że faktycznie znajduje się w innej sieci.
Protokół DHCP
DHCP — protokół dynamicznej konfiguracji hosta
• DHCP (ang. Dynamic Host Configuration Protocol – protokół dynamicznego konfigurowania hostów) – protokół komunikacyjny umożliwiający hostom
uzyskanie od serwera danych konfiguracyjnych, np.
adresu IP hosta, adresu IP bramy sieciowej, adresu serwera DNS, maski podsieci.
• Protokół DHCP jest zdefiniowany w RFC 2131 i jest następcą BOOTP. DHCP został opublikowany jako standard w roku 1993.
• W kolejnej generacji protokołu IP, czyli IPv6, jako integralną część dodano nową wersję DHCP, czyli
DHCPv6. Jego specyfikacja została opisana w RFC 3315.
Nagłówek DHCP
Bity 00 – 07 08 – 15 16 – 23 24 – 31 operacja typ sprzętu długość adresu
sprzętowego liczba skoków xid (identyfikator transakcji)
liczba sekund flagi
adres IP klienta
przydzielony adres IP klienta adres IP serwera
adres IP bramki (routera)
adres sprzętowy klienta (16 oktetów) nazwa serwera (64 oktety)
plik startowy (128 oktetów) opcje producenta (długość zmienna)
Pola nagłówka DHCP
• Operacja: Typ nagłówka. 1 = BOOTREQUEST, 2 = BOOTREPLY
• Typ sprzętu: Liczba z zakresu 1-28 oznaczająca typ sprzętu (karty sieciowej). Dla sieci ethernetowej przyjmuje wartość 1.
• Długość adresu sprzętowego: Oznaczenie długości używanego adresu sprzętowego np. 6 dla Ethernetu.
• Liczba skoków: Pole jest opcjonalne. Zlicza liczbę pośrednich routerów biorących udział w transmisji pakietu.
• Identyfikator transakcji: Wybierany losowo przez klienta identyfikator.
• Liczba sekund: Mierzony w sekundach czas, jaki upłynął od momentu pierwszego wysłania przez klienta wiadomości typu BOOTREQUEST.
• Flagi: W tej chwili używany tylko 1 bit (BROADCAST flag).
Pola nagłówka DHCP (2)
• Adres IP klienta: Pole nieobowiązkowe. Wypełniane w przypadku np. odświeżania adresu.
• Przydzielony adres IP klienta: Trzy możliwości przydzielania adresu: ręcznie (na podstawie MAC), automatycznie
(kolejność zgłaszania) i dynamicznie (tylko na pewien okres).
• Adres IP serwera: Ustawiane przez serwer.
• Adres IP bramki: Ustawiane przez serwer.
• Adres sprzętowy klienta: Adres MAC klienta.
• Nazwa serwera: Pole opcjonalne. Nazwa hosta serwera.
• Plik startowy: Używany w mechanizmie ciasteczek (Magic Cookie).
• Opcje: Zestaw ponumerowanych opcji 0-254.
Komunikaty DHCP
• DHCPDISCOVER – zlokalizowanie serwerów
• DHCPOFFER – przesyłanie parametrów
• DHCPREQUEST – żądanie przydzielenia używanych parametrów
• DHCPACK – potwierdzenie przydziału parametrów
• DHCPNAK – odmowa przydziału parametrów
• DHCPDECLINE – wskazanie że adres sieciowy jest już używany
• DHCPRELEASE – zwolnienie adresu
• DHCPINFORM –żądanie przydziału parametrów (bez adresu IP).
Przydzielanie adresów IP
Dzierżawa adresu IP
• Przydział adresu IP może być ważny przez ustalony czas — ta technika nosi nazwę dzierżawy.
• Przed wygaśnięciem dzierżawy host musi zażądać odnowienia od serwera DHCP.
• Jeśli nie zgłosi żądania lub żądanie zostanie
odrzucone, host nie będzie już mógł używać adresu
IP, który otrzymał wcześniej.
Agent przekazywania DHCP (DHCP
Relay Agent)
WARSTWA
TRANSPORTOWA
Warstwa transportowa
• Warstwa sieciowa zapewnia usługi dostarczania
pakietów pomiędzy dwiema stacjami, czy to w formie bezpołączeniowej (datagramowej), czy też w obwodzie wirtualnym.
• Warstwa transportowa na bazie tej usługi udostępnia natomiast usługi transportu danych pomiędzy
procesami działającymi na komunikujących się ze sobą maszynach, przy zachowaniu pożądanego poziomu
niezawodności, niezależnego od gwarancji dostarczania, realizowanych poprzez niższe warstwy sieciowe.
• Warstwa transportowa udostępnia programistom abstrakcyjną perspektywę sieci.
Usługa Transportowa
Usługi świadczone na rzecz wyższych warstw
• Ostatecznym celem warstwy transportowej jest dostarczanie wydajnych, niezawodnych i
ekonomicznych usług przesyłu danych na potrzeby użytkowników działających najczęściej na poziomie warstwy aplikacji.
• Połączeniowa usługa transportowa przypomina połączeniową usługę sieciową:
• obydwie te usługi świadczone są w trzech etapach – nawiązanie połączenia, transfer danych, rozłączenie;
• również zbliżone są do siebie pod względem sposobu adresowania i kontroli przepływu.
• Podobna analogia istnieje między bezpołączeniową kategorią usług sieciowych i transportowych.
Usługi warstwy transportowej
• Warstwa transportowa przyczynia się do generalnej poprawy jakości transmisji.
• Ponadto samo istnienie warstwy transportowej ułatwia proces programowania, dzięki jego ujednoliceniu
prymitywy transportowe mogą być bowiem
zrealizowane jako wywołania odpowiednich procedur niezależnych od konkretnej sieci.
• Racja istnienia warstwy transportowej w sieciowym modelu odniesienia:
• duże zróżnicowanie w zakresie konstrukcji sieci
• nieuchronna zawodność połączeń sieciowych
Prymitywy usług transportowych
• Warstwa transportowa udostępnia warstwom wyższym swe usługi za pośrednictwem
odpowiednich interfejsów.
• Prosty interfejs prymitywów transportowych:
Prymityw Przesyłany pakiet Przeznaczenie
LISTEN (brak) Zablokowanie procesu do czasu nadejścia żądania połączenia.
CONNECT CONNECTION REQUEST Aktywna próba nawiązania połączenia.
SEND DATA Wysłanie informacji.
RECEIVE (brak) Zablokowanie procesu do momentu nadejścia pakietu DATA.
DISCONNECT DISCONNECTION REQUEST Żądanie zwolnienia połączenia.
Diagram stanów ilustrujący proste
zarządzanie połączeniami
Gniazda Berkeley Sockets
• Gniazda po raz pierwszy pojawiły się w dystrybucji systemu UNIX w wydaniu Berkeley UNIX 4.2BSD, w roku 1983 i szybko zyskały szaloną popularność.
• Obecnie są podstawowymi prymitywami
programowania sieciowego w wielu systemach
operacyjnych, zwłaszcza uniksowych. W Windowsie istnieje ich odpowiednik implementowany za
pomocą biblioteki „winsock”.
• Prymitywy te wykorzystywane są głównie na
potrzeby tworzenia aplikacji internetowych.
Prymitywy gniazd berkeleyowskich
Prymityw Przeznaczenie
SOCKET Utworzenie nowego punktu komunikacyjnego (gniazda).
BIND Przypisanie gniazdu lokalnego adresu sieciowego.
LISTEN Sygnalizacja gotowości do przyjmowania połączeń; parametr wywołania określa maksymalny rozmiar kolejki połączeń.
ACCEPT Pasywne zestawienie połączenia przychodzącego.
CONNECT Aktywna próba nawiązania połączenia.
SEND Wysłanie danych w ramach połączenia.
RECEIVE Odebranie danych w ramach połączenia.
CLOSE Zwolnienie połączenia.
Gniazda Berkeley Sockets – zalety
• Interfejs gniazd jest często stosowany w połączeniu z protokołem TCP w implementacjach aplikacji
operujących na połączeniowej usłudze transportu danych, określanej tu mianem niezawodnego
strumienia bajtowego — dla programu gniazdo
reprezentuje końcówkę (ujście) opisywanego wcześniej potoku.
• Ten sam interfejs programistyczny może być
zaimplementowany również na bazie innego protokołu – dla użytkowników protokołu transportowego
powinno to być bez różnicy.
• Siłą interfejsu gniazd sieciowych jest to, że mogą one być wykorzystywane przez aplikację również z innymi usługami transportowymi.
Gniazda Berkeley Sockets – wady
• Ostatnio wiele aplikacji operuje na grupach
powiązanych strumieni transmisji (np. przeglądarka WWW ładuje z serwera wiele zasobów, np.
obrazków składowych).
• Gniazda wymuszają używanie osobnych strumieni dla każdej z logicznych operacji pobierania danych.
• Taka struktura oznacza tymczasem niemożność
łatwego zagregowania informacji do mechanizmów kontroli i eliminacji przeciążeń — rozpatrywanie
każdego ze strumieni osobno jest w tym ujęciu
nieoptymalne.Elementy Protokołów
Transportowych
Adresowanie
• Gdy proces korzystający z usług jednostki transportowej chce ustanowić połączenie z innym procesem, musi ów docelowy proces w jakiś sposób określić.
• Rolę identyfikacji procesów pełnią tzw. punkty przyłączeniowe, którymi w Internecie są porty.
• W odniesieniu do warstwy transportowej identyfikatory nazywa się punktami dostępu do usługi transportowej, w skrócie TSAP (ang. Transport Service Access Point)
• Punkty końcowe warstwy sieciowej (adresy sieciowe) nazywa się punktami dostępu do usługi sieciowej, NSAP (ang. Network Service Access Point).
TSAP, NSAP i połączenia
transportowe
Adresowanie: porty serwerów
• Skąd proces kliencki zna numer portu, do którego przyłączony jest serwer?
• Przypisanie serwerowi ustalonego a priori numeru
TSAP i opublikowanie tej informacji, między innymipoprzez umieszczenie jej w plikach
konfiguracyjnych, na przykład w pliku /etc/services w systemie UNIX.
• Procesy użytkowników, które również często
komunikują się z innymi procesami, nie posiadają
stałych i z góry znanych adresów TSAP, a do tego
działają zazwyczaj stosunkowo krótko.
Adresowanie: porty serwerów
• Mechanizm pośredniczący, zwany portmapperem.
• Aby ustalić adres TSAP skojarzony obecnie z daną
usługą (np. BitTorrent), użytkownik powinien nawiązać połączenie z portmapperem (który prowadzi nasłuch na znanym TSAP), a następnie wysłać do niego zapytanie o adres TSAP danej usługi określonej z nazwy.
• Nowo uruchamiana usługa powinna rejestrować się w portmapperze, podając do niego swoją nazwę oraz
bieżący adres TSAP.
• Portmapper zapamiętuje to skojarzenie w wewnętrznej bazie danych, z której potem obsługuje zapytania o
adresy usług.
Ustanawianie połączenia
• Protokół musi uwzględniać również przypadki skrajne, mało prawdopodobne i rzadkie.
• Opóźnieniom i powielaniu pakietów nie możemy w pełni zapobiec, ale kiedy do tego dojdzie, pakiety te
powinny zostać rozpoznane jako duplikaty i odrzucone, a nie przetwarzane jako pełnoprawne komunikaty.
• Jedna możliwość polega na porzuceniu adresów transportowych: zawsze kiedy potrzebny jest adres
transportowy, generuje się go od nowa. Po zwolnieniu połączenia adres jest porzucany i nigdy więcej nie
będzie w użyciu. Opóźnione duplikaty kierowane na
„stary” adres można wtedy łatwo rozpoznać i odrzucić;
to podejście mocno jednak utrudnia sam etap nawiązywania połączenia.
Ustanawianie połączenia
• Inna możliwość to nadanie każdemu połączeniu unikatowego identyfikatora (numeru sekwencji, zwiększanego po każdym nawiązaniu połączenia), wybieranego przez stronę inicjującą połączenie i doklejanego do każdego segmentu komunikacji.
• Po zwolnieniu danego połączenia każda ze stron
komunikacji powinna zaktualizować swoją tabelę ze
„zużytymi” numerami połączeń.
• Niestety, schemat ten ma zasadniczą wadę: wymaga, aby każda ze stron komunikacji utrzymywała pewną
ilość danych historycznych o poprzednich połączeniach.
Ustanawianie połączenia
• Limit czasu życia pakietu może być zrealizowany w oparciu o jeden (bądź kilka) z następujących
mechanizmów:
1. Rygorystyczny projekt sieci.
2. Wbudowanie licznika przeskoków w każdy pakiet.
3. Znakowanie czasowe każdego pakietu.
• Ograniczenie czasu życia wysłanych pakietów jest niewystarczające: musimy nabrać pewności, iż
eliminacji uległy także wszystkie potwierdzenia
związane z wyeliminowanymi pakietami.
Ustanawianie połączenia
• Zdefiniujmy pewną wielkość T będącą niewielką
wielokrotnością rzeczywistego maksymalnego czasu życia pakietu; po upływie czasu T od momentu
wysłania pakietu możemy być pewni, że w sieci nieobecny jest już zarówno sam pakiet, jak i
wszelkie związane z nim potwierdzenia.
• Mając zdefiniowaną wielkość T, możemy przystąpić do określenia pewnej metody odrzucania
opóźnionych duplikatów segmentów.
Ustanawianie połączenia
• Sednem metody jest etykietowanie przez nadawcę wysyłanych segmentów kolejnymi numerami, które nie powinny być ponownie wykorzystywane w
ciągu T sekund.
• Zakres wartości numerów sekwencyjnych wyznacza okres T i przepływność sieci mierzona liczbą
pakietów na sekundę.
• W ten sposób wiadomo na pewno, że w danym
czasie dany numer może być nadany tylko jednemu
pakietowi.
Metoda negocjowania
trójstopniowego
Zwalnianie połączenia
• Istnieją dwa warianty rozłączania: symetryczny i
asymetryczny.• Wariant asymetryczny przypomina rozłączanie rozmowy telefonicznej — połączenie zostaje
przerwane, gdy którykolwiek z rozmówców odłoży słuchawkę.
• W wariancie symetrycznym połączenie traktowane
jest natomiast jako superpozycja dwóch połączeń
jednokierunkowych, z których każde rozłączane jest
oddzielnie.
Rozłączanie asymetryczne
• Rozłączanie asymetryczne ze względu na swój nagły
charakter może powodować utratę danych.
Rozłączanie symetryczne
Rozłączanie symetryczne (2)
Połowicznie otwarte połączenia
• Można łatwo likwidować połowiczne połączenia, przyjmując zasadę automatycznego zwalniania połączeń po założonym okresie ich bezczynności, czyli w sytuacji, gdy w ciągu zadanego odcinka czasu nie zostanie w ramach danego połączenia przesłany żaden pakiet.
• Reguła automatycznego zwalniania połączenia rozwiązuje też przypadki połączeń zerwanych
(kiedy sieć przestaje dostarczać pakiety pomiędzy hostami) bez konieczności jawnego zwolnienia
połączenia przez którąś ze stron.
Kontrola błędów i sterowanie przepływem
• Kompromis pomiędzy buforowaniem po stronie nadawcy a buforowaniem po stronie odbiorcy jest
wyznaczany poprzez typ ruchu przenoszonego danym połączeniem.
• W przypadku ruchu seryjnego z niskimi prędkościami i z niskim ryzykiem przekłamań można buforować dane po obu stronach dynamicznie, w miarę napływania (albo polegać całkowicie na nadawcy).
• Z drugiej strony, w przypadku transmisji plików i
podobnych transmisji z większym natężeniem najlepiej, gdy odbiorca utrzymuje bufory dla całego okna
transmisji, bo w ten sposób umożliwia optymalną wydajność transmisji danych. Taką właśnie strategię postuluje protokół TCP.
Kontrola błędów i sterowanie przepływem
• Protokół przesuwnego dynamicznego okna implementuje nie tylko sterowanie przepływem, ale także kontrolę
przeciążeń.
• Jeżeli sieć potrafi obsłużyć c segmentów w ciągu sekundy, a czas jednego przesłania pakietu w obie strony (RTT) wynosi r sekund, wówczas okno nadawcy powinno mieć rozmiar cr.
• Rozmiar ten oznacza obciążenie sieci na granicy jej
możliwości, a więc niewielki nawet spadek przepustowości może skutkować zwiększeniem liczby segmentów gubionych w jednostce czasu.
• Z jednej strony, czas ten nie powinien być zbyt krótki, by wiarygodnie można było obliczyć średnie tempo
przybywania potwierdzeń, a z drugiej, powinien być na tyle krótki, by dostosowanie rozmiaru okna wykonywane było wystarczająco często.
• Odmiana opisanej metody wykorzystywana jest w TCP.
Multipleksacja
INTERNETOWE PROTOKOŁY
TRANSPORTOWE
Warstwa transportowa Internetu
• Dwa podstawowe protokoły:
• bezpołączeniowy protokół datagramów użytkownika (ang.
UDP — User Datagram Protocol)
• zorientowany na połączenie protokół sterowania transmisją (ang. TCP — Transmission Control Protocol).
• Zadanie UDP sprowadza się do przesłania pakietów
pomiędzy aplikacjami, przy czym to owe aplikacje mogą na bazie takiej transmisji zaimplementować dowolnie rozbudowany protokół komunikacji.
• TCP to protokół połączeniowy wyposażony we wszelkie mechanizmy: zestawia połączenia, zapewnia
niezawodność dostarczania pakietów z retransmisjami, steruje przepływem i kontroluje przeciążenia sieci.
Protokół UDP
Protokół UDP
• Protokół UDP (ang. User Datagram Protocol) organizuje wymianę datagramów IP między
aplikacjami bez nawiązywania połączenia między nimi.
• Szczegółową definicję tego protokołu zawiera
dokument RFC 768.
Pola nagłówka UDP
• Ponieważ pakiety UDP przesyłane są bez nawiązywania połączenia, Numer portu docelowego jest jedyną
informacją o docelowym procesie i główną przyczyną, dla której korzysta się z UDP, a nie z gołego IP.
• Wartość w polu Długość określa rozmiar pakietu liczony wraz z 8 bajtami nagłówka.
• W aplikacjach wymagających zwiększonej
niezawodności dostępne jest opcjonalne pole Suma kontrolna. Zawiera ono sumę kontrolną nagłówka, właściwych danych oraz pseudonagłówka IP.
• Jeśli suma kontrolna nie jest wyznaczona, pole jest zerowane.
Protokół UDP
• Rzeczy, których nie da się zrealizować z użyciem pakietów UDP: kontrola przepływu, wykrywanie i niwelowanie przeciążeń transmisji, retransmisje błędnych segmentów itp.
• Protokół UDP udostępnia za to interfejs dla protokołu IP, z funkcją multipleksacji i demultipleksacji pakietów pomiędzy transmisjami należącymi do różnych
procesów i opcjonalną funkcją wykrywania błędów transmisji.
• Jednym z obszarów zastosowań, w którym pakiety UDP są szczególnie użyteczne, są wszelkiego rodzaju
konstrukcje typu „klient-serwer”. W ramach takich
konstrukcji klient wysyła najczęściej do serwera krótkie zapytanie, żądając krótkiej odpowiedzi.