Im Katalog suchen

Linux - Wegweiser für Netzwerker

Online-Version

Copyright © 2001 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser für Netzwerker oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel



Das NNTP-Protokoll

Wir erwähnten bereits zwei NNTP-Befehle, die maßgeblich dafür sind, wie News-Artikel zwischen Servern gezogen oder geschoben werden. Im Rahmen einer echten NNTP-Sitzung werfen wir einen näheren Blick auf diese Befehle, um Ihnen zu zeigen, wie einfach dieses Protokoll ist. Zur Veranschaulichung benutzen wir einen einfachen telnet-Client, um uns mit dem INN-basierten News-Server news.vbrew.com in der virtuellen Brauerei zu verbinden. Der Server wird hier nur mit einer minimalen Konfiguration betrieben, um die Beispiele möglichst knapp zu gestalten. Wie die Konfiguration dieses Servers vervollständigt wird, sehen wir dann in Kapitel 23 Internet News. Bei unserem Test achten wir sehr sorgfältig darauf, die Artikel ausschließlich in der Newsgruppe junk zu erzeugen, damit wir niemanden stören.

Verbindung mit dem News-Server herstellen

Eine Verbindung zu einem News-Server aufzubauen erfordert nur,daß Sie eine TCP-Verbindung zu seinem NNTP-Port herstellen. Sobald Sie verbunden sind, werden Sie mit einer Willkommens-Meldung begrüßt. Einer der ersten Befehle, die Sie ausprobieren könnten, ist help. Die Antwort, die Sie erhalten, hängt im allgemeinen davon ab, ob der Server Sie für einen Remote-NNTP-Server oder für einen Newsreader hält, da dafür unterschiedliche Befehlssätze erforderlich sind. Ihren Betriebsmodus können Sie mit dem Befehl mode ändern; das betrachten wir gleich:

$ telnet news.vbrew.com nntp 
Trying 172.16.1.1... 
Connected to localhost. 
Escape character is '^]'. 
200 news.vbrew.com InterNetNews server INN 1.7.2 08-Dec-1997 ready 
help 
100 Legal commands 
        authinfo 
                help 
                ihave 
                check 
                takethis 
                list 
                mode 
                xmode 
                quit 
                head 
                stat 
                xbatch 
                xpath 
                xreplic 
For more information, contact "usenet" at this machine. 
.

Die Antworten auf NNTP-Befehle enden grundsätzlich mit einem Punkt in einer separaten Zeile. Die Nummern, die Sie in der Ausgabeliste sehen, sind Antwortcodes (response codes) und werden vom Server benutzt, um einen Erfolg oder Mißerfolg eines Befehls anzuzeigen. Die Antwortcodes werden in RFC-977 beschrieben. Über die wichtigsten davon reden wir noch im folgenden.

News-Artikel auf einen Server schieben (Pushing)

Den IHAVE-Befehl erwähnten wir bereits, als wir über das Schieben (Pushing) von Artikeln auf einen News-Server sprachen. Jetzt werfen wir einen Blick darauf, wie IHAVE denn nun wirklich funktioniert:

ihave <123456@gw.vk2ktj.ampr.org> 
335 
From: terry@gw.vk2ktj.ampr.org 
Subject: test message sent with ihave 
Newsgroups: junk 
Distribution: world 
Path: gw.vk2ktj.ampr.org 
Date: 26 April 1999 
Message-ID: <123456@gw.vk2ktj.ampr.org> 
Body:  

This is a test message sent using the NNTP IHAVE command.  

. 
235

Bei allen NNTP-Befehlen wird nicht zwischen Groß- und Kleinschreibung unterschieden. Der IHAVE-Befehl verlangt ein obligatorisches Argument, nämlich die Message-ID des geschobenen Artikels. Jedem News-Artikel wird bei seiner Erzeugung eine eindeutige Message-ID zugewiesen. Der Befehl IHAVE bietet eine Möglichkeit, dem NNTP-Server die Auskunft zu entlocken, welche Artikel er hat, wenn er welche auf einen anderen Server schieben will. Der sendende Server führt einen IHAVE-Befehl für jeden Artikel durch, den er schieben will. Wenn der vom empfangenden Server erzeugte Antwortcode auf den Befehl im Bereich “3xx” liegt, überträgt der sendende NNTP-Server den vollständigen Artikel inklusive dem vollen Header und schließt den Artikel mit einem Punkt in einer Einzelzeile ab. Liegt der Antwortcode dagegen im Bereich “4xx”, hat sich der empfangende Server dafür entschieden, diesen Artikel nicht anzunehmen, vielleicht weil er ihn bereits hat oder aus irgendeinem anderen Grund, zum Beispiel weil mal wieder die Platte übergelaufen ist.

Wenn der Artikel übertragen wurde, setzt der empfangende Server einen weiteren Antwortcode ab, der anzeigt, ob die Übertragung des Artikels erfolgreich verlaufen ist.

Wechsel in den NNRP-Reader-Modus

Newsreader verwenden ihren eigenen Befehlssatz, wenn sie mit einem News-Server reden. Um diese Befehle zu aktivieren, muß der News-Server im sogenannten Leser-Modus bzw. Reader-Modus arbeiten. Die meisten News-Server befinden sich bereits standardmäßig im Reader-Modus, es sei denn, die IP-Adresse des verbindenden Hosts weist auf einen News-Forwarding-Peer hin. Wie auch immer, NNTP bietet jedenfalls einen Befehl, mit dem explizit in den Reader-Modus umgeschaltet werden kann:

mode reader 
200 news.vbrew.com InterNetNews NNRP server INN 1.7.2 08-Dec-1997 ready/ 
    (posting ok). 
help 
100 Legal commands 
  authinfo user Name|pass Password|generic <prog> <args> 
  article [MessageID|Number] 
  body [MessageID|Number] 
  date 
  group newsgroup 
  head [MessageID|Number] 
  help 
  ihave 
  last 
  list [active|active.times|newsgroups|distributions|distrib.pats|/ 
      overview.fmt|subscriptions] 
  listgroup newsgroup 
  mode reader 
  newgroups yymmdd hhmmss ["GMT"] [<distributions>] 
  newnews newsgroups yymmddhhmmss ["GMT"] [<distributions>] 
  next 
  post 
  slave 
  stat [MessageID|Number] 
  xgtitle [group_pattern] 
  xhdr header [range|MessageID] 
  xover [range] 
  xpat header range|MessageID pat [morepat...] 
  xpath MessageID 
Report problems to <usenet@vlager.vbrew.com> 
.

Für den NNTP-Reader-Modus gibt es jede Menge Befehle. Viele davon sind so gestaltet, daß sie das Leben eines Newsreaders leichter machen. Wir hatten bereits früher erwähnt, daß es Befehle gibt, mit denen der Server angewiesen wird, den Header und den Inhalt von Artikeln separat zu senden. Außerdem gibt es Befehle, mit denen die verfügbaren Gruppen und Artikel aufgelistet werden können, und weitere Befehle, die Posting gestatten, eine Alternative, um News-Artikel an den Server zu senden.

Verfügbare Gruppen auflisten

Der list-Befehl listet eine Reihe verschiedener Informationsarten auf, insbesondere die vom Server unterstützten Gruppen:

list newsgroups 215 
Descriptions in form "group description". 
control                 News server internal group 
junk                    News server internal group 
local.general           General local stuff 
local.test              Local test group 
.

Aktive Gruppen auflisten

Der Befehl list active zeigt jede unterstützte Gruppe an und stellt Informationen über sie bereit. Die beiden Nummern in jeder Ausgabezeile sind die Artikel-Obergrenze sowie die Artikel-Untergrenze, d.h. die höchste bzw. niedrigste Artikelnummer in jeder Gruppe. Der Newsreader gewinnt daraus eine Vorstellung über die Anzahl der Artikel in der Gruppe. Über diese Nummern sprechen wir gleich noch ein wenig. Das letzte Feld in der Ausgabe zeigt Optionen an, die steuern, ob Posting an die Gruppe erlaubt ist, ob die Gruppe moderiert wird und ob gepostete Artikel tatsächlich gespeichert oder nur durchgereicht werden. Diese Optionen werden detailliert in Kapitel 23 Internet News, beschrieben. Ein Beispiel dafür sieht etwa so aus:

list active 
215 Newsgroups in form "group high low flags". 
control 0000000000 0000000001 y 
junk 0000000003 0000000001 y 
alt.test 0000000000 0000000001 y 
.

Posten eines Artikels

Wir erwähnten bereits, daß es einen Unterschied gibt zwischen dem Schieben (Pushing) eines Artikels und dem Absenden (Posten) eines Artikels. Wenn Sie einen Artikel schieben, wird implizit angenommen, daß der Artikel bereits existiert, daß er eine eindeutige Message-ID besitzt, die ihm eindeutig vom Server zugewiesen wurde, an den er ursprünglich gepostet wurde, und daß er einen vollständigen Satz von Headern hat. Wenn Sie einen Artikel posten, erzeugen Sie diesen Artikel erstmals, und die einzigen Header, die Sie angeben, sind diejenigen, die für Sie von Bedeutung sind, wie zum Beispiel das Subject sowie die Newsgruppen, an die Sie den Artikel posten. Der News-Server, dem Sie den Artikel senden, fügt all die anderen Header automatisch für Sie hinzu und erzeugt eine Message-ID, die er dann benutzt, wenn er den Artikel auf andere Server schiebt.

Alles in allem bedeutet dies, daß das Posten eines Artikels sogar einfacher als das Schieben eines Artikels ist. Ein Beispiel für ein Posting sieht etwa so aus:

post 
340 Ok 
From: terry@richard.geek.org.au 
Subject: test message number 1 
Newsgroups: junk 
Body:  

This is a test message, please feel free to ignore it.  

. 
240 Article posted

Wir haben noch zwei weitere Nachrichten wie diese erzeugt, um unseren folgenden Beispielen etwas Realitätsnähe zu geben.

Neue Artikel auflisten

Wenn ein Newsreader erstmals eine Verbindung zu einem neuen Server herstellt und der Benutzer eine Newsgruppe zum Browsen auswählt, benötigt der Newsreader eine Liste neuer Artikel, und zwar derjenigen, die seit dem letzten Login vom Benutzer gepostet oder empfangen wurden. Dafür gibt es den Befehl newnews. Ihm werden drei obligatorische Argumente übergeben: der Name der fraglichen Gruppe(n) sowie das Datum und der Zeitpunkt, ab dem Artikel aufgelistet werden sollen. Datum und Zeitpunkt werden jeweils als sechsstellige Zahl angegeben, wobei die wichtigste Information am Anfang steht: yymmdd bzw. hhmmss.

newnews junk 990101 000000 
230 New news follows 
<7g2o5r$aa$6@news.vbrew.com> 
<7g5bhm$8f$2@news.vbrew.com> 
<7g5bk5$8f$3@news.vbrew.com> 
.

Gruppen zur Bearbeitung auswählen

Wenn der Benutzer eine Newsgruppe zum Browsen auswählt, kann der Newsreader dem News-Server mitteilen, daß die Gruppe ausgewählt wurde. Das vereinfacht die Interaktion zwischen Newsreader und News-Server, da es nun nicht mehr nötig ist, mit jedem Befehl den Namen der Newsgruppe immer wieder mitzusenden. Der Befehl group nimmt einfach den Namen der ausgewählten Gruppe als Argument. Viele darauffolgende Befehle nehmen dann diese Gruppe als Vorgabewert, sofern keine andere Newsgruppe angegeben wird.

group junk 211 3 1 3 junk

Der Befehl group liefert eine Nachricht zurück, die die Anzahl der aktiven Nachrichten, die Artikel-Unter- und -Obergrenze oder den Namen der Gruppe angibt. Obwohl die Anzahl der aktiven Nachrichten und die Artikel-Untergrenze in unserem Beispiel identisch sind, ist das häufig nicht der Fall. In einem aktiven News-Server können manche Artikel bereits gelöscht worden sein, was zwar die Anzahl der aktiven Nachrichten vermindert, die Artikel-Obergrenze jedoch unberührt läßt.

Liste von Artikeln in einer Gruppe

Um auf bestimmte Artikel in Newsgruppen zugreifen zu können,muß der Newsreader wissen, welche Artikelnummern aktive Artikel repräsentieren. Der Befehl listgroup zeigt eine Liste mit Nummern der aktiven Artikel in der aktuellen Gruppe bzw. in einer bestimmten Gruppe, wenn ein Gruppenname angegeben wird:

listgroup junk 
211 Article list follows 
1 
2 
3 
.

Nur Artikel-Header lesen

Der Benutzer muß bereits einige Vorabinformationen über einen Artikel bekommen, bevor er entscheiden kann, ob er ihn überhaupt lesen will. Früher erwähnten wir bereits, daß einige Befehle es ermöglichen, den Artikel-Header und -Inhalt getrennt zu übertragen. Mit dem Befehl head wird der Server aufgefordert, nur den Header des angegebenen Artikels an den Newsreader zu übertragen. Wenn der Benutzer diesen Artikel nicht lesen will, haben wir nicht unnütz Zeit und Bandbreite damit verschwendet, einen unter Umständen großen Artikel-Inhalt zu übertragen, der sowieso nicht benötigt wird.

Die Artikel werden entweder über ihre Nummer (vom Befehl listgroup) oder ihre Message-ID angesprochen:

head 2 
221 2 <7g5bhm$8f$2@news.vbrew.com> head 
Path: news.vbrew.com!not-for-mail 
From: terry@richard.geek.org.au 
Newsgroups: junk 
Subject: test message number 2 
Date: 27 Apr 1999 21:51:50 GMT 
Organization: The Virtual brewery 
Lines: 2 
Message-ID: <7g5bhm$8f$2@news.vbrew.com> 
NNTP-Posting-Host: localhost 
X-Server-Date: 27 Apr 1999 21:51:50 GMT 
Body: 
Xref: news.vbrew.com junk:2 
.

Nur Artikel-Inhalt lesen

Falls sich der Benutzer aber dafür entscheidet, den Artikel zu lesen, muß der Newsreader den News-Server auffordern können, den Inhalt der ganzen Nachricht zu übertragen. Für diesen Zweck gibt es den Befehl body. Er arbeitet genauso wie der head-Befehl, nur daß hier allein der Nachrichteninhalt zurückgeliefert wird:

body 2 
222 2 <7g5bhm$8f$2@news.vbrew.com> body 
This is another test message, please feel free to ignore it too. 
.

Artikel einer Gruppe lesen

Auch wenn es zumeist am effizientesten ist, die Header und Inhalte ausgewählter Artikel getrennt zu übertragen, gibt es dennoch Situationen, in denen die komplette Übertragung besser ist. Ein gutes Beispiel dafür sind Anwendungen, mit denen wir alle Artikel einer Gruppe ohne irgendeine Vorauswahl übertragen wollen, zum Beispiel, wenn wir ein NNTP-Cache-Programm wie leafnode benutzen.1

Normalerweise stellt NNTP dafür ein Mittel zur Verfügung, und es ist keine große Überraschung, daß es fast genauso wie der head-Befehl funktioniert. Der Befehl article nimmt auch eine Artikelnummer oder eine Message-ID als Argument, liefert aber den ganzen Artikel inklusive Header zurück:

article 1 
220 1 <7g2o5r$aa$6@news.vbrew.com> article 
Path: news.vbrew.com!not-for-mail 
From: terry@richard.geek.org.au 
Newsgroups: junk 
Subject: test message number 1 
Date: 26 Apr 1999 22:08:59 GMT 
Organization: The Virtual brewery 
Lines: 2 
Message-ID: <7g2o5r$aa$6@news.vbrew.com> 
NNTP-Posting-Host: localhost 
X-Server-Date: 26 Apr 1999 22:08:59 GMT 
Body: 
Xref: news.vbrew.com junk:1  

This is a test message, please feel free to ignore it. 
.

Wenn Sie einen unbekannten Artikel verlangen, liefert der Server eine Nachricht mit einem angemessen codierten Antwortcode und vielleicht sogar eine lesbare Textnachricht zurück:

article 4 
423 Bad article number

In diesem Abschnitt haben wir beschrieben, wie die wichtigsten NNTP-Befehle angewendet werden. Wenn Sie daran interessiert sind, Software zu entwickeln, die das NNTP-Protokoll implementiert, sollten Sie dafür die relevanten RFC-Dokumente heranziehen. Sie bieten eine Fülle detaillierter Informationen, auf die wir hier nicht eingehen können.

Lassen Sie uns nun NNTP auf dem Server nntpd in Aktion erleben.




1.

leafnode ist per Anonymous FTP von wpxx02.toxi.uni-wuerzburg.de im Verzeichnis /pub/ erhältlich.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser für Netzwerker

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home|O'Reilly-Partnerbuchhandlungen|Bestellinformationen
Kontakt|Über O'Reilly|Datenschutz

© 2001, O'Reilly Verlag