# Controllo della congestione

Nell'ambito delle reti di telecomunicazioni il controllo della congestione è una funzionalità delle reti a commutazione di pacchetto, il cui scopo è prevenire e limitare i fenomeni di congestione che possono verificarsi nei nodi interni di commutazione della rete.

## Descrizione

In generale, in una rete di telecomunicazioni, un problema di congestione è determinato da un eccesso di domanda rispetto alle capacità trasmissive della rete.
Nelle reti a commutazione di circuito (es. la rete telefonica) una situazione di congestione si manifesta nella impossibilità di instaurare una connessione tra due terminali (telefonata). Tale circostanza viene manifestata all'utente che ha richiesto la telefonata attraverso uno speciale tono di congestione.
Nelle reti a commutazione di pacchetto, i pacchetti attraversano una grande quantità di dispositivi diversi, come ad esempio router, switch, bridge. Questi dispositivi, e i collegamenti che li interconnettono, hanno capacità di elaborazione e di trasmissione finite, che possono portare a situazioni di congestione, nelle quali i dispositivi suddetti non sono in grado di smistare tutto il traffico offerto in ingresso da varie connessioni tra utenti causando perdita di pacchetti e/o eccessivi ritardi.
Il termine controllo di congestione si applica specificamente alle reti a commutazione di pacchetto, nelle quali è possibile esercitare un'azione di controllo sulle sorgenti di traffico (rallentamento del tasso di trasmissione dei pacchetti) nel momento in cui viene rilevata una situazione di congestione. Un obiettivo desiderabile dei meccanismi di controllo della congestione è il perseguimento di una forma di equità (in Inglese, fairness) nella ripartizione delle risorse trasmissive tra i flussi di traffico concomitanti.
La funzionalità di controllo della congestione è suscettibile di diverse modalità di implementazione, che possono coinvolgere il livello di collegamento, di rete, di trasporto o anche il livello applicazioni.
I vari meccanismi di controllo della congestione differiscono per:
* la modalità con la quale si rileva la congestione o il suo approssimarsi;
* le azioni intraprese quando una congestione è rilevata.
La rilevazione della congestione può essere effettuata:
* dalla rete, attraverso una forma esplicita di segnalazione di congestione da parte dei dispositivi;
* dai terminali della comunicazione, che rilevano la congestione dagli effetti che essa produce su flusso di pacchetti scambiati (perdita di pacchetti).
Il controllo della congestione permette dunque di migliorare le prestazioni della rete evitando perdite di pacchetti e limitando il ritardo a causa delle ritrasmissioni dei pacchetti persi.
Si differenzia dal controllo di flusso che è invece un meccanismo di controllo di trasmissione finalizzato a non eccedere la capacità di memorizzazione del ricevitore, e quindi esclusivamente determinato dalla capacità del destinatario di ricevere e "consumare" i dati inviati dal mittente.

## Controllo della congestione in reti IP

Il protocollo di livello di rete IP non possiede strumenti di controllo della congestione. Questa funzionalità viene quindi implementata dai livelli superiori, sia per quanto riguarda la rilevazione della congestione che per quanto riguarda l'azione di riduzione del tasso di trasmissione. Il meccanismo Explicit Congestion Notification (ECN), definito nella RFC 3168, prevede un ruolo attivo dei router IP nella segnalazione di una imminente congestione agli endpoint TCP, attraverso un flag nell'header IP.
Il protocollo di trasporto TCP implementa un meccanismo end-to-end di controllo della congestione.
Altri protocolli di trasporto, quali UDP, non implementano forme di controllo della congestione.
Per applicazioni che non utilizzano TCP, le funzionalità di controllo di congestione possono essere realizzate al livello applicazione. I meccanismi di controllo di congestione implementati a livello applicazione perseguono l'obiettivo di essere TCP-friendly, ovvero quello di consentire alle sorgenti di traffico di trasmettere ad un tasso non superiore a quello consentito ad una sorgente TCP nelle stesse condizioni. Ciò al fine di perseguire, in situazioni di congestione, la equa ripartizione della capacità trasmissiva (fairness) tra flussi TCP e non-TCP. Esempi di meccanismi di controllo della congestione a livello applicazione sono TFRC (TCP Friendly Rate Control) e pgmcc. Lo schema di controllo della congestione TFRC si pone come obiettivo quello di competere in maniera equa con i flussi TCP su scale dei tempi di media durata, ma di consentire un tasso di trasmissione meno variabile di quello imposto da TCP su scale dei tempi brevi. A tal fine, TFRC misura la probabilità di perdita ed il round trip time di una comunicazione end-to-end ed usa questi come parametri per un modello del throughput TCP. Il throughput previsto da questo modello è quindi usato per determinare il tasso di trasmissione di un flusso TFRC.