Du hast eine gute Frage gestellt. Lassen Sie sich von niemandem etwas anderes sagen.
Leider gibt es keine Faustregel für die Protokolltypen, die TCP verwenden, gegenüber den Protokolltypen, die UDP verwenden.
Die Entscheidung, ob ein Protokoll das eine oder das andere verwendet, hängt davon ab, wer das Protokoll geschrieben / erstellt hat.
Wenn sie sich nicht die Mühe machen wollten, ein eigenes "zuverlässiges Liefersystem" zu schreiben, können sie einfach TCP verwenden, das die gesamte Zuverlässigkeit von Natur aus bietet.
Wenn sie dachten (ihr eigenes Protokoll von Natur aus zu kennen), dass sie ein besseres oder geeigneteres "zuverlässiges Übermittlungssystem" schreiben könnten, können sie dies in das Protokoll selbst einbauen und einfach UDP als Transportmittel verwenden.
Wenn Sie sich beispielsweise eine UDP- TFTP-Beispielerfassung ansehen , werden Sie feststellen, dass in TFTP selbst integrierte Bestätigungssysteme vorhanden sind. Sowohl diese als auch die zusätzlichen Bestätigungssysteme in TCP wären einfach redundant.
Während FTP, das über TCP ausgeführt wird, kein integriertes Bestätigungssystem hat. Ein Benutzer fordert einfach eine Datei an und der Absender sendet sie. Es gibt eine Benachrichtigung "Dateiübertragung abgeschlossen", aber nichts, was garantiert, dass jedes Bit der Datei empfangen wurde. FTP verlässt sich auf die Zuverlässigkeit von TCP, um sicherzustellen, dass die Datei vollständig übertragen wird.
Trotzdem habe ich die Liste der Ports auf der von Ihnen verlinkten Wiki-Seite durchgesehen und eine überraschende Anzahl von Protokollen gefunden, die angeblich TCP und UDP verwenden. Dies war mir fremd und ich kenne nur sehr wenige, die beide verwenden (nämlich DNS). Es kann jedoch sein, dass es eine TFTP-Implementierung gibt, die TCP verwendet, und wenn ja, fürchte ich, dass ich nicht damit konfrontiert bin.
Domain Name System (DNS) ist traditionell das Protokoll, auf das bei der Erörterung von Protokollen verwiesen wird, die sowohl TCP als auch UDP verwenden. Es verwendet diese nicht gleichzeitig, wohlgemerkt. Unterschiedliche Funktionen in DNS erfordern jedoch möglicherweise TCP und UDP.
Wenn Sie beispielsweise eine einfache A-Record-Auflösungsanforderung stellen, sind "Anforderung" und "Antwort" sehr leicht und erfordern beide ein einzelnes Paket. Daher erfolgt dies normalerweise über UDP.
Wenn eine Anforderung oder Antwort jedoch eine größere Übertragung erfordert (über einer bestimmten Anzahl von Bytes), wählt DNS die Verwendung von TCP, um sicherzustellen, dass "alle Bits" dort ankommen. Dies ist bei vollständigen Zonenübertragungsanforderungen üblich.
Die Wikipedia-Seite ist nicht die beste. IANA verwaltet die Registrierung für Portnummern (seien Sie gewarnt, sie umfasst derzeit 138 Seiten): Registrierung des Portnamens für Dienstname und Transportprotokoll
Ein Anwendungsschichtprotokoll kann jedes Transportschichtprotokoll und jede Portnummer verwenden. Konventionell verwenden die meisten bestimmte Portnummern in der Registrierung, aber das bedeutet nicht, dass sie auch andere nicht verwenden können. Ein Webserver verwendet beispielsweise standardmäßig den TCP-Port 80, kann jedoch so eingestellt werden, dass jede andere Portnummer verwendet wird, und ein Webbrowser kann diese weiterhin verwenden, wenn die Portnummer auf dem URI angegeben wird.
Es gibt viele Anwendungen, die so eingestellt werden können, dass sie entweder TCP oder UDP verwenden, und die Portnummern können geändert werden. Dies bietet eine gewisse Flexibilität im Umgang mit Konflikten und seltsamen Implementierungen.
quelle
Im wirklichen Leben ist es sehr einfach zu erkennen, welches Transportprotokoll verwendet wird. Wenn Sie nach einer "Faustregel" suchen, denken Sie daran:
UDP ist ein "verbindungsloses" / unzuverlässiges Protokoll. Es stellt verlorene Pakete nicht wie TCP wieder her und hat viel weniger Overhead als TCP. Daher wird es als Transport für Anwendungen verwendet, die empfindlich auf Verzögerungen reagieren (wie das Streamen von Audio / Video).
TCP ist ein verbindungsorientiertes / zuverlässiges Protokoll. Es stellt Pakete wieder her, wenn sie verloren gehen, und hat einen höheren Overhead, wird jedoch verwendet, wenn Paketverlust Probleme verursachen würde.
Hier sind eine Reihe von Methoden, mit denen Sie im wirklichen Leben bestimmen können, welches Transportschichtprotokoll eine Anwendung verwendet:
netstat -an
einer Windows-Eingabeaufforderung ausführen.nmap
den Server mit dem betreffenden Port aus (standardmäßig werden nur TCP-Ports gescannt).quelle
Die Quelle der Wikipedia-Liste scheint ursprünglich https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt zu sein, wobei die gelegentliche Zeile basierend auf protokollspezifischen Referenzen aktualisiert wird.
Es sieht so aus, als ob bei älteren Zuweisungen sowohl TCP- als auch UDP-Portnummern einem Protokoll zugewiesen wurden, auch wenn das Protokoll nur das eine oder das andere tatsächlich verwendet hat. Beispielsweise enthält FTP Einträge in der IANA-Tabelle für TCP und UDP. Diese Einträge beziehen sich beide auf RFC 959, aber RFC 959 erwähnt UDP nicht.
Im Allgemeinen ist die Standardressource, um herauszufinden, welche zugrunde liegenden Protokolle ein Anwendungsprotokoll tatsächlich verwendet, der Standard, der das Protokoll definiert.
Einige Protokolle können entweder TCP oder UDP verwenden, entweder nach Wahl des Benutzers (z. B. NFS) oder abhängig von den Details der Anforderung (z. B. DNS).
quelle