Hosted at Sorceforge.net next up previous contents
Next: HTTP Up: Hitchhiker's Guide to the Previous: IMAP4   Contents

Subsections

NNTP

NNTP30, definiert in RFC 977, ist das für die Verbreitung von Usenet-Messages (News) zuständige Protokoll.

Auch wenn heute unter Lamer-Kreisen die Web-basierten Foren das Usenet immer mehr verdrängen, wird es doch noch von sehr vielen Leuten besucht und ist der erste Ort wo man fragen sollte falls zum Beispiel Computer31-Probleme auftauchen.

Um die Beispiele dieses Kapitels nachzuvollziehen kann man sich beim CIS DFN auf http://news.cis.dfn.de/dnn/ kostenlos einen Account für die Benutzung ihres News-Servers holen, auch wenn die Registrierung von Menschenhand geprüft wird und es deswegen ein bis zwei Tage dauert, bis man dann die Login-Daten in Händen hält.

Technik

NNTP ist ein meiner Meinung nach sehr geniales Protokoll, da es völlig dezentral orientiert ist:

Eine Usenet-Mail, hochgeladen auf irgendeinen Server des NNTP-Netzwerkes, wird innerhalb von Stunden an die anderen Server weitergeleitet, sodass sie sehr schnell erdweit abrufbar ist (siehe dazu [*]).

Bei NNTP besteht eine Message genau wie bei SMTP und POP3 aus einem Header und einem Body (detailliert beschrieben [*]).

Beispielsitzung

Ähnlich wie die bisher besprochenen Protokolle der Anwendungsschicht basiert NNTP auf ASCII, das heißt man kann ohne Probleme via Telnet Posten (Usenet-Messages versenden) und online lesen.

Zunächst verbinden wir uns zuerst mit dem News-Server, im Beispiel news.cis.dfn.de auf dem Standard-NNTP-Port 119 (TCP). Als Banner erhalten wir

<200 The server welcomes 167.9-dial.\
<  augustakom.net (80.81.9.167). \
<  Authorization required for reading and posting.
Wir folgen dem Aufruf des Banners und loggen uns ein:
>AUTHINFO SIMPLE blechschmidt p4ssw0rt
<281 Authentication accepted. (UID=105138)

Jetzt könnten wir mit LIST NEWSGROUPS alle auf diesem Server verfügbaren Newsgruppen anzeigen lassen. Da dies wegen der Vielzahl von Gruppen lange dauern kann, zeigen wir gleich die IDs der letzten Artikel der Newsgruppe de.comp.os.unix.shell an:

>LISTGROUP de.comp.os.unix.shell
<211 Article list follows
<14127
<14128
<14129
<14130
<14131
<.
Wie bei SMTP und POP3 wird das Ende der Übertragung mit einem einzelnen Punkt auf einer Zeile für sich markiert.

Um nun die 14131. Message abzuzeigen, geben wir

>ARTICLE 14131
<220 14131 <bfjheg$c3$04$1@news.t-online.com> article
<Path: uni-berlin.de!fu-berlin.de!!news.t-online.com!not-for-mail
<From: Heiko Franz <heiko.franz@gmx.de>
<Newsgroups: de.comp.os.unix.shell
<Subject: Tastenfolge an Programm in virtuellem Terminal senden
<Message-ID: <bfjheg$c3$04$1@news.t-online.com>
<Xref: uni-berlin.de de.comp.os.unix.shell:14131
<
<Hallo!
<
<Gibt es in der Bash eine Möglichkeit, eine Tastenfolge an ein
<...
<.
ein. Auch hier wird das Ende der Nachricht (Syntax beschrieben [*]) wieder auf die gleiche Weise markiert. Hätten wir nur den Header der Message herunterladen wollen, hätten wir
>HEAD 14131
eingeben können. Wären wir nur am Inhalt interessiert, würden wir
>BODY 14131
benutzen.

Um einen Artikel zu posten, wechseln wir zuerst in die Newsgroup de.test mit dem schon erwähnten LISTGROUP-Befehl und tippen dann

>POST
<340 Ok, recommended ID <bfk1ac$f52tn$1@ID-105138.
<  news.uni-berlin.de>
>From: Tester <test@test.com>
>Subject: Test 1
>Newsgroups: de.test
>
>Only a test message.
>.
<240 Article posted <bfk1ac$f52tn$1@ID-105138.news.
<  uni-berlin.de>
Hier könnten wir auch (wie im Beispiel gemacht) den Absender faken. Da allerdings bei den meisten NNTP-Servern die verwendete UID32 in den Header aufgenommen wird, ist das Zurückverfolgen sehr einfach, man muss nur in den Header der Nachricht schauen.

Zur Kontrolle schauen wir uns nun die Message an. Dazu verwenden wir wiedern den ARTICLE-Befehl, diesmal allerdings statt der Message-Nummer die Message-ID als Parameter:

>ARTICLE <bfk1ac$f52tn$1@ID-105138.news.uni-berlin.de>
<220 0 article <bfk1ac$f52tn$1@ID-105138.news.uni-berlin.de>
<Path: uni-berlin.de!167.9-dial.augustakom.NET!not-for-mail
<From: Tester <test@test.com>
<Newsgroups: de.test
<Subject: Test 1
<Date: 22 Jul 2003 18:55:45 GMT
<Lines: 1
<Message-ID: <bfk1ac$f52tn$1@ID-105138.news.uni-berlin.de>
<NNTP-Posting-Host: 167.9-dial.augustakom.net (80.81.9.167)
<X-Trace: news.uni-berlin.de 1058900145 15895479 80.81.9.167
<  (16 [105138])
<Xref: uni-berlin.de de.test:428175
<
<Only a test message.
<.
Einige Header33 sind automatisch dazu gekommen, um das Funktionieren des Verbreitens der Message zu gewährleisten. Von wesentlicher Bedeutung ist die Message-ID. Diese ID identifiziert jede Nachricht (Usenet-Mail und "`normale"' Mail) eindeutig. Die Message-ID setzt sich üblicherweise aus zufälligen Zeichenketten, der aktuellen Zeit und dem User-Namen des Posters zusammen.

Nun können wir die Verbindung schließen:

>QUIT
<205 .

Zusammenfassung

Hier noch mal die einzelnen Befehle, diesmal ohne Sever-Reply:

>AUTHINFO SIMPLE benutzername password
>LISTGROUP gruppenname
>ARTICLE nummer
>POST
>[(Usenet-)Mail-Header und -Body]
>QUIT

Eine volle Beispielsitzung findet sich

Figure 16: Abrufen und Posten via NNTP
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}iblech@thestars genu...
...ection closed by foreign host.\end{verbatim}
\end{small}\end{center}\end{figure}
[*].

Besondere Header

NNTP geht jedoch über eine bloße Ansammlung von "`normalen"' Mails hinaus: Es gibt einige Header-Felder, die die Verteilung der Usenet-Mails regeln.

Newsgroups

Über den Newsgroups-Header wird festgelegt, ich welchen Gruppen die Nachricht erscheint. Getrennt werden mehrere Gruppen (zum Beispiel beim Cross-Posting34) durch , (Komma):

Newsgroups: de.comp.text.tex, de.comp.text.genuineword

Followup-To

Der Followup-To-Header entscheidet, in welche Newsgroup Antworten gehen. Dies ist insbesondere beim Cross-Posting nützlich (und wird im Allgemeinen auch vom Poster erwartet), da alle Antworten gesammlt sind.

Besonders ist das Ziel poster, in dem Fall gehen die Antworten direkt an den Sender der Nachricht:

From: Ingo Blechschmidt <iblech@web.de>
Subject: Suche XYZ
Followup-To: poster

Approved

Bei moderierten Gruppen35 ist der Approved-Header nötig, um die Moderation zu umgehen. Mehr dazu siehe Google.

Control

Besondere Usenet-Mails sind "`Control-Messages"'. Mit ihnen können zum Beispiel vorhandene Nachricht gelöscht ("`gecancelt"') werden, neue Newsgruppen angelegt und entfernt werden, etc.

Jede Control-Nachricht muss den Control-Header besitzen. Um zum Beispiel die (eigene) Nachricht mit der Message-ID <abc@host.org> zu canceln, benutzt man:

Control: cancel <abc@host.org>
Dabei ist darauf zu achten, dass die "`Mail"' vom gleichen Absender verschickt wird, der From-Header muss also mit dem From-Header des Postings, das gelöscht werden soll, übereinstimmen36.

Mit Control-Nachrichten kann man auch neue Newsgruppen erstellen, mehr hierzu RFC 1036.

Austausch zwischen den Servern

Bisher wurde noch nicht erklärt, wie eine Nachricht auf Server A an alle anderen Server weitergeleitet wird.

Server A könnte sich natürlich als den Original-Poster ausgeben, zu jedem anderen Server der Erde connecten und dort wieder via POST die Nachricht posten. In der Tat kommt jedoch ein sehr viel effizienteres Verfahren zum Einsatz, IHAVE:

Angenommen, jemand postet auf A eine Mail mit der Message-ID <r4ndom@host>. Dann wird A zu einem oder zwei anderen Servern connecten und dort IHAVE ausführen:

>IHAVE <r4ndom@host>
<335 send article to be transferred.
>From: ...
>
>Hallo, ...
>.
<235 article transferred ok
Hat der Server den Artikel schon, kann A diesen Umstand an einer verändeten Statusmeldung erkennen:
>IHAVE <r4ndom@host>
<435 article not wanted - do not send it

Dieses Spiel führt jeder Server in einem bestimmten Intervall aus, so dass nach kürzester Zeit die Nachricht auf allen (an das Netz angeschlossenen) Servern verfügbar ist.

Übersicht aller Befehle

Befehl Wirkung
AUTHINFO SIMPLE user pass Login
LIST NEWSGROUPS Zeigt Liste aller Newsgroups des Servers an
LISTGROUP gruppenname Zeigt IDs einer Gruppe an
LISTGROUP gruppenname Wechselt in die angegebene Gruppe
GROUP gruppenname Wechselt in angegebene Gruppe
ARTICLE nummer o. ARTICLE id Zeigt gewählte Nachricht an
HEAD nummer o. HEAD id Holt den Header der gewünschten Message
BODY nummer o. BODY id Holt den Inhalt der Usenet-Mail
POST Sendet eine Message in die aktive Gruppe
IHAVE msg-id Verteilt eine Nachricht
QUIT Schließt die Sitzung

Abschluss

Wie man sieht, ist NNTP trotz der sehr stark ausgeprägten Dezentralisierung noch sehr einfach zu bedienen, Lesen und Posten von Usenet-News sollte jetzt auch via Telnet kein Problem mehr sein. Zum Testen der neu erworbenen Kenntnise sollte man allerdings Newsgruppen wie de.test verwenden, um andere Leser nicht mit falschen Headern zu stören ;-)...

Übrigens ist auch lynx (mehr zu lynx [*]) ein einfach zu bedienender Newsreader, was die Screenshots

Figure 17: Lynx als Newsreader
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}<<< Newsgroup de.sci...
...dfn.de/de.sci.mathematik/14218\end{verbatim}
\end{small}\end{center}\end{figure}
[*] und
Figure 18: Lynx beim Anzeigen einer Message
\begin{figure}\begin{center}\begin{small}
\begin{verbatim}<<< [FAQ] <2002-04-0...
...ehr- mailto:tjark.weber@gmx.de\end{verbatim}
\end{small}\end{center}\end{figure}
[*] beweisen.



Footnotes

...NNTP30
Network News Transport Protocol
... Computer31
=Windows
... UID32
User ID
... Header33
Wie zum Beispiel der X-Trace-Header, der sowohl die IP als auch (in diesem Fall) die User-ID des Posters enthält.
... Cross-Posting34
Postet man eine Nachricht an mehrere (ähnliche) Gruppen, so spricht man vom "`Cross-Posting."'
... Gruppen35
Gruppen, deren jede Nachricht erst von einem Moderator bestätigt werden muss, damit zum Beispiel keine Flamewars ausbrechen oder Off-Topic-Posts die Regel werden
... übereinstimmen36
Tatsächlich wird zuerst der Sender-Header überprüft, ist der nicht vorhanden wird zum From übergegangen.

Hosted at Sorceforge.net next up previous contents
Next: HTTP Up: Hitchhiker's Guide to the Previous: IMAP4   Contents
Ingo Blechschmidt 2003-08-07