Per dare una risposta breve: la finestra di ricezione è gestita dal destinatario, che invia le dimensioni della finestra al mittente. Le dimensioni della finestra annunciano il numero di byte ancora liberi nel buffer del ricevitore, cioè il numero di byte che il mittente può ancora inviare senza richiedere un riconoscimento dal ricevitore.
La finestra di congestione è una finestra imposta dal mittente che è stata implementata per evitare l'overrunning di alcuni router nel mezzo del percorso di rete. Il mittente, con ogni segmento inviato, aumenta leggermente la finestra di congestione, cioè il mittente si autorizzerà più dati inviati in sospeso. Ma se il mittente rileva la perdita di pacchetti, taglia la finestra a metà. La logica dietro questo è che il mittente si presume che la perdita di pacchetti si sia verificata a causa di un overflow del buffer da qualche parte (che è quasi sempre vero), quindi il mittente desidera mantenere meno dati "in volo" per evitare ulteriori perdite di pacchetti in futuro.
Per di più, cominciare da qui: http://en.wikipedia.org/wiki/Slow-start
Penso che questa sarebbe una misura migliore in un altro sito SE, in quanto questa non è una questione di programmazione o legato agli strumenti di sviluppo. – Lucero