Adresowanie w warstwie Internetu
Każdy komputer używający protokołów TCP/IP powinien mieć unikalny numer zwany adresem IP. Adresy te są 32-bitowymi numerami.
Adresy zostały początkowo podzielone na klasy:
klasa A - najstarszy bit jest ustawiony na zero,
pierwszych osiem bitów określa numer sieci,
24 pozostałe bity określają konkretny komputer w tej sieci
(zakres od 0.0.0.0 do 127.255.255.255).
Adresy te są przeznaczone dla bardzo dużych sieci, jak na przykład sieci narodowe lub sieci olbrzymich firm międzynarodowych
W tej klasie jest 27=128 sieci, w każdej z sieci może być ponad 16 milionów hostow.
Na adres maszyny przeznaczone jest 24 bity więc otrzymujemy
max. 224 = 16 777 216 hostów.
klasa B - najstarszy bit jest ustawiony na jeden, a drugi na zero,
pierwszych 16 bitów określa numer sieci,
pozostałych 16 numer komputera w tej sieci
(zakres: od 128.0.0.0 do 191.255.255.255).
Przeznaczeniem tych adresów są średnie sieci. W tym przedziale mieści się większość dużych i średnich firm oraz sieci miejskie (w każdej sieci może być około 65 tysięcy komputerów)
W tej klasie jest 214=16 384 sieci (14 bitów przeznaczonych na adres sieci), w każdej z sieci może być max. 216 = 65 536 hostów.
klasa C - dwa najstarsze bity ustawione na jeden, trzeci zaś na zero,
pierwsze 24 bity określają numer sieci,
pozostałe 8 bitów określa numer komputera w tej sieci
(zakres: od 192.0.0.0 do 223.255.255.255).
Adresy tej klasy przeznaczone są dla małych firm i sieci osiedlowych
(w każdej sieci mogą być tylko 253 komputery)
W klasie C jest 221=2 097 152 sieci (21 bitów przeznaczonych na adres sieci), w każdej z sieci może być max. 28 = 256 hostów.
klasa D - trzy najstarsze bity ustawione na jeden, a czwarty ustawiony na zero. (zakres: od 224.0.0.0 do 239.255.255.255)
Ta klasa adresów IP jest przeznaczona dla grup rozgłoszeniowych - multicast.
klasa E - cztery najstarsze bity ustawione na jeden, piąty wyzerowany.
(zakres: od 240.0.0.0 do 247.255.255.255)
Klasa jest na razie zarezerwowana na przyszłość.
Klasa |
Najniższy adres |
Najwyższy adres |
A |
0.0.0.0 |
126.255.255.255 |
B |
128.0.0.0 |
191.255.255.255 |
C |
192.0.0.0 |
223.255.255.255 |
D |
224.0.0.0 |
239.255.255.255 |
E |
240.0.0.0 |
247.255.255.255 |
Adresy specjalne, klasy nierutowalne
Istnieją pewne adresy, których nie można wykorzystać do normalnych zastosowań (przydzielić ich komputerom).
Dla danej sieci (dla danej przestrzeni adresowej) takim adresem jest
adres sieci, np. 150.254.114.0
Drugim takim adresem jest broadcast, czyli adres rozgłoszeniowy.
Każdy datagram IP o tym adresie zostanie odczytany i przetworzony przez wszystkie komputery danej sieci.
Adres sieci i broadcast zmieniają się w zależności od aktualnej przestrzeni adresowej.
Uwaga!
Należy odróżniać adresy rozgłoszeniowe
w warstwie DOSTĘPU DO SIECI
np. dla Ethernetu jest to adres MAC
FF-FF-FF-FF-FF-FF (tylko ten !)
w warstwie INTERNETOWEJ
jest to odpowiedni adres IP, który w części hosta
posiada same jedynki
np.
150.255.113.255 (dla każej sieci - INNY!)
Adresem specjalnego przeznaczenia jest adres: 0.0.0.0.
oznacza on wszystkie komputery w Internecie. Często podczas odczytywania tablicy rutingu zastępowany jest on słowem: „default”.
Następnym adresem specjalnym jest 127.0.0.1,
jest to adres pętli (loop-back address). Adres ten służy do komunikacji
z wykorzystaniem protokołu IP z lokalnym komputerem (localhost).
Jest to adres zawsze przypisany komputerowi, na którym właśnie pracujemy, ponieważ pakiety z takimi adresami nie powinny wydostawać się na zewnątrz komputera, nie powoduje to żadnych konfliktów.
Adresów klasy multicast i klasy zarezerwowanej, nie możemy wykorzystać do normalnych zastosowań:
1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx - multicast (adresy klasy D)
1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx - adresy zarezerwowane (klasy E)
Adresy multicast są adresami transmisji grupowej, wykorzystywanymi np. przy wideo-konferencjach.
Pewna grupa adresów została zarezerwowana do powszechnego wykorzystania.
Można z wykorzystaniem tych adresów budować lokalne Intranety
(sieci IP świadczące takie same usługi jak Internet, ale dla pojedynczego przedsiębiorstwa) czyli sieci prywatne.
Adresy te czasem nazywane są adresami nierutowalnymi,
ponieważ pakiety z takich sieci nie powinny być przekazywane przez rutery.
Wynika stąd, że możemy założyć sobie sieć z przestrzenią adresową z takiego zakresu i sieć ta nie będzie widziana na zewnątrz w Internecie.
Zarezerwowane zakresy adresów IP (prywatne)
Klasa A
10.0.0.0 - 10.255.255.255
Klasa B
172.16.0.0 - 172.31.255.255
Klasa C
192.168.0.0 - 192.168.255.255
CIDR (Classless Inter-Domain Routing)
Maska sieci, adres rozgłoszeniowy (broadcast)
W pewnym momencie rozwoju Internetu okazało się,
że sposób przydzielania adresów w sieci, oparty na podziale na klasy,
jest bardzo nieekonomiczny. Dostępne klasy adresów zaczęły się bardzo szybko kurczyć.
Wprowadzono system zwany: CIDR (Classless Inter-Domain Routing)
bezklasowym rutowaniem międzydomenowym
Pojawiło się pojęcie maski sieci.
Maska sieci składa się, podobnie jak adres IP, z 4 oktetów i używana jest do wydzielenia z adresu IP części adresu odpowiadającej za identyfikację sieci i części odpowiadającej za identyfikację komputera.
Wyznaczanie adresu sieci i adresu rozgłoszeniowego.
Adres sieci tworzymy przepisując niezmienione wszystkie bity adresu IP, dla których odpowiednie bity maski mają wartość jeden. Resztę uzupełniamy zerami.
Adres broadcast jest adresem rozgłoszeniowym sieci.
Używa się go do jednoczesnego zaadresowania wszystkich komputerów w danej sieci (jest przetwarzany przez wszystkie komputery w sieci).
Tworzymy go podobnie do adresu sieci, jednak dopełniamy jedynkami zamiast zerami.
Mając adres sieci i adres broadcast możemy łatwo wyznaczyć możliwy zakres numerów IP komputerów w danej sieci.
Adres 212.51.219.50 z maską 255.255.255.192 możemy w skrócie zapisać 212.51.219.50/26.
W ostatnia liczba oznacza ilość bitów o wartości jeden w masce.
ARP - (Address Resolution Protocol)
Dwa komputery mogą komunikować się tylko wtedy, kiedy znają nawzajem swoje adresy fizyczne (adresy MAC kart sieciowych).
Aplikacje które użytkują zasoby innych komputerów posługują się adresami IP, zachodzi więc potrzeba opracowania mechanizmu, który zasłoni adresy fizyczne i umożliwi programom pracę tylko z adresami IP.
Przekształcenia 32 bitowego adresu IP na 48 bitowe adresy fizyczne (MAC) dokonuje protokół odwzorowania adresów ARP (ang. Address Resolution Protocol).
Protokół ARP tworzy podręczną pamięć odwzorowań (ARP cache)W momencie, gdy protokół warstwy Internetu chce przekazać datagram do warstwy dostępu do sieci, warstwa łącza danych modelu OSI musi określić adres docelowy, komputera do którego ma przekazać datagram. Jeśli go nie zna, rozsyła zapytanie rozgłoszeniowe (broadcast - z docelowym adresem MAC równym FF-FF-FF-FF-FF-FF) do wszystkich komputerów w danej sieci lokalnej. Następnie odpowiedni komputer - cel - (jeśli istnieje w sieci lokalnej) rozpoznaje zawarty ramce Ethernetowej adres protokołu sieciowego IP, odpowiada i podaje swój adres MAC. W tym momencie protokół ARP na komputerze źródłowym uzupełnia swoją tablicę danych
o adres docelowego komputera.
System ten działa inaczej, gdy źródło i cel transmisji znajdują się
w oddzielnych sieciach LAN połączonych ruterem.
Fakt ten ustala się korzystając z adresów źródła i celu oraz maski podsieci.
W tej sytuacji stacja źródłowa wyszukuje w swoich ustawieniach konfiguracyjnych TCP/IP adres bramy domyślnej (ruter), a następnie sprawdza w pamięci podręcznej ARP adres MAC bramy. Jeśli go nie posiada - wysyła pakiet ARP. Brama odpowiada pakietem ARP, poczym stacja źródłowa wysyła do bramy dane.
Następnie brama musi ustalić czy stacja docelowa znajduje się w tym samym segmencie czy w odległym. W pierwszym przypadku ustala adres MAC stacji docelowej, w drugim - następnego rutera. W obu tych wypadkach musi zostać ustalony odpowiedni adres MAC w oparciu o protokół ARP.
Aktualną tablicę ARP najczęściej możemy podejrzeć za pomocą polecenia arp (Linux, Unix, Windows NT/2000).
Przykładowa zawartość tablicy ARP:
M:\>arp -a
Interfejs: 150.254.113.39 on Interface 0x1000003
Adres internetowy Adres Fizyczny Typ
150.254.112.1 00-e0-b1-48-b6-8d dynamiczne
150.254.113.15 00-d0-b7-a8-59-ca dynamiczne
150.254.113.16 00-90-27-73-41-a6 dynamiczne
Protokół ARP może być wykorzystywany w celu uniknięcia nadania dwóch takich samych adresów IP w jednej sieci lokalnej. W momencie inicjacji systemu komputer wysyła ramkę ARP z zapytaniem o adres IP, który aktualnie został mu przydzielony. Jeśli inny komputer w sieci zgłosi się, że posiada już taki adres, zablokowana zostaje transmisja IP i w sieci nie pojawia się drugi taki sam adres IP.
Protokół Odwrotnego Odwzorowania Adresów
(RARP - Reverse Address Resolution Protocol)
Dzięki protokółowi ARP komputer może uzyskać adres fizyczny innego komputera, znając jego adres IP.
Istnieją sytuacje w których komputer nie posiada na stale zapisanego adresu IP (np. brak twardego dysku), ale posiada kartę sieciowa
z adresem MAC.
Jeżeli w sieci jest serwer który świadczy usługi RARP (serwer RARP) przydzielający adresy IP to komputer może ustalić swój adres IP
z serwera RARP na podstawie znajomości własnego adresu MAC.
Do komunikacji z serwerem RARP używany jest protokół odwrotnego odwzorowania adresów RARP (ang. Reverse Address Resolution Protocol).
Protokół BOOTP (Bootstrap Protocol) RFC 1534
jest protokołem inicjowania o większych możliwościach niż RARP, gdyż dostarcza klientom nie tylko informacje o adresie, ale i inne dane konfiguracyjne
Urządzenie używa protokołu BOOTstrap (BOOTP), gdy rozpoczyna proces uzyskiwania adresu IP. BOOTP używa UDP do przenoszenia komunikatów; komunikat UDP jest kapsułkowany w datagramie IP.
Komputer używa BOOTP do wysyłania rozgłoszeniowego datagramu IP (z wykorzystaniem docelowego adresu IP składającego się z samych binarnych jedynek 255.255.255.255). Jeśli adres serwera jest znany, jest on używany zamiast adresu. Serwer BOOTP odbiera żądanie i w odpowiedzi wysyła rozgłoszenie. Klient odbiera ten datagram i sprawdza adres MAC. Jeżeli w polu adresu sprzętu klienta znajdzie własny adres MAC, pobiera adres IP zawarty w polu adresu IP. Tak jak RARP BOOTP działa w środowisku klient/serwer i wymaga wymiany tylko jednego pakietu. Jednak w przeciwieństwie do RARP, który wysyła z powrotem tylko czterooktetowy adres IP, datagramy BOOTP mogą zawierać adres IP, adres routera (domyślną bramę), adres serwera oraz pole specyficzne dla producenta.
Jednym z problemów związanych z BOOTP jest to, że nie dostarcza dynamicznego przydziału adresów.
W przypadku BOOTP można stworzyć plik konfiguracyjny, który określa parametry każdego urządzenia.
Protokół dynamicznej konfiguracji hostów
DHCP (Dynamic Host Configuration Protocol)
RFC 1534, 1542
Protokół DHCP został zaproponowany jako następca BOOTP.
W przeciwieństwie do BOOTP, DHCP pozwala hostowi uzyskać adres IP szybko
i dynamicznie, wraz z adresem IP, serwer może wysłać także maskę podsieci, adres domyślnej bramy (rutera), adres serwera DNS oraz inne ustawienia konfiguracyjne TCP/IP).
Dla konfiguracji DHCP wymagany jest jedynie zdefiniowany zakres adresów IP
ewentualnie także zakresy wykluczania
Sekwencja uruchomieniowa DHCP:
stan inicjalizacji - klient wysyła komunikaty rozgłoszeniowe DHCPDISCOVER, będące pakietami UDP, w których numer portu jest ustawiony na port BOOTP.
stanu wyboru - serwer/y DHCP wysła/ją a klient zbiera komunikaty DHCPOFFER
stan negocjsacji - klient wybiera jeden z serwerów
i negocjuje adres oraz czas dzierżawy (czas, przez jaki może używać adresu bez wznawiania go) z serwerem DHCP wysyłając do niego pakiet DHCPREQUEST.
Stan zamknięcia - wybrany serwer DHCP potwierdza żądanie klienta pakietem DHCPACK. Teraz klient może rozpocząć użytkowanie adresu.
Aby upewnić się, że żaden inny komputer nie używa przydzielonego adresu, klient wysyła ramkę ARP ze swoim adresem.
M:\>ipconfig /all
Windows 2000 - konfiguracja IP
Nazwa hosta . . . . . . . . . . . : PD3
Sufiks podstawowej domeny DNS:fizyka.amu.edu.pl
Typ węzła . . . . . . . . . . . . : Hybrydowa
Routing IP włączony . . . . . . . : Nie
Serwer proxy WINS włączony. . . . : Nie
Lista przeszukiwania sufiksów DNS : fizyka.amu.edu.pl
amu.edu.pl
edu.pl
Karta Ethernet Połączenie lokalne:
Sufiks DNS konkretnego połączenia:
Opis . .. : 3Com EtherLink XL 10/100 PCI
dla pełnej katy PC Management NIC (3C905C-TX) #2
Adres fizyczny. . . . . . . . . : 00-04-76-10-79-73
DHCP włączone . . . . . . . . . . : Tak
Autokonfiguracja włączona . . . . : Tak
Adres IP. . . . . . . . . . . . . : 150.254.113.39
Maska podsieci. . . . . . . . . . : 255.255.254.0
Brama domyślna. . . . . . . . . . : 150.254.112.1
Serwer DHCP . . . . . . . . . . . : 150.254.113.16
Serwery DNS . . . . . . . . . . . : 150.254.113.14
150.254.65.7
150.254.113.16
150.254.113.15
Podstawowy serwer WINS. . . . . . : 150.254.113.16
Pomocniczy serwer WINS. . . . . . : 150.254.170.33
Dierżawa uzyskana. . . . . : 21 listopada 2001 07:51:49
Dzierżawa wygasa . . . . . : 24 listopada 2001 07:51:49
Protokół IP
Protokół IP (Internet Protocol) zdefiniowany w specyfikacji RFC791, jest najważniejszą częścią warstwy Internetu
(jest to protokół transportowy warstwy Internetu).
IP jest protokłem bezpołączeniowy, co oznacza, że nie sprawdza on poprawności dostarczenia datagramów do miejsc przeznaczenia.
Do podstawowych funkcji protokołu IP możemy zaliczyć:
określenie struktury datagramu,
określenie schematu adresowania,
kierowanie ruchem datagramów w sieci (trasowanie datagramów),
dokonywanie fragmentacji datagramu i odtwarzanie z fragmentów oryginalnego datagramu.
Datagramy
Protokół IP jest przeznaczony do sieci z wymiana pakietów.
Pakiet IP nazywany jest datagramem.
Każdy datagram jest podstawową, samodzielną jednostką przesyłaną
w sieci na poziomie warstwy Internetu.
Datagramy mogą być adresowane do pojedynczych węzłów lub do wielu węzłów.
W przesyłaniu datagramów poprzez sieci uczestniczą routery (węzły sieci), które określają dla każdego datagramu trasę od węzła źródłowego do węzła docelowego.
Ponieważ w różnych sieciach mogą być ustalone różne maksymalne długości datagramów, więc w zależności od potrzeb, datagram może być podzielony na kilka mniejszych części, tzn. na kilka datagramów.
Tę operacją nazywamy fragmentacją datagramów.
Format każdego fragmentu jest taki sam jak format nie podzielonego datagramu. Konieczność fragmentacji datagramu może być również następstwem przesyłania datagramów przez sieci rozległe dopuszczające inne protokoły i inne długości pakietów, np.
sieci X.25 z pakietami o maksymalnej długości 128 bajtów.
Kompletowanie pierwotnego datagramu z fragmentów dokonuje się na komputerze odbiorcy datagramów.
Z chwilą nadejścia pierwszego fragmentu ustala się czas oczekiwania na skompletowanie datagramu. Jeśli w tym okresie czasu nie nadejdą pozostałe fragmenty to następuje przerwanie oczekiwania i skasowanie już otrzymanych fragmentów.
Struktura datagramu IPv4
|
bity |
|||||||
Słowa |
0 |
4 |
8 |
12 |
16 |
20 |
24 |
28 - 31 |
1 |
wersja |
długość nagłówka /IHL |
Typ usług |
Długość całkowita datagramu |
||||
2 |
Identyfikator |
Flagi |
Przesunięcie fragmentacji |
|||||
3 |
Czas życia |
Protokół |
Suma kontrolna nagłówka |
|||||
4 |
Adres źródła |
|||||||
5 |
Adres przeznaczenia |
|||||||
6 |
Opcje |
Uzupełnienie |
||||||
7 |
DANE |
Pole wersja (4 bity) określa numer użytej wersji protokołu IP. Jest ono konieczne, ponieważ routery lub komputery w sieci mogą używać różnych wersji IP.
Pole długość nagłówka / IHL (Internet Header Length) (4 bity) określa liczbę słów 32 bitowych składających się na nagłówek datagramu.
Typowa (minimalna) długość nagłówka wynosi 5 slow.
Pole typ usług (8 bitów) określa jakość usług jakiej wymaga się od sieci.
Znaczenie poszczególnych bitów tego pola jest następujące:
Pierwsze trzy pola określają tzw. pierwszeństwo,
np. 000 - oznacza datagram zwykły,
001 - priorytetowy,
010 - natychmiastowy,
011 - błyskawiczny,
100 - datagram super błyskawiczny,
101 - CRITIC/ECP
110 - sterowanie siecią wewnętrzną
111 - sterowanie siecią
Bit czwarty to bit D określający opóźnienie w sieci (D=0 oznacza normalne, D=1 małe opóźnienie).
Kolejny bit to bit T związany z przepustowością (T=0 oznacza normalną, a T=1 dużą przepustowość).
Bit szósty R pozwala wybrać niezawodność w dostarczeniu datagramu (R=0 normalna, R=1 duża niezawodność).
Ostatnie dwa bity mają wartości równe zeru i są zarezerwowane dla przyszłych zastosowań.
Pole całkowita długość pakietu (16 bitów) definiuje długość datagramu IP w bajtach (oktetach).
Maksymalna długość datagramu wynosi 65535 bajtów.
Kolejne trzy pola w nagłówku są wykorzystywane przez protokół IP do fragmentacji datagramów i do operacji odwrotnej, tzn. do składnia z krótkich fragmentów pierwotnego datagramu. Te pole to identyfikacja, flaga i przesunięci fragmentu.
Pole identyfikator (16 bitów) jest używane do jednoznacznego oznaczenia każdego fragmentu pierwotnego datagramu. Identyfikator zamieszczony w tym polu jest powtarzany we wszystkich fragmentach składających się na pierwotny datagram.
Pole flagi zawiera 3 bity:
Pierwszy - zawsze zero
Drugi określa czy można (1) czy nie można (0) fragmentować datagram,
Trzeci - identyfikacja ostatniego fragmentu składającego się na pierwotny datagram (wartość 0 określa ostatni, 1 oznacza kolejny fragment).
Pole przesunięcie fragmentacji (13 bitów) pole to wskazuje, do którego miejsca pakietu danych należy ten fragment. Przesunięcie fragmentu jest mierzone w jednostkach 8 bajtów (64 bitów). Pierwszy fragment ma przesunięcie równe zeru.
Pole czas życia (8 bitów) jest parametrem określającym ile czasu datagram może przebywać w sieci. Czas życia datagramu ustala nadawca umieszczając w tym polu liczbę naturalną. Przy przejściu przez kolejny ruter liczba ta jest zmniejszana o 1. Zmniejszenie do zera powoduje odrzucenie datagramu.
Pole protokół (8 bitów) określa numer protokołu warstwy (transportowej), do którego należy przesłać dane z datagramu;
np. 6 oznacza protokół TCP, 1 protokół ICMP, 17 protokół UDP.
Pole suma kontrolna nagłówka (16 bitów) służy do sprawdzania poprawności odbioru wyłącznie nagłówka datagramu. Suma ta podlega weryfikacji i modyfikacji w każdym ruterze, np. Na skutek zmian pola czas życia.
Pola adres źródła i adres docelowy (po 32 bity) zawierają adresy IP odpowiednio komputera źródłowego i docelowego.
Pole opcje, zmiennej długości będącej wielokrotnością 8 bitów, jest wykorzystywane do określenia dodatkowych wymagań dotyczących sposobu przesyłania datagramu, np. do rejestrowania przebytej trasy lub do zapamiętania trasy zdefiniowanej w węźle źródłowym. Pole to nie musi występować w nagłówku datagramu.
Pole opcje składa się z trzech części.
1-bitowy znacznik kopiuj określa, że opcje maja być przekopiowane do wszystkich fragmentów (wartość 1), będą tylko do pierwszego (wartość 0).
Bity klasa opcji określają ogólna klasę opcji:
Klasa opcji |
Znaczenie |
0 |
Kontrola datagramów lub sieci |
1 |
Zarezerwowane do przyszłego użytku |
2 |
Poprawianie błędów i pomiary |
3 |
Zarezerwowane do przyszłego użytku |
numer opcji
Opcje, które moga towarzyszyć datagramom IP.
Wartości Klasy Opcji oraz Numeru Opcji
Klasa opcji |
Numer opcji |
Długość |
Opis |
0 |
0 |
- |
Koniec listy opcji. Używana gdy opcje nie kończą się wraz z końcem nagłówka. |
0 |
1 |
- |
Bez przypisanej funkcji - wypełnienie |
0 |
2 |
11 |
Tajność - używana do zastosowań wojskowych |
0 |
3 |
zmienna |
Swobodne trasowanie wg nadawcy - używana do prowadzenia datagramu określoną ścieżkę. |
0 |
7 |
zmienna |
Zapisuj trasę - używana do śledzenia trasy. |
0 |
9 |
zmienna |
Rygorystyczne trasowanie wg nadawcy - używana do ścisłego prowadzenia datagramu. |
2 |
4 |
zmienna |
Intersieciowy datownik - używana do zapisywania czasów wzdłuż ścieżki. |
Pole uzupełnienie (długość pola jest zmienna) jest ewentualnym dopełnieniem pola opcje do wielokrotności 32 bitów.
Protokół IP jest na tyle uniwersalny, że zapewnia transport danych przez różnorodne strukturalnie sieci (np. Token Ring, X.25).
Każdy rodzaj sieci ma określony maksymalny rozmiar pakietu MTU (Maximum Transmission Unit).
W trakcie przekazywania danych, może się okazać, że MTU właściwy dla jednej z sieci, jest zbyt duży dla innej.
Następuje wtedy fragmentacja pakietu (zaczynają mieć znaczenie pola identyfikator, przesunięcie fragmentacji oraz pole flagi w nagłówku datagramu).
Kapsułkowanie
Ramki sieci fizycznych musza być rozpoznawane przez sprzęt, natomiast datagramy są obsługiwane przez oprogramowanie.
Mogą zatem mieć dowolna długość.
W obecnym formacie datagramu pole długości całkowitej może mieć najwyżej 16 bitów, co ogranicza datagram do 65535 bajtów.
W praktyce pojawiają się bardziej znaczące ograniczenia na rozmiar datagramu. Aby datagram mógł przemieścić się od jednej maszyny do drugiej musi być przeniesiony przez bazowa sieć fizyczna. Aby transport ten był efektywny, należałoby zagwarantować, żeby każdy datagram przenoszony był w oddzielnej fizycznej ramce.
Rozwiązanie, w którym jeden datagram przenoszony jest przez jedna ramkę sieciowa jest nazywane kapsułkowaniem (ang. encapsulation).
Datagram zachowuje się wówczas jak każdy inny komunikat przesyłany
z jednej maszyny do drugiej. Sprzęt nie rozpoznaje formatu datagramu ani nie rozumie adresu docelowego IP. Dlatego gdy jedna maszyna przesyła datagram IP do drugiej, cały datagram podróżuje w części ramki sieciowej przeznaczonej na dane.
Fragmentacja
W idealnym przypadku cały datagram mieści się w jednej ramce fizycznej. Nie zawsze jednak jest to możliwe.
Dzieje się tak dlatego, że datagram może przemieszczać się przez różne sieci fizyczne.
Każda z nich ma ustalona górna granicę ilości danych, które mogą być przesłane w jednej ramce.
Np. w sieci Ethernet wielkość ramki jest ograniczona do 1500 bajtów,
w sieci FDDI można przesłać ok. 4470 bajtów w jednej ramce.
Ten parametr sieci nosi nazwę maksymalnej jednostki transmisyjnej danej sieci -MTU (ang. Maximum Transfer Unit).
Niektóre rodzaje sprzętu ograniczają porcje danych do 128 i mniej bajtów. Ograniczenie wielkości datagramów, tak aby pasowały do najmniejszego MTU, byłoby nieefektywne w przypadku przechodzenia przez sieci, które mogą przenosić większe ramki. Jednak zezwolenie, aby datagramy były większe niż minimalne sieciowe MTU sprawia, że datagram może nie zawsze zmieścić się w pojedynczej ramce sieciowej.
Wobec tego zamiast projektować datagramy, które spełniają ograniczenia sieci fizycznych, oprogramowanie TCP/IP dobiera wygodny początkowy rozmiar datagramu i oferuje sposób dzielenia datagramu na mniejsze części, kiedy datagram musi przejść przez sieć, która ma małe MTU.
Mniejsze kawałki, na które jest dzielony datagram nazywane są fragmentami, a proces ten nazywa się fragmentacja.
Gdy pofragmentowane datagramy dotarły do odbiorcy podlegają procesowi odwrotnemu czyli defragmentacji.
Fragmentacja ma zwykle miejsce w ruterze na trasie między nadawca
a odbiorca.
Ruter otrzymuje datagram z sieci o dużym MTU i musi go przesłać przez sieć, której MTU jest mniejsze niż rozmiar datagramu.
Protokół IP nie ogranicza rozmiaru datagramów ani nie gwarantuje, że duże datagramy zostaną dostarczone bez fragmentacji.
Nadawca może wybrać dowolny rozmiar datagramu, jaki uważa za stosowny - fragmentacja i składanie dokonują się automatycznie, nadawca nie musi wykonywać tutaj żadnych specjalnych czynności.
Fragmentowanie datagramu oznacza dzielenie go na wiele części.
Każda z tych części ma format pierwotnego datagramu.
Każdy z fragmentów zawiera nagłówek, w którym jest powielona większość zawartości nagłówka pierwotnego datagramu (nie licząc bitu
w polu ZNACZNIKI, który wskazuje, że jest to fragment), a za którym jest tyle danych, ile może być przeniesione we fragmencie, tak aby długość całkowita nie przekroczyła MTU sieci, przez która musi on przejść.
W sieci od chwili, gdy datagram jest dzielony na fragmenty, fragmenty te podróżują jako oddzielne datagramy, aż do ostatecznego odbiorcy, gdzie musza zostać złożone. Rozwiązanie to ma dwie wady. Ponieważ datagramy nie są składane natychmiast po przedostaniu się przez sieć
o małym MTU, małe fragmenty musza być przenoszone od miejsca fragmentacji aż do końcowego odbiorcy, nawet jeżeli niektóre sieci fizyczne napotykane za miejscem fragmentacji maja duże MTU.
Po drugie, gdy jakiś fragment zostanie zagubiony, datagram nie może zostać odtworzony. Komputer odbierający, gdy otrzymuje fragment początkowy, uruchamia zegar składania. Gdy czas na zegarze przekroczy określona wartość, zanim przybędą wszystkie fragmenty, maszyna odbierająca porzuca otrzymane fragmenty bez przetwarzania datagramu. Stad prawdopodobieństwo utraty datagramu wzrasta, gdy pojawia się fragmentacja, gdyż utrata pojedynczego fragmentu powoduje utratę całego datagramu.
Kontrola Fragmentacji
Trzy pola nagłówka IDENTYFIKACJA, ZNACZNIKI, PRZESUNIĘCIE FRAGMENTU służą kontroli procesów fragmentacji
i składania datagramów.
Pole IDENTYFIKACJA (16-bitowe) zawiera liczbę całkowita jednoznacznie identyfikującą datagram. Identyfikator jest niezbędny, gdyż zapobiega wymieszaniu się fragmentów pochodzących od różnych datagramów - wszystkie kawałki będące częściami tego samego datagramu posiadają ten sam identyfikator.
Pole ZNACZNIKI (3-bitowe) służy do kontroli fragmentacji. Pierwszy
z trzech bitów jest nie używany, nadanie drugiemu wartości 1 oznacza bezwzględny zakaz fragmentacji. Jeśli datagram nie może być przesłany w całości, zostaje odrzucony i sygnalizowany jest błąd. Ostatni z bitów ZNACZNIKÓW umożliwia identyfikację ostatniego kawałka datagramu - ma wartość 0, w pozostałych przypadkach 1.
Pole PRZESUNIĘCIE FRAGMENTU (13-bitowe) zawiera informację w którym miejscu datagramu umiejscowione są informacje przesyłane w tym kawałku. Jest ono mierzone w jednostkach 64-bajtowych. Umożliwia to poprawne scalenie datagramu - nie istnieje nic w rodzaju kolejnego numeru kawałka w datagramie.
Pole CZAS ŻYCIA (TTL ang. Time To Live) określa jak długo, w sekundach lub w „skokach rutera”, datagram może pozostawać w sieci. Wymogiem protokołu TCP/IP jest aby każdy ruter podczas przetwarzania nagłówka datagramu zmniejszał wartość pola CZAS ŻYCIA co najmniej
o 1, nawet jeśli rzeczywiste przetwarzanie trwało krócej.
Gdy wartość pola maleje do zera ruter porzuca datagram i wysyła do nadawcy komunikat o błędzie. Mechanizm ten zapobiega podróżowaniu datagramów w sieci w nieskończoność, np. gdy tablice tras są nieaktualne, a rutery wyznaczają datagramom trasy w kółko.
Koleje Życia Datagramu IP
W systemie z wymiana pakietów trasowanie oznacza proces wyboru ścieżki, po której będą przesyłane pakiety.
Ruter to komputer, który dokonuje wyboru ścieżki (trasy).
Algorytm wyznaczania tras musi uwzględniać sposób przesyłania pakietu przez wiele sieci fizycznych.
Wybór optymalnej trasy pakietu jest złożonym problemem, rozwiązywanym na wiele sposobów.
Idealne oprogramowanie trasujące powinno przy wyznaczaniu tras korzystać z takich informacji, jak
obciążenie sieci
długość datagramu
zawarty w nagłówku datagramu typ obsługi.
Intersieć składa się z wielu sieci fizycznych połączonych przez specjalizowanie komputery nazywane ruterami.
Każdy ruter ma fizyczne połączenie z jedna lub więcej sieciami, natomiast zwykły komputer ma zwykłe połączenie tylko z jedna siecią fizyczna.
Zarówno komputery w sieci, jak i rutery biorą udział wyznaczaniu tras datagramów. Gdy oprogramowanie użytkowe jakiegoś komputera chce nawiązać połączenie, oprogramowanie TCP/IP wysyła jeden lub więcej datagramów. Komputer - nadawca musi wybrać trasę, która pośle datagramy.
Istnieją dwa rodzaje trasowania:
dostarczanie bezpośrednie
dostarczanie pośrednie.
Dostarczanie bezpośrednie - przesyłanie danych od jednej maszyny do drugiej w ramach pojedynczej sieci fizycznej - jest podstawa komunikacji. Dwie maszyny mogą wziąć udział w bezpośrednim przesyłaniu tylko wtedy, kiedy są podłączone do tej samej sieci fizycznej (np. Ethernet).
Dostarczanie pośrednie ma miejsce, gdy adresat nie jest podłączony do tej samej sieci fizycznej, co wymaga przesłania datagramu za pośrednictwem rutera.
Gdy aplikacja ma zamiar wysłać datagram w sieć, wykonuje kilka prostych kroków. Najpierw konstruuje datagram zgodnie z wymogami lokalnej implementacji IP. Zostaje obliczona suma kontrolna dla danych i skonstruowany nagłówek IP. Następnie pierwszy węzeł na drodze wędrówki datagramu określić musi etap następny - inna maszynę w sieci lub ruter, gdy dane musza się z sieci wydostać. Jeżeli dane są szczególnie cenne, w nagłówku IP zostaną ustawione odpowiednie opcje. Na koniec datagram jest wysyłany w sieć.
Każdy ruter otrzymujący datagram wykonuje na nim serię testów.
Gdy warstwa sieciowa zdejmie z niego swój nagłówek, warstwa IP weryfikuje sumę kontrolna datagramu. W razie niezgodności datagram jest odrzucany i do węzła-nadawcy kierowany jest komunikat o błędzie. Następnie pole TTL jest odpowiednio zmniejszone i sprawdzane. Jeśli limit czasu jest przekroczony sygnalizowany jest błąd. Po określeniu następnego węzła (na podstawie adresu docelowego) zostaje zapisana nowa wartość TTL i nowa suma kontrolna.
Jeżeli konieczna jest fragmentacja, jest on dzielony na mniejsze datagramy i każdy z nich opatrywany jest nagłówkiem IP. W końcu datagram przekazywany jest z powrotem do warstwy sieciowej. Gdy datagram dotrze do celu węzeł końcowy dokonuje weryfikacji sumy kontrolnej i jeśli jest poprawna sprawdza, czy istnieją jeszcze inne fragmenty datagramu, czy też dotarł on w jednym kawałku.
W przypadku fragmentacji węzeł otrzymując kolejne fragmenty dokonuje scalania (musi się oczywiście zmieścić w założonym limicie czasu).
W końcu zdejmowany jest z datagramu nagłówek IP, odtworzony jest oryginalny komunikat i przesyłany w stronę wyższych warstw. Gdy wymagana jest odpowiedz, zostaje ona wygenerowana i przesłana droga powrotna.
Protokół ICMP
Protokół ICMP (Internet Control Message Protocol) jest związany
z protokołem IP i jego częścią warstwy Internetu.
Protokół IP jako protokół bezpołączeniowy nie posiada mechanizmów informowania o błędach. Do tego celu przeznaczony jest protokół ICMP.
ICMP umożliwia przesyłanie między komputerami lub ruterami informacji o błędach występujących w funkcjonowaniu sieci np.
brak możliwości dostarczenia datagramu do miejsca przeznaczenia
zmiana wcześniej wyznaczonej trasy przez jeden z pośredniczących ruterów brak wolnej pamięci buforowej dla zapamiętania datagramu.
Komunikaty protokołu ICMP są przesyłane wewnątrz datagramów IP.
Każdy komunikat ma własny format. Jednak wszystkie rozpoczynają się takimi samymi polami: typ, kod oraz suma kontrolna. Dalsze pola zależą od typu komunikatu ICMP.
Przykład formatu komunikatu o kłopotach z parametrami datagramu IP:
Bajty |
|||
1 |
2 |
3 |
4 |
Typ |
Kod |
Suma kontrolna |
|
Wskaźnik |
Pole nie używane |
||
Informacja |
Pole typ określa rodzaj komunikatu,
Pole kod opisuje kod błędu.
W polu suma kontrolna zawarte jest szesnastobitowe uzupełnienie kontrolne szesnastobitowych słów komunikatu ICMP.
Pole wskaźnik określa bajt, w którym wystąpił błąd, natomiast pole informacja zawiera nagłówek oraz pierwsze 64 bity datagramu IP,
w którym wykryto błąd.
Protokół ICMP posługuje się 12 komunikatami, które są wymieniane między routerami i / lub komputerami.
Komunikaty te dotyczą:
przekroczenia czasu życia datagramu. Komunikat jest wysyłany jeśli po wykonaniu odpowiednich obliczeń, wartość pola czas życia datagramu IP osiągnie zero,
wystąpienia niezrozumiałego parametru. Komunikat ten sygnalizuje wystąpienie niedopuszczalnej wartości w pewnym polu nagłówka datagramu IP.
wykrycia nieosiągalnych miejsc przeznaczenia. Jeśli nieosiągalnym adresatem jest komputer w sieci, to komunikat ten jest wysyłany przez rutery pośredniczące w transferze datagramów. Jeżeli nieosiągalnym miejscem przeznaczenia jest port, to komunikaty wysyła docelowy komputer.
chwilowego wstrzymania nadawania, gdy datagramy przybywają do komputera lub pośredniczącego rutera szybciej niż można je przetworzyć i brakuje wolnej pamięci buforowej do ich zapamiętania.
sprawdzenia zasobów sieciowych. W celu sprawdzenia poprawności działania zdalnego systemu wysyła się sygnał echa. System, po otrzymaniu tego komunikatu, musi natychmiast odesłać go do nadawcy. Brak odpowiedzi oznacza, że testowany system nie jest sprawny.
wskazania innej trasy dla datagramów. Komunikat wysyłany do źródłowego rutera wskazuje, że znaleziono krótszą trasę dla datagramu.
określenia opóźnienia związanego z przesyłaniem datagramów przez sieć.
identyfikacji sieci przez dołączony do niej komputer (konfiguracja komputera).
otrzymania przez komputer maski podsieci wykorzystywanej w sieci fizycznej.
Odbiorca końcowym komunikat ICMP nie jest program użytkowy lecz oprogramowanie IP na maszynie nadawcy komunikatu.
Oprócz tego komunikaty ICMP oznajmiające o błędach zawsze zawierają nagłówek i pierwsze 64 bity danych datagramu z którym były problemy.
Aby komunikaty ICMP mogły zostać dostarczone wymagają dwóch poziomów kapsułkowania.
Każdy komunikat ICMP podróżuje przez intersieć w części datagramu IP przeznaczonej na dane, a ten jak wiemy przemieszcza się przez sieć fizyczna w części dla danych ramki.
Trasy datagramów przenoszących komunikaty ICMP są wyznaczane dokładnie tak, jak dla datagramów przenoszących informacje użytkowników - nie maja one żadnych dodatkowych priorytetów czy zabezpieczeń.
W efekcie i same komunikaty o błędach mogą zostać zagubione albo zniszczone. Co więcej w przeciążonej sieci komunikat o błędzie może spowodować dodatkowe przeciążenie.
Zrobiono więc wyjątek w procedurach obsługi błędów: komunikaty
o błędach nie są tworzone w przypadku gdy błąd został spowodowany przez datagram IP niosący komunikat ICMP.
Protokół UDP
Protokół UDP (User Datagram Protocol) przedstawiono w specyfikacji RFC 768.
Jest to protokół bezpołączeniowy, nie posiadający mechanizmów sprawdzających poprawność dostarczenia danych tzn. nie ustanawia 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.
Protokol UDP daje aplikacjom bezpośredni dostęp do usług rozsyłania datagramów, przy wykorzystaniu minimalnego nakładu środków.
Struktura pakietu protokołu UDP:
Bajty |
|||
1 |
2 |
3 |
4 |
Port źródłowy |
Port docelowy |
||
Długość |
Suma kontrolna |
||
Dane |
Pole port źródłowy (16 bitów) określa numer portu nadawczego procesu aplikacji. Jeśli pole to nie jest wykorzystane, to zawiera same zera.
Pole port docelowy (16 bitów) zawiera numer procesu aplikacji na komputerze docelowym.
Pole długość (16 bitów) zawiera całkowitą długość pakietu
(nagłówek i dane) w bajtach.
Pole suma kontrolna .
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.
Kapsułkowanie UDP
UDP jest przykładem protokołu transportowego.
W modelu OSI protokół UDP znajduje się powyżej warstwy protokołu Internetu czyli protokolu IP.
Umieszczenie datagramu UDP powyżej warstwy IP oznacza, że przed wysłaniem kompletny komunikat UDP wraz z nagłówkiem UDP i danymi jest w znany nam już sposób kapsułkowany w datagram IP.
U odbiorcy pakiet dociera do najniższej warstwy oprogramowania sieciowego i wędruje ku coraz wyższym warstwom. Każda warstwa usuwa jeden nagłówek przed przekazaniem komunikatu dalej, w efekcie przed przekazaniem komunikatu przez ostatnia warstwę oczekujacemu procesowi zostaja usunięte wszystkie nagłówki.
Datagram UDP otrzymany od IP na komputerze docelowym jest identyczny z tym który UDP przekazało do IP na komputerze zródłowym, co więcej dane przekazywane przez UDP procesowi użytkownika na komputerze docelowym sa dokładnie takie, jakie użytkownik przekazał do UDP na komputerze zródłowym.
Warstwa IP jest odpowiedzialna wyłacznie za przesłanie danych między para komputerów, zas protokół UDP okresla porty nadawcy i odbiorcy w na danym komputerze.
Multipleksowanie i Demultipleksowanie
Protokoły komunikacyjne wykorzystują metody multipleksowania
i demultipleksowania na poziomach wszystkich warstw.
Przy wysyłaniu komputer nadawcy dołącza do danych dodatkowe bity, które wskazują na typ komunikatu, program który go nadał oraz używane protokoły. Wszystkie komunikaty są umieszczane w przeznaczonych do przesyłania ramkach sieciowych i łączone w strumień pakietów.
U odbiorcy te informacje są używane do sterowania przetwarzaniem.
Interfejs sieciowy demultipleksuje ramkę.
Aby umożliwić demultipleksowanie ramek, oprogramowanie nadawcy musi przed transmisja ustawiać pole typu ramki.
Każdy moduł oprogramowania, który wysyła ramki, używa pola typu do opisania zawartości ramki.
Gdy interfejs sieciowy zdemultipleksuje ramki i prześle te z nich, które zawierają datagramy IP do modułu IP, oprogramowanie IP wydobędzie
z nich datagramy i dalej je zdemultipleksuje zgodnie z protokołem transportowym.
Aby zdecydować w jaki sposób obsłużyć datagram, oprogramowanie
w warstwie Internetu sprawdza nagłówek datagramu i wybiera na podstawie typu datagramu odpowiednie procedury.
Demultipleksowanie w warstwie IP.
Multipleksowanie, Demultipleksowanie - porty UDP
Oprogramowanie UDP musi przyjmować datagramy UDP pochodzące od wielu programów użytkowych i przekazywać je warstwie IP w celu przesłania, a także odbierać datagramy UDP nadchodzace od warstwy IP
i przekazywać odpowiednim programom użytkowym.
Wszelkie multipleksowanie i demultipleksowanie między oprogramowaniem UDP i programami użytkowymi jest realizowane przez mechanizm portów.
Każdy program użytkowy musi uzyskać od systemu operacyjnego port protokołu i odpowiadający mu numer portu, zanim będzie mógł wysłać datagram UDP.
Po przydzieleniu portu każdy datagram, który jest wysyłany przez program użytkowany przez ten port, będzie miał odpowiedni numer portu w polu PORT NADAWCY UDP.
Przy przetwarzaniu danych wejściowych UDP przyjmuje datagramy nadchodzące od oprogramowania IP i demultipleksuje je w zależności od portu UDP odbiorcy.
W większości implementacji, gdy program użytkowy żąda od systemu przydzielenia określonego portu, system tworzy wewnętrzna kolejkę nadchodzących komunikatów.
Protokół UDP, otrzymujac datagram, sprawdza czy numer portu odbiorcy odpowiada jednemu z obecnie używanych portów. Jeśli nie, wysyła komunikat ICMP „port niedostępny” i porzuca datagram.
Jeśli któryś z portów pasuje, to UDP umieszcza nowy datagram w kolejce portu, skąd program użytkowy może go pobrać.
Istnieją dwa mechanizmy przydzielania numerów portów.
oprogramowanie używa ustalonych numerów portów
(od 1 do 2^16= 65536)
program przydziela sobie dynamicznie numer portu
(np. przez losowanie od 1025 do 65536).
Protokół TCP
Protokół TCP (Transmission Control Protocol) jest protokołem połączeniowym umożliwiającym wykrywanie błędów na obu końcach połączenia.
Jest opisany w specyfikacji RFC 793.
Połączenie TCP charakteryzuje się możliwością sterowania przepływem, potwierdzania odbioru, zachowania kolejności danych, kontroli błędów
i przeprowadzania retransmisji.
Pomiędzy dwiema aplikacjami korzystającymi z TCP wymieniany jest strumień bajtów.
TCP nie umieszcza automatycznie żadnych znaczników rekordów.
Takie podejście jest nazywane usługą strumienia bajtów (ang. byte stream service).
Jeśli na jednym końcu aplikacja wyśle 10 bajtów, potem 20, a następnie 50, to aplikacja pracująca na drugim końcu nie jest w stanie powiedzieć, jakie były wielkości poszczególnych fragmentów. Drugi koniec połączenia może otrzymać 80 bajtów (w zależności od swoich potrzeb) na przykład
w czterech wczytanych po kolei sekwencjach po 20 bajtów.
Jeden koniec połączenia wprowadza strumień danych w łącze TCP i ten sam strumień pojawia się na drugim jego końcu.
TCP w ogóle nie interpretuje zawartości przesyłanych bajtów.
Nie ma pojęcia o tym, że wymieniane bajty danych są danymi binarnymi, znakami ASCII lub innymi.
Interpretacja tego strumienia bajtów należy do aplikacji uruchomianych na obu końcach połączenia.
Niezawodność TCP zapewniona jest poprzez następujące działania:
Dane przekazywane przez aplikację są dzielone na fragmenty, które według TCP mają najlepszy do przesłania rozmiar.
Protokół TCP w celu zapewnienia niezawodności wykorzystuje mechanizm potwierdzenia z retransmisją PAR
(Positive Acknowledgment with Re-transmission).
Kiedy TCP wysyła segment, to jednocześnie uruchamia zegar, który rozpoczyna odliczanie czasu oczekiwanie na potwierdzenie odebrania segmentu przez drugą stronę. Jeśli potwierdzenie nie nadejdzie w określonym czasie, segment wysyłany jest powtórnie.
Kiedy TCP odbiera dane nadesłane przez drugą stronę połączenia, wysyła wtedy potwierdzenie odbioru.
Dane są przesyłane dopóty, dopóki system wysyłający nie otrzyma potwierdzenia, że dane przeszły bezbłędnie.
TCP posługuje się sumami kontrolnymi nagłówka datagramu i danych.
Jest to suma typu end-to-end, której zadaniem jest wykrycie każdej modyfikacji danych w czasie ich przesyłania. Jeżeli segment zostanie nadesłany z niepoprawną sumą kontrolną, TCP odrzuca go i nie potwierdza odbioru (spodziewa się, że wysyłający komputer prześle go po raz kolejny, po odczekaniu określonego czasu).
Ponieważ segmenty TCP są przesyłane jako datagramy IP, które mogą być nadsyłane w dowolnej kolejności, to segmenty TCP również mogą nadchodzić w innej kolejności niż zostały wysłane. Strona odbierająca segmenty TCP porządkuje je, jeśl zachodzi taka konieczność i przekazuje do aplikacji.
Ponieważ datagramy IP mogą być powielane, odbiorca TCP musi umieć odrzucać zdublowane dane.
TCP zapewnia kontrolę przepływu. Każdy z końców połączenia TCP ma przestrzeń buforową o skończonej wielkości. Strona odbierająca TCP pozwala stronie nadającej na wysłanie tylko takiej ilości danych, która może być umieszczona w buforze odbiorcy. Taki mechanizm zapobiega przeładowaniu bufora na komputerze dobierającym datagramy.
Blok danych wymieniany między współpracującymi komputerami nosi nazwę segmentu (nagłówek + dane).
Segmentów używa się do:
ustanawiania połączenia,
przesyłania danych,
potwierdzania,
wysyłania propozycji okien
zamykania połączeń.
Każdy segment podzielony jest na dwie części:
nagłówek (pola 1-6)
dane (pole 7), które się za nim znajdują.
Nagłówek, nazywany nagłówkiem TCP, zawiera informacje identyfikacyjne oraz kontrolne.
Znaczenie poszczególnych pól segmentu TCP
|
Bity |
||||||||||
słowa |
0 |
4 |
8 |
12 |
16 |
20 |
24 |
28-31 |
|||
1 |
Port źródłowy |
Port przeznaczenia |
|||||||||
2 |
Numer kolejny |
||||||||||
3 |
Numer potwierdzenia |
||||||||||
4 |
Przesunięcie/Dlugosc |
Rezerwa |
Flagi |
Okno |
|||||||
5 |
Suma kontrolna |
Priorytet |
|||||||||
6 |
Opcje |
Uzupełnienie |
|||||||||
7 |
DANE |
Pola port źródłowy (16 bitów) i port docelowy (16 bitów) zawierają numery portów procesów aplikacyjnych korzystających z usług TCP. Kombinacja tych numerów z adresami sieciowymi określa parę gniazd tworzących połączenie protokołu TCP.
Komputer pragnący zrealizować jakąś usługę na innej maszynie może albo od razu próbować komunikować się z określonym portem, albo poprosić
o informację, której udziela program o nazwie portmap dostępny poprzez port 111.
Portmap informuje komputery chcące nawiązać połączenie pod jakimi numerami dostępne są poszczególne usługi.
Pole Numer kolejny - (32 bity) numer kolejny pierwszego bajtu przesyłanych danych w segmencie.
Podczas ustanawiania połączenia jeśli bit syn w polu flagi jest ustawiony na 1, to w polu Numer kolejny zawarty jest inicjujący numer sekwencyjny ins od którego rozpoczyna się numerację bajtów w połączeniu, pierwszy wysłany bajt ma numer ins + 1.
Pole Numer potwierdzenia - (32 bity) jeśli jest ustawiona flaga ACK to pole to zawiera numer sekwencyjny następnego oczekiwanego bajtu po stronie odbiory. Jednocześnie jest to potwierdzenie poprawnego odbioru bajtów o numerach sekwencyjnych mniejszych od zawartego w tym polu. Potwierdzenia mówią nadawcy ile bajtów danych zostało już poprawnie odebranych.
Gdy połączenie już zostanie ustalone to wartość ta jest zawsze wysyłana.
Pole Przesunięcie (4 bity) określa liczbę 32 - bitowych słów w nagłówku segmentu TCP. Wskazuje początek danych.
Pole to ma tak określone znaczenie tylko wtedy, gdy bit ack równy jest 1.
Pole Rezerwa (6 bitów) - jest przeznaczone dla przyszłych zastosowań. Zawiera same zera.
Pole Flagi (6 bitów) - składa się z sześciu bitów sterujących, które ustawione na 2 mają następujące znaczenie
UGR wskazuje na ważność pola wskaźnik pilności,
ACK wskazuje na ważność pola numer potwierdzania,
PSH wskazuje na działanie funkcji wymuszającej wysyłanie
segmentu, (funkcja przepychania)
RST wyzerowanie połączenia (zresetuj połączenie)
SYN wskazuje, że w polu numer sekwencyjny umieszczony jest
inicjujący numer sekwencyjny INS. Jest on przeznaczony
do synchronizacji numerów sekwencyjnych w fazie ustanowienia połączenia (zsynchronizuj kolejne numery).
FIN wskazuje, że nadawca nie ma nic więcej do nadania
- sygnał końca danych.
Okno (16 bitów) - określa liczbę bajtów jaką może jeszcze zaakceptować odbiorczy moduł TCP. 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.
Pole suma kontrolna jest 16 - bitowym jedynkowym uzupełnieniem jedynkowo uzupełnionej sumy wszystkich 16 - bitowych słów w segmencie. Ta suma obejmuje zarówno nagłówek jak i dane segmentu.
Pole Priorytet / wskaźnik pilności (16 bitów) jest interpretowane tylko wtedy, gdy bit UGR jest równy 1. Pole to zawiera numer sekwencyjny bajtu następującego po pilnych danych.
Pole opcje ma długość zmienną będącą wielokrotnością 8 bitów. Zawiera ono numery opcji - każdy numer zapisany w jednym bajcie.
Dla protokołu TCP zdefiniowano trzy opcje:
0 - koniec listy opcji,
1 - brak działania,
2 - maksymalna długość segmentu.
Pole Uzupełnienie zawiera uzupełnienia nagłówka TCP do wielokrotności 32 bitów.
Połączenie jest nawiązywane poprzez przesłania komunikatów kontrolnych, tzw. handshake. O tym, czy dany segment jest kontrolny świadczy ustawienie bitu SYN=1 w polu flagi.
TCP stosuje trójpoziomowe potwierdzenie przy nawiazywaniu polaczenia:
Host A nawiązujący połączenie wysyła do hosta B segment
z ustawionym bitem SYN=1. W segmencie tym podany jest początkowy numer sekwencji danych, które zostaną przesłane przez host A.
Host B, jeśli zgadza się na ustanowienie połączenia, odpowiada segmentem z ustawionymi bitami ACK=1 (potwierdzenia) i SYN=1 (synchronizacja), potwierdzając odebranie poprzedniego segmentu. W polu Numer Kolejny podaje wartość INS tzn. początkowa wartość z jaka będzie numerował przesłane dane.
Host A wysyła segment potwierdzający odbiór segmentu od B
(z ustawionym bitem ACK=1) 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.
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.
Segmenty te mogą być przesyłane tym połączeniem w obu kierunkach, ponieważ TCP umożliwia transfer danych między dwoma modułami
w trybie dupleksowym.
TCP realizuje koncepcję funkcji wymuszającej
Operacja ta jest realizowana wtedy, gdy aplikacja chce mieć pewność, że wszystkie dane przekazane przez nią do modułu TCP zostały wysłane.
W odpowiedzi na żądanie aplikacji, moduł TCP wysyła wszystkie dane znajdujące się w buforach w postaci jednego lub kilku segmentów do odbiorczego modułu TCP.
Działanie funkcji wymuszającej sygnalizowane jest bitem PSH = 1.
Po przesłaniu danych następuje rozłączenie połączenia wirtualnego. Jest ono realizowane trójetapowo z użyciem bitu FIN = 1.
Moduł TCP w celu przesyłania segmentu przez sieć przekazuje go do warstwy Internetu. Tam jest on umieszczany w wewnątrz datagramu IP, segment jest uzupełniany o nagłówek datagramu IP.
Z kolei protokół IP przekazuje ten datagram do warstwy dostępu do sieci, gdzie po obudowaniu o kolejny nagłówek tworzona jest ramka przesyłana przez sieć.
Idea przesuwającego się okna (ang. Sliding window)
Jest to rozwiązanie umożliwiające efektywniejsze przesyłanie pakietów.
W celu uzyskania niezawodności nadawca wysyła pakiet, a przed wysłaniem następnego oczekuje na potwierdzenie odebrania. Dane pomiędzy komputerami płyną w danym momencie tylko w jednym kierunku i to nawet wtedy, kiedy sieć umożliwia jednoczesna komunikację w obu kierunkach. Ponadto sieć nie będzie używana, kiedy komputery będą zwlekać z odpowiedziami np. podczas wyliczania sum kontrolnych. Takie rozwiązanie powoduje marnowanie przepustowości sieci.
Technika przesuwającego się okna umożliwia wysyłanie wielu pakietów przed otrzymaniem potwierdzenia.
W rozwiązaniu tym protokół zaleca umieszczenie na ciągu pakietów ustalonego rozmiaru okna i przesłanie wszystkich pakietów, które znajdują się w jego obrębie.
Pakiet jest niepotwierdzony, jeżeli został wysłany, a nie nadeszło dla niego potwierdzenie. Liczba pakietów niepotwierdzonych w danej chwili jest wyznaczona przez rozmiar okna.
Dla protokołu z przesuwającym się oknem , którego rozmiar jest np. równy 8, nadawca ma możliwość wysłania przed otrzymaniem potwierdzenia do 8 pakietów. Gdy nadawca odbierze potwierdzenie dla pierwszego pakietu, okno przesuwa się i zostaje wysłany następny pakiet.
Okno przesuwa się dalej gdy przychodza kolejne potwierdzenia.
Pakiet dziewiąty może zostać wysłany gdy przyszło potwierdzenie dotyczące pierwszego pakietu.
Retransmitowane są tylko te pakiety, dla których nie było potwierdzenia. Protokół musi pamiętać, które pakiety zostały potwierdzone i utrzymuje oddzielny zegar dla każdego nie potwierdzonego pakietu.
Gdy pakiet zostanie zgubiony lub zostaje przekroczony czas nadawca wysyła ten pakiet jeszcze raz.
Poprawa uzyskiwana przy protokołach z przesuwającymi się oknami zależy od rozmiaru okna i szybkości, z jaka sieć akceptuje pakiety.
Gdy rozmiar okna wynosi 1, protokół z przesuwającym się oknem jest tym samym, co nasz zwykły protokół z potwierdzaniem.
Zwiększając rozmiar okna, możemy w ogóle wyeliminować momenty nieaktywności sieci. Oznacza to, że w sytuacji stabilnej nadawca może przesyłać pakiety tak szybko, jak szybko sieć może je przesyłać.
Przykład przesyłania trzech pakietów przy użyciu protokołu
z przesuwającym się oknem.
Porty i połaczenia TCP
Protokół TCP umożliwia wielu działającym na jednej maszynie programom użytkowym jednoczesne komunikowanie się oraz rozdziela między programy użytkowe przybywające pakiety TCP.
Podobnie jak UDP, TCP używa numerów portów do identyfikacji
w ramach maszyny końcowego odbiorcy.
Każdy z portów ma przypisana liczbę całkowita (od 1 do 65536), która jest używana do jego identyfikacji.
Porty TCP są bardziej złożone, gdyż dany numer nie odpowiada bezpośrednio pojedynczemu obiektowi.
TCP działa wykorzystując połączenia, w których obiektami są obwody wirtualne a nie poszczególne porty. Tak więc podstawowym pojęciem TCP jest pojęcie połączenia, a nie portu.
Połączenia są identyfikowane przez parę punktów końcowych.
TCP definiuje punkt końcowy jako parę liczb całkowitych (węzeł, port), gdzie węzeł oznacza adres IP węzła, a port jest portem TCP w tym węźle.
Punkt końcowy (128.10.2.3, 25)
oznacza port 25 maszyny o adresie IP 128.10.2.3.
Może istnieć połączenie pomiędzy:
(18.26.0.36, 1069) oraz (128.10.2.3, 25),
w tym samym czasie może też istnieć połączenie pomiędzy
(128.9.0.32, 1184) oraz (128.10.2.3, 25).
TCP - Podsumowanie
Interfejs między programami użytkowymi a usługami TCP/IP można scharakteryzować za pomocą następujących własności:
Przesyłanie strumieniami.
Usługa dostarczania strumieniami na maszynie docelowej to przekazanie odbiorcy dokładnie tego samego ciągu oktetów (bajtów), który na swojej maszynie przekazał nadawca.
Łączenie w obwód wirtualny.
Przed rozpoczęciem transmisji, programy użytkowe nadawcy i odbiorcy musza się porozumieć z własnymi systemami operacyjnymi, informując je o zamiarze przesyłania danych za pomocą strumienia. Aplikacje w obu systemach komunikują się, wysyłając przez sieć odpowiednie komunikaty sprawdzające czy transfer został autoryzowany oraz czy obydwie strony są gotowe do transmisji. W trakcie transmisji w dalszym ciągu wymieniane są informacje, które potwierdzają poprawność otrzymywanych danych. Jakiekolwiek zakłócenie w transmisji zostaje wykryte przez obie maszyny
i powoduje poinformowanie odpowiednich programów użytkowych. Tego typu połączenie określa się mianem obwodu wirtualnego, bo chociaż programy użytkowe widza to połączenie tak, jakby istniał tutaj specjalny obwód elektroniczny, to niezawodność jest złudzeniem wywołanym przez usługę dostarczania strumieniami.
Przesyłanie z użyciem buforów.
Programy użytkowe przesyłają strumienie danych obwodami wirtualnymi dzięki przekazywaniu kolejnych bajtów danych do oprogramowania protokołów. Program użytkowy przesyła dane w porcjach, które uważa za wygodne, a które mogą być nawet wielkości jednego bajta.
U odbiorcy oprogramowanie protokołów dostarcza bajty ze strumienia danych w takim samym porządku, w jakim zostały wysłane, udostępniając je odbierającemu programowi użytkowemu, po otrzymaniu i sprawdzeniu. Oprogramowanie protokołów ma swobodę przy dzieleniu strumienia na pakiety i może to robić niezależnie od tego, jak strumień jest dzielony przez program użytkowy. W celu zwiększenia efektywności przesyłania i zminimalizowania ruchu w sieci przyjmuje się zwykle strategię czekania, aż uzbiera się tyle danych ze strumienia, żeby wypełnić datagram o rozsądnej wielkości zanim się go wyśle do intersieci. Dzięki temu, nawet jeśli program użytkowy generuje strumień po jednym bajcie naraz, przesyłanie danych przez intersieć może być dosyć efektywne. Podobnie jeśli program użytkowy wygeneruje bardzo duży blok danych, to oprogramowanie protokołów może podzielić go do transmisji na mniejsze porcje.
Dla tych programów użytkowych, w których dane powinny zostać dostarczone, nawet jeżeli bufor nie został wypełniony, udostępnia się mechanizm `wypychania' (ang. push), którego programy użytkowe używają do wymuszania przesyłania. Po stronie nadawcy operacja wypchnięcia wymusza na oprogramowaniu protokołów przesłanie wszystkich tych danych, które zostały dotąd wygenerowane, bez czekania na wypełnienie bufora. Po stronie odbiorcy powoduje, że TCP udostępnia dane programowi użytkownika beż opóźnienia.
Brak strukturalizacji strumienia.
Usługa przesyłania za pomocą strumieni TCP nie uwzględnia strukturalizacji strumienia danych. Programy użytkowe wykorzystujące usługi przesyłania za pomocą strumieni musza interpretować zawartość strumienia i jeszcze przed rozpoczęciem połączenia zgadzać się na format strumienia.
Połączenie w pełni dwukierunkowe.
Połączenia zapewniane przez usługę przesyłania za pomocą strumieni TCP są połączeniami w pełni dwukierunkowymi (ang. full duplex).
Z punktu widzenia programu użytkowego połączenie w pełni dwukierunkowe składa się z dwu niezależnych strumieni danych płynących w przeciwnych kierunkach bez żadnej jawnej interakcji między nimi. Usługa przesyłania za pomocą strumieni pozwala procesowi użytkownika na zatrzymanie przepływu w jednym z kierunków bez zakłócania przepływu w drugim, co czyni połączenie połączeniem połowicznie dwukierunkowym (ang. half duplex).
Przy połączeniu w pełni dwukierunkowym oprogramowanie protokołów obsługujących może wysyłać nadawcy informacje kontrolne związane
z jednym strumieniem w datagramach niosących dane w kierunku przeciwnym. Powoduje to zmniejszenie ruchu w sieci.
1957 r. W strukturze Departamentu Obrony Stanów Zjednoczonych powstaje ARPA (Advanced Research Projects Agency). Glównym jej zadaniem jest opracowanie nowych technologii informacyjnych oraz adaptacja ich dla celów militarnych.
1962 r. Paul Baran z Rand Corporation tworzy siec oparta na wymianie pakietów - informacja dzielona jest na mniejsze jednostki i partiami przesyłana między nadawcą i odbiorcą. Tzw. packet switching pozwala na wymianę informacji między różnymi maszynami przy użyciu tego samego kabla, każdy z pakietów zawiera m.in. adres docelowy, zapobiegając ewentualnemu zagubieniu.
1969 Larry Roberts rozwinął w ARPA pomysł znany z Rand Corp., tworzy pierwszy węzeł sieci z wymianą pakietów na uniwersytecie w Los Angeles, do którego dołączają uniwersytety w Santa Barbara i Utah oraz Instytut Stanford. Sieć przyjmuje nazwę ARPANET i jest oparta o IMP (Information Message Processors) - minikomputery Honeywell 516 z 12 KB pamięci RAM
(marzec 1990 koniec ARPANETu).
1971 Początki poczty elektronicznej. Ray Tomlinson wysyła pierwszą wiadomość elektroniczną. Przewiduje się, że po 2000 roku liczba wysyłanych wiadomości e-mail wyniesie do 6 trylionów rocznie.
1972 Powstaje Telnet, aplikacja pozwalająca na zdalną pracę na odległych komputerach (łączenie się z nimi i zdalne uruchamianie programów).
1973 Stworzone zostają połączenia międzynarodowe do Wielkiej Brytanii i Norwegii.
W 1974 Ray Tomlinson tworzy program do przesyłania elektronicznych wiadomości po sieci - e-mail.
1974 Po raz pierwszy pojawia się słowo Internet, w opracowaniu badawczym dotyczącym protokołu TCP, napisanym przez Vintona Cerfa i Boba Kahna `A Protocol for Packet Intercommunication'.
W uznaniu za tą i inne zasługi Vinton Cerf jest znany jako "ojciec Internetu".
1977 TheoryNet łączy 100 naukowców przy pomocy poczty elektronicznej: powstaje lista dyskusyjna (mailing list). Opracowane zostają protokoły TCP i IP.
1978 W Chicago powstaje RPCM, pierwszy BBS (bulletin-board system). Stopniowo BBS oferuje pogawędki, gry, dyskusje, biblioteki programów i pocztę elektroniczną.
1979 Powstaje Usenet, tekstowe grupy dyskusyjne - stworzony przez studentów Toma Truscotta, Jima Ellisa i Steve Bellovina. Dziś Usenet to ponad 50 tysięcy grup i miliony użytkowników, czytających i biorących udział w dyskusjach.
1981 powstaje sieć CSNET (Computer Science NETwork). Brak połączenia z ARPAnetem.
1982 ARPA wprowadza jako standard dla swej sieci protokół TCP/IP.
1983 stworzona zostaje brama (gateway) pomiędzy ARPAnet a CSNET; fakt ten uważa się za początek istnienia Internetu, jaki dzisiaj znamy.
1985 Zarejestrowana zostaje pierwsza domena komercyjna - symbolics.com dla firmy tworzącej programy i sprzęt dla języka programowania Lisp. Powstaje America Online, słynna usługa on-line.
1988 do Internetu jest podłączonych 60 tys.komputerów (hostow).
1990 ARPAnet kończy swoją działalność.
Co to jest domena kolizyjna?
Stacje robocze monitorują aktywność sieci ("nasłuchują") w celu ustalenia, czy mogą transmitować dane czy nie. Jeśli w danej chwili żaden z komputerów nie przesyła informacji, wybrana stacja może rozpocząć nadawanie, nikomu nie przeszkadzając. Stacje należą do jednej domeny kolizyjnej gdy próbując przesyłać dane jednocześnie, dochodzi do kolizji tzn. chwilowego zatrzymania transmisji. Po określonym czasie transmisja jest wznawiana.
Bridge (most) jest urządzeniem najczęściej o dwóch portach mającym za zadanie łączenie ze sobą dwóch segmentów sieci. Działa w warstwie fizycznej i warstwie łącza danych modelu OSI.
Most operuje tylko na adresach sprzętowych (MAC), decydując do którego segmentu sieci należy przesłać nadchodzący pakiet. Nie jest jednak w stanie zatrzymywać pakietów uszkodzonych ani zapobiegać zatorom w przypadku transmisji broadcastowej z kilku stacji równocześnie.
Hub (koncentrator) - umożliwia podłączenie wielu urządzeń sieciowych w jeden segment. Jego zadaniem jest wzmocnienie i odnowienie sygnału w celu zwiększenia rozległości sieci. Nie ingeruje w zawartość logiczną ramki.
Wcześniej stosowanych sieciach z kablami koncentrycznymi zazwyczaj nie stosowano hubów. Huby można ze sobą łączyć tworząc kaskady. Stacje robocze i inne urządzenia sieciowe połączone jednym lub wieloma hubami tworzą segment (domenę kolizyjna). Do bezkolizyjnego łączenia wielu domen kolizyjnych używa się urządzeń typu switch lub router.
Huby można łączyć ze sobą w kaskady inaczej zwane stosami (stack).
Aby proces ten ułatwić, większość hubów posiada specjalny przycisk ,,odwracający pary'' w jednym
z gniazd (wtedy huby można połączyć zwyczajnym kablem). Osobna klasa są huby stackowalne. Do ich łączenia służy specjalny przewód. Tak powstałe stosy mogą być zarządzane jak duży pojedynczy hub.
Switch (Przełącznik) nazywany również hubem przełączającym. Zwykle posiadają kilkanaście portów, które mogą być wykorzystywane do podłączenia stacji roboczych, innych switchy lub hubów. Pracują
w warstwie Łącza Danych modelu OSI. Switch podłączony do sieci nasłuchuje na swoich portach adresów MAC podłączonych tam komputerów. Tworzy sobie tablicę przyporządkowującą do danego adresu, numer portu, do którego podłączony jest dany komputer.
W przypadku pojawienia się transmisji do danego komputera, cały ruch kierowany jest do odpowiedniego portu i nie przedostaje się na pozostałe porty przełącznika. Dzięki temu, przełączniki dzielą sieć lokalną na segmenty.
Gateway (Bramka) wymiennie stosowane jest określenie ruter (router).
Router (ruter) jest urządzeniem sprzęgającym sieci, funkcjonującym w warstwach fizycznej, łącza danych
i sieciowej modelu ISO/OSI. Ruter jest zaawansowanym urządzeniem do łączenia ze sobą poszczególnych segmentów sieci i zwiększania jej rozmiarów.
Jest urządzeniem konfigurowalnym, pozwala na sterowanie przepustowością sieci oraz na pełną izolację segmentów sieci. W sieciach rozległych dane przekazywane są pomiędzy konkretnymi węzłami, po drodze przechodzą przez wiele węzłów pośrednich i mogą podróżować różnymi trasami. Router jest jednym
z takich węzłów, ma za zadanie przesyłania danych jak najlepszą i najszybszą drogą.
Ruter pracuje w warstwie sieciowej modelu OSI co oznacza, że potrafi odczytywać adresy z poszczególnych pakietów tak, aby znać ich miejsce przeznaczenia. Procedura dostarczania pakietów bliżej ich miejsca przeznaczenia nosi nazwę przekierowywania (rutowania) pakietów. Do kierowania danych używana jest tzw. tabela (lub tablica) routingu, która zawiera informacje o sąsiadujących ruterach, sieciach lokalnych oraz ich stanie. Na podstawie tych danych wyszukiwana jest optymalna droga dla danego pakietu. Tablica routingu może być statyczna - aktualizowana ręcznie przez administratora sieci, lub dynamiczna - aktualizowana automatycznie przez oprogramowanie sieciowe.
Rutery mogą być także wykorzystywane jako „zapora ogniowa” -firewall, zabezpieczając sieć przed nieautoryzowanym dostępem.
Rutery można wykorzystać jako urządzenie tłumaczące adresy sieciowe (Network Address Translation - NAT), którego funkcje zostały częściowo zaimplementowane np. w systemie operacyjnym Linux jako IP-masquerading (maskarada, maskowanie adresów IP). Działanie NAT polega na umożliwieniu przedostania się pakietów z sieci lokalnej o adresach z zakresu nierutowalnego (lub innych) do Internetu. Każdy z pakietów z sieci lokalnej ma zamieniany adres źródłowy na adres rutera wykonującego funkcję NAT. W ten sposób komputery w sieci lokalnej są niewidoczne z Internetu. Można powiedzieć, że cała sieć jest reprezentowana przez ruter.