TCP vs. UDP

Esistono due tipi di traffico IP (Internet Protocol). Sono TCP o Transmission Control Protocol e UDP o User Datagram Protocol . TCP è orientato alla connessione - una volta stabilita una connessione, i dati possono essere inviati bidirezionali. UDP è un protocollo Internet più semplice e senza connessione. Più messaggi vengono inviati come pacchetti in blocchi utilizzando UDP.

Tabella di confronto

TCP rispetto al grafico di confronto UDP
TCP UDP
Acronimo diProtocollo di controllo della trasmissioneUser Datagram Protocol o Universal Datagram Protocol
ConnessioneIl protocollo di controllo della trasmissione è un protocollo orientato alla connessione.User Datagram Protocol è un protocollo senza connessione.
FunzioneCome un messaggio si fa strada attraverso Internet da un computer all'altro. Questo è basato sulla connessione.UDP è anche un protocollo utilizzato nel trasporto o nel trasferimento dei messaggi. Questo non è basato sulla connessione, il che significa che un programma può inviare un carico di pacchetti a un altro e che sarebbe la fine della relazione.
usoTCP è adatto per applicazioni che richiedono elevata affidabilità e il tempo di trasmissione è relativamente meno critico.UDP è adatto per applicazioni che richiedono una trasmissione rapida ed efficiente, come i giochi. La natura senza stato di UDP è utile anche per i server che rispondono a piccole query da un numero enorme di client.
Utilizzare con altri protocolliHTTP, HTTPs, FTP, SMTP, TelnetDNS, DHCP, TFTP, SNMP, RIP, VOIP.
Ordinazione di pacchetti di datiTCP riorganizza i pacchetti di dati nell'ordine specificato.UDP non ha un ordine intrinseco in quanto tutti i pacchetti sono indipendenti l'uno dall'altro. Se è richiesto l'ordine, deve essere gestito dal livello applicazione.
Velocità di trasferimentoLa velocità per TCP è più lenta di UDP.UDP è più veloce perché non è stato tentato il recupero degli errori. È un protocollo "best effort".
AffidabilitàVi è la garanzia assoluta che i dati trasferiti rimangono intatti e arrivano nello stesso ordine in cui sono stati inviati.Non vi è alcuna garanzia che i messaggi o i pacchetti inviati vengano raggiunti.
Dimensione intestazioneLa dimensione dell'intestazione TCP è di 20 byteLa dimensione dell'intestazione UDP è di 8 byte.
Campi di intestazione comuniPorta di origine, Porta di destinazione, Verifica sommaPorta di origine, Porta di destinazione, Verifica somma
Streaming di datiI dati vengono letti come un flusso di byte, nessuna indicazione distintiva viene trasmessa ai confini del messaggio di segnale (segmento).I pacchetti vengono inviati singolarmente e vengono controllati per l'integrità solo se arrivano. I pacchetti hanno limiti definiti che vengono rispettati al momento della ricezione, il che significa che un'operazione di lettura sul socket del destinatario produrrà un intero messaggio come è stato originariamente inviato.
PesoTCP è pesante. TCP richiede tre pacchetti per impostare una connessione socket, prima di poter inviare qualsiasi dato utente. TCP gestisce l'affidabilità e il controllo della congestione.UDP è leggero. Non vi è alcun ordinamento di messaggi, nessuna connessione di tracciamento, ecc. È un piccolo livello di trasporto progettato sopra l'IP.
Controllo del flusso di datiTCP fa Flow Control. TCP richiede tre pacchetti per impostare una connessione socket, prima di poter inviare qualsiasi dato utente. TCP gestisce l'affidabilità e il controllo della congestione.UDP non ha un'opzione per il controllo del flusso
Controllo erroriTCP esegue il controllo degli errori e il ripristino degli errori. I pacchetti errati vengono ritrasmessi dalla sorgente alla destinazione.UDP esegue il controllo degli errori ma elimina semplicemente i pacchetti errati. Errore nel tentativo di recupero.
campi1. Numero sequenza, 2. Numero AcK, 3. Scostamento dati, 4. Riservato, 5. Bit di controllo, 6. Finestra, 7. Puntatore urgente 8. Opzioni, 9. Riempimento, 10. Verifica somma, 11. Porta sorgente, 12. Porta di destinazione1. Lunghezza, 2. Porta di origine, 3. Porta di destinazione, 4. Verifica somma
RiconoscimentoSegmenti di riconoscimentoNessun riconoscimento
Stretta di manoSYN, SYN-ACK, ACKNessuna stretta di mano (protocollo senza connessione)

Differenze nelle funzionalità di trasferimento dei dati

TCP garantisce una consegna affidabile e ordinata di un flusso di byte da utente a server o viceversa. UDP non è dedicato alle connessioni end-to-end e la comunicazione non verifica la prontezza del ricevitore.

Affidabilità

TCP è più affidabile poiché gestisce il riconoscimento dei messaggi e le ritrasmissioni in caso di parti perse. Quindi non ci sono assolutamente dati mancanti. UDP non garantisce che la comunicazione abbia raggiunto il destinatario poiché non sono presenti concetti di riconoscimento, timeout e ritrasmissione.

ordinazione

Le trasmissioni TCP vengono inviate in una sequenza e vengono ricevute nella stessa sequenza. Nel caso in cui i segmenti di dati arrivino nell'ordine sbagliato, TCP riordina e consegna l'applicazione. Nel caso di UDP, la sequenza di messaggi inviati potrebbe non essere mantenuta quando raggiunge la ricezione dell'applicazione. Non è assolutamente possibile prevedere l'ordine in cui verrà ricevuto il messaggio.

Connessione

TCP è una connessione pesante che richiede tre pacchetti per una connessione socket e gestisce il controllo e l'affidabilità della congestione. UDP è un livello di trasporto leggero progettato in cima a un IP. Non ci sono connessioni di tracciamento o ordini di messaggi.

Metodo di trasferimento

TCP legge i dati come un flusso di byte e il messaggio viene trasmesso ai confini del segmento. I messaggi UDP sono pacchetti che vengono inviati singolarmente e all'arrivo vengono verificati per la loro integrità. I pacchetti hanno confini definiti mentre il flusso di dati non ne ha.

Rilevazione errori

UDP lavora su una base "best-effort". Il protocollo supporta il rilevamento degli errori tramite checksum ma quando viene rilevato un errore, il pacchetto viene scartato. La ritrasmissione del pacchetto per il recupero da quell'errore non è stata tentata. Questo perché UDP è in genere per applicazioni sensibili al tempo come giochi o trasmissione vocale. Il recupero dall'errore sarebbe inutile perché quando viene ricevuto il pacchetto ritrasmesso, non sarà di alcuna utilità.

TCP utilizza sia il rilevamento degli errori che il recupero degli errori. Gli errori vengono rilevati tramite checksum e se un pacchetto è errato, non viene riconosciuto dal destinatario, il che provoca una ritrasmissione da parte del mittente. Questo meccanismo operativo è chiamato riconoscimento positivo con ritrasmissione (PAR).

Come funzionano TCP e UDP

Una connessione TCP viene stabilita tramite una stretta di mano a tre vie, che è un processo di avvio e riconoscimento di una connessione. Una volta stabilita la connessione, può iniziare il trasferimento dei dati. Dopo la trasmissione, la connessione viene terminata chiudendo tutti i circuiti virtuali stabiliti.

UDP utilizza un semplice modello di trasmissione senza dialoghi impliciti di stringere la mano per garantire affidabilità, ordinazione o integrità dei dati. Pertanto, UDP fornisce un servizio inaffidabile e i datagrammi possono arrivare fuori servizio, apparire duplicati o scomparire senza preavviso. UDP presuppone che il controllo e la correzione degli errori non siano necessari o eseguiti nell'applicazione, evitando il sovraccarico di tale elaborazione a livello di interfaccia di rete. A differenza di TCP, UDP è compatibile con le trasmissioni di pacchetti (invio a tutti sulla rete locale) e il multicast (invio a tutti gli abbonati).

Diverse applicazioni di TCP e UDP

La navigazione Web, la posta elettronica e il trasferimento di file sono applicazioni comuni che utilizzano TCP. TCP viene utilizzato per controllare le dimensioni del segmento, la velocità di scambio dei dati, il controllo del flusso e la congestione della rete. TCP è preferito laddove sono richieste funzionalità di correzione degli errori a livello di interfaccia di rete. UDP è ampiamente utilizzato da applicazioni sensibili al tempo, nonché da server che rispondono a piccole query da un numero enorme di client. UDP è compatibile con la trasmissione di pacchetti - invio a tutti su una rete e multicast - invio a tutti gli abbonati. UDP è comunemente usato in Domain Name System, Voice over IP, Trivial File Transfer Protocol e giochi online.

TCP vs. UDP per Game Server

Per i giochi online multiplayer di massa (MMO), gli sviluppatori devono spesso fare una scelta architettonica tra l'uso di connessioni persistenti UDP o TCP. I vantaggi di TCP sono connessioni persistenti, affidabilità e capacità di utilizzare pacchetti di dimensioni arbitrarie. Il problema più grande con TCP in questo scenario è il suo algoritmo di controllo della congestione, che considera la perdita di pacchetti come un segno di limitazioni della larghezza di banda e rallenta automaticamente l'invio di pacchetti. Su reti 3G o Wi-Fi, ciò può causare una latenza significativa.

Lo sviluppatore esperto Christoffer Lernö ha valutato i pro ei contro e raccomanda i seguenti criteri per scegliere se utilizzare TCP o UDP per il tuo gioco:

  • Utilizzare HTTP su TCP per eseguire query stateless occasionali avviate dal client quando è corretto avere un ritardo occasionale.
  • Utilizzare socket TCP normali persistenti se client e server inviano indipendentemente pacchetti ma un ritardo occasionale è OK (ad esempio Poker online, molti MMO).
  • Usa UDP se sia il client che il server possono inviare pacchetti in modo indipendente e il ritardo occasionale non è corretto (ad es. La maggior parte dei giochi d'azione multiplayer, alcuni MMO).

Articoli Correlati