Transmission Control Protocol: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Riga 170:
=== Controllo di flusso ===
{{vedi anche|Controllo di flusso}}L'affidabilità della comunicazione in TCP è garantita anche dal cosiddetto [[controllo di flusso]] ovvero far in modo che il flusso di dati in trasmissione non superi le capacità di ricezione ovvero di memorizzazione del ricevente con perdita di pacchetti e maggior peso e [[Latenza|latenze]] nelle successive richieste di ritrasmissione. Viene attuato attraverso la specifica da parte del destinatario di un opportuno campo noto come RCV_WND ([[finestra di ricezione]]), variabile dinamica (ossia dipendente dallo spazio disponibile) che specifica il numero massimo di segmenti ricevibili dal destinatario. Definito:
* ''LastByteRead'': numero dell'ultimo byte nel flusso di dati che il processo applicativo in B ha letto dal buffer
* ''LastByteRcvd:'' numero dell'ultimo byte nel flusso di dati proveniente dalla rete che è stato copiato nel buffer di ricezione RcvBuffer precedentemente allocato
allora necessariamente, dovendo TCP evitare l'overflow del proprio buffer, si avrà:
RCV_WND = ''RcvBuffer'' - [''LastByteRcvd'' - ''LastByteRead'']
dove ovviamente per negare l'overflow:
''RcvBuffer'' ≥ [''LastByteRcvd'' - ''LastByteRead'']
A sua volta il mittente terrà traccia dell'ultimo byte mandato e dell'ultimo byte per cui si è ricevuto l'ACK affinché esso non mandi in overflow il buffer del destinatario.
Si noti come, qualora la finestra di ricezione fosse vuota (RCV_WND == 0), il mittente continuerà ad inviare segmenti di un byte, in modo tale da garantire la sincronizzazione tra sender e receiver.
=== Problemi nel controllo di flusso in TCP ===
|