On Thu, 2003-07-17 at 02:55, Gabriel Cernat wrote:
> La o comunicatie de layer transport- TCP, cum 
> stie receiver-ul cat sa astepte inainte sa transmita
>  un ACK ?

Depinde de implementare. TCP/IP e un protocol "strictly defined, loosely
implemented". :-/

Stivele nu trimit ACK-uri imediat dupa ce primesc pachetul, ci asteapta
citeva zecimi de secunda. Ideea e ca stiva zice "da' daca o sa am si
ceva date sa le trimit in directia aia? ce-ar fi sa astept nitzel,
poate-mi vin niste date de la procesele locale, si le combin cu ACK-ul
si le trimit impreuna".
Daca data vine mai devreme, e combinata cu ACK-ul si trimisa in acelasi
pachet. Daca nu, atunci stiva asteapta dupa un ceasornic: cind ticaie
ceasul, trimite ACK-ul asa cum e.

Apoi, Nagle zice ca daca pe o conexiune ai date care n-au fost ACK-uite,
nu poti trimite pachete mici pina nu ACK-uiesti datele alea. Daca nu ma
insel, in cazul ala toate firimiturile alea care asteptau sint vomitate
intr-un singur pachet (damn, trebuie sa revad teoria).

Daca aplicatia "stie ce face", poate dizabla Nagle si alte figuri
d-astea, punind TCP_NODELAY pe socket. Exemplu: X Windows (lasam ca
exercitiu pentru cititor sa-si dea seama de ce).

Mai sint si chestiile cu sliding windows... TCP e un protocol complex,
trebuie sa tocesti ceva carte pina te prinzi cind e cazul sa zici "acum
treb'e sa vina un ACK!". :-)

-- 
Florin Andrei

http://florin.myip.org/


Raspunde prin e-mail lui