Sunteți pe pagina 1din 37

Reele Locale de Calculatoare

TCP Transmission Control


Protocol

curs 6
09.11.2009
11.11.2009

Universitatea POLITEHNICA Bucureti


Nivelul Transport

Ofer servicii nivelului Sesiune


Primete servicii de la nivelul Reea

Roluri
mprirea datelor n segmente
crearea de conexiuni
un nou mecanism de adresare (porturi)
controlul fluxului (controlul congestiei)
sigurana transmisiei (reliability)

Reele Locale de Calculatoare 2


Nivelul Transport (cont.)
Comunicaie ntre procese
process-to-process delivery
nivelul Reea - host-to-host delivery (comunicaie ntre
staii)
Modelul client-server
server
proces pasiv
ascult cereri de la clieni
client
procesul activ
iniiaz o conexiune ctre server
solicit un anumit serviciu
adresare prin porturi
un proces server (un serviciu) = un port listening

Reele Locale de Calculatoare 3


Modelul client-server

SSH client SSH server

50000 22

request Data 22 50000

22 50000 Data response

Reele Locale de Calculatoare 4


Porturi
Sistemul de adresare folosit de nivelul Transport
Asociat protocolului de nivel Transport
Port 100 UDP != Port 100 TCP

Existena mai multor procese pe aceeai staie


mai multe servicii pe acelei sistem
multiplexare prin porturi

16 biti valori de la 0 la 65535


Intervale de porturi (IANA)
Porturi rezervate (well-known): ntre 0 i 1023
SSH 22, FTP 21, Telnet 23, SMTP 25, HTTP 80
Porturi nregistrate: ntre 1024 i 49151
Kazaa, RMI Registry, MySQL, etc.
Porturi dinamice (efemere): de la 49152 la 65535
testare local
Reele Locale de Calculatoare 5
Porturi (cont.)

Procese Procese

Multiplexare Demultiplexare

IP IP

O pereche format dintr-o adresa IP si un port socket


(211.42.121.13, 50000)

Reele Locale de Calculatoare 6


Sockei de reea (Internet sockets)
"The combination of an IP address and a port
number is referred to as a socket." (Cisco)

Datagram sockets: UDP


sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

Stream socket: TCP


sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

Asocierea socketului la o adres i un port (bind)


addr.sin_family = AF_INET;
addr.sin_port = htons(50000);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr *) &addr, sizeof (addr));

Reele Locale de Calculatoare 7


UDP
User Datagram Protocol
Neorientat conexiune
Nesigur (unreliable) (segmente pierdute)
Fara controlul fluxului (segmente fr ordine)

Cnd se folosete UDP?


overhead mare indus de TCP
DNS, managementul reelei (SNMP)
comunicaii multimedia
controlul fluxului nu este foarte important
aplicaia asigur controlul fluxului
reele locale
Brood pe UDP :-)

Reele Locale de Calculatoare 8


Antetul UDP

0 16 31

Port sursa Port destinatie

Lungime Suma de control

Reele Locale de Calculatoare 9


Sockei UDP

nu are sens folosirea connect (dar se poate)


nu se creeaz un canal virtual de comunicaie

recvfrom i sendto

sendto(sockfd, buffer, BUF_SIZE, 0, (struct


sockaddr*)&target_host_address, sizeof(struct sockaddr));

recvfrom(s, buffer, BUF_SIZE, 0, (struct sockaddr*)&host_address,


&hst_addr_size);

Reele Locale de Calculatoare 10


TCP
Transmission Control Protocol
Orientat conexiune
circuit virtual n care are loc comunicaia
Protocol sigur (reliable)
datele ajung garantat la destinatie
datele ajung n ordine la destinaie
numere de secventa si numere de confirmare
Controlul fluxului
corelare sender i receiver
fereastr glisant
Controlul congestiei
Controlul erorii
sum de control

Reele Locale de Calculatoare 11


TCP (cont.)

Transmisie de tip flux de octeti (byte stream)

Folosire de timere
RTT Round Trip Time
keep-alive timer

TCP este folosit in 95% din comunicatiile din


Internet
HTTP, FTP, SMTP, POP3, IMAP, SSH etc.

Reele Locale de Calculatoare


Antetul TCP - imagine

0 31

Port surs Port destinaie

Numr de secven

Numr de confirmare
U A P R S F
HLEN Rezervat R C S S Y I Dimensiune fereastr
G K H T N N

Sum de control Pointer la date urgente

Opiuni Padding

Date

Reele Locale de Calculatoare 13


Antetul TCP porturi
Multiplexare prin porturi
process-to-process delivery
pot exista mai multe circuite virtuale ntre
dou staii

Flux de comunicaie (o conexiune) TCP


<adres IP surs, port surs, adresa IP
destinaie, port destinaie>

Substituie port surs port destinaie n


pachetele de rspuns
Reele Locale de Calculatoare 14
Antetul TCP numere de secven
Reprezentare pe 32 de biti
Numr de secven
indexul primului octet din segmentul TCP
n cadrul fiecrui segment
situaie:
primul octet are numarul de secven 1000
cel de-al 100-lea octet are numrul de secven 1099
Numr de confirmare
indexul urmatorului octet pe care receptorul se
ateapt s-l primeasc de la transmitor
confirmarea primirii datelor de pana la acest numar
nu este prezent n toate segmentele
activat de prezena cmpului (flag-ului) ACK

Reele Locale de Calculatoare 15


Antet TCP - Campuri de control
Grup de 8 bii din antetul TCP
Identific diverse stri ale protocolului
Mai muli bii pot fi activi simultan

URG
activare cmp Pointer la date urgente
offset pn la ultimul octet de date urgente

PSH
push function
pentru eficien TCP folosete buffere de intrare i ieire
golirea bufferelor livrare imediat
transmiterea secvenei login: n reea

Reele Locale de Calculatoare 16


Antet TCP Campuri de control
RST
resetarea conexiunii
invalidarea numerelor de secven

ACK
activare cmp Numr de confirmare

SYN
protocolul de iniiere a conexiunii (handshake)
stabilirea/sincronizarea numerelor de secven

FIN
protocolul de ncheiere a conexiunii
ncheierea transmisiei de la FIN-sender

Reele Locale de Calculatoare


Antet TCP Campuri de control (cont.)

RFC 3168
introducerea cmpurilor CWR i ECE
ECE
ECN Echo
CWR
Congestion Window Reduced
s-a primit un segment cu ECE activat

Reele Locale de Calculatoare


Antet TCP alte campuri
HLEN (Header Length)
lungimea antetului TCP n cuvinte de 32 de octei
maxim 15 (60 de octeti) > 40 de octei pentru opiuni

Dimensiune fereastr
spaiul pentru stocare date neconfirmate (receiver)
maxim 65535
opiune de scalare a ferestrei

Sum de control (antet + date)


Opiuni
diverse opiuni/extensii definite n RFC
specificarea MSS (Maximum Segment Size)
window scale
Reele Locale de Calculatoare 19
Iniierea conexiunii

Timp Statia A Statia B

Transmite SYN seq=x

Primete SYN

Transmite SYN seq=y,


ACK x+1

Primete SYN + ACK

Transmite ACK y+1

Primete ACK

Reele Locale de Calculatoare 20


Iniierea conexiunii (cont.)
Clientul este entitatea activ iniiaz conexiunea

Cmpul SYN activat


ISN Initial Sequence Number
numrul de secven dintr-un segment cu SYN activat

Protocolul de iniiere de conexiune - 3-way handshake


Primul pachet (SYN)
stabilirea ISN pentru comunicaia de la client la server
Al doilea pachet (SYN+ACK)
confirmarea primului pachet
stabilirea ISN pentru comunicaia de la server la client
Al treilea pachet (ACK)
confirmarea celui de-al doilea pachet
Cele dou ISN sunt generate aleator

Reele Locale de Calculatoare 21


Iniierea conexiunii - sockei
Serverul este n starea listening (serv_sockfd)
listen(serv_sockfd, 5);
conn_sockfd = accept(serv_sockfd, (struct sockaddr *)
&cli_addr, &cli_len);

Un nou socket pentru intermedierea comunicaiei


cu un clientul (conn_sockfd)
aceleai caracteristici cu socketul listener (IP, port)
demultiplexat pe baza peer-ului

Clientul iniiaz conexiunea


connect (cli_sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr));

Reele Locale de Calculatoare 22


Full duplex
De ce sunt necesare dou numere de secven?
comunicaia este full duplex
O conexiune TCP - dou canale virtuale de
comunicatie
client server
server client
Un socket - dou buffere
buffer de citire/recepie
buffer de scriere/transmitere
SO_RCVBUF, SO_SNDBUF
Este posibil comunicaie half-duplex prin
nchiderea unui capt al conexiunii
Care capt se nchide? De scriere sau de citire?
Reele Locale de Calculatoare 23
Incheierea conexiunii

Timp Statia A Statia B

Transmite FIN seq=x

Primete FIN

Transmite ACK x+1

Primete ACK
Transmite FIN seq=y,
ACK x+1

Primete FIN + ACK

Transmite ACK y+1

Primete ACK

Reele Locale de Calculatoare 24


Incheierea conexiunii (cont.)
Iniiat de oricare capt al transmisiei
Cmpul FIN activat

Protocol de tipul 4-way handshake


primul segment
cmpul FIN activ
al doilea segment este o confirmare a primului
conexiunea este pe jumtate nchis (HALF CLOSED)
comunicatia este intr-un singur sens
urmatoarele doua segmente nchid conexiunea n cellalt sens

Este posibil protocol de tipul 3-way handshake


cele doua entiti nchid conexiunea n acelai timp
al doilea i al treilea segment sunt unite

Reele Locale de Calculatoare 25


ncheierea conexiunii - sockei

Un capt nchide conexiunea (fie acesta clientul)


close (cli_sockfd);

Cellalt capt ateapt sosirea de cereri


Poate solicita, de asemenea, nchiderea conexiunii
n = read (conn_sockfd, buffer, BUF_LEN);
if (n == 0) { /* se inchide conexiunea */
printf (clientul %s a incheiat conexiunea\n,
inet_ntoa (cli_addr.sin_addr));
close (conn_sockfd);
}
...

Reele Locale de Calculatoare 26


Diagrama de stri
segment primit (aciune)/segment de transmis

Reele Locale de Calculatoare 27


Transmiterea de date

Dup inierea conexiunii


Receptorul controleaz transmisia (controlul fluxului)
Transmitere date
exista date de transmis
nu se va depi dimensiunea ferestrei anunat de receiver
Segment de confirmare pentru fiecare pachet de date
cmpul ACK activat
dimensiunea ferestrei receptorul (ci octei poate primi)
Receptorul confirma cel mai curent spatiu contiguu de
date primit
unele date se pot pierde
pot sosi duplicate
Timere pentru evitarea deadlock-urilor i a conexiunilor
care nu mai rspund

Reele Locale de Calculatoare 28


Fereastr glisant
ISN
numarul initial
de secventa

Numarul de secventa
(2^32)

Fereastra receptorului
(maxim 2^16)

Reele Locale de Calculatoare 29


Fereastr glisant (cont.)
Roluri
eficiena comunicaiei
controlul fluxului receptorul s nu fie ncrcat
Dimensiunea ferestrei transmitorului este
controlat de cea a receptorului
dimensiune mai mic n cazul unei congestii
Exemplu de funcionare
transmitorul primete un segment de confirmare cu
ACK=1000 i WIN=1200
receptorul i confirm octetul cu numrul 1000
receptorul i precizeaz dimensiunea fereastrei de 1200
transmitorul poate transmite segmente cu numere
de secven pn la ACK+WIN = 1000+1200 = 2200

Reele Locale de Calculatoare 30


Controlul congestiei
Congestie - aglomerarea datelor (receptor sau ruter din circuitul virtual)
Numr mare de algoritmi de control al traficului
Slow start
transmitorul controleaz viteza de transmisie
viteza cu care receptorul transmite segmente de confirmare determin viteza de
transmisie
Evitarea congestiei (congestion avoidance)
folosit n paralel cu Slow start
segmente de confirmare piedute reducerea dimensiunea ferestrei la jumtate
date retransmise dimensiunea ferestrei crete
Fast retransmit
prea multe segmente de confirmare la un singur pachet segmentul sigur a
ajuns
nu se ateapt expirarea timerului de retransmisie
Fast recovery
mai multe segmente de confirmare segmentul a ajuns
nu se mai pune problema pune problema congestiei
se ruleaz algoritmul Congestion avoidance retransmitere cu o fereastr mai
mare

Reele Locale de Calculatoare 31


Slow Start
Funcionarea sa este dictat fereastra
ISN= 1000
receptorului (rwnd), precum i de dou
cwnd = 1480
variabile locale:
seq=1001, 1480 fereastra de congestie congestion
ack=2481 window (cwnd)
cwnd = 2 seg. pragul de cretere slow start threshold
seq=2481, 1480
(ssthresh)
seq=3961, 1480 Funcionare:
ack=5441 este iniializat la MSS sau fereastra
cwnd = 3 seg. receptorului
seq=5441, 1480 n general receptorul va trimite
seq=6921, 1480 confirmare la fiecare dou pachete
ack=8401 dup fiecare rund de transmisie
seq=8401, 1480 fereastra de congestie se incrementeaz
ack=9881 cu numrul de confirmri primite, pn
cwnd = 5 seg. atinge valoarea ferestrei receptorului
sau a pragului de cretere
MSS = 1.480
rwnd= 100.000 la atingerea ssthresh conexiunea iese
cwnd = 1.480 din slow start pentru respectivul sens
Reele Locale de Calculatoare 32
Fast Retransmit i Fast Recovery
Pentru fiecare segment trimis TCP
cwnd = 11840
ateapt un interval de timp fix
seq=50000, 1480 (dependent de RTT). La expirarea
seq=51480, 1480 X acestui timp va iniia retransmiterea
seq=52960, 1480
segmentului
ack=51480
Pentru Fast Retransmit la primirea a 3
pachete de confirmare duplicate (4
confirmri identice) va considera
seq=54440, 1480

ack=51480 segmentul pierdut


seq=55920, 1480
n cazul unui segment pierdut pragul de
ack=51480 congestie de la transmitor se
seq=57400, 1480 njumtete:
ack=51480 ssthresh=cwnd/2=11840/2=5920
cwnd = 5920 Pentru Fast Recovery se consider cele
3 pachete de confirmare duplicate,
seq=51480, 1480
ack=58880
adugnd 3 segmente la cwnd:
cwnd=sshthresh+3 seg.

Reele Locale de Calculatoare 33


Timere TCP
MSL (Maximum Segment Life)
timp de ateptare a unui segment
la inchiderea conexiunii, socketul este eliberat dup timp 2*MSL
transmiterea ultimului pachet ACK
msur de siguranta in cazul in care ultimul ACK se pierde
bind: Address already in use
RTT (Round Trip Time)
o medie a timpului ntre transmiterea unui segment i
confirmarea acestuia
RTO (Retransmission Timeout)
timer de primire a confirmrii
Keepalive Timer
o conexiune nu schimb date (idle connection) la un interval
de timp dat se transmit segmente de testare a conexiunii (probe
segments)
de obicei stabilit la 2 ore
n absena confirmrii pentru un numr de segmente (de obicei
10) intervale de 75 de secunde

Reele Locale de Calculatoare 34


Opiuni TCP

configurarea dimensiunii buffer-ului de transmisie/recepie

int window_size = 128 * 1024;/* 128 kilobytes */


setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char *)
&window_size, sizeof(window_size));

activarea/dezactivarea timer-ului de keepalive

int ka_value = 0; /* deactivate keepalive */


setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (char *)
&ka_value, sizeof(int)));

Reele Locale de Calculatoare 35


TCP advances

TCP over wireless


TCP optimizat, n general, pentru transmisii de tip
wired
pierderea unui pachet -> congestie
micorarea dimensiunii ferestrei
TCP offload engines
dispozitive hardware care implementeaz TCP
evitarea complexitii TCP n software
creterea vitezei de transmisie
probleme
integrarea n sistemele de calcul actuale
necesitatea alterrii structurii sistemelor de operare

Reele Locale de Calculatoare


Cuvinte cheie
nivelul transport full-duplex
process-to-process ncheiere conexiune
modelul client-server 4-way handshake
porturi controlul congestiei
socketi fereastr glisant
TCP controlul fluxului
flux de octei controlul congestiei
conexiune slow start
URG, PSH, RST, ACK, congestion avoindance
SYN, FIN, ECE, CWR fast retransmit/recovery
iniiere conexiune TCP over wireless
3-way handshake TCP offload engine
ISN
Reele Locale de Calculatoare