Können TCP- und UDP-Sockets denselben Port verwenden?

104

Gibt es zunächst ein Problem bei der Verwendung von UDP und TCP auf demselben Server?

Zweitens kann ich dieselbe Portnummer verwenden?

user800799
quelle

Antworten:

110

Ja, Sie können für TCP und UDP dieselbe Portnummer verwenden. Viele Protokolle tun dies bereits, zum Beispiel funktioniert DNS unter udp / 53 und tcp / 53.

Technisch sind die Port - Pools für jedes Protokoll völlig unabhängig, aber für höhere Protokolle , die TCP oder UDP es die Konvention verwenden können , dass sie auf die gleichen Port Standardnummer .

Beachten Sie beim Schreiben Ihres Servers, dass die Reihenfolge der Ereignisse für einen TCP-Socket viel schwieriger ist als für einen UDP-Socket, da Sie neben den normalen socketund bindAufrufen auch listenund müssen accept.

Darüber hinaus gibt dieser acceptAnruf einen neuen Socket zurück und es ist dieser Socket, den Sie dann auch nach Empfangsereignissen abfragen müssen. Ihr Server sollte darauf vorbereitet sein, weiterhin acceptVerbindungen auf dem ursprünglichen Socket herzustellen und gleichzeitig mehrere Clients zu bedienen, von denen jeder Empfangsereignisse auf seinen eigenen Sockets auslöst.

Alnitak
quelle
2
@ Eric Fortis RFC 1700 ist voller Beispiele. Lassen Sie uns nicht alle auflisten, sollen wir? ;-)
Marquis von Lorne
2
@ Eric Fortist, warum genau sollte "jeder" über die NetBIOS-Portnummern Bescheid wissen?
Marquis von Lorne
4
Bitte posten Sie es als Frage, damit Sie mir die Antwort geben können
Eric Fortis
6
Diese Antwort erklärt nichts: Die 'Port'-Semantik ist spezifisch für jedes Protokoll (aber einige haben diese Semantik möglicherweise nicht) der Transportebene (OSI-Modellebene 4). TCP verfügt also über eigene Ports, die vom TCP-Stack interpretiert werden. UDP verfügt über eigene Ports, die vom UDP-Stack interpretiert werden. Sozusagen werden Ports nicht zwischen UDP und TCP geteilt. Es kommt nur vor, dass beide Protokolle dieselbe Definition von "Ports" haben und dass wir zur Vereinfachung denselben Portwert für mehrere Verbindungen unterschiedlichen Typs zu demselben Dienst verwenden.
Moala
2
@EricFortis Weil eine solche Frage für mich oder irgendjemanden anderen von keinem Interesse wäre, ebenso wie Ihre Gründe, sie als interessant zu betrachten, und ebenso Ihre Einwände gegen das Zitieren des einen RFC, der genau für den Zweck, den wir diskutieren, hier ist.
Marquis von Lorne
8

Erstens gibt es kein Problem bei der Verwendung von tcp und udp auf dem Server.

Zweitens können wir sowohl UDP- als auch TCP-Anforderungen an demselben Port haben, da jede Anforderung durch ein Fünffach identifiziert wird, das in Quell-IP, Ziel-IP, Quell-Port, Ziel-Port, PROTOKOLL enthalten ist (als Protokoll kann TCP oder UDP sein).

aMooly
quelle
3
Der Grund, den Sie angeben, wird oft angegeben, ist aber wirklich bedeutungslos. Es gibt keine UDP-Verbindung und keinen Kontext, in dem Verbindungen unabhängig vom zugehörigen Protokoll berücksichtigt werden. Tatsache ist, dass Ports Artefakte von TCP und UDP getrennt sind und es daher keine Möglichkeit gibt, sie jemals zu verwechseln.
Marquis von Lorne
Vielen Dank, dass Sie auf meinen Fehler hingewiesen haben. Es ist richtig, dass keine Verbindung über UDP besteht.
aMooly