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/
