NNTP: Was steckt hinter dem Network News Transfer Protocol?
Lange Zeit vor dem World Wide Web entstand in den frühen 1980er-Jahren mit dem Usenet (urspr. UNIX User Network) eine weltweite Plattform für den Informationsaustausch, die auch heute noch als selbstständiger Internetdienst parallel zum Web existiert. Die Newsgroups, wie die einzelnen Themenbereiche des Usenets genannt werden, haben in den vergangenen Jahrzehnten aber aufgrund neuer, digitaler Austauschmedien wie Foren oder sozialen Netzwerken stark an Bedeutung verloren.
Der historische Wert des hierarchisch aufgebauten Usenets, das auf den klassischen Client-Server-Nachrichtenaustausch setzt, steht allerdings außer Frage. Grund genug, einen Blick auf das hinter dem Informationsnetzwerk steckende Protokoll NNTP (Network News Transfer Protocol) zu werfen, das für die Kommunikation zwischen den einzelnen News-Servern und -Clients unerlässlich ist.
Was ist NNTP (Network News Transfer Protocol)?
Beim Network News Transfer Protocol, kurz NNTP, handelt es sich um ein TCP/IP-Übertragungsprotokoll für Nachrichten in Newsgroups. Diese Newsgroups sind hauptsächlich im Rahmen des sogenannten Usenets im Einsatz, wo sie als eine Art Vorreiter moderner Internetforen Raum für den Austausch einer unbegrenzten Zahl an Textnachrichten zu den verschiedensten Themenbereichen bieten. Die erste Spezifikation des NNTP-Protokolls, die in RFC 977 festgehalten wurde, stammt aus dem Jahr 1986. Seitdem ist das Protokoll mehrmals überarbeitet worden – die aktuelle Version ist in RFC 3977 zu finden. Seit 2009 existiert mit RFC 5536 außerdem ein Request for Comments, der auch das Nachrichtenformat der NNTP-Übertragung genauer spezifiziert.
Bis zur Entwicklung und Veröffentlichung von NNTP erfolgte der Datenaustausch im Usenet über Telefonleitungen mit dem UNIX-Protokoll UUCP (Unix to Unix copy)!
Wo kommt das NNTP-Protokoll zum Einsatz?
In der heutigen Zeit spielt NNTP in der digitalen Kommunikation keine große Rolle mehr, was vor allem auf die Tatsache zurückzuführen ist, dass auch das Usenet nur noch vereinzelt und in Fachkreisen Verwendung findet. Für das Informationsnetzwerk ist das Network News Transfer Protocol seit 1986 unverzichtbar und sowohl auf Server- als auch auf Clientseiten im Einsatz. Abseits des Austauschs persönlicher Direktnachrichten zeichnet sich das Usenet insbesondere durch die bereits erwähnten Newsgroups aus, die dank des Protokolls individuell erstellt und verwaltet werden können. Auf diese Weise sind im Laufe der Zeit zahlreiche Sub-Newsgroups in die bestehende Basis-Hierarchie des Usenets eingegliedert worden.
Die acht Hauptthemen des Usenets, die auch als „Big Eight“ (dt. die großen Acht) bzw. „Big-8“ bezeichnet werden, sind folgende:
- comp: Computer
- sci: Wissenschaft und Technik
- soc: Gesellschaft
- talk: Allgemeine Themen
- rec: Themen rund um Freizeit, Erholung, Kunst und Kultur
- news: Informationen und Neuigkeiten über das Usenet selbst
- misc: Vermischtes
- humanities: Geisteswissenschaften, Kulturelles
Wie funktioniert das Network News Transfer Protocol?
NNTP ist ein textbasiertes Protokoll und sieht den abwechselnden Austausch zwischen Client und Server vor: Auf jede NNTP-Anfrage wird also eine NNTP-Antwort erwartet. Für diese Kommunikation hat die IANA (Internet Assigned Numbers Authority) den TCP-Port 119 vorgesehen, der in diesem Fall sogar ausschließlich für das Übertragungsprotokoll reserviert ist – ein TCP/IP-Netzwerk wie das Internet ist folglich die zugrundeliegende Basis für die Informationsplattform. Das NNTP-Protokoll, das selbst auf der Anwendungsschicht greift, setzt dabei direkt auf dem TCP-Protokoll auf, was den Vorteil hat, dass sowohl eine sichere als auch eine zuverlässige Übertragung der Daten gewährleistet wird.
Das elementare Konzept des Usenets sieht vor, dass eine neue Nachricht, die von einem NNTP-Client an einen beliebigen NNTP-Server geschickt wurde, auf diesem Server aufbewahrt wird. Alle anderen Clients, die an der jeweiligen Unterhaltung teilnehmen möchten, können diese Nachricht bzw. den Artikel jederzeit herunterladen, um den aktuellen Stand der Newsgroup herzustellen. Das bedeutet folglich, dass ein Client nach dem Verbindungsaufbau zu einem NNTP-Server zunächst alle Nachrichten herunterlädt, die seit der letzten Verbindung zu dem Server veröffentlicht worden sind. Je länger ein Client also „offline“ war, desto mehr Zeit nimmt der Aktualisierungsprozess nach dem Verbindungsaubau in Anspruch.
Sobald ein Server eine neue Nachricht via Network News Transfer Protocol erhält, fügt er dieser Nachricht bzw. diesem Artikel eine individuelle Message-ID hinzu. Diese hat das Format „<laufende Nummer@News-Server>“ und dient der eindeutigen Kennzeichnung und dem Wiederfinden und Referenzieren, falls andere Clients bzw. Nutzer mit einer eigenen Nachricht reagieren oder antworten möchten.
Um neue Nachrichten im gesamten Usenet-Netzwerk zu verteilen, senden die einzelnen Server erhaltene Nachrichten außerdem an alle weiteren, ihnen bekannten NNTP-Server weiter. Zuvor fügen sie dem Path-Header der NNTP-Nachricht den eigenen Namen bei, damit diese nicht noch ein weiteres Mal empfangen wird.
NNTP: Beispiel für den Nachrichtenaustausch
Nachdem die Grundlagen des Network News Transfer Protocols in den vorangegangenen Abschnitten erläutert wurden, soll die Kommunikation zwischen Clients und Servern nun an einem konkreten Beispiel verdeutlicht werden. Ausgangspunkt ist Client 1, von dem aus eine neue Nachricht bzw. ein neuer Artikel in das Usenet gespeist wird:
Die einzelnen Schritte der Nachrichtenübermittlung, die in diesem Schaubild zu sehen sind, lassen sich wie folgt zusammenfassen:
- Der Nutzer hinter NNTP-Client 1 schreibt eine neue Nachricht (bzw. einen neuen Artikel) und schickt diese Daten an NNTP-Server 1.
- NNTP-Server 1 versieht die Nachricht mit einer eindeutigen Message-ID und fügt dem Header seinen Namen hinzu. Er kennt NNTP-Server 2 und NNTP-Server 3 und leitet die Nachricht an beide weiter.
- NNTP-Server 2 nimmt die Nachricht entgegen und fügt seinen Namen in den Header ein. Auch NNTP-Server 3 erhält die Nachricht, erweitert den Header um seinen Namen und leitet die Nachricht an den ihm bekannten NNTP-Server 4 weiter.
- Auch auf NNTP-Server 4 wird die Nachricht empfangen und verarbeitet: Der Header wird um den eigenen Namen erweitert. Anschließend kontaktiert er den ihm bekannten NNTP-Server 5 kontaktiert und versorgt ihn mit den Daten.
- NNTP-Server 5 fügt seine Erkennung dem Header hinzu. Er wertet die Einträge im Header aus und versucht daher nicht, die Nachricht seinerseits an die ihm bekannten Server 2 und 3 weiterzuleiten (die roten Pfeile stehen somit für unterlassene Weiterleitungen).
- Sobald sie online sind, holen sich die Clients derweil die Nachricht von ihrem persönlichen News-Server ab. NNTP-Client 2 erhält die Informationen beispielsweise direkt von Server 1, Client 6 hingegen von Server 4.
NNTP-Kommandos und -Statuscodes im Überblick
Für die Kommunikation mit dem NNTP-Protokoll greifen Clients und Server auf ASCII-Kommandos zurück. Mit jeder NNTP-Anfrage sendet ein Client also automatisch auch eines dieser Kommandos. Der Server antwortet dann mit einer Statusmeldung und schickt dem Client die angeforderten Daten. Die wichtigsten Befehle der NNTP-Kommunikation sind in der folgenden Tabelle zusammengefasst:
NNTP-Kommando | Funktion |
---|---|
LIST | fordert eine Auflistung der verfügbaren Newsgroups an (inklusive der ersten und letzten Artikelnummer) |
NEWGROUPS | erfragt alle neuen verfügbaren Gruppen |
NEWNEWS | erfragt alle neuen verfügbaren Artikel, die ab einem bestimmten Datum erstellt wurden |
GROUP | spezifiziert die Gruppe, für die eine Anfrage gelten soll |
ARTICLE | ermöglicht die Abfrage eines konkreten Beitrags über dessen Nummer in der Gruppe oder seine Message-ID |
HEADER | fordert ausschließlich den Header eines Artikels an |
BODY | fordert ausschließlich den Body eines Artikels an |
STAT | wird für die Angabe der Message-ID eines Artikels benötigt |
NEXT | wählt den nächsten Artikel in der Newsgroup an |
POST | informiert den Server darüber, dass eine neue Nachricht bzw. ein neuer Artikel übermittelt wird |
QUIT | trennt die Verbindung zum NNTP-Server |
Bei der Statusmeldung, die der Server als NNTP-Antwort (inklusive der angeforderten Daten) zurückschickt, handelt es sich um einen dreistelligen Zahlencode. Die erste Stelle lässt sich dabei wie folgt übersetzen:
NNTP-Server-Statuscode | Bedeutung |
---|---|
1xx | allgemeine Informationen |
2xx | Kommando erhalten, Ausführung erfolgreich |
3xx | Kommando erhalten, weitere Informationen werden benötigt |
4xx | Kommando erhalten, Ausführung nicht erfolgreich |
5xx | ungültiges Kommando |
Über die zweite Stelle des Zifferncodes gibt der Server indes folgende Informationen weiter:
NNTP-Server-Statuscode | Bedeutung |
---|---|
x0x | Informationen über die Verbindung, das Setup oder Sonstiges |
x1x | Information über ausgewählte Newsgroup |
x2x | Information über ausgewählten Artikel |
x3x | Information über Nachrichtentransfer |
x4x | Information über gesendeten Artikel |
x5x | Authentifizierungsantwort |
x8x | Nachricht für erweiterte Kommandos, die nicht standardisiert sind |
x9x | Debugging-Nachricht |