TCP vs UDP

Esistono due tipi di traffico IP (Internet Protocol). Loro 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 usando UDP.

Grafico comparativo

Tabella di confronto tra TCP e UDP
TCPUDP
Acronimo di Transmission Control Protocol User Datagram Protocol o Universal Datagram Protocol
Connessione TCP è un protocollo orientato alla connessione. UDP è un protocollo senza connessione.
Funzione Come un messaggio si fa strada attraverso internet da un computer all'altro. Questo è basato sulla connessione. UDP è anche un protocollo utilizzato nel trasporto o trasferimento di 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.
uso TCP è adatto per applicazioni che richiedono un'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 stateless di UDP è anche utile per i server che rispondono a piccole query da un numero enorme di client.
Utilizzare da altri protocolli HTTP, HTTP, FTP, SMTP, Telnet DNS, DHCP, TFTP, SNMP, RIP, VOIP.
Ordinamento di pacchetti di dati TCP riorganizza i pacchetti di dati nell'ordine specificato. UDP non ha ordine intrinseco poiché tutti i pacchetti sono indipendenti l'uno dall'altro. Se è richiesto l'ordine, deve essere gestito dal livello dell'applicazione.
Velocità di trasferimento La velocità per TCP è più lenta di UDP. UDP è più veloce perché non viene tentato il recupero degli errori. È un protocollo "best effort".
Affidabilità È assolutamente garantito che i dati trasferiti rimangano intatti e arrivino nello stesso ordine in cui sono stati inviati. Non vi è alcuna garanzia che i messaggi o i pacchetti inviati raggiungano affatto.
Dimensioni intestazione La dimensione dell'intestazione TCP è 20 byte La dimensione dell'intestazione UDP è 8 byte.
Campi di intestazione comuni Porta di origine, Porta di destinazione, Somma di controllo Porta di origine, Porta di destinazione, Somma di controllo
Streaming di dati I dati vengono letti come un flusso di byte, nessuna indicazione distintiva viene trasmessa ai limiti del messaggio (segmento) del segnale. I pacchetti vengono inviati singolarmente e controllati per integrità solo se arrivano. I pacchetti hanno confini definiti che vengono onorati al momento del ricevimento, il che significa che un'operazione di lettura nella presa del ricevitore produrrà un intero messaggio come originariamente inviato.
Peso TCP è pesante. TCP richiede tre pacchetti per impostare una connessione socket, prima che i dati utente possano essere inviati. TCP gestisce l'affidabilità e il controllo della congestione. UDP è leggero. Non c'è ordinamento di messaggi, nessuna connessione di tracciamento, ecc. Si tratta di un piccolo livello di trasporto progettato su IP.
Controllo del flusso di dati TCP esegue il controllo del flusso. TCP richiede tre pacchetti per impostare una connessione socket, prima che i dati utente possano essere inviati. TCP gestisce l'affidabilità e il controllo della congestione. UDP non ha un'opzione per il controllo del flusso
Controllo errori TCP esegue il controllo degli errori e il recupero degli errori. I pacchetti errati vengono ritrasmessi dalla sorgente alla destinazione. UDP esegue il controllo degli errori, ma semplicemente elimina i pacchetti errati. Errore nel recupero non tentato.
campi 1. Numero sequenza, 2. Numero AcK, 3. Scostamento dati, 4. Riservato, 5. Bit di controllo, 6. Finestra, 7. Puntatore urgente 8. Opzioni, 9. Riempimento, 10. Controllo Somma, 11. Porta sorgente, 12. Porta di destinazione 1. Lunghezza, 2. Porta sorgente, 3. Porta destinazione, 4. Verifica somma
Riconoscimento Segmenti di riconoscimento Nessun riconoscimento
Stretta di mano SYN, SYN-ACK, ACK Nessuna stretta di mano (protocollo senza connessione)

Contenuto: TCP vs UDP

  • 1 differenze nelle caratteristiche di trasferimento dei dati
    • 1.1 Affidabilità
    • 1.2 Ordinazione
    • 1.3 Connessione
    • 1.4 Metodo di trasferimento
    • 1.5 Rilevamento degli errori
  • 2 Come funzionano TCP e UDP
  • 3 diverse applicazioni di TCP e UDP
    • 3.1 TCP vs UDP per Game Server
  • 4 riferimenti

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 controlla la disponibilità del ricevitore.

Affidabilità

TCP è più affidabile poiché gestisce la conferma e la ritrasmissione dei messaggi 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

TCP le trasmissioni vengono inviate in sequenza e vengono ricevute nella stessa sequenza. Nel caso in cui i segmenti di dati arrivino in ordine errato, TCP riordina e consegna l'applicazione. In caso di UDP, la sequenza di messaggi inviata potrebbe non essere mantenuta quando raggiunge l'applicazione ricevente. Non c'è assolutamente alcun modo di prevedere l'ordine in cui il messaggio verrà ricevuto.

Connessione

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

Metodo di trasferimento

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

Rilevazione degli errori

UDP lavora su base "best-effort". Il protocollo supporta il rilevamento degli errori tramite checksum ma quando viene rilevato un errore, il pacchetto viene scartato. Non viene tentata la ritrasmissione del pacchetto per il recupero da quell'errore. Ciò è dovuto al fatto che UDP è solitamente utilizzato per applicazioni sensibili al tempo come i giochi o la trasmissione vocale. Il recupero dall'errore sarebbe inutile perché nel momento in cui il pacchetto ritrasmesso viene ricevuto, 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 ricevitore, che attiva una ritrasmissione da parte del mittente. Questo meccanismo operativo è chiamato Positive Acknowledgment with Retransmission (PAR).

Come funzionano TCP e UDP

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

UDP utilizza un modello di trasmissione semplice senza dialoghi di scuotimento manuale impliciti per garantire affidabilità, ordine o integrità dei dati. Pertanto, UDP fornisce un servizio inaffidabile e datagrammi possono arrivare fuori ordine, apparire duplicati o scomparire senza preavviso. UDP presuppone che la verifica e la correzione degli errori non siano necessarie o eseguite nell'applicazione, evitando il sovraccarico di tale elaborazione a livello di interfaccia di rete. A differenza del TCP, UDP è compatibile con le trasmissioni a pacchetto (invio a tutti sulla rete locale) e multicasting (invia 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 fanno uso di TCP. TCP viene utilizzato per controllare la dimensione del segmento, la velocità di scambio dei dati, il controllo del flusso e la congestione della rete. Il TCP è preferito dove sono richieste le funzioni di correzione degli errori a livello di interfaccia di rete. UDP è largamente utilizzato da applicazioni sensibili al tempo e da server che rispondono a piccole query da un numero enorme di client. UDP è compatibile con la trasmissione di pacchetti - l'invio a tutti su una rete e multicasting - l'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 MMO (massively multiplayer online), gli sviluppatori spesso devono fare una scelta architetturale tra l'uso delle connessioni persistenti UDP o TCP. I vantaggi del TCP sono connessioni persistenti, affidabilità e capacità di utilizzare pacchetti di dimensioni arbitrarie. Il problema più grande con TCP in questo scenario è l'algoritmo di controllo della congestione, che considera la perdita di pacchetti come un segno di limitazioni della larghezza di banda e riduce automaticamente l'invio di pacchetti. Sulle reti 3G o Wi-Fi, ciò può causare una latenza significativa.

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

  • Usa HTTP su TCP per creare query stateless occasionali avviate dal client quando è opportuno avere un ritardo occasionale.
  • Usa i socket TCP normali persistenti se sia il client che il server inviano in modo indipendente i pacchetti, ma un ritardo occasionale è OK (ad esempio, il poker online, molti MMO).
  • Usa UDP se sia il client che il server possono inviare pacchetti in modo indipendente e il lag occasionale non è OK (ad esempio la maggior parte dei giochi di azione multiplayer, alcuni MMO).

Riferimenti

  • Wikipedia: Transmission Control Protocol
  • Wikipedia: User Datagram Protocol
  • UDP vs TCP per i server di gioco
  • Il protocollo di controllo della trasmissione