VIII. PRIJENOSNI SLOJ INTERNETA
- Internet ima dva osnovna protokola u prijenosnom sloju:
- TCP (Transmission Control Protocol) -
spojni protokol
- UDP (User Datagram Protocol) - bespojni
protokol; u osnovi je IP sa dodanim kratkim zaglavljem (kraćim od
zaglavlja TCP protokola)
- dizajniran je tako da osigura pouzdani tok byteova s
jednog do drugog kraja po nepouzdanim mrežama koje se mogu razlikovati po
topologiji, propusnosti, kašnjenju, veličini paketa,...
- svako računalo koje podržava TCP ima TCP prijenosni
entitet (dio softvera) kao proceduru, korisnički proces ili kao dio
jezgre -
upravlja TCP tokovima (streams) i sučeljima prema IP sloju
- TCP entitet prihvaća od lokalnih procesa tok podataka
korisnika, razbija ga u dijelove koji ne prelaze 64KB i šalje svaki dio kao
posebni IP datagram
- kada IP datagrami sa TCP podacima stignu na drugi kraj,
predaju se TCP entitetu koji obnavlja originalni tok
byteova
- TCP mora osigurati pouzdanost koju ne omogućuje IP
3.1 TCP model usluga (TCP Service Model)
- TCP usluga se osigurava tako da i pošiljaoc i primaoc
kreiraju krajnje točke (end points) tj. spojne točke ili
priključke (socket),
- svaki socket ima svoj broj (adresu) koji
čine IP adresa hosta i port (16-bitni broj koji je lokalan
za taj host; to je TCP ime za TSAP, a može se smatrati identifikacijskom
oznakom usluge na hostu)
- da bi se osigurala TCP usluga, mora se uspostaviti veza
između socketa na hostu koji šalje i socketa na hostu koji
prima podatke
- socket se može koristiti za više istovremenih
veza koje se označavaju pomoću oznaka socketa na oba kraja: (socket1,
socket2)
- brojevi portova ispod 1024 (well-known ports)
rezervirani su za standardne usluge, a svaki host može za sebe odlučiti
kako će dodijeliti ostale svoje portove

Slika: Popis nekih portova (D.Sušanj,
D.Petric, Velika knjiga o World Wide Webu, Znak, Zagreb, 1996.,
str.19)
-
Internet daemon (inetd)
pod UNIXom prati više portova i čeka na dolazeće veze te ovisno o vrsti
procesa poziva odgovarajući daemon (= proces koji se izvodi u pozadini)
-
neefikasno da su svi aktivni cijelo
vrijeme i da prate portove koji su im dodijeljeni
-
inetd zna koje port
koristi koji proces na osnovu konfiguracijske datoteke
-
sistem administrator može postaviti i
neke od ostalih daemon procesa da prate neke portove (na pr port 80)
- sve TCP veze su full-duplex i point-to-point,
TCP ne podržava multicasting ili broadcasting
- TCP veza je tok byteova, a ne tok poruka
- TCP softver ne zna što znače
byteovi koje
prenosi i ne čuva granice poruka - šalje ih kao segmente koji se sastoje
od grupe byteova:

Slika: Slanje
segmenata (Tanenbaum, 1996)
- četiri 512-byte-na komada mogu se dostaviti kao 4 dijela od
512, 2 od 1024 ili jedan 2048-byteni dio -> bitno je sve podatke
dostaviti aplikaciji
- kad aplikacija proslijedi podatke TCP-u (tj. TCP
entitetu), TCP ih može poslati odmah ili spremiti u buffer kako bi
prikupio veću količinu za slanje odjednom
- ako aplikacija zahtjeva da se podaci šalju odmah (bez
spremanja), koristi posebnu PUSH zastavicu
- URGENT zastavica se šalje kad TCP treba prestati
spremanje podataka i odmah poslati sve u bufferu (potrebno npr. kad
korisnik udaljene veze pritisne CTRL-C za prekid izvršavanja neke započete
naredbe)
3.2 TCP protokol
- šaljući i primajući TCP entiteti razmjenjuju podatke u
obliku segmenata
- segment se sastoji od 20-bytenog zaglavlja (uz
opcionalni dio) za kojim slijedi 0 ili više
byteova
podataka, a nastaje skupljanjem podataka od nekoliko upisivanja (write)
ili razbijanjem podataka od jednog upisivanja
- veličinu segmenata određuje TCP softver uz dva
ograničenja:
- svaki segment uključujući i TCP zaglavlje mora stati
u 65,535 bajtova IP paketa
- svaka mreža ima svoj MTU (maximum transfer
unit - najveću dozvoljenu jednicu za prijenos) koji definira gornju
granicu veličine segmenta
- ako je segment prevelik za mrežu kroz koju mora proći,
čvor vrši fragmentaciju u više manjih segmenata od kojih svaki dobiva
svoje IP zaglavlje
- osnovni protokol kojeg koriste TCP entiteti je
protokol s prozorima (sliding window):
- nakon slanja segmenta pošiljaoc pokreće timer
- kad segment stigne na odredište, primaoc šalje u
segmentu potvrdu s brojem jednakim slijedećem broju segmenta kojeg
očekuje primiti
- ako timer istekne prije nego što je primljena
potvrda, segment se šalje ponovo
3.3 Zaglavlje TCP segmenta
- format TCP segmenta se sastoji se od:
- zaglavlja: ima 20-byteni fiksni dio i opcionalni dio
varijabilne dužine
- podataka: 65,535
byteova
- 20
byteova
IP zaglavlja - 20
byteova
TCP zaglavlja = 65,494 bajtova, segmenti sa 0
byteova
podataka koriste se za potvrde i kontrolne poruke

Slika: TCP zaglavlje
(Tanenbaum, 1996)
- izvorni (source) port
- odredišni (destination) port
- redni broj (sequence number) - svaki
byte kod TCP veze ima svoj broj
- broj potvrde (acknowledgement number) -
određuje slijedeći byte
koji se očekuje
- dužina zaglavlja (TCP header length) -
koliko 32-bitnih riječi ima zaglavlje
- 6-bitno polje koje se ne koristi
- 6 jednobitnih zastavica za hitno slanje (URG),
potvrdu primitka (ACK), pražnjenje buffera (PSH),
resetiranje veze (RST), sinkronizaciju rednih brojeva (SYN),
oslobađanje veze (FIN)
- veličina prozora (window size) - koliko
se bajtova može poslati počevši od potvrđenog bajta
- kontrolni zbroj (checksum) za provjeru
ispravnosti i TCP zaglavlja i podataka koji slijede; primjenjuje se nad
zaglavljem, podacima i tzv. pseudozaglavljem (uključuje polja IP
zaglavlja: izvorna i odredišna adresa i protokol, plus TCP duljina
segmena) -> osigurava se od pogrešnog dostavljanja od strane IP
- pokazivač hitnosti (urgent pointer)
- opcije (options) - za uključivanje
dodatnih mogućnosti kojih normalno nema u zaglavlju, npr. host može
navesti maksimalnu dozvoljenu veličinu TCP segmenata koje prihvaća
3.4 TCP upravljanje vezom (Connection Management)
- kod TCP se veza uspostavlja korištenjem
three-way handshake protokola

Slika:
Uspostavljanje TCP veze (Tanenbaum,
1996)
- da bi se uspostavila veza, server s jedne strane
pasivno čeka izvršavajući LISTEN i ACCEPT primitive
- s druge strane klijent izvršava CONNECT primitiv
specificirajući IP adresu i port na koji se želi vezati, maksimalnu
veličinu TCP segmenata i opcionalno neke korisničke podatke (npr.
šifru); CONNECT šalje TCP segment sa uključenim SYN bitom (za
sinkronizaciju) i isključenim ACK bitom (za potvrdu), te čeka na
odgovor
- kad taj segment stigne, TCP entitet na odredištu
provjerava da li postoji proces koji je izvršio LISTEN na portu
navedenom u polju za odredišni port zaglavlja segmenta, ako ne postoji
šalje se odgovor sa uključenim RST bitom (za resetiranje veze) i veza
se odbacuje
- ako postoji proces koji osluškuje na navedenom
portu, daje mu se dolazeći TCP segment i ako ga prihvati, šalje natrag
segment sa potvrdom
- kada oba hosta pokušavaju istovremeno uspostaviti vezu
između ista dva socketa, uspostavlja se samo jedna veza
- kod oslobađanja TCP veze, smatra se da je riječ
o paru simplex veza (a ne o 1 full-duplex) koje se
oslobađaju neovisno jedna o drugoj, tj. obje strane šalju TCP segment sa
postavljenim FIN bitom (za oslobađanje veze)
- strana koja primi segment sa FIN bitom šalje potvrdu i
prestaje slati podatke (ali može primati podatke koji i dalje mogu stizati
od druge strane dok i ona ne pošalje segment sa FIN)
- da bi se spriječio two-army problem, koriste se
timeri, tj. strana koja šalje FIN prekida vezu ako ne dobije
potvrdu unutar određenog vremena
3.5 TCP politika slanja (Transmission Policy)
- upravljanje prozorom nije direktno vezano uz slanje
potvrda
- primaoc vrši upravljanje veličinom prozora na osnovu
veličine svog buffera
- primjer:

Slika: Upravljanje
veličinom prozora (Tanenbaum,
1996)
- WIN - veličina otvora prozora, ACK/SEQ - potvrda
ispravnog prijenosa
- primaoc ima buffer veličine 4K, a pošiljaoc
šalje 2K segmente
- nakon što stigne prvi 2K segment, primaoc oglašava
prozor veličine 2K
- kad stigne i drugi segment primaoc oglašava da mu je
buffer pun (prozor je 0) i pošiljaoc mora stati sa slanjem dok
aplikacijski proces na primajućem hostu ne uzme nešto podataka iz
buffera
- kod prozora veličine 0, izuzetak su hitni podaci
koji se uvijek mogu poslati kao i 1-byteni segmenti koji služe da se
navede sljedeći byte koji se očekuje i veličina prozora
3.6 TCP kontrola zakrčivanja (Congestion Control)
- iako se vrši i u mrežnom sloju, veći dio kontrole
zasićenja vrši TCP jer je pravo rješenje smanjenje količine podataka koji
se šalju
- cilj je postići da se u mrežu ne šalje novi paket, dok
jedan stari ne ode - TCP ga nastoji postići dinamičkim upravljanjem
veličinom prozora
- problemi koji će dovesti do zasićenja su mali kapacitet
primaoca ili mreže
- TCP sprečava pojavljivanje zakrčenja tako da
pošiljaoc brine o 2 prozora:
- standardnom prozoru primaoca
- prozoru zakrčenje (congestion window)
- broj byteova koji se mogu poslati jednak je veličini
manjeg prozora
Algoritam polagani start (slow
start)
- kod uspostavljanja veze pošiljaoc postavlja prozor
zasićenja na veličinu najvećeg segmenta, a nakon svakog uspješnog slanja
segmenta, veličina prozora se udvostručuje
- prozor eksponencijalno raste sve dok ne istekne
timer jer nije došlo do potvrde slanja ili dok se ne dosegne veličina
prozora primaoca
- time se spriječilo da dođe do zakrčenja jer se
ustanovilo koja ga količina podataka uzrokuje, pa se ostalo pri slanju
manje podataka (tj. pri manjoj veličini prozora zakrčenja
Internet algoritam za kontrolu zasićenja
- pored 2 prozora koristi i treći parametar - prag (threshold)
početne veličine 64K
- kad istekne timer, prag se postavlja na polovicu
trenutne veličine prozora zakrčenja, a prozor
zakrčenja se
ponovo postavlja na veličinu jednog segmenta
- zatim se koristi algoritam polaganog starta (slow
start) s tom razlikom da eksponencijalni rast prestaje kad se dosegne
prag - od te točke dalje prozor zasićenja raste linearno za po jedan
segment
- ako se ne pojavi novi timeout, linearni rast se
nastavlja dok se ne dosegne veličina prozora primaoca
- primjer:

Slika: Algoritam za
kontrolu zasićenja (Tanenbaum,
1996)
- nadograđuje se na IP -> dodaje IP-u adresiranje portova
- bespojni protokol koji omogućuje slanje IP datagrama sa
dodanim kratkim zaglavljem bez potrebe da se uspostavi veza
- koriste ga, na primjer, mnoge klijent-server aplikacije
(npr. DNS) sa jednim zahtjevom (request) i jednim odgovorom (response)
- ne treba inicijalni setup veze
- 8-byteno zaglavlje nakon kojeg slijede podaci
- UDP zaglavlje (header):

Slika: UDP zaglavlje
(Tanenbaum, 1996)
-
portovi za identifikaciju krajnjih točaka
(kao kod TCP)
-
ukupna UDP dužina - uključuje 8-byteno
zaglavlje i podatke
-
kontrolni zbroj - isti algoritam kao kod
TCP; opcionalno polje (0 ako se ne koristi)
|