Računalne mreže
 Studij elektrotehnike
 Tehnički fakultet Sveučilišta u Rijeci
 
 

 

TCP

UDP

Home : O kolegiju : Predavanja : Vježbe : Ocjenjivanje

 

VIII. PRIJENOSNI SLOJ INTERNETA

  • Internet ima dva osnovna protokola u prijenosnom sloju:
  1. TCP (Transmission Control Protocol) - spojni protokol
  2. UDP (User Datagram Protocol) - bespojni protokol; u osnovi je IP sa dodanim kratkim zaglavljem (kraćim od zaglavlja TCP protokola)

1. TCP (Transmission Control Protocol) 

  • 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:
  1. svaki segment uključujući i TCP zaglavlje mora stati u 65,535 bajtova IP paketa
  2. 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:
  1. zaglavlja: ima 20-byteni fiksni dio i opcionalni dio varijabilne dužine
  2. 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)

  • polja:
  1. izvorni (source) port
  2. odredišni (destination) port
  3. redni broj (sequence number) - svaki byte kod TCP veze ima svoj broj
  4. broj potvrde (acknowledgement number) - određuje slijedeći byte koji se očekuje
  5. dužina zaglavlja (TCP header length) - koliko 32-bitnih riječi ima zaglavlje
  6. 6-bitno polje koje se ne koristi
  7. 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)
  8. veličina prozora (window size) - koliko se bajtova može poslati počevši od potvrđenog bajta
  9. 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
  10. pokazivač hitnosti (urgent pointer)
  11. 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)


2. UDP (User Data Protocol) 

  • 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)


© 2004. N.Hoić-Božić