End-to-end
# End-to-end

Il principio end-to-end o da estremo a estremo è uno dei principi della progettazione delle reti di computer e viene applicato su diversi protocolli di rete come il protocollo TCP.

## Storia

Questo concetto viene espresso nel 1981 da H. Saltzer, David P. Reed e David D. Clark, ma successivamente il principio ha avuto diverse interpretazioni. L'interpretazione del principio end-to-end e il modello di rete che ne consegue sono citati anche nell'ambito del tema della neutralità della rete.

## Caratteristiche

Il principio end-to-end afferma che, se si hanno due applicazioni che comunicano tramite una rete, tutte le funzioni e le operazioni specifiche richieste da tali applicazioni, come il controllo di errori, devono essere realizzate ed eseguite in modo completo nei nodi terminali (o end point) e non nei nodi intermedi (o intermediate node) della rete.

In caso contrario, cercando di ottenere delle funzioni operando sul canale di trasmissione invece che sui nodi estremi, si potrebbero non soddisfare i requisiti delle applicazioni oppure si potrebbe penalizzare le applicazioni presenti su altri nodi della rete.

Come conseguenza si afferma un nuovo modello di rete "stupida" con terminali "intelligenti" (in precedenza avveniva il contrario: rete "intelligente" e terminali "stupidi").

## Esempio di applicazione

Internet è una rete basata sulla suite di protocolli Internet e adotta la coppia di protocolli TCP/IP: il protocollo IP si occupa solo dell'instradamento della comunicazione lungo i nodi della rete, mentre il protocollo TCP stabilisce una connessione affidabile. In questo caso la parte IP è la parte "stupida" presente in tutti i nodi della rete, mentre la parte TCP è la parte "intelligente", presente nei nodi terminali (host).

Di conseguenza, nella trasmissione dati tra due processi client/server, l'entità TCP di un host (Client) comunica direttamente con l'entità TCP dell'altro host (Server) senza alcun'altra entità TCP intermediaria del livello di trasporto.

## Problemi di applicabilità

Il principio end-to-end ha alcuni limiti:

* non si può applicare nel caso in cui le applicazioni siano eseguite su diversi nodi (processi distribuiti)
* non chiarisce abbastanza quali siano le funzioni che devono essere implementate nel nodo terminale, in quanto si limita a dire "tutte le funzioni e le operazioni specifiche richieste da tali applicazioni" e questa definizione dipende dall'applicazione di cui si parla.
* non chiarisce abbastanza cosa fare nel caso in cui le funzioni richieste non possano essere realizzate ed eseguite in modo completo nei nodi terminali.
