Come sapere se un protocollo utilizza TCP o UDP


9

Beh, so che potrebbe sembrare una domanda stupida e credo che la risposta più corretta sarà come potrò dire mentre la mia esperienza si accumula e imparo sempre di più sui protocolli.

Tuttavia sono uno studente e non ho molta esperienza pratica sul campo. Anche se posso cercare su Google per un determinato protocollo, voglio sapere se esiste una regola empirica. Sento ancora che chiedere "regola empirica" ​​sia stupido, ma ancora ne sto cercando uno.

Ho incontrato questo elenco su Wikipedia che elenca i protocolli e se utilizzano TCP o UDP in formato tabulare. Tuttavia, non sono in grado di capire cosa significhi quando la riga per un determinato protocollo contiene sia TCP che UDP con un numero di porta singolo. Ad esempio, nella riga Telnet, ha 23-TCP-UDP. Cosa significa questo? Telnet può funzionare sia sulla porta TCP 23 che sulla porta UDP 23?

Inoltre ho scoperto che nel mio libro di testo, dice che TFTP usa UDP, ma se guardiamo nella tabella sopra, la linea TFTP lo è 69-TCP-UDP. Quindi indovina cosa sta succedendo nella tabella sopra.

Risposte:


9

Hai fatto una buona domanda. Non lasciare che nessuno ti dica diversamente.

Purtroppo, non esiste una regola empirica per i tipi di protocolli che utilizzano TCP rispetto ai tipi di protocolli che utilizzano UDP.

La decisione se un protocollo utilizza l'uno o l'altro dipende da chi ha scritto / creato il protocollo per cominciare.

Se non volessero preoccuparsi di scrivere il proprio sistema di "consegna affidabile", possono semplicemente usare TCP che fornisce tutta l'affidabilità in modo innato.

Se pensassero (conoscendo il proprio protocollo in modo innato) di poter scrivere un sistema di "consegna affidabile" migliore o più appropriato, allora potrebbero incorporarlo nel protocollo stesso e semplicemente usare UDP come mezzo di trasporto.

Ad esempio, dai un'occhiata alla cattura di un campione TFTP UDP , noterai che ci sono sistemi di riconoscimento integrati all'interno del TFTP stesso: avere sia quelli che i sistemi di riconoscimento aggiuntivi all'interno di TCP sarebbe semplicemente ridondante.

Considerando che FTP, che funziona su TCP, non ha un sistema di riconoscimento incorporato. Un utente richiede semplicemente un file e il mittente lo invia. C'è una notifica "trasferimento file completato", ma nulla che garantisce di aver ricevuto ogni bit del file. FTP si affida all'affidabilità di TCP per garantire che il file arrivi fino in fondo.

Detto questo, ho esaminato l'elenco delle porte nella pagina wiki che hai collegato e ho visto una quantità sorprendente di protocolli che presumibilmente utilizzano TCP e UDP. Questo per me era estraneo e ne conosco solo pochissimi che usano entrambi (vale a dire DNS). Ma può darsi che esista un'implementazione TFTP che utilizza TCP e, in tal caso, temo di non esserci esposto.

Domain Name System (DNS) è tradizionalmente il protocollo a cui si fa riferimento quando si discute di protocolli che utilizzano sia TCP che UDP. Non li usa allo stesso tempo, intendiamoci. Ma diverse funzioni all'interno del DNS potrebbero richiedere TCP vs UDP.

Ad esempio, quando si effettua una semplice richiesta di risoluzione A-record, la "richiesta" e la "risposta" sono molto leggere, entrambe richiedono un singolo pacchetto. In quanto tale, ciò avviene in genere su UDP.

Ma se una richiesta o una risposta richiede un trasferimento più ampio (sopra una certa quantità di byte), DNS sceglie di usare TCP per garantire che "tutti i bit" arrivino. Questo è comune con le richieste di trasferimento di zona complete.


2
Sì, + 1, le query DNS consistono in una singola richiesta UDP dal client seguita da una singola risposta UDP dal server. Il protocollo TCP (Transmission Control Protocol) viene utilizzato quando la dimensione dei dati di risposta supera i 512 byte o per attività come i trasferimenti di zona.
Ijaz Ahmad Khan,

@IjazKhan, non esiste più tale distinzione. Vedere RFC 7766 : " Questo documento specifica i requisiti per il supporto di TCP come protocollo di trasporto per le implementazioni DNS e fornisce linee guida per le prestazioni DNS-over-TCP alla pari con quelle di DNS-over-UDP. Questo documento oscura RFC 5966 e quindi aggiorna RFC 1035 e RFC 1123. "e" Questo documento pertanto aggiorna le specifiche del protocollo DNS di base in modo che il supporto per TCP sia d'ora in poi una parte NECESSARIA di un'implementazione del protocollo DNS completo. "
Ron Maupin

6

La pagina di Wikipedia non è la migliore. IANA mantiene il registro per i numeri di porta (attenzione, al momento è 138 pagine): Nome servizio e protocollo di trasporto Numero porta Registro

Un protocollo di livello applicazione è libero di utilizzare qualsiasi protocollo di livello di trasporto e numero di porta. Per convenzione, la maggior parte utilizza numeri di porta specifici nel registro, ma ciò non significa che non possano usare anche altri. Ad esempio, un server Web verrà impostato automaticamente sulla porta TCP 80, ma può essere impostato per utilizzare qualsiasi altro numero di porta e un browser Web può comunque utilizzarlo se viene assegnato il numero di porta sull'URI.

Esistono molte applicazioni che possono essere impostate per utilizzare TCP o UDP e i numeri di porta possono essere modificati. Ciò offre una certa flessibilità quando si affrontano conflitti e strane implementazioni.


5

Nella vita reale, troverai molto facile dire quale protocollo di trasporto viene utilizzato. Inoltre, se stai cercando una "regola empirica", pensa a questo:

UDP è un protocollo "senza connessione" / inaffidabile, non recupera i pacchetti persi come TCP e ha un sovraccarico molto inferiore rispetto a TCP, quindi viene utilizzato come trasporto per applicazioni sensibili al ritardo (come streaming audio / video).

TCP è un protocollo "orientato alla connessione" / affidabile, recupera i pacchetti quando vengono persi e ha un sovraccarico maggiore, ma viene utilizzato laddove la perdita di pacchetti causerebbe problemi.

Ecco alcuni metodi che è possibile utilizzare per determinare nella vita reale quale protocollo di livello di trasporto viene utilizzato da un'applicazione:

  • Esegui netstat -anda un prompt dei comandi di Windows.
  • Scarica ed esegui TCPView (che elenca anche UDP) per una vista GUI.
  • Esegui Wireshark
  • Esegui nmapsul server con la porta in questione (per impostazione predefinita analizza solo le porte TCP)

0

La fonte dell'elenco di Wikipedia sembra essere primariamente https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt con la riga occasionale aggiornata in base a riferimenti specifici del protocollo.

Sembra che per le allocazioni più vecchie sia i numeri di porta TCP che UDP siano stati assegnati a un protocollo anche se il protocollo ha effettivamente utilizzato solo l'uno o l'altro. Ad esempio FTP ha voci nella tabella IANA sia per TCP che per UDP. Entrambe queste voci fanno riferimento a RFC 959 ma RFC 959 non menziona UDP.

Generalmente la risorsa di riferimento per scoprire quali protocolli sottostanti vengono effettivamente utilizzati da un protocollo applicativo sarebbe lo standard che definisce il protocollo.

Alcuni protocolli possono utilizzare TCP o UDP a scelta dell'utente (ad esempio NFS) o in base ai dettagli della richiesta (ad esempio DNS)

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.