Technologie Internetu
wykład 1: Architektura Internetu Piotr Habela
Polsko-Japońska Wyższa Szkoła
Technik Komputerowych
Plan wykładu
• Sieci i intersieci – motywy, rozwój, problemy
• Warstwa sprzętowa – zagadnienia
• Model warstwowy protokołów sieciowych
• Zestaw protokołów TCP/IP
• Warstwa interfejsu sieciowego (protokół IP, adresy IP, ich odwzorowania, ICMP)
• Warstwa transportu
• Interfejsy do protokołów komunikacyjnych
• Standaryzacja protokołów internetowych
Zagadnienia nie omawiane
• Zagadnienia fizyczne przesyłania sygnałów;
• Rodzaje łączy; technika w warstwie sprzętowej;
• Topologie sieci;
• Szczegóły protokołów niższych warstw;
Wybrane ważne daty (1)
• 1945 – Vannevar Bush – artykuł „As We May Think”
(Atlantic Monthly) z ideami leżącymi u podstaw hipertekstu;
• 1954 – Powstanie ARPA;
• 1965 – Paul Baran z RAND Corporation: „On Distributed Communication Network” – koncepcja zdecentralizowanej, odpornej na awarie licznych węzłów sieci komputerowej.
• 1971 – Ray Tomilson: pierwszy program poczty elektronicznej;
• 1972 – Telnet;
• 1 września 1969 – Pierwsze węzły sieci ARPA-NET;
• 1973 – Pierwsze połączenia międzynarodowe (do Wielkiej Brytanii i Norwegii).
• 1974 – Vinton Cerf i Bob Kahn: „A protocol for Packet
Intercommunication”: TCP, termin “Internet”;
Wybrane ważne daty (2)
• 1975 – zmiana statusu ARPA-NET z eksperymentalnej na użytkową;
• 1982 – ARPA-NET wprowadza protokół TCP/IP
• 1984 – powstaje DNS;
• 1990 – ARPA-NET kończy działalność;
• 1991 – Polska dołączona do Internetu;
• 1992 – Tim Berners Lee: podstawy WWW
• 1993 – Mosaic – pierwsza przeglądarka
• 1994 – Pierwszy SPAM: f-ma prawnicza Canter i Siegel
wysyła list do 6 tys. grup dyskusyjnych (loteria pozwoleń na pracę w US);
• 1995 – prywatyzacja Internetu, Netscape, Java;
• 1995 – WWW wyprzedza FTP;
Warstwa sprzętowa – problemy do rozwiązania
• Podział strumienia danych na pakiety (ramki): istotne dla koordynacji i podziału czasu (wspólne medium!);
• Wykrywanie kolizji;
• Kontrola poprawności transmisji: bity parzystości, sumy kontrolne lub CRC (Cyclic Redundancy Check):
szybkialgorytm (indeksy przesuwające, bramki XOR, sprzężenie zwrotne)
=> wielomian komunikatu; dość skuteczny przy identyfikowaniu błędów; łatwość sprawdzenia przez odbiorcę;
• Identyfikacja adresata (sygnał dociera do wszystkich maszyn…): adresy sprzętowe;
• Interpretacja komunikatu: identyfikatory typów ramek;
Postać ramki:
preambuła;
stałej długości nagłówek:
adres nadawcy, adres odbiorcy, typ ramki;
CRC
Adresy sprzętowe
• Zwane MAC (Media Access Control), tj. adres dostępu do nośnika; Ethernet: 48 bitów.
• Interfejs sieciowy filtruje ramki nie obciążając „cudzymi”
procesora;
• Sposoby określania: statyczne, konfigurowalne, dynamiczne;
• Prefiksy statycznych adresów przydzielane przez IEEE (zob. http://standards.ieee.org/regauth/oui/oui.txt ).
• Ponadto istnieje zarezerwowany adres rozgłaszania; oraz możliwość definiowania adresów grupowych;
• Dalsza identyfikacja – typ ramki. Kod może
identyfikować rozwiązanie danej firmy, albo
ustandaryzowany protokół wyższej warstwy.
Model warstwowy OSI (Open Software Interconnection)
7. Aplikacji: usługi realizowane przez aplikacje.
6. Prezentacji danych: format wymiany danych, ich ewentualne szyfrowanie. (zwykle nie występuje)
5. Sesji: nawiązywanie i zamykanie połączeń (związana z
dużymi systemami wielodostępnymi – straciła na znaczeniu) 4. Transportu: podział danych, gwarancja dostarczenia,
weryfikacja.
3. Sieciowa: logiczne adresy zamienia na sprzętowe, pakiety logiczne dzieli na ramki danych.
2. Łącza: interpretowanie przesyłanych bitów jako ramek.
1. Fizyczna: przesyła nieprzetworzone bity danych przez nośnik.
Zestaw protokołów TCP/IP
• Zbudowany dla ARPAnet-u (sieci naukowej wchodzącej w skład DDN – Defence Data Network). TCP i IP =
najpopularniejsze w zestawie protokołów.
• Jest to zestaw warstwowy. Podział motywowany:
– Złożonością zadania;
– Heterogenicznością istniejących sieci składowych;
– Specjalizacją poszczególnych protokołów do zastosowań.
• Przykładowo: poczta umożliwia przesyłanie listów;
wymaga niezawodnego połączenia od TCP, IP przekazuje datagramy, Ethernet zarządza medium.
• Droga przebywana przez komunikat – całkowicie przezroczysta dla użytkownika.
• Inne zestawy – np. IPX/SPX (Novell); NetBIOS, NetBEUI
(IBM).
Zestaw protokołów TCP/IP
• Zwykle wyróżnia się następujące warstwy:
– Warstwa aplikacji (Telnet, FTP, e-mail…). Także SMNP (Simple Network Management Protocol).
– Transportowa (TCP, UDP). TCP zapewnia wiarygodny (reliable) przepływ danych (porcjowanie, timeouts). UDP przesyła datagramy nie gwarantując ich dotarcia.
– Sieciowa (IP, ICMP, IGMP). Albo warstwa internetowa.
Obsługuje ruch pakietów poprzez sieć. Między innymi zachodzi tu rutowanie pakietów. Internet Protocol, Internet Control
Message Protocol, Internet Group Management Protocol.
– Połączeniowa (sterowniki urządzenia i karta interfejsu
sieciowego; np. Ethernet, token ring, użycie ARP i RARP) Albo warstwa interfejsu sieciowego. Wszelkie szczegóły fizycznej komunikacji.
[R]ARP = [Reverse] Address Resolution Protocol
Intersieć
• Sieć wirtualna, realizująca model jednolitych usług.
• Architektura musi uwzględniać heterogeniczność sieci składowych.
• Sprzętowe adresy dla intersieci nie wystarczają, gdyż każda z podsieci może używać innego formatu =>
wprowadzono abstrakcyjne adresy protokołowe.
Pozwalają odwoływać się do działającego na odległej maszynie procesu, bez znajomości jej adresu
sprzętowego.
Protokół IP
• Określono format niezależny od konkretnego sprzętu:
uniwersalny, wirtualny pakiet, zwany datagramem.
Rozmiar od 1 oktetu do 64K.
• IP nie obsługuje takich problemów jak:
– duplikowanie datagramów;
– dostarczanie z opóźnieniem lub nie w kolejności;
– uszkodzenie danych;
– utrata datagramów.
• Nagłówek zawiera numery IP nadawcy i odbiorcy.
Adresy IP
• Identyfikuje połączenie komputera z daną siecią.
• IPv4 (obecny): 32 bitowa liczba (zwykle przedstawiana jako 4 zapisane dziesiętnie segmenty).
• Trzy typy adresów:
– Unicast (pojedynczy host)
– Broadcast (wszystkie maszyny danej sieci) – Multicast (rozgłaszanie grupowe).
• Pierwsza część adresu identyfikuje sieć, zaś dalsza określa
maszynę w ramach tej sieci.
Podział puli adresów IP
• 4 klasy adresów: bity sieci bity hosta
– A: do 127: 0-netid(7) hostid(24) – B: 128-191: 10-netid(14) hostid(16)
– C: 192-223: 110-netid(21) hostid(8) – D: 224-239: 1110-multicastgroupID(28) – E: 240-255: 1111-zarezerwowane(28)
• Prefiksy identyfikujące sieć przydzielane przez IANA (Internet Assigned Numbers Authority):
http://www.iana.org/
• Problem tego podejścia:
– marnotrawstwo adresów;
– duże tablice tras (zob. dalej).
Specjalne adresy IP
• Adres zerowy węzła (sufiks) = adres sieci;
• Cała pula 127.*.*.* = adresy pętli zwrotnej;
• Same jedynki = rozgłaszanie ograniczone (lokalna sieć fizyczna; używane przy starcie komputera)
• Same zera – oznaczenie lokalnego komputera, gdy właściwy adres nie jest mu jeszcze znany.
• Sufiks z samych jedynek = rozgłaszanie ukierunkowane (maszyny danej sieci)
• Adresy prywatne (tzw. nierutowalne) [RFC 1918]:
– od 10.0.0.0 do 10.255.255.255 – od 172.16.0.0 do 172.16.255.255 – od 192.168.0.0 do 192.168.255.255
Nagłówek datagramu IP
• Wersja = IPv4;
• Długość nagłówka;
• typ obsługi (trasa o minimalnym opóźnieniu czy maksymalnej przepływności);
• długość całkowita;
• identyfikacja (datagramu);
• znaczniki, przesunięcie fragmentu (używane przy fragmentacji datagramu);
• czas życia (max. 255; redukowany na każdym odcinku );
• typ,
• suma kontrolna nagłówka,
• IP nadawcy i odbiorcy;
• opcje IP;
• uzupełnienie;
Encapsulation (kapsułkowanie?) datagramu IP
• Zapakowanie wewnątrz ramki sieciowej; zawartość nie jest interpretowana przez niższą warstwę.
• Datagram IP jako zawartość takiej ramki jest
identyfikowany odpowiednim typem ramki sieciowej.
Oczywiście ramka sieciowa otaczająca datagram musi mieć wyspecyfikowany adres sprzętowy odbiorcy.
• Każdy etap na drodze datagramu wiąże się z
rozpakowaniem ramki sieciowej a następnie wysłaniem go w nowej ramce.
• MTU (Maximum Transfer Unit): ogranicza wielkość
danych w ramce. Jeżeli dla danej sieci rozmiar datagramu przekracza MTU, to wykonywana jest fragmentacja.
Składanie datagramu odbywa się dopiero u ostatecznego
odbiorcy. Odbiór datagramu: wszystko albo nic.
Optymalizacja wykorzystania puli adresów IP
• Classless Inter Domain Routing (CIDR) [RFC 1517, 1518, 1519]:
– Dowolna liczba bitów na adres sieci;
– Zapis adresu dla podejścia bezklasowego np: 192.9.205.22 /18 (określa się liczbę bitów maski sieci);
– Możliwe agregowanie adresów sieci i hierarchiczne określanie trasy;
• IPv6: 128-bitowe adresy => ogromna pula. Ponadto:
– Zmieniony, rozszerzalny format nagłówka: pole „typ następnego nagłówka”;
– Wsparcie dla obsługi dźwięku i obrazu;
– Trzy rodzaje adresów: jednostkowy, rozsyłania grupowego,
„grono” -> służy np. realizacji replik usługi.
– Sposób zapisu: notacja szesnastkowa z dwukropkami; możliwość pomijania segmentu zer: FF0C:0:0:0:0:0:0:B1 -> FF0C::B1
Odwzorowywanie adresów (1)
• Aby dostarczyć dane, należy na podstawie adresu protokołowego ustalić adres sprzętowy.
• Metody:
– Tablicowe (zwykle w sieciach rozległych);
– Obliczeniowe (gdy adres sprzętowy konfigurowalny);
– Sieciowe: pytanie-odpowiedź (zwykle w lokalnych ze statycznymi adresami).
• Adres sprzętowy można określić tylko wtedy, jeśli adresat jest w tej samej sieci fizycznej. Pakiety dla adresatów
nielokalnych przejmuje ruter.
• Ruter przynależy do co najmniej dwóch sieci (posiadając
tyleż adresów logicznych i sprzętowych).
Odwzorowywanie adresów (2)
• Każdy ruter przechowuje tablicę tras:
– Prefiks i maska adresowa każdej sieci;
– Odpowiadający każdej pozycji adres sprzętowy rutera.
• Odczytany adres rutera nie zostanie umieszczony w nagłówku datagramu.
• Address Resolution Protocol (ARP):
– Ujednolicony protokół odwzorowywania adresów.
– Zapytanie wysyłane na adres rozgłaszania danej sieci.
– Odpowiedź tylko do pytającego.
– Generyczny, choć zwykle odwzorowuje IP na Ethernet.
– Ramki ARP identyfikowane kodem typu ramki.
Internet Control Message Protocol (ICMP)
• Zintegrowany z protokołem IP.
• Umożliwia informowanie nadawcy o powstałych błędach (mniej poważnych niż błąd sumy nagłówka).
• Komunikaty o błędach mogą dotyczyć:
– tłumienia nadawcy;
– przekroczenie terminu;
– nieosiągalności odbiorcy;
– konieczności zmiany trasy;
– problemów z parametrami.
• Ponadto dostępne:
– echo; odpowiedź z echem;
– prośba o maske adresową; odpowiedź z maską adresową.
• Zastosowania – m.in. ping, traceroute, wyznaczanie
MTU.
Urządzenia aktywne
• Repeater (wzmacniak), oraz hub -> warstwa fizyczna (1 w OSI).
Propagują również zakłócenia…
• Most: podział na dwie sieci, mogące posiadać różne media transmisyjne -> warstwa łącza (2); pracuje na adresach MAC.
• Switch -> warstwa łącza danych (2). Symuluje sieć lokalną z mostami, gdzie w każdym segmencie jest tylko jeden komputer.
• Ruter -> podział na więcej podsieci IP -> warstwa łącza (2) i
sieciowa (3). Łączenie sieci heterogenicznych. Podobnie jak most = specjalizowany komputer: procesor, pamięć, interfejsy sieciowe.
Różne media transmisyjne, mechanizmy adresowania sprzętowego i formaty ramek.
• Zapora sieciowa -> ogranicza dostępu z zewnątrz. Rodzaje filtrów:
– bramki aplikacji: pakiety są odpowiednio tłumaczone; wymaga
skonfigurowania oprogramowania proxy dla każdej usługi sieciowej na każdej z maszyn w sieci;
– filtry pakietów: blokowanie pakietów w oparciu o adres pochodzenia, adres docelowy, protokół, nr portu czy nawet zawartość.
TCP – Transmission Control Protocol
• Warstwa transportu. Protokół niezawodnego przesyłania.
• Obsługuje następujące poważne problemy transmisji:
– przywracanie właściwej kolejności odebranych pakietów:
wykorzystanie numeru porządkowego pakietów;
– unikanie duplikatów – j.w.;
– retransmisja zgubionych pakietów: nadawca wysyła ponownie, jeśli w zadanym czasie nie otrzymał potwierdzenia
(acknowledgment);
– unikanie powtórzeń spowodowanych nadmiernym
opóźnieniem: numery pakietów dodatkowo kwalifikowane identyfikatorami sesji;
– kontrola przepływu dla uniknięcia zalewu danych: metoda przesuwającego się okna.
TCP – właściwości (1)
• Tzw. protokół połączeniowy: przed przesłaniem danych zestawiane jest połączenie.
• Komunikacja punkt do punktu: oprogramowanie TCP niezbędne tylko w końcowych węzłach.
• W pełni dwukierunkowa komunikacja. Możliwa w dowolnym momencie i buforowana.
• Interfejs strumieniowy. Brak pojęcia rekordu => dane mogą dotrzeć w innych fragmentach.
• Niezawodne połączenie: zgoda na połączenie obydwu programów.
• Łagodne kończenie połączenia. Program może zażądać
zakończenia, a protokół zapewni dostarczenie wysłanych
danych przed jego zamknięciem.
TCP – właściwości (2)
• Tzw. retransmisja z adaptacją. Opóźnienie komunikacji jest śledzone i na tej podstawie jest określany czas, po upływie którego stosuje się retransmisję (zbyt szybka transmisja doprowadziłaby do zalewu pakietów).
• Kontrola przepływu: odbiorca dostarcza potwierdzenia odbioru oraz tzw. propozycje okna (ile może przyjąć do bufora);
• Trójetapowa wymiana komunikatów przy ustawianiu i kończeniu połączeń (tzw. 3-way handshake): segmenty SYN i FIN.
• Kontrola przeciążenia: w razie zgubienia pakietu jest wysyłany najpierw jeden, a następnie tempo jest
zwiększane z uwzględnieniem propozycji okna.
Zawartość segmentu TCP
• port nadawcy;
• port odbiorcy;
• nr porządkowy (dotyczy aktualnie wysyłanych – tj.
wychodzących danych);
• numer potwierdzenia (dotyczy odebranych);
• długość nagłówka;
• suma kontrolna (obejmuje nagłówek i dane segmentu TCP);
• bity kodu;
• okno (dostępny bufor dla odbieranych danych);
• dane.
Encapsulation - ogólnie
• Każda warstwa dołącza swe nagłówki przed i niekiedy również (np.
Ethernet trailer) za przekazywanym pakietem danych.
• Jednostka danych wysyłanych przez protokół TCP = segment;
• Jednostka wysyłana przez protoków IP = datagram (tak naprawdę – packet: tj. datagram IP albo fragment datagramu IP);
• Jednostka w ramach Ethernetu = frame (ramka) – o określonym typie
• 8-bitowy identyfikator w nagłówku IP identyfikuje protokół datagramu: ICMP, IGMP, TCP, UDP.
• Analogicznie TCP i UDP używają w nagłówku 16-bitowych
numerów portów do zidentyfikowania aplikacji: numery źródłowego i docelowego portu.
• Analogicznie (np. rozróżnienie pomiędzy IP, ARP, RARP), nagłówek Ethernetowy zawiera 16-bitowe pole typu ramki.
• Demultiplexing: po otrzymaniu ramki kolejne warstwy
„rozpakowują” dane i w oparciu o identyfikatory w znanych sobie nagłówkach przekazują odpowiedniemu protokołowi warstwy
wyższej.
Numery portów
• Liczby 16-bitowe.
• Identyfikacja serwerów typowych usług: przez tzw. well- known port numbers: np. FTP = 21, Telnet = 23 (zob.
też /etc/services na Unix-ie).
• Przydziałem numerów od 1 do 1023 zajmuje się Internet Assigned Numbers Authority (IANA).Unix: porty
zarezerwowane => tylko superuser może przydzielić taki port.
• Porty klienckie zwane efemerycznymi (ephemeral ports), gdyż używane są na czas korzystania danego klienta z
usługi. Zwykle alokowane pomiędzy 1024 a 5000.
• Kanał komunikacyjny zestawiany przez protokół TCP jest wyznaczone przez dwa końce zwane gniazdami. Gniazdo
= adres IP + numer portu.
Interfejsy do protokołów komunikacyjnych
• Zakres funkcjonalności określany przez specyfikację
danego protokołu. Konkretne API mogą być specyficzne dla danego systemu operacyjnego;
• Najpopularniejsze jednak – udostępnianie jednolitego interfejsu tzw. gniazd (sockets). Powstał jako część BSD; zwany też Berkeley sockets.
• Mogą być dostępne jako wywołania systemu
operacyjnego, lub w postaci funkcji bibliotecznych.
• Skonstruowane w stylu UNIX-owego interfejsu wejścia- wyjścia: „otwórz-czytaj-zapisz-zamknij”. Po otwarciu pliku zwracana jest liczba – deskryptor, używana
następnie w kolejnych odwołaniach. Podobnie jest w
przypadku komunikacji z protokołem.
Procedury interfejsu gniazd (1)
• Utworzenie gniazda:
deskryptor = socket(
rodzina, //np. PF_INET => TCP/IP
typ, //rodzaj komunikacji: SOCK_STREAM // - połączeniowa strumieniowa, //SOCK_DGRAM – bezpoł. komunikatami protokół);
• Zamknięcie gniazda:
close(gniazdo);
//closesocket w Windows Sockets
• Gniazda a wątki:
– każdy nowy wątek dziedziczy kopię otwartych gniazd z wątku, który go utworzył;
– gniazda posiadają licznik odwołań.
Procedury interfejsu gniazd (2)
• Określenie portu:
bind(gniazdo, adres_lokalny, dł_adresu) // serwer określa, na jakim porcie
//będzie oczekiwał połączenia
• Oczekiwanie na komunikaty:
listen(gniazdo, rozmiar_kolejki_zgłoszeń)
• Protokół połączeniowy – wymaga ponadto przyjęcia nowego połączenia:
nowe_gniazdo = accept(gniazdo, adres_klienta, długość_adresu_klienta);
Procedury interfejsu gniazd (3)
• Klient łączy się z serwerem:
connect(gniazdo, adres_serwera, długość_adresu_serwera);
Def.: adres punktu końcowego = kombinacja adresu IP i nr-u portu.
• Wysyłanie danych:
send(gniazdo, dane, długość, znaczniki) // ...gdy gniazdo jest połączone
sendto(gniazdo, dane, długość, znaczniki, adres_odbiorcy, długość_adresu_odbiorcy) // ... dla niepołączonego gniazda;
sendmsg(gniazdo, struktura_komunikatu, znaczniki) // skrót ww.
Procedury interfejsu gniazd (4)
• Odbieranie danych:
recv(gniazdo, bufor, długość_bufora, znaczniki) // z połączonego gniazda
recvfrom(gniazdo, bufor, długość, znaczniki, adres_nadawcy, długość_adresu_nadawcy)
// dla niepołączonego gniazda
recvmsg(gniazdo, struktura_komunikatu, znaczniki) //
skrót ww.
• Ponadto – tradycyjne read i write (gniazdo, bufor, długość), dostępne dla gniazd połączonych.
• Inne operacje:
– getpeername – adres odległego klienta;
– gethostname – adres lokalny;
– gethostbyname -> adres IP maszyny o podanej nazwie;
– gethostbyaddr -> nazwa na podstawie podanego adresu IP;
– oraz getsockopt oraz setsockopt dla obsługi wartości opcji gniazda.
Sieciowe programy użytkowe
• Protokoły transportowe umożliwiają jednoznaczne
wskazanie żądanej usługi. W TCP są to 16-bitowe numery portów. Pozwala to odbiorcy na skierowanie komunikatu do właściwego serwera (w znaczeniu programu).
• Domain Name System (DNS): – rozproszona baza danych mapująca nazwy na numery IP. Większość aplikacji
pozwala stosować zamiennie nazwy i numery. Rev-DNS (konwersja odwrotna: IP na nazwę).
• Domeny najwyższego poziomu: geograficzne (Country Code Domains) lub organizacyjne. Zob. http://
www.iana.org/cctld/cctld.htm
• Adres URL:
– identyfikator usługi: http:// ftp:// gopher:// telnet:// news://
– nazwa domeny: adres domenowy lub kropkowo-dziesiętny;
– ścieżka dostępu na serwerze;