UDP si TCP
Internet-ul are dou protocoale principale n nivelul de transport: unul
neorientat pe conexiune i unul orientat pe conexiune. n urmtoarele seciuni o
s le studiem pe ambele. Protocolul neorientat pe conexiune se numete UDP.
Protocolul orientat pe conexiune se numete TCP. O s ncepem cu UDP-ul
deoarece n esen este la fel ca IP-ul cu un mic antet adugat. De asemeni, o s
studiem i dou aplicaii ale UDP-ului.
1. UDP Introducere n UDP
Setul de protocoale Internet suport un protocol de transport fr conexiune,
UDP (User Protocol Protocol cu Datagrame Utilizator). UDP ofer
aplicaiilor o modalitate de a trimite datagrame IP ncapsulate i de a le
transmite fr a fi nevoie s stabileasc o conexiune. UDP este descris n RFC
768. UDP transmite segmente constnd ntr-un antet de 8 octei urmat de
informaia util . Antetul este prezentat n figura de mai jos. Cele dou porturi
servesc la identificarea punctelor terminale ale mainilor surs i destinaie.
Cnd ajunge un pachet UDP, coninutul su este predat procesului ataat
portului destinaie. Aceast ataare are loc atunci cnd se folosete o simpl
procedur de nume sau ceva asemntor pentru TCP (procesul de legtur este
acelai pentru UDP). De fapt, valoarea cea mai important dat de existena
UDP-ului fa de folosirea doar a IP-ului simplu, este aceea a adugrii
porturilor surs i destinaie. Fr cmpurile portului, nivelul de transport nu ar
ti ce s fac cu pachetul. Cu ajutorul lor, segmentele se livreaz corect.
Antetul UDP
Portul surs este n primul rnd necesar atunci cnd un rspuns trebuie
transmis napoi la surs. Prin copierea cmpului port surs din segmentul care
sosete n cmpul port destinaie al segmentului care pleac, procesul ce trimite
rspunsul specific ce proces de pe maina de trimitere urmeaz s-l primeasc.
Cmpul lungime UDP include antetul de 8 octei i datele. Cmpul sum de
control UDP este opional i stocat ca 0 (zero) dac nu este calculat (o valoare
de adevr 0 rezultat n urma calculelor este memorat ca un ir de bii 1).
Dezactivarea acestuia este o prostie, excepie fcnd cazul n care calitatea
informaiei chiar nu conteaz (de exemplu, transmisia vocal digitalizat).
Merit probabil menionate, n mod explicit, unele dintre lucrurile pe care UDP
-ul nu le face. Nu realizeaz controlul fluxului, controlul erorii, sau
retransmiterea unui segment incorect primit. Toate acestea depind de procesele
apelat poate folosi pointer-ul n acelai mod n care poate s o fac i cel care o
apeleaz, deoarece ambele proceduri se gsesc n acelai spaiu de adrese
virtuale. Cu RPC-ul, transmiterea pointer-ilor este imposibil deoarece clientul
i server-ul se gsesc n spaii de adres diferite.
n anumite cazuri, se pot folosi unele trucuri pentru a face posibil
transmiterea pointer-ilor. S presupunem c primul parametru este un pointer
ctre un ntreg, k. Stub-ul client poate mpacheta variabila k i s o trimit
server-ului. Atunci, server stub creeaz un pointer ctre k i-l transmite
procedurii server, exact aa cum aceasta se ateapt. Cnd procedura server
cedeaz controlul server stub, acesta din urm trimite variabila k napoi
clientului, unde noul k este copiat peste cel vechi, n caz c serverul l-a
schimbat. n fapt, secvena standard de apelare apel-prin-referin a fost
nlocuit de copiaz-restaureaz (eng.: copy-restore). Din pcate, acest truc nu
funcioneaz ntotdeauna, de exemplu dac un pointer este ctre un grafic sau
alt structur complex de date. Din acest motiv, trebuie puse anumite restricii
asupra parametrilor procedurilor apelate la distan. O a doua problem este
aceea c n cazul limbajelor mai puin bazate pe tipuri, cum ar fi C-ul, este
perfect legal s scrii o procedur care calculeaz produsul scalar a doi vectori,
fr a specifica dimensiunea vreunuia dintre ei. Fiecare poate fi terminat printro valoare special cunoscut doar de ctre procedura apelat i de cea apelant.
n aceste condiii, n mod cert este imposibil pentru stub-ul client s
mpacheteze parametrii: nu are nici o modalitate de a determina ct de mult
spaiu ocup acetia.
O a treia problem este aceea c nu ntotdeauna este posibil deducerea
tipurilor parametrilor, nici mcar dintr-o specificaie formal sau din cod n sine.
Un exemplu este printf, care poate avea orice numr de parametri (cel puin
unul), iar parametrii pot fi o combinaie arbitrar a tipurilor ntregi, short, long,
caractere, iruri, numere n virgul mobil de diferite lungimi i alte tipuri. A
ncerca s invoci printf ca procedur cu apel la distan ar fi practic imposibil,
deoarece C-ul este prea permisiv. Totui, o regul care s spun c RPC-ul poate
fi folosit cu condiia s nu programezi n C (sau C++) nu ar fi prea popular.
O a patra problem este legat de utilizarea variabilelor globale. n mod
normal, procedura de apelare i cea care este apelat pot comunica folosind
variabilele globale, n plus fa de comunicarea prin parametri. Dac procedura
apelat este mutat acum pe o main la distan, codul va da erori deoarece
variabilele globale nu mai sunt partajate. Aceste probleme nu sunt menite s
sugereze c RPC-ul este lipsit de anse. De fapt, este larg folosit, dar sunt
necesare anumite restricii pentru a-l face s funcioneze bine n practic.
Desigur, RPC-ul nu are nevoie s foloseasc pachete UDP, dar RPC i UDP se
potrivesc bine, i UDP este uzual folosit pentru RPC. Totui, cnd parametrii
sau rezultatele pot s fie mai mari dect pachetul maxim UDP sau atunci cnd
operaia cerut nu este idempotent (adic nu poate fi repetat n siguran, ca
de exemplu atunci cnd se incrementeaz un contor), poate fi necesar stabilirea
Antetul RTP-ului.
Bitul P indic faptul c pachetul a fost extins la un multiplu de 4 octei.
Ultimul octet extins ne spune ci octei au fost adugai. Bitul X indic prezena
unui antet extins. Formatul i semnificaia antetului extins nu sunt definite.
Singurul lucru care este definit este acela c primul cuvnt al extensiei d
lungimea. Aceasta este o cale de scpare pentru orice cerine neprevzute.
Cmpul CC arat cte surse contribuabile sunt prezente, de la 0 la 15. Bitul M
este un bit de marcare specific aplicaiei. Poate fi folosit pentru a marca
nceputul unui cadru video, nceputul unui cuvnt ntr-un canal audio sau
altceva ce aplicaia nelege. Cmpul Tip informaie util indic ce algoritm de
codare a fost folosit (de exemplu 8 bii audio necompresai, MP3, etc). Din
moment ce fiecare pachet transport acest cmp, codarea se poate schimba n
timpul transmisiei.
Numrul de secven este doar un contor care este incrementat pe fiecare
pachet RTP trimis. Este folosit pentru a detecta pachetele pierdute.
Amprenta de timp este stabilit de ctre sursa fluxului pentru a se ti cnd
este fcut primul eantion din pachet. Aceast valoare poate s ajute la
reducerea bruiajului la receptor prin separarea redrii de momentul ajungerii
pachetului. Identificatorul sursei de sincronizare spune crui flux i aparine
pachetul. Este metoda utilizat pentru a multiplexa i demultiplexa mai multe
fluxuri de date ntr-un singur flux de pachete UDP. n sfrit, dac exist,
identificatorii sursei care contribuie sunt folosii cnd n studio exist mixere.
n acest caz, mixerul este sursa de sincronizare i fluxurile, fiind amestecate,
apar aici.
RTP are un protocol nrudit numit RTCP (Real Time Transport Control
Protocol, rom: Protocol de control al transportului n timp real). Acesta se
ocup de rspuns, sincronizare i de interfaa cu utilizatorul, dar nu transport
date. Prima funcie poate fi folosit pentru a oferi surselor reacie (eng.:
feedback) la ntrzieri, bruiaj, lime de band, congestie i alte proprieti ale
reelei. Aceast informaie poate fi folosit de ctre procesul de codare pentru a
crete rata de transfer a datelor (i s ofere o calitate mai bun) cnd reeaua
merge bine i s reduc rata de transfer cnd apar probleme pe reea. Prin
furnizarea continu de rspunsuri, algoritmii de codare pot fi n continuu
adaptai pentru a oferi cea mai bun calitate posibil n circumstanele curente.
De exemplu, dac limea de band crete sau scade n timpul transmisiei,
codarea poate s se schimbe de la MP3 la PCM pe 8 bii la codare delta, aa
cum se cere. Cmpul Tip informaie util este folosit pentru a spune destinaiei
ce algoritm de codare este folosit pentru pachetul curent, fcnd posibil
schimbarea acestuia la cerere.
De asemenea, RTCP-ul se ocup de sincronizarea ntre fluxuri. Problema
este c fluxuri diferite pot folosi ceasuri diferite, cu granulariti diferite i
devieri de flux diferite. RTCP poate fi folosit pentru a le menine sincronizate.
n sfrit, RTCP ofer un mod pentru a numi diversele surse (de exemplu
n text ASCII). Aceast informaie poate fi afiat pe ecranul receptorului pentru
a indica cine vorbete n acel moment.
2. PROTOCOALE
INTERNET:
DE
TRANSPORT
PRIN
TCP
Antetul TCP
S disecm acum structura antetului TCP, cmp cu cmp. Cmpurile Port
surs i Port destinaie identific punctele finale ale conexiunii. Porturile
general cunoscute sunt definite la www.iana.org, dar fiecare gazd le poate
aloca pe celelalte dup cum dorete. Un port formeaz mpreun cu adresa IP a
mainii sale un unic punct de capt (eng.: end point) de 48 de bii. Conexiunea
este identificat de punctele de capt ale sursei i destinaiei.
Cmpurile Numr de secven i Numr de confirmare au semnificaia
funciilor lor uzuale. Trebuie observat c cel din urm indic octetul urmtor
ateptat i nu ultimul octet recepionat n mod corect. Ambele cmpuri au
lungimea de 32 de bii, deoarece ntr-un flux TCP fiecare bit de informaie este
numerotat. Lungimea antetului TCP indic numrul de cuvinte de 32 de bii care
sunt coninute n antetul TCP. Aceast informaie este util, deoarece cmpul
Opiuni este de lungime variabil, proprietate pe care o transmite astfel i
antetului. Tehnic vorbind, acest cmp indic n realitate nceputul datelor din
segment, msurat n cuvinte de 32 de bii, dar cum acest numr este identic cu
lungimea antetului n cuvinte, efectul este acelai.
Urmeaz un cmp de ase bii care este neutilizat. Faptul c acest cmp a
supravieuit intact mai mult de un sfert de secol este o mrturie despre ct de
bine a fost proiectat TCP-ul. Protocoale mai prost concepute ar fi avut nevoie de
el pentru a corecta erori ale proiectrii iniiale.
Urmeaz acum ase indicatori de cte un bit. URG este poziionat pe 1 dac
Indicatorul Urgent este valid. Indicatorul Urgent este folosit pentru a indica
deplasamentul n octei fa de numrul curent de secven la care se gsete
informaia urgent. O astfel de facilitate ine locul mesajelor de ntrerupere. Aa
cum am menionat deja anterior, aceast facilitate reprezint esena modului n
care emitorul poate transmite un semnal receptorului fr ca TCP-ul n sine s
fie cauza ntreruperii.
Bitul ACK este poziionat pe 1 pentru a indica faptul c Numrul de
confirmare este valid. n cazul n care ACK este poziionat pe 0, segmentul n
discuie nu conine o confirmare i cmpul Numr de confirmare este ignorat.
Bitul PSH indic informaia FORAT. Receptorul este rugat respectuos
s livreze aplicaiei informaia respectiv imediat ce este recepionat i s nu o
memoreze n ateptarea umplerii tampoanelor de comunicaie (lucru care,
altminteri, ar fi fcut din raiuni de eficien).
Bitul RST este folosit pentru a desfiina o conexiune care a devenit
inutilizabil datorit defeciunii unei maini sau oricrui alt motiv. El este de
asemenea utilizat pentru a refuza un segment invalid sau o ncercare de
deschidere a unei conexiuni. n general, recepionarea unui segment avnd acest
bit poziionat indic o problem care trebuie tratat n funcie de context.
Bitul SYN este utilizat pentru stabilirea unei conexiuni. Cererea de
conexiune conine SYN = 1 i ACK = 0 pentru a indica faptul c acel cmp
suplimentar de confirmare nu este utilizat. Rspunsul la o astfel de cerere
conine o confirmare, avnd deci SYN = 1 i ACK = 1. n esen, bitul SYN este
utilizat pentru a indica o CERERE DE CONEXIUNE i o CONEXIUNE
ACCEPTAT, bitul ACK fcnd distincia ntre cele dou posibiliti.
Bitul FIN este folosit pentru a ncheia o conexiune. El indic faptul c
emitorul nu mai are nici o informaie de transmis. Cu toate acestea, dup
nchiderea conexiunii, un proces poate recepiona n continuare date pe o durat
nedefinit. Ambele segmente, SYN i FIN, conin numere de secven i astfel
este garantat faptul c ele vor fi prelucrate n ordinea corect.
n TCP, fluxul de control este tratat prin ferestre glisante de dimensiune
variabil. Cmpul Fereastr indic numrul de octei care pot fi trimii,
ncepnd de la octetul confirmat. Un cmp Fereastr de valoare 0 este perfect
legal i spune c octeii pn la Numr de confirmare - 1 inclusiv au fost
recepionai, dar receptorul dorete cu ardoare o pauz, aa c mulumete
frumos, dar pentru moment nu dorete continuarea transferului. Permisiunea de
expediere poate fi acordat ulterior de ctre receptor prin trimiterea unui
segment avnd acelai Numr de confirmare, dar un cmp Fereastr cu o
valoare nenul.
n protocoalele din cap. 3, confirmrile pentru cadrele primite i
permisiunea de a trimite noi cadre erau legate una de alta. Aceasta era o