NNTP - Network News Transfer Protocol

NNTP ist das Kommunikationsprotokoll, das im USENET zwischen dem Client und dem Server zur Verteilung, Abruf, Suchen und Absetzen von Newsgroup-Artikeln verwendet wird. Die Hauptfunktion von NNTP ist das Verteilen von Nachrichten zwischen den News-Servern. In seinen Grundfunktionen ist es an SMTP angelehnt, welches zum Versand von E-Mails verwendet wird. Eine Verwandtschaft zu HTTP ist in weiten Teilen ebenfalls gegeben.

Ablauf der Verbreitung von Artikeln

Verbreitung von ArtikelnDie folgende Beschreibung ist ein Beispiel-Szenario, wie es möglich wäre, wenn ein Artikel seinen Weg vom Client zum News-Server und von dort weiter nimmt. Bis ein anderer Client den Artikel von seinem eigenen News-Server abruft.

  1. Der Benutzer von Client C1 schreibt einen neuen Artikel und sendet ihn seinem News-Server N1.
  2. Der vergibt dem Artikel eine eindeutige Message-ID und fügt dem Path-Header seinen Namen hinzu.
  3. N1 kennt die News-Server N2 und N3 und leitet den Artikel an diese beiden Server weiter.
  4. Die News-Server N2 und N3 nehmen den Artikel entgegen und fügen ihren Name dem Path-Header hinzu.
  5. Der News-Server N3 hat Kontakt zu N4 und leitet den Artikel an N5 weiter.
  6. Der News-Server nimmt den Artikel entgegen. Fügt seinen Namen dem Path-Header hinzu und leitet ihn an N5 weiter.
  7. Der News-Server N5 nimmt den Artikel entgegen und fügt seinen Namen dem Path-Header hinzu.
  8. N5 kennt N3, leitet den Artikel nicht weiter, da N3 sich im Path-Header des Artikels vermerkt hat und demnach den Artikel schon hat.
  9. N5 kennt außerdem N2. Er leitet den Artikel dort hin. N2 hat den Artikel allerdings schon und nimmt den Artikel nicht entgegen.
  10. Sind die Clients C2, C3 und C4 irgendwann online, holen sie sich den neuen Artikel von ihren News-Servern ab.

Message-ID

Da das USENET aus Diskussionsgruppen (Newsgroups) mit fortlaufenden Diskussionen besteht, hat jeder Artikel eine eindeutige Nummer. Die Message-ID liegt im Format <laufende Nummer@News-Server> vor und ist eine eindeutige Kennzeichnung für einen Artikel. Die fortlaufende Nummer wird von entgegennehmenden News-Servern vergeben und darf frühestens zwei Jahre nach Ablauf der Nachricht erneut vergeben werden. Die Message-ID dient nicht nur zum Kennzeichnen, sondern auch zum Wiederauffinden und zum Referenzieren, wenn auf einen Artikel geantwortet wurde. Mittels dieser ID kann ein Server also feststellen, ob er den Artikel schon hat und der Client ist in der Lage diesen Artikel einer Diskussion (Thread) zuzuordnen.

Path-Header

Der Artikel-Header des NNTP ist ähnlich aufgebaut wie bei SMTP, hat aber eine Besonderheit: den Path-Header.
Bevor ein Server einen Artikel weiterleitet, fügt er seinen Namen dem Path-Header hinzu. Findet ein bekannter News-Server den Namen im Path-Header weiss er, dass der betreffende Artikel bereits bei diesem News-Server ist und schickt in nicht noch einmal. Somit wird sehr viel Übertragungskapazität gespart.

NNTP-Kommandos

Die Kommunikation zwischen NNTP-Client und NNTP-Server erfolgt auf Basis von ASCII-Kommandos. Der NNTP-Client schickt ein Kommando an den Server und der Server schickt seine Antwort und die Daten an den Client zurück. Die wichtigsten Kommandos sind in der folgenden Tabelle beschrieben.

Kommando Beschreibung
LIST Der Client fordert vom Server alle verfügbaren Gruppen an.
NEWSGROUPS Mit diesem Kommando werden Datum und Uhrzeit mitgeschickt. Ab diesem Zeitpunkt forder der Client alle neuen Gruppen an.
NEWNEWS Mit diesem Kommando ruft der Client alle neuen Artikel einer Gruppe, ab einem bestimmten Datum und Uhrzeit, ab.
GROUP Der Client signalisiert dem Server, dass er nur mit einer bestimmten Gruppe arbeiten möchte.
ARTICLE Dieses Kommando liefert den Artikel-Header eine leere Zeile und anschließend den Artikel-Text zurück.
HEAD Dieses Kommando liefert den Artikel-Header zurück
BODY Dieses Kommando liefert den Artikel-Text zurück.
STAT Mit diesem Befehl wählt der Client einen Artikel aus.
NEXT Dieses Kommando liefert die Artikel-Kennung des nächsten Artikels zurück
QUIT Dieses Kommando beendet die Verbindung zum NNTP-Server.

NNTP-Statuscodes

Mit jeder Antwort des Servers wird ein dreistelliger Zahlencode mitgeliefert. Mit ihm zeigt der Server den Status der aktuellen Antwort an. Der Statuscode teilt sich in mehrere Bereiche, der an der ersten Ziffer des Codes erkennbar ist.

Zahlencode Bedeutung
1xx Informativ
2xx Kommando OK.
3xx Kommando OK. Rest senden!
4xx Kommando OK. Kommando wurde nicht ausgeführt.
5xx Kommando unbekannt oder Fehler.

Die zweite Ziffer des Zahlencodes bezieht sich näher auf den Vorgang und teilt sich wie folgt auf:

Zahlencode Bedeutung
x0x Verbindung, Setup und sonstige Nachrichten
x1x Newsgroupauswahl
x2x Artikelauswahl
x3x Distributionsfunktionen
x4x Senden von Artikeln
x8x Erweiterungen, die nicht standardisiert sind.
x9x Debug-Ausgaben