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:
{{vedi anche|Controllo di flusso}}
 
* ''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 ===