Documente Academic
Documente Profesional
Documente Cultură
=
Unde:
- X[B/s] este media ratei de transmisie
- S este dimensiunea segmentului n octeti
- R = timpul dus-intors (RTT) n secunde
- p = rata evenimentelor de pierdere a pachetelor, cuplinsa ntre 0 i 1, i este
fractiunea de pachete pierdute din totalul pachetelor emise
- t_RTO = timpul de expirare pentru retransmisie, exprimat n secunde
- b = numrul maxim de pachete care sunt confirmate cu un singur pachet de
confirmare TCP. [1]
7 Bibliografie
- [1] RFC5348
- [2] RFC3448
- [3] RFC4828
- [4] RFC3550
- [5] http://www.cs.odu.edu/~cs778/jeffay/Lecture6.pdf
- [6] http://www.networksorcery.com
- [7] http://opalsoft.net/qos/
- [8] RFC4341
- [9] RFC 4336
- [10] RFC4340
- [11] Andrew S. Tanenbaum: Computer Networks
- [12] http://www.scribd.com/doc/22272663/All-About-UDP
- [13] http://www.netfor2.com/udp.htm
- [14] www.wikipedia.com
- [15]http://www.ardenstone.com/projects/seniorsem/reports/UDP_Protocol.html
- [16]www.unibuc.ro/prof/niculae_c_m/telecom/user_datagram_protocol_udp.ht
m
B. Protocolul TCP - Transmission Control Protocol
Lecu Radu erban
1) Introducere
Protocolul TCP (Transmission Control Protocol) este unul dinte protocoalele
nivelului Internet al modelului TCP/IP
TCP a fost special conceput pentru a oferii un transport de bii de tip capt-la-
cpat, fr erori sau pierderi de date. El a fost definit n standardul RFC 793
(Request For Comment) scris n 1981.
O reea de internet difer de una global deoarece diferite pi pot avea
topologii, laimi de band, timpi de ntrziere diferii, dimeniuni ale pachetelor sau ali
parametrii diferii. Astfel TCP a fost astfel conceput s se adapteze la proprietile
diferite ale componentelor folosite n cadrul reelei.
Fiecare main care suport TCP este astfel conceput nct este capabil s
transmit informaii i date prin transmisia unui ir de octei. Un sir de octei poate fi
grupat n pachete de date de lungime de maxim 64KB incluznd i informaiile de
transimise (headerul). n cazul n care informaia ,cum ar fi cea coninut de un fiier,
depete aceast valoare, ea trebuie divizat n mai multe pachete de ctre emitor
n aa manier nct s poat fi recuperat i reconstruit la recepie. Pachetele sunt
transmise independent, iar ele pot ajunge la destinaie pe ci diferite i n alt ordine.
[5]
Protocolul TCP reprezint unul din compnentele modelul TCP/IP (Protocol de
control al transmisiei/ Protoclo Internet) care a fost creat de US DoD (Departamentul
de aparare al Statelor Unite) din necesitatea unei reele care ar putea supravieui n
orice condiii. Scopul reelei TCP/IP era ca orice conexiune s-ar rupe n interiorul
reelei reeaua n ansamblu s rmn intacta.
Astfel a trebuit conceputa o
arhitectur complex , flexibil i care
avea n vedere aplicaii divergente,
printre care se transmit informaii (cum
ar fi vorbirea, fisiere) n timp real.
Pornind de la structura modelului
OSI, cerinele de mai sus au condus la
alegerea a 4 niveluri pentru modelul
TCP/IP
Nivelul Transport este similar celui
n cadrul stivei OSI, ocupandu-se de
probleme legate de siguran, controlul
fluxului i corecie de erori. El a fost
astfel conceput nct sa permit
conversaii ntre entitile pereche surs
i destinaie. Astfel au fost concepute 2 protocoale capt-la-capt: TCP i UDP.
APLICAIE
TRANSPORT
INTERNET
INTERFA DE REEA
3
4
1
2
Protocolul TCP este un protocol orientat pe conexiune care permite ca un flux
de octei transmii s ajunga la destinaie ,fr erori, la orice alt main din cadrul
aceleiai reea. [4]
Modelul TCP este protocolul folosit de nivelul Transport al stivei TCP/IP.
2) Modelul Serviciului TCP
Serviciul TCP trebuie asigurat atat de emitator cat si de receptor deoarece se
bazeaz pe principiul capt-la-capt i folosete sockei. Fiecarui socket i
corespunde un numr cu rol de adres numit adresa IP a destinatarului si un alt
numar alcatuit din 16 biti numit port. Pentru ca serviciul TCP s fie obinut trebuie
realizat explicit o conexiune ntre maina care transmite mesajul i cea care l
recepioneaz. Simplificat o conexiune pate fi reprezentat astfel:
Astfel TCP poate fi comparat cu o conexiune telefonica din punct de vedere al
modului n care utilizatorul vede aceast conexiune. Diferena de baza este dat de
faptul c mesajele sunt transmise prin intermediul pachetelor fr a bloca o linie
telefoinc n cazul netransmiterii de informaie.[1]
Astfel un anumit port se poate afla n diferite stri, cum ar fi IDLE,
ESTABLISHED sau stari intermediare n cadrul crora se realizeaz stabilirea
conexiunii sau deconectarea. Conexiunea presupune 3 faze: realizarea conexiunii
(IDLE->ESTABLISHED), transmiterea informaiei (starea ramane ESTABLISED) i
intreruperea conexiunii (ESTABLISHED->IDLE).
Un socket poate fi folosit pentru mai multe conexiuni simultane. Astfel 2 sau
mai multe conexiuni se pot termina la acelai socket. Acestea sunt identificate prin
identificatori de socket aflati la ambele capete.
CLOSED
ESTABLISHED
CLOSED
ACTIVE
ESTABLISMENT
PENDING
PASIVE
ESTABLISMENT
PENDING
ACTIVE
DISCONNECT
PENDING
PASIVE
DISCONNECT
PENDING
Conexiunea TCP poate fi reprezentat n felul urmator:[6]
Din cele 65536 porturi (
16
2 ) , primele 1024 porturi sunt numite well-known-
ports i sunt rezervate pentru servicii standard. Spre exemplu se doreste realizarea
unui transfer de fiiere prin intermediul protocolului FTP (File Transfer Protocol).
Aceasta se realizeaz prin conexiunea la portul 21 pentru a-i realiza conexiunea cu
propriul demon. Demonul reprezint o apicaie care ruleaz pe un anumit calculator
fr control direct realizat de utilizator. Cteva exemple de porturi mai importante
sunt cele din tabelul urmator
Ar fi posibil ca de exemplu demonului FTP s i fie asociat portulului 21 n
momentul butrii. Similar pentru celelalte porturi. Totuii acest lucru ar umple
memoria cu demoni ce vor fi idle majoritatea timpului.
Modul de realizare este urmtorul: Un singur demon, numit inetd (Internet
demon) este ataat la rndul su la porturi multiple i ateapt prima conexiune.
Cnd se realizeaz acest lucru, inetd realizeaz un nou proces i execut demonul
corespunztor, lsndul pe aceesta s se ocupe de cerere. Cu toate acestea este
posibil si realizarea unor demoni utlizai permanent cum ar fi portul 80 (HTTP) i
inetd n rest.
Toate conexiunile TCP sunt de tip full-duplex capt-la-capt. Full-duplex
nseamn c transmisia se poate face bidirecional i simultan ntre cele 2
calculatoare. Capt-la-capt arat c nu pot exista mesaje de tip multicast sau
broadcast.
O conexiune TCP reprezint o niruire de bii (octei), care au o structur bine
definit i care este mprit n diferite componente. Pe lang mesaj (irul de octei
ce reprezint informaia) la fiecare nivel se mai adaug i alte informaii numite
Port Protocol Utilizare
21 FTP File transfer
23 Telnet Remote login
25 SMTP E-mail
69 TFTP Trivial file transfer protocol
79 Finger Lookup information about a user
80 HTTP Worl Wide Web
110 POP-3 Temote e-mail access
119 NNTP USENET news
proces m'
IP
... port m ...
TCP
host A
proces n'
IP
... port n ...
TCP
host B
Conexiune TCP
sigura
Conexiune TCP
nesigura
headere. Acestea conin informaii cum ar fi ip sursa, ip destinaie, port destinaie,
informaii de detecie a erorilor, informaii de ordonare a pachetelor pentru
reconstrucia ntregului mesaj din fragmentele sale, etc. i sunt asociate fiecrui nivel
n parte. n cazul lipsei unor astfel de informaii pachetele pot ajunge la destinaie dar
sunt inutilizabile, sau pot chiar s nu fie recepionate.
S presupunem c avem un mesaj nprit n 4 fragmente (A,B,C,D). Fiecrui
mesaj i va corespunde un header ip si unul TCP ca n figurile urmatoare:
Protocolul TCP se ocup numai de transmiterea sau recepionarea mesajului
nu i de interpretarea lui. La emisie mesajului i se adaug informaiile suplimentare
din headere. La recepie mesajul este separat de headere fiind transmis nivelelor
superioare.
Important este de menionat c pentru realizarea conexiunii se folosesc
anumite pachete cu ajutorul crora emitorul i receptorul comunic pentru
realizarea conexiunii. Pachetele care sunt folosite pentru realizarea conexiunii au
proiritate fa de altele n care se transmite informaie. Acestor pachete li se asociaz
un flag numit URGENT flag. Cand un pachet urgent este recepionat acesta are
prioritate fa de celelalte fiind primul interpretat chiar dac alte pachete anterioare
au venit inaintea acestuia.[1]
3) Protocolul TCP
Receptorul si transmitorul comunic prin intermediul unor segmente. Un
segment TCP este alctuit dintr-un header de 20 bii la care se adaug mesajul.
Dimnesiunea header-ului plus cea a mesajul pot avea mreun pn la 65515 octei.
Protocolul de baz al TCP-ului este sliding window protocol, care se bazeaz
pe principiul ferestrei glisante. n momentul n care emittorul transmite un segment,
acestra porneste i un timer. Cnd segmentul ajunge la destinaie, receptorul
transmite un segment (cu sau fr date) care conine un numar de confirmare egal
cu urmtoarea secven pe care o ateapt. Daca timerul emitorului este depit
nainte de recepia mesajului de confirmare, mesajul este retransmis. [6]
Spre deosebire de UDP care transmite pachete ntre 2 hosturi fr a oferii
sigurana c acestea ajung la destinaie, TCP este protocol orientat pe conexiune.
Astfel pentru fiecare pachet transmis de la surs la destinaie, cu ajutorul arhitecturii
TCP, trebuiesc parcurse mai multe etape:
- realizarea conexiunii dintre cele 2 hosturi
- schimbarea de informaii ntre acestea
- ntreruperea conexiunii
In cazul UDP, un pachet este transmis fr a avea sigurana c informaia a
ajuns de la surs la destinaie. Acelai pachet transmis folosind protocolul TCP, va
oferii sigurana c pachetul a ajuns la destinaie. Mai mult, n cazul n care locatia
dorit nu poate fi gsit, emitorul va fi informat de acest lucru.
Exist 2 cazuri n care nu se poate transmite un pachet.
A B C D A B C D
TCP header IP header
b) a)
a) Nu se poate realiza conexiunea ntre cele 2 hosturi. n momentul n care se
doreste realizarea conexiunii locaia nu poate fi gasit sau nu accept realizarea
conexiunii.
b) Conexiunea a fost deja realizat anterior ntre cele 2 hosturi dar pachetul nu
a putut fi transmis. Acest lucru se poate ntampla fie din cauz c unul din hosturi s-a
deconectat fr a anuna intreruperea conexiunii (ex: ntreruperea curentului), fie fr
ca cererea de nchidere s ajung la cellalt capt al conexiunii (legtura dintre
calculatoare a fost ntrerupt si nu exist alt rut alternativ).
4) Header-ul TCP
Fiecare segment ncepe cu un format fix de 20 B urmat de cuvinte duble de
32 biti optionale si de date. Cmpul de date poate s conin pn la 65495 octeti
(65535 - 20 octeti pt header-ului ip -20 coteti ai header-ului TCP).
Portul surs si portul destinaie arat porturile de emisie i de recepie. Portul
plus adresa ip formeaz o adresa unica de 48 biti.
Sequence number si Acknowledgement number realzeaza functiile de
verificare daca a ajuns pachetul la destinatie sau nu. Ambele au 32 de biti.
TCP header length arat lungimea headerului n cuvinte de 32 bii. Informaia
este necesar deoarece headerul include i campul de opiuni care este variabil.
Urmeaz 6 bii nefolosii si alti 6 care reprezintp flaguri care au rol diferit
- URG - Urgent pointer - descris mai sus
- ACK - Acknowledge flag - arat c Acknowledgent number este valid adic
pachetul are rol de confirmare a recepiei mesajului
- PSC - Push Function - arat c mesajul trebuie transmis aplicaiei ct mai
repede posibil. Astfel se ofer prioritate pachetului fa de alte pachete.
Source port Destination port
Sequence number
Acknowledgement number
TCP
header
length
Window size
Checksum Urgent pointer
U
R
G
A
C
K
P
R
H
R
S
T
S
Y
N
F
I
N
N
S
T
Optinos (0 or more 32-bit words)
Data (optional)
32 b
- RST - Reset conection - arat apariia unei probleme ce impune resetarea
conexiunii
- SYN - Syncronyze -este folosit pentru realizarea conexiunii.
- FIN - No more data from sender - este folosit pentru nchiderea conexiunii.
Window size are rolul de a arta lungimea cmpului de date n octei.
Checksum reprezint o sum de verificare cu ajutorul cruia se determin
dac datele transmise sunt eronate sau nu. Aceiasi operaie este realizat n ambele
capete iar dac ele coincid atunci este foarte probabil ca informaia obinut s fie
corect.
Urgent pointer este folosit cnd se dorete ca anumite date sa fie procesate n
cel mai scurt timp posibil. El indic unde se termin ultimul byte de date urgente.[5]
Options indic anumite informaii opionale ce pot fi transmise n scopul
obinerii anumitor funcionaliti. Una din cele mai importante functionaliti este
lungimea maxim a segmentului (MSS Maximum Segment Size). Aceasta are
importan n cazul n care avem o linie de transmisie cu multe erori. Dac segmentul
are lungimea mai scurt, probabilitatea ca s avem cel puin un bit eronat este mai
mic iar n cazul n care se retransmite pachetul se retransmite o cantitate mai mic
de informaie. Astfel n anumite cazuri este de preferat s mprtim un mesaj n
fragmente mai multe dar mai mici dect s avem pachete de dimesiune mare. n
aelasi timp numar mare de pachete duce la cantitatemare mare de informaie
datorat headere-lor dar inutila pentru utilizator i care crete durata de transmsie a
ntregului mesaj. Valoarea predefinit a dimensiunii mesajului este de 536 B pentru
date.
Cmpul de date reprezint informaia ce va fi transmis ctre sau recepionat
de la nivelul de aplicaie pe portul cerut.
Pseudoheader-ul este folosit pentru calculul cmpului Checksum el nefiind
transmis n cadrul pachetului. Se observ c acesta conine i informaii cara nu
aparin nivelului TCP deoarece IP-ul este o informaie a nivelului IP, violnd astfel
ierarhia TCP/IP.
Urmatoarea figur arat structura pseudoheader-ului[6]:
5) Stabilirea conexiunii TCP
Realizarea conexiunii presupune o secvent de 3 pachete transmise ntre cele
2 hosturi cunoscut sub numele de three-way handshake. Pentru stabilirea
conexiunii este necesar ca un host, numit Reea, s atepte pasiv realizarea
conexiunii. n acelai timp cellalt host, numit Client, va transmite un pachet prin care
cere realizarea conexiunii la adresa IP si la portul dorit. Pachetul transmis are setate
flagul SYN =1 si ACK=0. Reteaua rspunde prin transmiterea unui pachet avnd
flagurile SYN=1 si ACK=1. n final Clentul retransmite un pachet avnd setai SYN=0
Source address
Protocol =6 TCP segment length
Destination address
32 b
00000000
si ACK=1, moment n care s-a realizat conxiunea n cazul n care nu au aparut alte
erori de-a lungul intregului proces. [1]
Exista posibilitatea ca simltan ambele hosturi s ncerce realizarea conexiunii
ntre aceiasi 2 sockei. n final este realizat numai o singura conexiune.[1]
6) ntreruperea conexiunii TCP
Conexiunea full-duplex dintre hosturi poate fi vzut si ca 2 conexiuni semi-
duplex
Pentru a se realiza ntreruperea conexiunii, oricare din cele 2 hosturi pot cere
acest lucru cu ajutorul flagului FIN. Deoarece cnd unul dintre hosturi cere
ntreruperea conexiunii cellalt poate transmite date, ntreruperea conexiunii se face
simultan n ambele pari. Porcedeul este realizat similar realizarii conexiunii fiind
realizat printr-o secventa de 3 pachete.
Exist ns situaia ca mesajul de ncheiere a conexiunii s nu fie recepionat.
Dac n intervalul de timp maxim n care se poate transmite si receptiona un mesaj
nu s-a primit un rspuns se ncheie conexiunea numai intr-o singura parte, ramanand
ca celalalt host s observe c nimeni nu mai asculta mesajele sale. [1]
7) Managementul conexiunii
Conexiunea TCP poate fi reprezentat printr-un automat cu numr finit de
stri. Automatul are 11 stri prezentate n tabelul urmtor.
Ca orice automat, n funcie de starea curent nu se poate trece dect n
anumite stri. Succesiunea acestori stri este reprezentata n graficul de mai jos. Tot
n grafic seunt prezentate si primitivele (comenzile cu care utilizatorul face trecerea
dintr-o stare n alta).
SYN(SEQ=x)
SYN(SEQ=y,ACK=x+1)
(SEQ=x+1,ACK=x+1)
Host 1 Host 2
Stare Descrierere
CLOSED Nici o conexiune nu este activ
LISTEN Servrul asteapt un apel
SYN RECEIVED A fost primit o cerere de conexiune
SYN SENT Aplicaia a nceput deschiderea conexiunii
ESTABLISHED Starea normal pentru transferul de date
FIN WAIT 1 Aplicaia a zis c a terminat de transmis date
FIN WAIT 2 Cealalt parte a acceptat nchiderea conexiunii
TIME WAIT Ateptare ca toate pachetele s fie transmise
CLOSING Ambele pri ncearc nchiderea conexiunii simultan
CLOSE WAIT Cealalt parte a iniiat nchiderea conexiunii
LAST ACK Ateapt ca toate pachetele s fie transmise
Fiecare conexiune ncepe cu starea CLOSED. Aceast stare este prsit
numai cnd se face o deschidere pasiv (hostul are rol de retea, adic se ateapt
cererea de conexiune de la alt host) sau cnd se face una activ (hostul are rol de
client, el apeleaz un alt host cu rol de reea, cruia i cere realizarea conexiunii).
Reeaua trece n starea LISTEN, stare n care ateapt cererea de conexiune.
Clientul trece n starea SYN SENT i transmite un segment de tip SYN. Dac
existun host de tip reea la adresa cerut, care ascult pe portul corespunztor,
acesta recepioneaz mesajul i transmite un mesaj de tip SYN+ACK. n cazul n
care clientul nu primete un astfel de mesaj dupa un anumit interval de timp, el trece
napoi n starea CLOSED. Altfe el transmite un semnal de tip ACK, moment n care
se realizeaz conexiunea.
Att clientul, ct i reeaua dupa ce primsc pachetul ACK, trec n starea
ESTABLISHED. n aceast stare se realizeaz comunicarea bidirecional ntre cele
2 hosturi.
Metoda prezentat mai sus poart numele de 3-way Handshake.
n orice moment, oricare din cele 2 hosturi poate realiza ntreruperea
conexiunii. Aceasta se realizeaz prin metoda prezentat mai sus.
Exist 2 moduri de ntrerupere a conexiunii: activ, n cazul celui care a
iniializat ntreruperea conexiunii, sau pasiv n cazul celui care este anunat de
ntreruperea conexiunii.[1]
COLOSE/FIN
ACK/-
SYN+ACK/ACK
(Step 3 of 3-way handshake)
SYN/SYN+ACK (simultaneus open)
LISTEN
ESTABLISHED
CLOSED
SYN
RECEIVED
Connect/SYN
(Step 1 of 3-way handshake)
Close/-
CLOSE/- LISTEN/-
SYN/SYN+ACK
(Step 2 of 3-way
handshake)
SEND/SYN RST/-
CLOSE/FIN
CLOSING
TIME
WAIT
CLOSE
WAIT
LAST
ASK
SYN
SENT
FIN
WAIT 1
FIN
WAIT 2
ACK/-
FIN+ACK
/ACK
CLOSED
FIN/ACK
ACK/-
FIN/ACK
FIN/ACK
Timeout/-
(Go back to start)
ACK/-
(Start)
(Passive close)
(Active close)
(Data Transfer state)
CLOSE/FIN
8) Politici de transmisie TCP
In capitolele anterioare s-a discutat despre modul n care se realizeaz
conexiunea dintre 2 entiti diferite, cum se ntrerupe conexiunea dintre acestea,
structura segmentelor i a headerelor acestora. Toate acestea au ca scop final
oferirea posibilitii de a transmite informaii ntre hosturi fr pierdere de informaie.
Transmisia de informaii ntre cele 2 hosturi se face numai cnd se presupune
c ambele capete ale conexiunii sunt n starea ESTABLISHED. Astfel se porneste
de la ideea c a fost realizat anterior conexiunea.
Fiecare host are un buffer n care odat pachetele recepionate ele sunt
stocate ntr-un buffer. Acest buffer are o dimensiune limitat. Astfel dac are loc
transmiterea unui pachet care nu poate fi stocat atunci acesta va fi pierdut fiind
necesar retransmisia sa.
Pentru a minimiza cantitatea de informaie pierdut s-au introdus protocoale
de management ale ferestrei. Modul de funcionare este prezentat n figura
urmtoare:
Dup cum se observ n imagine, receptorul, n momentul n care trimite
mesaje de ACK, trimite i informaii suplimentare pentru a informa emitorul despre
spaiului liber din buffer, prin utilizarea cmpului WIN. Valoarea cmpului WIN arat
spaiul liber disponibil al bufferului. Astfel, dac bufferul este plin se va oprii
transmisia. n momentul n care se elibereaz o zon din buffer, receptorul trimite un
mesaj cu dimensiunea zonei eliberate din interiorul bufferului adic cantitatea
maxim de informaie pe care emitorul o poate transmite. [1]
9) Managementul timerelor TCP
Pentru transmisia datelor, se pun urmtoarele probleme:
- fiecare segment trebuie s ajung la destinaie;
- un segment ajuns la destinaie nu trebuie s aibe bii eronai.
A doua condiie este verificat cu ajutorul checksum din headerul TCP. Prima
condiie presupune existena unui timer numit timerul de retransmisie.
Host 1 Host 2
ACK=4096, WIN=2048
SEQ=0
SEQ=2048
SEQ=4096
EMPTY
2k
1k
EM
PTY
2k
1k
ACK=4096, WIN=0
ACK=2048, WIN=2048
2k
2k
2k
2k
2k
TCP-ul folosete multiple timere. Cel mai important este cel de retransmisie.
Atunci cnd un segment este transmis, este pornit un timer. Dac se recepioneaz
un ACK pentru acel segment nainte ca timerul su s expire atunci se consider c
mesajul a ajuns la destinaie. n caz contrar se retransmite segmentul iar timerul se
repornete. Se pune problema alegerii dimensiunii timerului.
n cazul n care timerul este mic, exist o
foarte mare probabilitate ca pachetul s fie
retransmis nainte de recepionarea ACK-ului.
Astfel se poate provoca o congestie datorit
introducerii de pachete inutile n reea. Dac
timerul este foarte mare atunci intervalul de timp
dup care are loc retransmisia este foarte mare,
astfel c se va atepta un interval mare de timp
recepiomarea segmentului daca acesta a nu a
fost recepionat de prima dat.
Timerul trebuie astfel ales nct s se
obin optimul pentru cele 2 cazuri.[1]
10) Algoritmi utilizai de TCP pentru eficientizarea transmisiei de pachete
Pentru a rezolva diferite probleme ale TCP s-au adoptat 4 algoritmi folosii de
TCP a cror documentaie se gseste n RFC 2001 publicat n 1997. Acetia sunt:
- Slow start
- Congestion avoidance
- Fast retransmit
- Fast recovery algorithms
10.1) Slow start
Versiunile iniiale de TCP ar ncepe o conexiune cu clientul injectnd
numeroase segmente n retea de pn la lungimea maxim a ferestrei. Acest lucru
nu reprezint o problem n cazul n care ambele hosturi se afl n acelasi LAN.
Problemele apar atunci cnd exist rutere ntre hosturi. Unele rutere intermediare
trebuie s pstreze pachetele ntr-o memorie. Drept urmare vom avea o ncrcare
exagerat a memoriei i deci la umplerea ei.
Algoritmul pentru evitarea acestor situaii este Slow start. Acesta opereaz
prin a observa c rata maxim la care noile pachete ar trebui injectate n reea este
egal cu rata cu care rspunsurile se ntorc de la cellalt capt.
Pentru realizarea algoritmului se adaug o nou fereastr emitorului numit
fereastr de congestie (cwnd - congestion window), cnd o nou conexiune este
realizat cu un host din alt reea, fereastra de congestie este iniializat la un
segment (dimensiunea segmentului cerut de la cellalt capt sau o valoare default,
n general egal cu 536 sau 512). De fiecare dat cnd un nou ACK este recepionat,
cwnd este crescut cu nc un segment. Emitorul poate s transmit pn la
minimul dintre lungimea ferestrei de congestie si cea de advertisement a
receptorului. Fereastra de congestie este controlat de emitor, iar cea de
advertisement este controlat de receptor.
Principiul de funionare este urmtorul: emitorul ncepe prin a transmite un
segment. Iniial cwin=1. Cnd receptorul primete mesajul el va trimite un rspuns de
tip ACK. Cnd emitorul l recepioneaz cwin devine 2. De data aceasta se pot
transmite pn la 2 pachete. Drept rspuns vor fi 2 ACK-uri deci cwin=4=2
2
. n
continuare cwin devine 2
3
, 2
4
, 2
5
i asa mai departe astfel c vom avea o cretere
exponenial. Este posibil ca, de exemplu cnd cwin devine 16, emitorul s nu mai
doreasc s mai transmit 16 pachete, ci numai 5. Ca rezultat cwin va deveni 21 nu
32, caz n care nu vom mai avea o cretere exponenial. Dac continu creterea
numrului de pachete, la un moment dat capacitatea reelei poate fi atins iar un
router intermediar va ncepe s renune la pachete, acestea fiind pierdute. Pierdere
lor determin micorarea ferestrei.
Dei iniial Slow start a fost aplicat numai pentru entiti aflate n reele diferite
n prezent este folosit si pentru reelele locale.[7][9][12]
10.2) Congestion avoidance (Evitarea congestiei)
Congestia poate s apar atunci cnd, pachetele care intr ntr-un ruter i
care urmeaz s ias toate n acelai LAN, depesc debitul maxim suportat de
LAN. Congestion avoidance este un procedeu prin care se pot evita astfel de situaii
pentru a minimiza numrul de pachete pierdute.
Presupunerea algoritmului este c pachetele pierdute prin eronare sunt foarte
mici (maxim 1%), deci pierderea unui pachet semnealeaz existena unei congestii
ntre surs i destinaie. Exist 2 indicatori ai pierderii unui pachet: expirarea timerului
sau recepionarea a 2 ACK-uri.
Congestion avoidance si Slow start sunt algoritmi diferii cu obiective diferite.
Totui cnd congestia apare TCP trebuie s ncetineasc rata de transmisie a
pachetelor n reea, i apoi s invoce Slow start pentru a crete din nou rata de
transmisie. De aceea ele sunt n practic implementate mpreun.
Cei 2 algoritmi necesit 2 variabile pentru fiecare conexiune:cwind (congestion
window) i sstresh(Slow start treshold).
Algoritmul combinat funcioneaz dup cum urmeaz:
I) Iniializarea conexiunii date. Se seteaz cwmd la 1 segment i sstresh la
65535.
II) Rutina de transmisie TCP nu transmite mai mult dect minimul dintre cwnd
i dimensiunea ferestrei de advertisement a receptorului.
III) Cnd apare congestia incidcat de expirarea timerului sau de
recepionarea de ACK dublu, o jumtate din dimensiunea ferestrei curente (minimul
dintre cwnd i dimensiunea bufferului receptorului dar cel puin egal cu 2) este
salvat n sstresh. Suplimentar dac congestia este determinat datorit expirrii
timpului cwnd este setat la 1 segment (Slow start).
IV) Cnd este recepionat un nou ACK de la cellalt capt, cwmd este crescut
cu 1 dar acesta crete n funcie de ce realizeaz TCP: Slow start sau Congestion
avoidance.
Dac cwnd este mai mic sau egal cu sstresh, TCP se aplic Slow start, altfel
este realizat Congestion avoidance. Astfel TCP se afl n Slow start pn n
momentul n care cwnd atinge sstresh dup care se realizeaz Congestion
avoidance.
n cazul slow start cwnd creste cu 1 pentru fiecare ACK primit. n cazul
Congestion avoidance cwnd este credscut cu segsize
2
/cwnd pentru fiecare ACK
primit, unde segsize i cwnd au ca unitate de msur bytes. Astfel vom avea o
cretere liniar n cazul Congestion avoidance comparativ cu cea exponenial petru
cazul slow start. [7][9][12]
10.3) Fast retransmit (Retransmitere rapid)
Fast retransmit reprezint o modalta prin care TCP reduce timpul prin care
emitorul asteapt pn cnd retranmite segmentul pierdut.
Emitorul TCP ,n varianta sa iniial, foloseste un timer pentru a detecta
pierderea de pachete. Dac un ACK nu este recepionat pentru un anumit pachet
pn la expirarea timerului, emitorul va presupune c pachetul a fost pierdut deci
va trebui retransmis. De multe ori acest timp duce la ntrzieri nedorite care de multe
ori pot fi eliminate.
ACK dublu st la baza algoritmului.
Un ACK dublu poate fi obinut din 2 motive: pierdere de pachet, sau inversare
de pachete.
Dup recepionarea unui pachet cu SQN=x (Sequence number), receptorul
transmite un mesaj cu ACK=x+1 (Acknowledgement number) care nseamn c
acesta a primit pachetul x si asteapta pachetul x+1. n ruma acestui procedeu
emitorul este informat despre pachetele care au ajuns la destinaie.
S presupunem c dorim s transmitem un ir de pachete, iar pachetul SQN=
x+1 nu ajunge la destinaie, el fiind pierdut. SQN=x ajunge decisemitorul
recepioneaz ACK=x+1. Cnd SQN= x+2 ajunge la destinaie emitorul
recepioneaz ACK=x+1 n loc de x+3 deoarece se ateapt nc pachetul x+1.
Similar la SQN=x+2, SQN=x+3, SQN=x+4, etc. emitorul primete ACK=x+1.
Daca se primesc o succesiune de 4 ACK-uri egale atunci pachetul respectiv
se retransmite deoarece este considerat pierdut.
Se observ c dei timerul nu a expirat nc pentru pachetul SEQ=x+1 el este
retransmis mai repede. Exist posibilitatea ca pachetul s fie retransmis cu mult
naintea timerului i astfel se poate ajunge la ntrzieri mult mai mici.
Pentru cazul cu inversare de pachete(pachetele ajung n alta ordine)
algoritmul funcioneaz conform figurii de mai jos.
Se observ c nu exist probleme aduse algoritmului n cazul n care 2
pachete sunt inversate. Dac ns vom avea un pachet ntrziat foarte mult,exist
celu mult riscul ca s fieretransmis, iar la destinaie va ajunge de 2 ori. Singura
Host 1 Host 2
Timeout
SEQ=x+1
ACK=x+1
ACK=x+1
ACK=x+1
ACK=x+1
ACK=x+1
SEQ=x
SEQ=x+2
SEQ=x+1
SEQ=x+3
SEQ=x+4
SEQ=x+5
SEQ=x+7
SEQ=x+8
SEQ=x+6
ACK=x+1
ACK=x+1
SEQ=x+1
ACK=x+1
SEQ=x+9
SEQ=x+10
SEQ=x+11
ACK=x+9
problem care se pune este aceea de detecie a pachetului pentru eliminarea sa.
[9][12][13]
10.4) Fast recovery algorithms
n cazult Fast Recovery Algoritm, dup ce fast retransmis cea ce pare a fi un
segment pierdut, este aplicat Congestion Avoidante n loc de Slow start. Aceasta
este o nbuntire care permite debite mari cu un nivel de congestie moderat, n
special pentru ferestre mari.
Motivul pentru care nu se aplic Slow start este c recepionarea ACK-urilor
duble informeaz TCP-ul mai mult dect prin faptul c pachetul a fost pierdut.
Deoarece receptorul nu poate genera dect ACK-uri duble cnd un alt segment este
recepionat, acel segment a prsit reeaua si se gseste n interiorul bufferului
receptorului. Exist n continuare schimb de date intre cele 2 capete, iar TCP-ul nu
vreea s reduc abrupt fluxul de date prin trecerea n Slow start.[7][12]
11) TCP Tranzactional (T/TCP)
Protocolul TCP fiind un protocol orientat pe conexiune presupune realizarea
unei conexiuni indiferent de numrul de pachete transmise ntre cele 2 hosturi. Dup
cum se observ n imaginea urmtoare pentru transmiterea unui singur pachet de
cerere a unei informaii (request) i a unia de rspuns (reply) este necesar
transmiterea unui numr mare de pachete ntre cele 2 hosturi care duc la cresterea
timpului de transmisie a datelor utile.
n cazul folosirii protocolului TCP Tranzacional mai multe pacete sunt
cumulate ntr-unul singur astfel fiind necesar transmiterea numai a 3 pachete ntre
hosturi comapartiv cu 11 din varianta iniial.[1]
Host 1 Host 2
ACK=x+2
ACK=x+4
ACK=x+5
ACK=x+7
SEQ=x
SEQ=x+2
SEQ=x+1
SEQ=x+3
SEQ=x+4
SEQ=x+5
SEQ=x+7
SEQ=x+6
ACK=x+6
ACK=x+1
ACK=x+2
12) Bibliografie
o [1]Andrew S. Tanenbaum ,Computer Networks
o [2]http://en.wikipedia.org/wiki/Transmission_Control_Protocol
o [3] http://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed_new.svg
o [4] http://ro.wikipedia.org/wiki/TCP/IP
o [5]http://condor.depaul.edu/jkristof/technotes/tcp.html
o [6]http://www.unibuc.ro/prof/niculae_c_m/telecom/transm_ctrl_prot_tcp.htm
o [7]http://www.cisco.com/web/about/ac123/ac147/ac174/ac195/about_cisco_i
pj_archive_article09186a00800c83f8.html
o [8]http://www3.gdin.edu.cn/jpkc/dzxnw/jsjkj/chapter3/35.htm
o [9] http://www.faqs.org/rfcs/rfc2001.html
o [10]http://www.cs.umd.edu/~shankar/417-F01/Slides/chapter3b/sld015.htm
o [11]http://nptel.iitm.ac.in/courses/IIT-
MADRAS/Computer_Networks/pdf/Lecture37_TCPConnectionMgmt.pdf
o [12]http://en.wikipedia.org/wiki/Slow-start
o [13] http://www.fcoe.ru/english/data-transfer-protocols-overview/25-fcip
Host 1 Host 2
SYN, request, FIN
ACK
SYN, ACK, reply, FIN
)
Host 1 Host 2
ACK(FIN)
FIN
SIN
ACK(FIN)
ACK(SYN)
request
FIN
reply
ACK(request)
SYN,ACK(SYN)
ACK(reply
)
C. Algoritmi de control al congestiei
Tic Andra Maria
1. Definirea problemei [5]
Congestia apare in reelele de calculatoare atunci cnd incrcarea depete
posibilitile acesteia de a transfera datele. Incrcarea unei reele la un moment dat
nu depinde numai de capacitatea ei de transmitere ci i de erorile care apar n mediul
de transmisie, de viteza de prelucrare in noduri i de mecanismele de confirmare
folosite de receptor.
Controlul acestui fenomen intr in responsabilitatea nivelelor de transport i de
reea. Apare ca rezultat al traficului intens la nivelul transport, propagndu-se la
nivelul reea, performanele totale ale sistemului degradndu-se prin intrzierea i
pierderea pachetelor de date.
Aceast situaie este prezentat in graficul urmtor:
[5]
Acesta prezint cele trei situaii posibile: transportul optim, trasportul dorit i
cazul in care intr-o reea sunt prezente foarte multe pachete i performanele
acesteia se degradeaz aprnd fenomenul de congestie. Putem spune c atunci
cnd numrul de pachete emise in reea nu depete capacitatea de trasport,
aceastea sunt livrate integral, excepie fcnd cele care prezint erori de transmisie.
In acest caz numrul pachetelor livrate este proporional cu numrul celor emise.
Atunci cnd traficul crete prea mult, ruterele incep s nu mai fac fa i s piard
pachete. Aceast situaie se poate deteriora complet la un trafic intens, ducnd
sistemul in imposibilitatea de a mai livra pachete.
Congestia apare ca rezultat al mai multor factori.
In situaia in care la sosirea unui numr mare de pachete provenind de pe mai
multe linii de intrare intr-o singur linie de ieire, atunci se va forma o coada. Pentru a
le pstra pe toate, sistemul necesit memorie, iar creterea acestei capaciti de
memorare duce la inrutirea congestiei i nu la ameliorarea ei.
Un alt factor care cauzeaz congestia este reprezentat de viteza
procesoarelor. Dac unitatea central a ruterelor este lent in execuia funciilor sale,
cozile pot crete. i liniile cu lime de band sczuta pot provoca congestia.
Schimbarea liniilor cu unele mai performante i pstrarea aceluiai procesor sau
invers ajut puin, deoarece problema ine de incompatibilitatea intre prile
sistemului i aceasta va persista pn la aducerea la echilibru a tuturor
componentelor.
Controlul congestiei trebuie s asigure capabilitatea reelei de a transporta
intreg traficul implicat. Este o problem globala care implic comportamentul tuturor
calculatoarelor gazd i al ruterelor.
2. Soluii posibile. Clasificarea Yang&Reddy a algoritmilor.
Prezena congestiei inseamn c incrcarea momentan a sistemului este mai
mare dect capacitatea resurselor care pot fi gestionate de sistem la acel moment de
timp. Sunt posibile dou soluii dar eficacitatea acesora nu ofer o rezolvare definitiv
a acestei probleme: sporirea resurselor sau reducerea incrcrii.
Sporirea resurselor const in creterea temporar a limii de band intre
anumite puncte ale reelei. Dar uneori nu este posibil creterea capacitii de
transfer sau aceasta i-a atins deja limitele. In acest moment singura cale de a
rezolva congestia este reducerea incrcrii prin urmtoarele metode: interzicerea
unor servicii ctre anumii utilizatori, degradarea serviciilor pentru o parte sau pentru
toi utilizatorii sau planificarea cererilor utilizatorilor intr-o manier mai previzibil.
Aceasta abordare conduce la imprirea soluiilor in dou grupe: in bucl
deschis i in bucl inchis.
Soluiile in bucl deschis incearc s rezolve problema printr-o proiectare
atent, asigurnd evitarea apariiei acesteia. Dup ce sistemul se pornete i se
verific funcionarea acestuia, nu se mai fac niciun fel de corecii. Se iau decizii fr a
se ine cont de starea curent a reelei: instrumentele de realizare a controlului in
bucla deschis decid cnd s se accepte trafic nou, cnd s se distrug pachete i
care dintre acestea, realiznd planificarea deciziilor in diferite puncte din reea.
Soluiile in bucl inchis se bazeaz pe conceptul de reacie invers, aceast
abordare avnd trei prti:
- Monitorizarea sistemului pentru a detecta cnd i unde se produce
congestia.
- Trimiterea acestor informaii ctre locurile unde se pot executa aciuni.
- Corectarea problemei prin ajustarea funcionrii sistemului.
Se cunosc numeroi algortimi pentru controlul congestiei, iar Yang i Reddy
au realizat o clasificare a acestora, studiind in principal cele patru clase de algoritmi
centrai pe host-uri:
Algoritmi centrai pe host-uri
- Algoritmi in bucl deschis
Algoritmi care acioneaz asupra sursei
Algoritmi care acioneaz asupra destinaiei
- Algoritmi in bucl inchis
Algoritmi cu feedback implicit sursa deduce existena
congestiei din observaii locale, cum ar fi timpul necesar
pentru intoarcerea confirmrilor.
Agoritmi cu feedback explicit pachetele sunt trimise
inapoi de la punctul unde s-a produs congestia ctre
sursa, pentru a o avertiza.
Algoritmi centrai pe rutere
- Ruterele inltura congestia prin renunarea la pachete.
- Ruterele semnaleaz congestia i nu particip activ la inlturarea
ei.
3. Algoritmi de control a congestiei
3.1. Algoritmul RED Random Early Detection [1] face parte din
clasa algoritmilor de evitare a congestiei centrai pe rutere, unde
ruterele au un rol activ in inlturarea congestiei prin marcarea
pachetelor. Aceast abordare incearc s previn formarea de cozi la
intrarea in reea prin renunarea la pachete inainte de producerea
propriu-zis a fenomenului de congestie. Congestia incipient este
detectata de gateway-uri prin calculul dimensiunii medii a cozii. Acestea
pot anuna congestionarea unor conexiuni fie prin renuntarea la
pachetele care ajung in dreptul gateway-ului respectiv sau prin
trimiterea unui bit cu rol de flag in header-ele pachetelor. Cnd
dimensiunea medie a cozii depete un anumit prag presetat,
gateway-urile renun sau marcheaz fiecare pachet care ajunge cu o
anumit probabilitate in funcie de valoarea mediei calculate. In acest
mod, algoritmul RED pastreaz dimensiunea medie a cozii sczute dar
permite acumularea ocazional in coad a unui numr mare de
pachete.
In reelele de mare vitez se dorete conceperea de gateway-uri care s
suporte cozi de dimensiuni ct mai mari pentru a evita congestionarea acestora. Este
din ce in ce mai important s se gseasc mecanisme pentru o livrare optim a
pachetelor din punctul de vedere al intrzierilor, dar in acelai timp s se pstreze o
dimensiune medie a cozilor ct mai sczut.
Cel mai efectiv mod de detectare al congestiei are loc chiar la gateway-urile
reelei, deoarece numai aici se poate vizualiza comportamentul cozilor in timp.
Metoda de monitorizare a dimensiunii medii a cozii la gateway-ul reelei i de a
semnala conexiuni care se afl in faza incipient de congestie este bazat pe
presupunerea c va fi util sa avem cozi la gateway-uri unde traficul mai multor
conexiuni este multiplexat dup algoritmul FIFO. FIFO este util aici la reducerea
intrzierii pentru o anumit conexiune atunci cnd ea e foarte incrcat, prin
imprirea intrzierii totale intre toate conexiunile.
Algoritmul RED este conceput pentru reelele unde marcarea unui pachet este
suficient pentru a semnala prezena congestiei. Acest mecanism de control
monitorizeaz dimensiunea medie pentru fiecare coad de ieire i alege intr-un mod
aleatoriu ce conxiune s fie notificat de apariia congestiei. Congestiile tranzitorii
sunt eliminate prin creterea temporar a dimensiunii cozii. Congestiile de lung
durat sunt sesizate prin creterea dimensiunii medii a cozii, avnd ca rezultat
transmiterea aleatorie de rspunsuri ctre unele conexiuni pentru a-i micora
ferestrele. Probabilitatea ca o conexiune s fie notificat de apariia congestiei este
proporional cu proporia de participare a conexiunii respective la incrcare.
Algoritmul RED calculeaz dimensiunea medie a cozii folosing un filtru trece-
jos de tip EWMA Exponential/Weighted Moving Average. Dimensiunea medie este
comparat cu dou praguri, unul de minim i celalalt de maxim. Cnd media este mai
mica decat pragul minim niciun pachet nu e marcat. Cnd media depeste pragul
maxim, toate pachetele care ajung sunt marcate. Dac media se afl intre cele dou
praguri, fiecare pachet care ajunge este marcat cu probabilitatea pa , unde
pa=f(media avg). Astfel, de fiecare dat cnd un pachet este marcat, probabilitatea
ca un pachet s fie marcat ca venind de la o anumit conexiune este proporional
cu proporia de participare a acelei conexiuni la incrcare.
In cele ce urmeaz este dat algoritmul general RED:
Pentru fiecare pachet care ajunge
Se calculeaz dimensiunea medie a cozii avg
Dac min avg max
Se calculeaz probabilitatea pa
Se marcheaz pachetul cu probabilitatea pa
Altfel
Dac max avg se marcheaz pachetul.
Dupa cum se vede algortimul RED const in calcularea dimensiunii medii a
cozii i a probabilitaii de marcare a pachetelor. Prin determinarea mediei se
determin gradul de incrcare a reelei. Probabilitatea de marcare a pachetelor arat
frecvena cu care pachetele sunt marcate tiind c se cunoate nivelul curent de
congestie.
Algoritmul detaliat este urmtorul:
Iniializare: avg=0, count=-1
Pentru fiecare pachet care ajunge
Se calculeaz dimensiunea medie a cozii avg
Dac coada nu e goal avg=(1-w)avg+w*q
Altfel m=f(time-q_time ) i avg=(1-w)
m
avg
Dac min avg max
Cout=cout+1
Se calculeaz probabilitatea pa : pb=maxp(avg-min)/(max-min)
pa=pb/(1-count*pb)
Se marcheaz pachetul probabilitatea pa i count=0
Altfel
Dac max avg se marcheaz pachetul i count=0
Altfel count=-1
Cnd coada devine vid q_time=time.
Variabile salvate: avg, q_time=timpul in care coada e goala, count=numrul de
pachete ajunse de la ultimul pachet marcat.
Parametrii fici: w= greutatea cozii, min, max ,maxp=max(pb)
Ali parametrii: pa, q=dimesiunea cozii curente, time=timpul curent, f(t)=o
funcie liniar de t.
Calculul dimensiunii medii ine cont de perioada in care coada e goal,
estimnd numrul m de mici pachete care ar fi putut fi transmise in acest timp. Dup
perioada in care coada a fost goal se calculeaz dimensiunea medie ca i cum m
pachete ar fi ajuns in coada in acea perioad. Dupa cum avg variaz de la min la
max probabilitatea de marcare a pachetelor variaz liniar de la 0 la maxp:
pb=maxp(avg-min)/(max-min).
Probabilitatea final de marcare a pachetelor pa crete incet in timp ce count
crete incepnd de la marcarea ultimului pachet: pa=pb/(1-count*pb). Se asigur
astfel diminuarea timpului de ateptare intre marcarea pachetelor.
Exist i opiunea de a masura coada in bytes i nu in pachete. In acest caz
dimensiunea medie reflect intrzierea medie la gateway. Cnd se folosete aceast
opiune, algoritmul trebuie modificat pentru a asigura c probabilitatea ca un pachet
s fie marcat s fie proporional cu dimensiunea pachetului in bytes:
pb=maxp(avg-min)/(max-min)
pb=pb*dim_pachet/dim_max_pachet
pa=pb/(1-count*pb)
Greutatea cozii (w) este determinat de dimensiunea i durata incrcrilor
brute ale cozii care sunt admise la gateway. Pragurile min i max sunt determinate
de dimensiunea medie dorit a cozii, care depinde la rndul ei de caracteristicile
reelei.
3.1.1 Calcularea lungimii medii a cozii
Se folosete un filtru trece-jos de tip EWMA Exponential/Weighted Moving
Average:
avg=(1-w)avg+w*q
Greutatea w determin constanta de timp a filtrului trece-jos.
Limita superioara a lui w
Dac w este prea mare, la gateway nu vor putea fi eliminate congestiile
cauzate de incrcri tranzitorii.
Presupunem c iniial coada este goal, cu o medie 0, lungimea
acesteia crescnd de la 0 la L pachete. Dup ce i ultimul L pachet a
ajuns in coad, o s avem:
1
1 1
1 (1 ) 1
(1 ) (1 ) ( ) 1
1
L L L
L i L i
i i
w
avgL iw w w w i L
w w
+
= =
= = = + +
Mai sus s-a folosit urmtoarea identitate:
1
2
1
( 1)
(1 )
L L
i
i
x Lx L x
ix
x
+
=
+
=
Fiind dat paragul minim min i tiind c admitem incrcri de L pachete
la gateway, atunci w trebuie s satisfac urmatoarea inecuaie:
1
(1 ) 1
1 min
L
w
L
w
+
+ + <
Limita inferioar a lui w
Dac w are setat o valoare prea mic atunci modificrile din coad se
vor sesiza greu, deoarece valorile lui avg vor inregistra fluctuaii foarte
reduse. Astfel stadiile iniiale de congestie vor fi mai greu de depistat.
Presupunem c dimensiunea cozii se schimb de la 0 la un pachet, c
odata cu sosirea i plecarea pachetelor dimensiunea ei de un pachet nu
se modific i c dimensiunea medie iniiala a fost 0. In acest caz este
nevoie s ajung -1/ln(1-w) pachete pn cnd avg ajunge la valoarea
0.63=1-1/e.
Setarea pragurilor de min i max
Valorile optime pentru min i max depind de lungimea medie dorit a
cozii. Valoarea optim pentru max depinde mai ales de intrzierea
maxim admis de gateway. Se folosete in general o valoare a lui max
astfel inct s fie dublul lui min.
3.1.2 Calcularea probabilitaii de marcare a pachetelor
Probabilitatea iniiala de marcare a pachetelor pb este calculat ca funcie
liniar a dimensiunii medii a cozii:
pb=maxp(avg-min)/(max-min)
Metoda 1. Variabile aleatoare geometrice.
Fie pb - probabilitatea de marcare a fiecrui pachet i X numrul de
pachete care ajung intre dou marcri succesive. X este o variabil
aleatoare geometric cu parametrul pb i E[X]=1/pb.
Deoarece fiecare pachet este marcat cu probabilitatea pb avem:
1
P( ) (1 )
n
X n pb pb
= =
Cu o dimensiune medie a cozii constant, scopul este s marcm
pachete la intervale regulate. Nu este de dorti s avem pachete
marcate nici prea des, dar nici s inregistrm intervale lungi de timp
intre marcri succesive. Se realizeaz astfel o sincronizare global,
anumite conexiuni modificndu-i ferestrele in acelai timp.
Metoda 2. Variabile aleatoare uniforme.
In acest caz X este o variabil aleatoare distribuit uniform in mulimea
{1,2,....1/pb}. Acest lucru se intmpl dac probabilitatea de marcare a
fiecrui pachet este pb/(1-count*pb), unde count=numrul de pachete
nemarcate intre dou marcri succesive.
In acest caz:
2
0
P( ) (1 ) 1 1/
1 ( 1) 1
n
i
pb pb
X n pb pentru n pb
n pb i pb
=
= = = s s
[
P( ) 0 1/ X n pentrun pb = = >
Pentru aceast metoda E[X]=1/(2pb)+1/2.
3.1.3 Implementarea algoritmului RED
Initializare: avg=0 si count=-1
Pentru fiecare pachet care ajunge
Se calculeaza noua dimensiune medie avg
Daca coada nu este goala atunci avg=avg+w(q-avg)
Altfel
( _ )
(1 )
time q time s
avg w avg
=
Daca minavgmax atunci
count=count+1 si pb=C1*avg-C2
Daca count>0 si countround(R/pb) atunci se marcheaza
pachetul care va ajunge si count=0
Daca count=0 atunci R=random[0,1]
Altfel
Daca maxavg atunci se marcheaza pachetul care va ajunge si
count=-1
Altfel count=-1
Cand coada devine vida q_time=time
R un numar aleator, s timp de transmisiune tipic.
Concluzie
RED este un mecanism eficient pentru evitarea congestiei la gateway-uri in
cooperare cu protocoalele de transport. Este un algoritm relativ simplu care poate fi
implementat in reelele de mare vitez.
Exista inc aspecte de rezolvat in legatur cu acest algoritm: determinarea
dimensiunii medii optime a cozii pentru a maximiza numrul de pachete transmise
corect i a minimiza intrzierile pentru diverse configuraii de reele, implementarea
RED cu alte protocoale de transport inafar de TCP.
3.2 Algortimul GAIMD General Additive Increase Multiplicative
Decrease [2] este o strategie de evitare a congestiei prin ajustarea dimensiunii
ferestrei. Astfel, in starea de evitare a congestiei dimensiunea ferestrei va fi crescut
cu un parametru , iar la apariia propriu-zis a congestiei dimensiunea acesteia va fi
micorata multiplicativ cu .
Aceast tehnic a fost pentru prima data considerat de Chiu&Jain. Ei au
demonstrat c dac i respect urmtoarele relaii, atunci controlul congestiei
GAIMD are stabilitate i se realizeaz corect: >0 si 0<<1. Studiul lor a considerat
numai cazul cnd toate fluxurile de transmisiuni din reea folosesc aceleai valori
pentru i i nu au studiat efectele acestor parametrii asupra performanei.
Yang&Lam au continuat studiul, explornd in detaliu relaia dintre performana i
diferite valori ale celor doi parametrii. In particular, ei au modelat rata de transmisiune
in funcie de , , a ratei de pierderi, a mediei de timp tur-retur, media timpului de
pauz i a numrului de pachete pe care fiecare ACK le confirm. In continuare au
adaptat acest rezultat, gsind o relaie simpl intre i pentru ca fluxul de date s
fie de tip TCP-friendly.
3.2.1. Modelarea ratei de transmisiune
O sesiune GAIMD incepe in starea slowstart cnd dimensiunea ferestrei de
congestie este dublat pentru fiecare fereastra de pachete confirmate ca primite. La
prima indicare a congestiei, fereastra de congestie este tiata in dou i sesiunea
intr in starea de evitare a congestiei. In aceasta stare, fereastra de congestie este
mrit cu /W pentru fiecare ACK primit, unde W este dimensiunea ferestrei de
congestie curent. Vom spune astfel c dimensiunea ferestrei va fi crescut cu la
fiecare tur-retur. GAIMD schimb dimensiunea ferestrei scznd din aceasta W
cnd congestia a fost detectat printr-o confirmare de tip triplu-dublu ACK. Dac
detectarea s-a fcut prin detectarea unui timeout, dimensiunea ferestrei va fi setat la
valoarea 1.
W=W+/W, >0 evitarea congestiei
W=W - W, 0<<1 congestie detectat printr-o confirmare de tip triplu-dublu
ACK
W=1 - detectarea unui timeout
La modelarea ratei de transmisiune s-au fcut urmtoarele presupuneri:
Sursa mereu are date de transmis.
Rata de transmisiune este un proces aleatoriu.
Se ignor impactul etapei de slowstart, punndu-se accentul pe
mecanismul de avitare a congestiei.
Mecanismul GAIMD de evitare a congestiei lucreaz cu timpi de tur-
retur.
Pierderile intr-un tur-retur sunt independente: cnd un pachet este
pierdut inseamn c toate pachetele care ii urmeaz in acel tur-retur
sunt de asemenea pierdute. Se noteaz cu p probabilitatea ca un
pachet sa fie pierdut.
Formula ratei de transmisiune este:
, 0
2
2
0
1
( , , , )
2 (1 ) (1 )
min(1, 3 ) (1 32 )
(1 ) 2
T p RTT T b
b b
RTT p T p p p
o |
| |
o | o
=
+ +
+
Observm c numitorul formulei de mai sus este alctuit din doi termeni pe
care ii vom nota astfel:
,
2
2
, 0 0
2 (1 )
( , , )
(1 )
(1 )
( , , ) min(1, 3 ) (1 32 )
2
b
TD p RTT b RTT p
b
TO p T b T p p p
o |
o |
|
o |
|
o
=
+
= +
Numitorul formulei conine numai TD dac congestia a fost identificat prin
triplu-dublu ACK. Al doilea termen TO este adugat cnd congestia poate fi
indicat att prin triplu-dublu ACK ct i prin timeout.
Termenul
2
(1 )
min(1, 3 )
2
b
Q p
|
o
=
+
TO TCP-friendly
Acum pstrm cel de-al doilea termen al numitorului i renunm la variabilele
p,To si b din ambii termeni ai ecuaiei:
, 0 1 0
1,
2
( , , ) ( , , ) TO p T b TO p T b
o |
=
2 2
(1 ) (1 0.5 )
1
|
o
=
In urma calculelor obinem:
2
4(1 )
3
|
o
=
3.3 Algoritmii HSTCP High Speed TCP si STCP Scalable TCP [3]
3.3.1 HSTCP High Speed TCP este un algoritm de tip additive increase
multiplicative decrease (AIMD), cu deosebirea c cei doi factori i depind de
dimensiunea ferestrei.
Considerm
i
w ca fiind dimensiunea ferestrei chiar inaintea unei pierderi i
RTTi, timpul de tur-retur, pentru dou ferestre i=1,2. Fie t, intervalul dintre dou
pierderi consecutive.
1 1 1 1
1
2 2 2 2
2
(1 ( )) ( )
(1 ( )) ( )
t
w w w w
RTT
t
w w w w
RTT
| o
| o
= +
= +
Substituind
2
2 ( ) ( )
( )
2 ( )
w w p w
w
w
|
o
|
=
si
0.82
0.15
( )
w
p w
=
obinem:
4.56
1 2 2
2 1 1
2 ( )
2 ( )
w w RTT
w w RTT
|
|
| |
=
|
\ .
3.3.2 STCP Scalable TCP este un algoritm de tip multiplicative increase
multiplicative decrease (MIMD) cu factorii i :
1
2
1 1
2 2
(1 ) (1 )
(1 ) (1 )
t
RTT
t
RTT
w w
w w
| o
| o
= + +
= + +
3.6 Algortimul binomial BITCP Binary Increase TCP [3] este un algoritm
de control al congestiei care adapteaz controlul ferestrei in funcie de dimensiunea
acesteia. Acesta const in dou pri: cutare prin cretere binar (binary search
increase) i creterea aditiv a dimensiunii ferestrei (additive increase).
3.6.1 Binary search increase
In aceast etap privim controlul congestiei ca pe o problem de cutare in
care sistemul poate rspunde prin da sau nu atunci cnd vrem s stim dac rata de
transmisiune curent depete sau nu capacitatea reelei. Fereastra minim curent
poate fi estimat ca dimensiunea ferestrei atunci cnd nu avem pierderi.
Dac se tie dimensiunea maxim a ferestrei, putem s aplicm o tehnic de
cutare binar pentru a seta dimensiunea ferestrei curente la dimensiunea medie
dintre minimul estimat i maximul cunoscut. Dac aceast dimensiune d pierderi,
noua fereastr poate fi tratat ca un nou maxim, iar dimensiunea ferestrei dup
pierderea pachetelor devine noul minim. Media acestor valori devine noul optim.
Acest proces de recalculare a minimului i maximului are loc pn cnd
diferena dintre dimensiunea maxim i cea minim scade sub un nivel prestabilit
numit incrementare minim Smin.
3.6.2 Additive increase
Pentru a asigura o convergen rapid a algoritmului i corectitudinea, se
combin cutarea binar cu o strategie de cretere aditiv. Cnd distana dintre
dimensiunea medie i minimul curent este foarte mare, creterea dimensiunii
ferestrei direct la cea medie este un factor de risc in reea. Astfel, cnd distana dintre
dimensiunea ferestrei curente i cea medie este mai mare dect o valoare presetat,
numit increment maxim Smax, in loc s cretem dimensiunea ferestrei direct la
acea valoare medie in urmtorul RTT, o s o cretem cu Smax pn cnd distana
va deveni mai mica decat Smax, moment in care dimensiunea va fi setata direct la
valoarea medie.
3.6.3 Slow start
Atunci cnd dimensiunea ferestrei curente devine mai mare decat valoarea
maxim, nu cunoatem noul maxim. In acest moment se va aplica tehnica de cutare
binar care va seta un maxim egal cu o valoare presetat i dimensiunea ferestrei
curente la o valoare minim. Vom folosi o strategie de tip slow start pentru a cuta
o valoare a maximului mai mica dect Smax. Dac considerm cwnd dimensiunea
curenta a ferestrei i incrementul maxim Smax, la fiecare RTT dimensinea ferestrei
va crete astfel: cwnd+1, cwnd+2....cwnd+Smax. In acest mod se caut banda
disponibil pn cnd se asigur faptul c o cretere cu Smax este neduntoare.
Dup aceast etapa se va crete dimensiunea la fiecare RTT cu Smax.
3.6.4 Implementare
Se folosesc urmtorii parametrii presetai:
- low_window acest algoritm este activat in momentul in care
dimensiune ferestrei curente depaseste aceasta valoare
- Smax increment maxim
- Smin increment minim
- factorul de scadere multiplicativa a dimensiunii ferestrei
- default_max_win maximul presetat
Se folosesc urmtoarele variabile:
- max_win dimensiunea maxima a ferestrei care la inceput a valoarea
presetata
- min_win dimensiunea minima a ferestrei
- prev_win dimensiunea maxima chiar inainte de setarea nouui maxim
- target_win media dintre minim si maxim
- cwnd dimeniunea ferestrei de congestie
- is_BITCP_ss variabila booleana care indica daca suntem sau nu in
etapa slow start. Se initializeaza cu false.
- ss_cwnd o varibila care stocheaza cu cat se creste cwnd curent in
etapa slow start
- ss_target stocheaza fiecare valoare a cwnd dupa fiecare RTT in
etapa slow start
Algoritmul BI-TCP:
Cnd se intr in fast recovery:
if(low_window<=cwnd){
prev_max=max_win;
max_win=cwnd;
cwnd=cwnd*(1-);
min_win=cwnd;
if(prev_max>max_win) max_win=(max_win+min_win)/2;
target_win=(max_win+min_win)/2;
} else { cwnd=cwnd*0.5; }
Cand nu se afl in fast recovery i ajunge un ACK pentru un nou pachet:
if(low_window>cwnd) { cwnd=cwnd+1/cwnd; return;}
if(is_BITCP_ss is false ){
if(target_win-cwnd<Smax) cwnd+=(target_win-cwnd)/cwnd;
else cwnd+=Smax/cwnd;
if(max_win>cwnd){
min_win=cwnd;
target_win= (max_win+min_win)/2;
} esle { is_BITCP_ss=true;
ss_cwnd=1;
ss_target=cwnd+1;
max_win=default_max_win;
}
} else {
cwnd+=ss_cwnd/cwnd;
if(cwnd>=ss_target){
ss_cwnd=2*ss_cwnd;
ss_target+=ss_cwnd;
}
if(ss_cwnd>=Smax) is_BITCP_ss=false;
}
3.7 Algortimul SIMD Square Increase Multiplicative Decrease [4] este un
mecanism de control al congestiei cu memorie. Folosete micorarea multiplicativ
precum AIMD dar creterea dimensiunii ferestrei se face cu rdcina timpului scurs
de la detectarea ultimei pierderi. SIMD este TCP-friendly i TCP-compatibil. Are un
comportament convergent mult mai bun decat TCP-friendly GAIMD si algoritmul
binomial descrise in subcapitolele anterioare.
SIMD folosete pe lng dimensiunea ferestrei curente i informaii memorate
referitoare la conexiunile reelei. Aceast informaie este reprezentat de
dimensiunea ferestrei la momenul detectrii ultimei pierderi. Fereastra este micorat
multiplicativ dar creterea se realizeaz cu rdcina timpului scurs de la detectarea
ultimei pierderi.
Algortimul SIMD
Cretere:
0
W W W W o = + , >0 unde
0
W este dimensiunea ferestrei dup
ultima micorare a acesteia.
Micorare: W=W- W, 0<<1
Fie w(t) aproximarea continu a dimensiunii ferestrei la momentul t scurs din
momentul inceperii creterii ferestrei i w=w(0).
Folosind interpolarea liniar i aproximarea continu in formula de cretere,
obinem:
0
( )
( )
dw t
w t w
dt
o = , de unde rezult:
0
1
( )
( )
dw t dt
w t w
o =
.
Dup integrare se obine:
0
2 ( ) w t w t C o = + . Pentru t=0 avem w(t)=w(0) de
unde rezult C=0.
Se obine:
2
2
0
( )
4
w t w t
o
= + . Se poate astfel spune c SIMD devine agresiv cu
timpul adic poate s pun la dispoziie lime de band in plus cnd dispune de
aceasta.
SIMD TCP-friendly definirea lui atunci cnd se cunosc i variabila de
stare wmax.
Definim
3
(1 2 / 3) 2 max w
|
o
|
=
.
Din ultima formul putem spune c SIMD poate fi privit ca un AIMD al crui
parametru variaz.
Concluzie
SIMD este un algoritm cu memorie care converge mai rapid dect algoritmii
fr memorie AIMD i binomial. De exemplu, dac exist dou fluxuri de tip SIMD
competitive atunci cel cu dimensiunea ferestrei mai mic este mai agresiv. Aceast
proprietate duce la obinerea unui comportament convergent mai bun.
3.9 Bibliografie
[1] Random Early Detection Gateways for Congestion Avoidance, Sally Floyd,
Van Jacobson
[2] General AIMD Congestion Control, Yang Richard Yang, Simon S. Lam
[3] Binary Increase Congestion Control for Fast, Long Distance Networks,
Lisong Xu, Khaled Harfoush, Injong Rhee
[4] TCP - friendly SIMD congestion Control and Its Convergence Behavior,
Shudong Jin, Liang Guo, Ibrahim Matta, Azer Bestavros
[5] Computer networks, Andrew S. Tanenbaum, David J. Wetherall, Fifth
Edition, 2011