I socket TCP e UDP possono utilizzare la stessa porta?


104

Prima di tutto, c'è qualche problema con l'utilizzo di UDP e TCP sullo stesso server?

In secondo luogo, posso utilizzare lo stesso numero di porta?

Risposte:


110

Sì, puoi utilizzare lo stesso numero di porta sia per TCP che per UDP. Molti protocolli lo fanno già, ad esempio il DNS funziona su udp / 53 e tcp / 53.

Tecnicamente i pool di porte per ogni protocollo sono completamente indipendenti, ma per i protocolli di livello superiore che possono utilizzare TCP o UDP è convenzione che abbiano lo stesso numero di porta per impostazione predefinita .

Quando scrivi sul tuo server, tieni presente che la sequenza di eventi per un socket TCP è molto più difficile che per un socket UDP, poiché oltre alle chiamate normali sockete binddevi anche listene accept.

Inoltre quella acceptchiamata restituirà un nuovo socket ed è quel socket che dovrai anche interrogare per ricevere eventi. Il tuo server dovrebbe essere pronto a continuare le acceptconnessioni sul socket originale mentre serve simultaneamente più client, ognuno dei quali attiverà eventi di ricezione sui propri socket.


2
@Eric Fortis RFC 1700 è pieno di esempi, non li elenchiamo tutti, vero? ;-)
Marchese di Lorne

2
@Eric Fortist, perché esattamente "tutti dovrebbero conoscere" i numeri di porta NetBIOS?
Marchese di Lorne

4
Pubblicalo come domanda in modo da potermi dare la risposta
Eric Fortis

6
Qualcosa che questa risposta non spiega: la semantica "porta" è specifica per ogni protocollo (ma alcuni potrebbero non avere questa semantica) del livello di trasporto (modello OSI livello 4). Quindi TCP ha le sue porte, che vengono interpretate dallo stack TCP; UDP ha le proprie porte, che vengono interpretate dallo stack UDP. Per così dire, le porte non sono condivise tra UDP e TCP; accade solo che entrambi i protocolli abbiano la stessa definizione di "porte" e che per semplificare utilizziamo lo stesso valore di porta per più connessioni di diverso tipo allo stesso servizio.
Moala

2
@EricFortis Perché una domanda del genere sarebbe di zero interesse per me o per chiunque altro, così come le tue ragioni per considerarla interessante, e idem le tue obiezioni a citare l' unico RFC che è qui proprio per lo scopo di cui stiamo discutendo.
Marchese di Lorne

8

In primo luogo, non ci sono problemi utilizzando sia tcp che udp sul server.

In secondo luogo, possiamo avere sia richieste UDP che TCP sulla stessa porta, perché ogni richiesta è identificata da una quintupla contenuta da IP di origine, IP di destinazione, Porta di origine, Porta di destinazione, PROTOCOLLO (poiché il protocollo può essere TCP o UDP).


3
La ragione che dici viene spesso fornita ma è davvero priva di significato. Non esiste una connessione UDP e nessun contesto in cui le connessioni vengono considerate indipendentemente dal protocollo associato. Il fatto è che le porte sono artefatti di TCP e UDP separatamente, e quindi non c'è possibilità di confonderli mai.
Marchese di Lorne

Grazie per aver segnalato la mia colpa, è giusto che non ci sia connessione tramite UDP.
aMooly
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.