Differenza tra TCP e UDP?


144

Qual è la differenza tra TCP e UDP?

So che TCP viene utilizzato nel caso di applicazioni non temporali e UDP viene utilizzato per giochi o applicazioni che richiedono una trasmissione rapida dei dati. So che TCP è utilizzato per HTTP, HTTP, FTP, SMTP e Telnet. So che UDP è usato per DNS e DHCP.

Ma perché? Quali caratteristiche di TCP e UDP lo rendono utile per i rispettivi casi d'uso?


13
E questo ( skullbox.net/tcpudp.php ) - che è stato il primo successo di Google - non è stato abbastanza chiaro? Cosa c'era di confuso al riguardo? Forse è meglio? tcpipguide.com/free/…
S.Lott

1
Sono davvero curioso di sapere perché questa domanda ha (al momento della stesura) 3 voti. La prima frase non ha nemmeno senso e c'è molto materiale disponibile su questo argomento se si cerca.
Matt

21
@MattH: 1) È una buona domanda, se piuttosto ampia e un duplicato già ben risposto. 2) Avevi una reputazione più che sufficiente per correggere l'errore nella prima frase. 3) È irrilevante che informazioni al riguardo esistano altrove. Stack Overflow mira a diventare un repository di conoscenze e risponde alle domande in modo canonico qui .
ire_and_curses

2
È interessante notare che quasi nessuno menziona il fatto che DHCP utilizza la trasmissione, ma tutti pensano che la "risposta" riguardi la garanzia di consegna e ritrasmissione.
Heath Hunnicutt,

1
Solo per chiunque legga questo in futuro, il sito Skullbox menzionato sopra ha MALWARE secondo Google (mi ha fermato quando ho cliccato su di esso). Consiglio di non andarci.
Alan006

Risposte:


119

TCPè un flusso orientato alla connessione su una rete IP. Garantisce che tutti i pacchetti inviati raggiungano la destinazione nell'ordine corretto. Ciò implica l'uso di pacchetti di riconoscimento inviati al mittente e la ritrasmissione automatica, causando ulteriori ritardi e una trasmissione generalmente meno efficiente di UDP.

UDPè un protocollo senza connessione. La comunicazione è orientata al datagramma . L'integrità è garantita solo sul singolo datagramma. I datagrammi raggiungono la destinazione e possono arrivare fuori servizio o non arrivare affatto. È più efficiente rispetto al TCPfatto che utilizza non ACK . Viene generalmente utilizzato per la comunicazione in tempo reale, dove una piccola percentuale del tasso di perdita di pacchetti è preferibile al sovraccarico di una TCPconnessione.

In alcune situazioni UDPviene utilizzato perché consente la trasmissione di pacchetti broadcast. Questo a volte è fondamentale in casi come il DHCPprotocollo, perché la macchina client non ha ancora ricevuto un IPindirizzo (questo è lo DHCPscopo del protocollo di negoziazione) e non ci sarà modo di stabilire un TCPflusso senza l' IPindirizzo stesso.


5
Un esempio in cui viene utilizzato UDP è nella trasmissione di video e audio in cui la perdita di alcuni pacchetti qui e là di solito non importa così tanto (il colore di un fotogramma potrebbe essere spento o un piccolo nano-secondo di audio potrebbe essere tagliato o alterato - non molto evidente per l'uomo). Naturalmente, se la tua connessione è davvero pessima, potresti perdere così tanti pacchetti che il video appare sfocato / pixelato e l'audio diventa sfocato e si interrompe molto.
Niko Bellic,

53

A partire dal l'articolo Skullbox:

TCP (Transmission Control Protocol) è il protocollo più comunemente usato su Internet. Il motivo è perché TCP offre la correzione degli errori. Quando si utilizza il protocollo TCP, esiste una "consegna garantita". Ciò è dovuto in gran parte in parte a un metodo chiamato "controllo del flusso". Il controllo del flusso determina quando è necessario inviare nuovamente i dati e interrompe il flusso dei dati fino a quando i pacchetti precedenti non vengono trasferiti correttamente. Questo funziona perché se viene inviato un pacchetto di dati, potrebbe verificarsi una collisione. Quando ciò accade, il client richiede nuovamente il pacchetto dal server fino a quando l'intero pacchetto non è completo ed è identico al suo originale.

UDP (User Datagram Protocol) è un altro protocollo comunemente usato su Internet. Tuttavia, UDP non viene mai utilizzato per inviare dati importanti come pagine Web, informazioni sul database, ecc .; UDP è comunemente usato per lo streaming di audio e video. Streaming multimediale come file audio Windows Media (.WMA), Real Player (.RM) e altri utilizzano UDP perché offre velocità! Il motivo per cui UDP è più veloce di TCP è perché non esiste alcuna forma di controllo del flusso o correzione degli errori. I dati inviati su Internet sono interessati da collisioni e saranno presenti errori. Ricorda che UDP riguarda solo la velocità. Questo è il motivo principale per cui lo streaming multimediale non è di alta qualità.

1) TCP è orientato alla connessione e affidabile dove UDP è meno connessione e inaffidabile.

2) TCP ha bisogno di più elaborazioni a livello di interfaccia di rete dove non lo è come in UDP.

3) TCP utilizza, stretta di mano a 3 vie, controllo della congestione, controllo del flusso e altri meccanismi per garantire una trasmissione affidabile.

4) L'UDP viene utilizzato principalmente nei casi in cui il ritardo dei pacchetti è più grave della perdita dei pacchetti.


1
+1 Riassunto ragionevolmente buono. Anche se l' is the most commonly used protocol on the Internetaffermazione è discutibile e dipende davvero da come si definisce most commonly used, protocole the Internet. Ad esempio, Internet Protocol è un contendente più probabile a quella particolare corona.
Matt

-1: il motivo per cui UDP viene utilizzato per DHCP non ha nulla a che fare con il ritardo o la perdita dei pacchetti.
Heath Hunnicutt,

2
Quando si inviano molti dati su un canale chiaro, TCP è spesso più veloce di UDP. Il motivo per cui UDP viene utilizzato per cose come l'audio o il video in streaming live è che quando un pacchetto TCP scompare, l'applicazione ricevente non vedrà più nulla finché i dati mancanti non saranno stati ritrasmessi e ricevuti con successo. In molte applicazioni di streaming, i dati che arrivano in ritardo saranno inutili, quindi non ha senso trattenere tutto in attesa di una ritrasmissione che sarà comunque inutile.
supercat

UDP viene utilizzato per DHCP perché TCP non supporta le trasmissioni. Il DHCP si basa sull'uso di una trasmissione per ottenere l'indirizzo IP per il server DHCP. Vedere stackoverflow.com/questions/21266008/...
ScottSmudger

41

Pensa a TCP come a un ritiro / consegna UPS / FedEx programmato dedicato di pacchi tra due posizioni, mentre UDP equivale a lanciare una cartolina in una cassetta postale.

UPS / FedEx faranno del loro meglio per assicurarsi che il pacco spedito arrivi e lo arrivi in ​​tempo. Con la cartolina, sei fortunato se arriva affatto e può arrivare fuori servizio o in ritardo (quante volte hai ricevuto una cartolina da qualcuno DOPO che sono tornati a casa dalle vacanze?)

TCP è il più vicino possibile a un protocollo di consegna garantito, mentre UDP è solo il "miglior sforzo".


1
Risposta abbastanza decente. Vorrei aggiungere che in un flusso TCP i pacchetti sono riconosciuti dalla destinazione e i pacchetti corrotti / pacchetti mancanti sono rinviati dal mittente. In UDP i pacchetti vengono inviati e la destinazione li riceve in qualsiasi ordine e non conferma la ricezione.
Erik Nedwidek,

2
Un po 'di un'analogia fuorviante forse più adatta a QoS
MattH

11
mi piace molto l'analogia, ma una cosa che questa risposta travisa leggermente è la velocità. fa sembrare che TCP sia più veloce, quando in realtà UDP è perché c'è meno sovraccarico.
codice iliket il

22

Ragioni UDP è usato per DNS e DHCP:

DNS - TCP richiede più risorse dal server (che ascolta le connessioni) di quante ne faccia dal client. In particolare, quando la connessione TCP è chiusa, il server è tenuto a ricordare i dettagli della connessione (mantenendoli in memoria) per due minuti, durante uno stato noto come TIME_WAIT_2. Questa è una caratteristica che difende dai pacchetti ripetuti erroneamente da una connessione precedente interpretata come parte di una connessione corrente. Il mantenimento di TIME_WAIT_2 utilizza la memoria del kernel sul server. Le richieste DNS sono piccole e arrivano frequentemente da molti client diversi. Questo modello di utilizzo aggrava il carico sul server rispetto ai client. Si riteneva che l'uso di UDP, che non avesse connessioni né stato da mantenere su client o server, avrebbe migliorato questo problema.

DHCP: DHCP è un'estensione di BOOTP. BOOTP è un protocollo utilizzato dai computer client per ottenere informazioni sulla configurazione da un server, mentre il client si sta avviando. Per individuare il server, viene inviata una trasmissione che richiede server BOOTP (o DHCP). Le trasmissioni possono essere inviate solo tramite un protocollo senza connessione, come UDP. Pertanto, BOOTP ha richiesto almeno un pacchetto UDP, per la trasmissione di localizzazione del server. Inoltre, poiché BOOTP è in esecuzione durante l'avvio del client ... e questo è un periodo di tempo in cui il client potrebbe non avere il suo intero stack TCP / IP caricato e in esecuzione, UDP potrebbe essere l'unico protocollo che il client è pronto a gestire in quel tempo. Infine, alcuni client DHCP / BOOTP hanno solo UDP a bordo. Ad esempio, alcuni termostati IP implementano solo UDP.

Come altri hanno già detto, UDP è utile anche per lo streaming multimediale, in particolare l'audio. Le conversazioni suonano meglio sotto il ritardo della rete se si rilasciano semplicemente i pacchetti in ritardo. Puoi farlo con UDP, ma con TCP tutto ciò che ottieni durante il ritardo è una pausa, seguito da un audio che sarà sempre ritardato di quanto è già in pausa. Per conversazioni telefoniche a due vie, questo è inaccettabile.


17

Una delle differenze è in breve

UDP : invia un messaggio e non guardare indietro se ha raggiunto la destinazione, protocollo senza connessione
TCP : invia un messaggio e garantisce di raggiungere la destinazione, protocollo orientato alla connessione


9

TCP stabilisce una connessione prima che avvenga l'effettiva trasmissione dei dati, UDP no. In questo modo, UDP può fornire consegne più rapide. Applicazioni come DNS, accesso al time server, quindi, usano UDP.

A differenza di UDP, TCP utilizza il controllo della congestione. Risponde al carico della rete. A differenza di UDP, rallenta quando la congestione della rete è imminente. Quindi, applicazioni come il multimedia che preferiscono un throughput costante potrebbero andare per UDP.

Inoltre, UDP non è affidabile, non reagisce sulle perdite di pacchetti. Quindi le applicazioni sensibili alla perdita come la trasmissione multimediale preferiscono UDP. Tuttavia, TCP è un protocollo affidabile, quindi le applicazioni che richiedono affidabilità come trasferimento web, e-mail e download di file preferiscono TCP.

Inoltre, nell'odierna Internet UDP non è così accogliente come TCP a causa delle scatole centrali. Alcune applicazioni come skype cadono su TCP quando si presume che la connessione UDP sia bloccata.



2

Differenze brevi e semplici tra il protocollo Tcp e Udp:

1) Tcp - Protocollo controllo trasmissione e Udp - Protocollo datagramma utente.

2) Tcp è un protocollo affidabile, dove Udp è un protocollo inaffidabile.

3) Tcp è uno stream oriented, dove Udp è un protocollo orientato ai messaggi.

4) Tcp è più lento di Udp.


1

Incontra questo thread e fammi provare ad esprimerlo in questo modo.

TCP

Stretta di mano a 3 vie

Bob: Ehi Amy, vorrei dirti un segreto
Amy: OK, vai avanti, sono pronto
Bob: OK

Comunicazione
Bob: "Io", questa è la prima lettera di
Amy: prima lettera ricevuta, per favore mandami la seconda lettera
Bob: '', questa è la seconda lettera
Amy: seconda lettera ricevuta, per favore inviami la terza lettera
Bob: 'L ', questa è la terza lettera
Dopo un po'
Bob: 'L', questa è la terza lettera
Amy: terza lettera ricevuta, per favore mandami la quarta lettera
Bob: 'O', questa la quarta lettera
Amy: ...
... ...

Stretta di mano a 4 vie
Bob: Il mio segreto è scoperto, ora conosci il mio cuore.
Amy: OK. Non ho niente da dire.
Bob: OK.

UDP

Bob: I LOVE U
Amy ha ricevuto: OVI LE

TCP è più affidabile di UDP con un ordine uniforme dei messaggi garantito, non c'è dubbio perché UDP sia più leggero ed efficiente.


0

Spiegazione semplice per analogia

TCP è così.

Immagina di avere un amico di penna su Marte (abbiamo comunicato con lettere scritte nei bei vecchi giorni prima di Internet).

Devi inviare al tuo amico di penna le sette abitudini di persone altamente efficaci. Quindi decidi di inviarlo in sette lettere separate:

  1. Lettera 1 - Sii proattivo
  2. Lettera 2 - Inizia pensando alla fine ...

eccetera.

ecc. Letter 7 - Affilare la sega

Requisiti:

Vuoi assicurarti che il tuo amico di penna riceva tutte le tue lettere - in ordine e che arrivino perfettamente . Se la tua penna paga riceve la lettera 7 prima della lettera 1, non va bene. se il tuo amico di penna riceve tutte le lettere tranne la lettera 3, anche questo non va bene.

Ecco come garantiamo il rispetto dei nostri requisiti:

  • Lettera di conferma: così il tuo amico di penna invia una lettera di conferma per dire "Ho ricevuto la lettera 1". In questo modo sai che il tuo amico di penna l'ha ricevuto. Se una lettera non arriva o arriva fuori servizio, devi fermarti, tornare indietro e rispedire quella lettera e tutte le lettere successive.
  • Controllo del flusso: nel periodo di Natale sai che il tuo amico di penna riceverà molta posta, quindi rallenti perché non vuoi sopraffare il tuo amico di penna. (Il tuo amico di penna ti invia aggiornamenti costanti sul numero di messaggi non letti che ci sono nella casella di posta di penpal - se il tuo amico di penna dice che la posta in arrivo sta per esplodere perché è così piena, allora rallenti l'invio delle tue lettere - perché il tuo amico di penna non sarà in grado di leggerli.
  • Arrivo perfetto. A volte mentre invii la tua lettera per posta, può strapparsi o una lumaca può mangiarne metà. Come fai a sapere che tutta la tua lettera è arrivata in perfette condizioni? Bene, il tuo amico di penna ti darà un meccanismo attraverso il quale puoi controllare se hanno la lettera piena e che era esattamente la lettera che hai inviato. (ad es. tramite un conteggio parole ecc.). un'analogia di base.

0

TLDR;

  • TCP - orientato al flusso, richiede una connessione, affidabile, lento
  • UDP: orientato ai messaggi, senza connessione, inaffidabile, veloce

Prima di iniziare, ricorda che tutti gli svantaggi di qualcosa sono una continuazione dei suoi vantaggi . C'è solo uno strumento giusto per un lavoro, nessuna panacea. TCP / UDP coesistono per decenni e per un motivo.

TCP

È stato progettato per essere estremamente affidabile e fa molto bene il suo lavoro. È così complesso perché svolge un compito difficile: dimostrare un trasporto affidabile tramite il protocollo IP inaffidabile.

Poiché tutta la complessa logica di TCP è incapsulata nello stack di rete, sei libero di fare molte cose laboriose e soggette a errori di basso livello nel livello dell'applicazione.

Quando si inviano dati su TCP, si scrive un flusso di byte sul socket del mittente in cui vengono suddivisi in pacchetti, passati nello stack e inviati tramite il filo. Sul lato ricevente i pacchetti vengono nuovamente riassemblati in un flusso continuo di byte.

Il mantenimento di questa bella astrazione ha un costo in termini di complessità e prestazioni. Se il 1 ° pacchetto dal flusso di byte viene perso, il ricevitore ritarderà l'elaborazione dei pacchetti successivi anche quelli già arrivati.

Inoltre, per essere affidabile, TCP implementa questo:

  • TCP richiede una connessione stabilita, che richiede 3 round trip (stretta di mano a 3 vie "famigerata").
  • TCP ha una funzione chiamata "avvio lento" quando aumenta gradualmente la velocità di trasmissione dopo aver stabilito una connessione per consentire a un ricevitore di tenere il passo con i dati.
  • Ogni pacchetto inviato deve essere riconosciuto, altrimenti un mittente smetterà di inviare più dati
  • E ancora e ancora e ancora...

Tutto ciò è esacerbato in reti wireless lente e inaffidabili, mentre TCP è stato progettato per reti cablate in cui i ritardi sono prevedibili e la perdita di pacchetti non è così comune. Inoltre, come molte persone già menzionate, per alcune cose il TCP non funziona affatto (DHCP). Tuttavia, laddove pertinente, TCP fa ancora il suo lavoro eccezionalmente bene.

Usando un'analogia della posta una sessione TCP è simile a raccontare una storia al tuo segretario che la divide in posta e invia un servizio di posta scadente a un editore. Dall'altro lato un altro segretario riunisce le lettere in un unico pezzo di testo. Alcuni messaggi si perdono, altri vengono danneggiati, quindi è necessaria una procedura molto complessa per la consegna affidabile e la tua storia di 10 pagine può impiegare molto tempo per raggiungere il tuo editore.

UDP

UDP, d'altra parte, è orientato ai messaggi, quindi un destinatario scrive un messaggio (pacchetto) nel socket e quindi viene trasmesso così com'è, senza alcuna divisione / assemblaggio.

Rispetto a TCP, le sue specifiche sono molto semplici. In sostanza, tutto ciò che fa per te è aggiungere un checksum al pacchetto in modo che un destinatario possa rilevare il suo danneggiamento. Tutto il resto deve essere implementato da te, uno sviluppatore di software. Ora leggi le voluminose specifiche TCP e prova a pensare di reimplementarne alcune parti.

Alcune persone sono andate così e hanno ottenuto risultati molto decenti, al punto che HTTP / 3 utilizza QUIC, un protocollo basato su UDP. Tuttavia, questa è più un'eccezione. Le applicazioni comuni di UDP sono applicazioni di streaming e conferenza audio / video come Skype, Zoom o Hangout di Google in cui perdere pacchetti non è così importante rispetto a un ritardo introdotto da TCP.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.