Warum haben beliebte TCP-Dienste sowohl UDP- als auch TCP-Einträge in / etc / services?

22

Ich lese mit Go ein Buch über Netzwerkprogrammierung. Eines der Kapitel befasst sich mit der Datei / etc / services. Beim Durchsuchen dieser Datei ist mir aufgefallen, dass einige beliebte Einträge wie HTTP und SSH, die beide TCP auf der Transportebene verwenden, einen zweiten Eintrag für UDP haben. Zum Beispiel unter Ubuntu 14.04:

ubuntu@vm1:~$ grep ssh /etc/services  
ssh             22/tcp         # SSH Remote Login Protocol 
ssh             22/udp

ubuntu@vm1:~$ grep http /etc/services  
http            80/tcp          www             # WorldWideWeb HTTP            
http            80/udp                          # HyperText Transfer Protocol

Weiß jemand warum diese zwei Einträge haben? Ich glaube nicht, dass SSH oder HTTP jemals UDP verwenden (bestätigt durch diese Frage für SSH).

sixty4bit
quelle
7
22/udpwurde 2016 in Debian entfernt. IANA listet immer noch 22 / udp und sowohl udp als auch tcp für die meisten Protokolle auf, die normalerweise nur auf einem von beiden implementiert sind. Könnte sein, dass es bedeutet, dass 22 für ssh reserviert ist, falls jemand eines Tages ssh über udp implementieren möchte?
Stéphane Chazelas
2
Siehe auch Abschnitt 7.1 von rfc6335
Stéphane Chazelas,

Antworten:

29

Grundsätzlich ist dies so, weil dies die Tradition war, als die Portnummern bis ungefähr 2011 vergeben wurden. Siehe zum Beispiel §7.1 „Frühere Prinzipien“ von RFC 6335 :

TCP- und UDP-Ports wurden gleichzeitig zugewiesen, wenn einer der beiden angefordert wurde

Es ist natürlich möglich, dass sie eines Tages nicht zugewiesen werden, da die Ports 1023 und darunter die "Systemports" sind, die von den meisten Betriebssystemen speziell behandelt werden und der größte Teil dieses Bereichs derzeit zugewiesen wird.

Übrigens läuft HTTP / 3 über UDP. Es kann jedoch jeden UDP-Port verwenden, nicht nur 80/443. Also wirklich die sind noch unbenutzt.

Soweit Debian betroffen ist, seine /etc/servicesbereits 22 / udp in 1.0 (buzz 1996) .

Es wurde jedoch im Rahmen dieses Commits im Jahr 2016 entfernt, das erstmals in Version 5.4 des netbasePakets veröffentlicht wurde.

Zum jetzigen Zeitpunkt hat die neueste stabile Version von Debian (Buster) 5.6 . Und das neueste Ubuntu LTS (18.04, bionic) Netbase-Paket basiert auf Debian Netbase 5.4, und Sie können sehen, dass sein Changelog auch die Entfernung von udp / 22 erwähnt .

derobert
quelle
4
@SergiyKolodyazhnyy Ich würde nicht denken, da diese Praxis Firewalls älter ist.
derobert
3
@TobySpeight Das ist nicht nur Linux, das ist Teil der relevanten Standards. Siehe z. B. §6 dieses RFC. Obwohl die IANA auch höhere Ports registriert, handelt es sich um eine andere Klassifizierung (und dies ist in der Praxis wichtig, da Betriebssysteme, nicht nur Linux, sie behandeln). Ich werde das ein bisschen klären. Außerdem ist 0 kein gültiger Port. Es wird von der Sockets-API als Platzhalter verwendet (damit der Kernel einen Port für Sie auswählt).
Derobert
2
"0 ist kein gültiger Port" ist fraglich. Es ist sicherlich kein verwendbarer Port auf unserem Betriebssystem (aus diesem Grund habe ich ihn speziell genannt und warum er derzeit reserviert ist und wahrscheinlich nicht zugewiesen wird), aber auf Protokollebene ist er nicht besonders.
Toby Speight
1
@derobert: Ihr Argument ist, dass Port 0 auf Unix-Rechnern unbrauchbar ist, weil Port 0 "einen freien Port auswählen" bedeutet. Ich sage, dass das Argument falsch ist. Die Schlussfolgerung folgt logischerweise nicht aus der Prämisse.
MSalters
3
Es kann zwar jeden UDP-Port verwenden, nicht nur 80/443. Dies gilt im Wesentlichen für jedes TCP / UDP-Protokoll. Dies sind jedoch nur die mit jedem verbundenen Standardports. Die meisten Anwendungen, die TCP und UDP verwenden, bieten keine Möglichkeit, nicht standardmäßige Ports anzugeben. Bei HTTP können sie jedoch in URLs angegeben werden, damit der Port besser variiert werden kann.
Barmar