Le RFC 1036 : Standard for Interchange of Usenet messages
Network Working Group
Request for Comments: 1036
Obsoletes: RFC-850 |
M. Horton
AT&T Bell Laboratories
R. Adams
Center for Seismic Studies
December 1987 |
STATUT DE CE DOCUMENT
Ce document définit le format standard pour les
échanges de messages de News sur les serveurs USENET. C'est une
mise à jour de la RFC-850, reprenant
la version B2.11 du programme de News. Il est distribué comme une
RFC pour rendre ces informations facilement accessibles aux Internautes.
Il ne spécifie pas un standard Internet. La distribution de ce document
est illimitée.
1 Introduction
2 Format
des Messages
2.1 Champs
d'En-têtes Obligatoires
1. Introduction
Ce document définit le format standard pour les
échanges de messages de News sur les serveurs USENET. Il décrit
le format des messages en eux-mêmes et donne les normes de transmission
sur les News. La transmission des News ne permet pas beaucoup de souplesse
aux serveurs pour le choix du matériel et des logiciels de transmission,
de propagation des News par paquets, etc.
Il y a cinq parties dans ce document. La deuxième
partie décrit le format des messages. La troisième partie
décrit les messages de contrôle valides. La quatrième
partie spécifie des méthodes de transmission valides. La
quatrième partie décrit l'algorithme de propopagation des
News dans le monde.
2. Format de Message
Il faut avant tout que le format de message convienne
au maximum d'outils existants. Les outils existants contiennent à
la fois des fonctions pour le courrier et les News (le système de
fichiers de notes de l'Université de l'Illinois est considéré
comme une fonction de News). Une norme pour les courriers électroniques
existe depuis de nombreuses années sur Internet, et ce format correspond
à beaucoup d'exigences d'USENET. Depuis que le format Internet est
extensible, les extensions pour remplir les exigences supplémentaires
d'USENET sont facilement trouvables dans la norme Internet. En conséquence,
il est d'usage que tous les messages de News sur USENET soient formatés
comme les courriers électroniques d'Internet, format défini
dans la RFC-822. La norme sur Usenet est plus restrictive que la norme
sur Internet, ajoutant des contraintes supplémentaires sur chaque
message et interdisant l'utilisation de certaines caractéristiques
des messages sur Internet. Cependant, il est toujours possible d'utiliser
des outils de traitement Internet pour traiter un message de News. Dans
les situations où cette norme rentre en conflit avec la norme Internet,
la RFC-822 doit être condidérée comme correcte et la
présente norme comme fausse.
Voici un exemple de message USENET pour illustrer cela :
From: jerry@eagle.ATT.COM (Jerry Schwarz)
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
Newsgroups: news.announce
Subject: Usenet Etiquette -- Please Read
Message-ID: <642@eagle.ATT.COM>
Date: Fri, 19 Nov 82 16:14:55 GMT
Followup-To: news.misc
Expires: Sat, 1 Jan 83 00:00:00 -0500
Organization: AT&T Bell Laboratories, Murray Hill
Le corps du message vient ensuite, après une ligne vide.
Voici un exemple de message dans un format ancien (avant
l'existence de cette norme). Il est recommandé que les outils acceptent
également les messages dans ce format pour faciliter la transcription.
From: cbosgd!mhuxj!mhuxt!eagle!jerry (Jerry Schwarz)
Newsgroups: news.misc
Title: Usenet Etiquette -- Please Read
Article-I.D.: eagle.642
Posted: Fri Nov 19 16:14:55 1982
Received: Fri Nov 19 16:59:30 1982
Expires: Mon Jan 1 00:00:00 1990
The body of the message comes here, after a blank line.
Certains systèmes de News transmettent les News
selon le format A, qui ressemble à cela :
Aeagle.642
news.misc
cbosgd!mhuxj!mhuxt!eagle!jerry
Fri Nov 19 16:14:55 1982
Usenet Etiquette - Please Read
Le corps du message vient ensuite, sans ligne vide.
Un message standard sur USENET consiste en plusieurs champs
d'en-têtes, suivis par une ligne vide, suivie par le corps du message.
Chaque champ d'en-tête se compose d'un mot-clé, de deux-points,
d'un espace, et d'informations complémentaires. Ceci est une sous-partie
de la norme Internet, simplifiée pour permettre aux logiciels les
plus simples de les manier. Le champ "From" peut éventuellement
contenir un nom complet, dans le format ci-dessus, ou utiliser la convention
Internet avec les signes "<" et ">". Pour que les fonctions restent
simples, les autres formats (par exemple, avec une partie de l'adresse
de la machine après fermeture de la parenthèse) ne sont pas
autorisés. La convention Internet pour les champs d'en-têtes
(commençant par un espace ou une tabulation) est autorisée.
Certains en-têtes sont requis, et certains autres
sont facultatifs. Tous les en-têtes non reconnaissables sont autorisés,
et resteront inchangés. Les champs d'en-têtes obligatoires
sont "From", "Date", "Newsgroups", "Subject", "Message-ID", et "Path".
Les champs d'en-têtes facultatifs sont "Followup-To", "Expires",
"Reply-To", "Sender", "References", "Control", "Distribution", "Keywords",
"Summary", "Approved", "Lines", "Xref", et "Organization". Tous ces champs
d'en-têtes seront décrits plus bas.
2.1. Champs d'en-têtes obligatoires
2.1.1. From
Le champ "From" contient l'adresse e-mail de la personne
qui a envoyé le message, dans la convention d'écriture Internet.
Elle peut éventuellement contenir aussi le nom de la personne, entre
parenthèses, après l'adresse E-mail. L'adresse E-mail est
celle de l'auteur responsable du message, sauf si l'en-tête "Sender"
est présent, auquel cas l'en-tête "From" ne peut pas être
vérifié. On peut constater que dans tous les noms de serveurs
et de domaines, majuscules et minuscules sont considérées
de même, donc "mark@cbosgd.ATT.COM", "mark@cbosgd.att.com", et "mark@CBosgD.ATt.COm"
sont toutes trois équivalentes. Les noms d'utilisateurs peuvent
ou non être sensibles à la casse, par exemple, "Billy@cbosgd.ATT.COM"
peut être différent de "BillY@cbosgd.ATT.COM". Les programmes
peuvent éviter de changer la casse des adresses E-mail en répondant
sur les News ou par mail
La RFC-822 explique que tout texte entre parenthèses
est interprété comme un commentaire. Il est habituel dans
les courriers Internet de mettre le nom de l'utilisateur dans un commentaire
à la fin du champ "From". La présente norme spécifie
une convention d'écriture plus stricte. Le nom n'est pas considéré
comme un commentaire, mais comme une partie facultative du champ d'en-tête.
Soit le nom est oublié, soit il apparaît entre parenthèses
après l'adresse E-mail de la personne postant le message, soit il
apparaît avant une adresse E-mail comprise dans les signes "<"
et ">". Les trois formes autorisées sont donc :
From: mark@cbosgd.ATT.COM
From: mark@cbosgd.ATT.COM (Mark Horton)
From: Mark Horton <mark@cbosgd.ATT.COM>
Le noms peuvent contenir tous les caractères ASCII
de l'espace au tilde, sauf "(" (parenthèse gauche), ")" (parenthèse
droite), "<" (inférieur à), ou ">" (supérieur à).
D'autres restrictions peuvent être mises en place sur les noms par
les normes de courrier, en particulier, les caractères "," (virgule),
":" (deux-points), "@" (arobase), "!" (point d'exclamation), "/" (slash),
"=" (égal), et ";" (point-virgule) ne sont pas autorisés
dans les noms.
2.1.2. Date
Le champ "Date" (anciennement "Posted") correspond à
la date à laquelle le message a été posté sur
le réseau. Son format doit être reconnu à la fois par
la RFC-822 et par l'habitude getdate(3) qui est fourni avec le logiciel
Usenet. Cette date reste inchangée tout au long de la propagation
du message sur le réseau. Un format reconnu par les deux est :
Wdy, DD Mon YY HH:MM:SS TIMEZONE
Plusieurs exemples de dates valides apapraîssent
dans les messages d'exemples au-dessus. On remarquera en particulier ce
format ctime(3) :
Wdy Mon DD HH:MM:SS YYYY
qui n'est pas acceptable parce qu'il n'est pas en accord
avec la RFC-822. Cependant, puisque les plus anciens logiciels utilisent
encore ce format, les outils de News sont encouragés à accepter
ce format et à le transcrire dans un format acceptable.
Il n'y a aucun espoir d'avoir une liste complète
des fuseaux horaires. L'Heure Universelle (GMT), les fuseaux horaires nord-américains
(PST, PDT, MST, MDT, CST, CDT, EST, EDT) et les formats +/-hhmm décrits
dans la RFC-822 doivent être compris. Il est recommandé que
l'heure dans les en-têtes de messages soit transmise en heure de
Greenwinch (GMT) et s'affiche en heure locale.
2.1.3. Newsgroups
Le champ "Newsgroups" définit le ou les groupe(s)
de discussion dans lequel le message est envoyé. Plusieurs groupes
peuvent être entrés, séparés par une virgule.
Les groupes entrés doivent tous être les noms de groupes existants,
aucun nouveau forum ne sera créé simplement en postant dessus.
Les cartes blanches (par exemple, le mot "all" [le signe
* en français]) ne sont jamais autorisées dans le champ "Newsgroups".
Par exemple, un groupe de discussion comp.all est interdit, alors qu'un
groupe rec.sport.football est autorisé.
Si un message est reçu avec un champ "Newsgroups"
contenant des forums valides et des forums invalides, un serveur ne peut
pas enlever les groupes invalides de la liste. Donc, les forums invalides
seront ignorés. Par exemple, supposons que le serveur A propage
les hiérarchies btl.* et comp*, et échange les messages de
news avec le serveur B, qui possède comp.* mais pas btl.*. Supposons
que A reçoit un message avec "Newsgroups: comp.unix,btl.general".
Ce message est transmis à B puisque B reçoit
comp.unix, mais B ne reçoit pas btl.general. A doit laisser le champ
"Newsgroups" inchangé. S'il enlevait btl.general, le message ne
pourrait pas être propagé sur la hiérarchie btl.*,
et ne sera pas vu par les lecteurs de btl.general. D'autre part, les réponses
venant d'en-dehors de btl.* ne seraient pas montrées à ces
lecteurs.
2.1.4. Subject
Le champ "Subject" (anciennement "Title") définit
de quoi le message parle. Il doit être assez représentatif
du contenu du message pour permettre au lecteur de prendre une décision
pour lire ou non le message uniquement en lisant le sujet. Si le message
est une réponse à un autre message, le sujet par défaut
devra commencer par les quatre caractères "Re: ", et le champ "References"
est indispensable. Pour les réponses, l'utilisation du champ "Summary"
est encouragée.
2.1.5. Message-ID
Le champ "Message-ID" donne au message un identifiant
unique. Le Message-ID ne doit pas être utilisé pendant la
durée de vie d'un ancien message avec le même Message-ID.
(Il est recommandé qu'aucun Message-ID ne soit réutilisé
pendant au moins deux ans). Les Message-ID ont la syntaxe suivante :
<suite de caractères ASCII ne contenant pas d'espace ou de ">">
Pour être conforme à la RFC-822, les Message-ID
doivent avoir le format suivant :
<suite_unique@nom_de_domaine>
où nom_de_domaine est le nom entier du serveur
par lequel le message a été amené au réseau,
comprenant un domaine dans lequel est situé le serveur, et suite_unique
est une suite de caractères ASCII, ne comprenant pas "<" (inférieur),
">" (supérieur), ou "@" (arobase). Par exemple, cela peut être
comme un numéro de série pour les messages envoyés
au réseau, ou une courte suite provenant de la date et de l'heure
à laquelle le message a été créé. Par
exemple, un Message-ID valide pour un message provenant du serveur ucbvax
du domaine "Berkeley.EDU" pourrait être "<4123@ucbvax.Berkeley.EDU>".
Les programmeurs ne sont pas encouragés à faire des suppositions
à propos du contenu des champs Message-ID d'autres serveurs, mais
à les traiter comme des suites inconnues de caractères. Il
n'est pas prudent, par exemple, de supposer qu'un Message-ID fera moins
de 14 caractères, qu'il est unique pour les 14 premiers caractères,
ou qu'il ne doit pas contenir un "/".
Les signes "<" et ">" sont considérés comme
parties intégrantes du Message-ID. Par conséquent, ces signes
sont inclus dans les références au Message-ID, comme dans
les messages de contrôle ihave/sendme et cancel. Les espaces et les
tabulations ne sont pas autorisés dans un Message-ID. Les slashs
("/") sont vivement déconseillés. Tous les caractères
entre les signes "<" et ">" doivent être des caractères
ASCII.
2.1.6. Path
Ce champ définit le chemin que le message a pris
pour atteindre votre système. Quand un système fait suivre
le message, il doit ajouter son propre nom à la liste de systèmes
dans le champ "Path". Les noms peuvent être séparés
par n'importe quel caractère de ponctuation (sauf "." qui est considéré
comme faisant partie du nom du serveur). Les champs suivants sont valides
:
cbosgd!mhuxj!mhuxt
cbosgd, mhuxj, mhuxt
@cbosgd.ATT.COM,@mhuxj.ATT.COM,@mhuxt.ATT.COM
teklabs, zehntel, sri-unix@cca!decvax
(Le dernier définit un message qui est passé
par decvax, cca, sri-unix, zehntel et teklabs, dans cet ordre). Des noms
supplémentaires peuvent être ajoutés sur la gauche.
Par exemple, le nom qui a été ajouté le plus récemment
dans le quatrième exemple était teklabs. Lettres, chiffres,
points et tirets ont considérés comme des parties de noms
de serveurs; les autres ponctuations, même les espaces, sont considérés
comme des séparateurs.
Normalement, le nom le plus à droite sera le nom
du système d'origine Cependant, il est également permis d'inclure
une entrée supplémentaire sur la droite, qui est le nom de
l'expéditeur, pour des raisons de compatibilité avec les
anciens systèmes.
Le champ "Path" n'est pas utilisé pour des réponses,
et ne peut pas être pris en tant qu'adresse E-mail. Il est là
pour montrer le chemin qu'a pris le message pour arriver au serveur. On
peut faire plusieurs utilisations de cette information. L'une d'entre elles
est de contrôler les itinéraires sur USENET pour des représentations
graphiques diverses. On peut également établir un chemin
pour atteindre de nouveaux serveurs. Mais l'utilisation la plus répandue
est de couper le trafic redondant sur USENET en omettant de transférer
un message à un serveur dont on sait qu'il l'a déjà
reçu. En particulier, quand le serveur A envoie un message au serveur
B, le champ "Path" contient le nom du serveur A, ainsi B ne va pas immédiatement
retourner le message au serveur A. Le nom que chaque serveur utilise pour
s'identifier doit être le même que le nom par lequel ses voisins
le connaissent, de façon à permettre cette optimisation.
Un serveur ajoute son propre nom au "Path" quand il reçoit
le message d'un autre serveur. Par conséquent, si un message avec
le "Path" "A!X!Y!Z" est fourni par le serveur A au serveur B, B va ajouter
son propre nom au "Path" quand il recevra son message de A, ce qui donnera
"B!A!X!Y!Z". Si B envoie ensuite le message sur C, le message envoyé
à C contiendra le "Path" "B!A!X!Y!Z", et quand C le recevra, il
le changera en "C!B!A!X!Y!Z".
Note spéciale de compatibilité: Puisque les
champs "From", "Sender", et "Reply-To" sont dans le format Internet, et
puisque beaucoup de serveurs USENET n'ont pas encore de logiciels capables
de comprendre le format Internet, cela empêchera la possibilité
de répondre si la connexion entre le champ "Path" et la fonction
de réponse est coupée. Il est reconnu que le "Path" n'est
pas toujours une adresse de réponse valide pour les logiciels anciens,
et il n'y a pas d'exigence pour réparer ce problème contenu
dans les logiciels. Cependant, la convention de placer le nom du serveur
et un "!" au premier plan du "Path", et de commencer le "Path" par le nom
du serveur, un "!", et le nom de l'utilisateur, devrait être maintenue
autant que possible.
2.2. En-têtes Facultatifs
2.2.1. Reply-To
Ce champ a le même format que le "From". S'il est
présent, les réponses par mail à l'auteur seront envoyés
au nom donné ici. Sinon, les réponses sont envoyées
au nom dans le champ "From". (Cela n'empêche pas des copies d'être
envoyées aux destinataires définis par celui qui répond,
ni l'utilisation des champs "To" ou "Cc"). Le nom entier peut éventuellement
être donné, entre parenthèses, comme dans le champ
"From".
2.2.2. Sender
Ce champ est uniquement présent si l'expéditeur
entre manuellement un champ "From". Il est convenu de rendre la personne
responsable de propager ce message sur le réseau. Il peut être
vérifié par le logiciel de son serveur.
Par exemple, si John Smith visite CCA et souhaite poster
un message sur le réseau, par l'intermédiaire du compte de
son amie Sarah Jones, le message devra être :
From: smith@ucbvax.Berkeley.EDU (John Smith)
Sender: jones@cca.COM (Sarah Jones)
Si un programme envoie un message sur le réseau
à partir du serveur unix.SRI.COM, les champs devront être
:
From: John.Doe@A.CS.CMU.EDU
Sender: network@unix.SRI.COM
Le premier but de ce champ est de déterminer comment
les messages sont arrivés sur le réseau. Le nom peut éventuellement
être donné, entre parenthèses, comme pour le champ
"From".
2.2.3. Followup-To
Ce champ a le même format que le champ "Newsgroups".
S'il est présent, les messages de réponse seront postés
au(x) forum(s) énuméré(s) ici. Si ce champ est absent,
les réponses sont envoyées au(x) forum(s) énuméré(s)
dans le champ "Newsgroups".
Si le mot clé "poster" est présent, les messages
de réponses ne sont pas permis. Le message devra être envoyé
par mail à l'auteur du message.
2.2.4. Expires
Ce champ, s'il est présent, est dans le format
convenu pour la date sur USENET. Il spécifie une date d'expiration
du message. S'il n'est pas présent, l'expiration locale par défaut
est utilisée. Ce champ est utilisé pour nettoyer les messages
qui ont une utilité temporaire, ou pour garder les messages importants
plus longtemps que d'ordinaire. Par exemple, un message annonçant
un séminaire à venir pourra avoir une date d'expiration le
lendemain du séminaire, puisque le message n'a plus aucun utilité
après la fin du séminaire. Puisque les serveurs locaux ont
des règles locales pour l'expiration des news (en fonction de l'espace
disque, par exemple), il est déconseillé aux utilisateurs
de fournir des dates d'expiration pour les messages s'il n'y a pas de date
naturellement associée avec le sujet. Les logiciels ne devraient
presque jamais fournir un champ "Expires" par défaut. Oubliez-le
et permettez aux règles locales d'être utilisées s'il
n'y a pas de bonne raison de le faire.
2.2.5. References
Ce champ énumère les Message-ID des messages
précédant l'envoi de ce message. Il est obligatoire pour
toutes les réponses, et interdit quand un nouveau sujet est lancé.
Les logiciels doivent fournir une commande de réponse, qui permet
à l'utilisateur de poster une réponse. Cette commande doit
engendrer un champ "Subject" identique au message original, sauf si le
message original ne commence pas par "Re: " ou "re: ", les quatre caractères
"Re: " étant insérés avant le sujet S'il n'y a pas
de champ "References" dans les en-têtes originaux, le champ "References"
contiendra le Message-ID du message original (avec les signes "<" et
">"). Si le message original a un champ "References", la réponse
aura un champ "References" contenant le texte du champ "References" original,
un espace, et le Message-ID du message précédent.
Le but du champ "References" est de permettre aux messages
d'être regroupés en fils de conversation par l'interface du
programme de l'utilisateur. Cela permet aux conversations dans un forum
d'être regroupées ensemble, et aux utilisateurs d'isoler éventuellement
des fils de conversations entiers sans se désabonner du forum. Les
interfaces de l'utilisateur n'ont pas besoin d'utiliser ce champ, mais
toutes les réponses créent automatiquement le champ "References"
pour les systèmes qui l'utilisent, et les réponses produites
manuellement (si écrire en réponse au message original a
été compris par la machine) peuvent l'inclure également.
Il est autorisé de ne pas inclure la totalité
du champ "References" précédent s'il est trop long. On peut
envisager un nombre raisonnable de références.
2.2.6. Control
Si un message contient un champ "Control", le message
est un message de contrôle. Les messages de contrôle sont utilisés
pour la communication entre les machines des serveurs d'USENET, pas pour
être lus par les utilisateurs. Les messages de contrôle sont
distribués comme les messages ordinaires. Le corps du champ "Control"
est le message au serveur.
Par mesure de compatibilité, les messages qui sont
envoyés aux groupes "*.*.ctl" sont aussi interprétés
comme des messages de contrôle. S'il n'y a pas de champ "Control"
sur ces messages, le sujet est utilisé comme message de contrôle.
Cependant, ce genre de messages sur les forums n'est pas conforme aux normes.
Toujours pour des histoires de comptabilité, si les
quatre premiers caractères du champ "Subject:" sont "cmsg", le reste
du champ "Subject:" peut être interprété comme un message
de contrôle.
2.2.7. Distribution
Ce champ est utilisé pour modifier l'étendue
de la propagation du message. C'est un champ similaire au champ "Newsgroups",
une liste dont chaque entité est séparée de l'autre
par une virgule. Les abonnements de l'utilisateur sont toujours définis
par le champ "Newsgroups", mais le message est envoyé à tous
les systèmes propageant les forums du champ "Distribution" en plus
de ceux du champ "Newsgroups" Pour que le message soit propagé,
le serveur qui le reçoit doit normalement recevoir au moins un des
forums spécifiés ET doit recevoir au moins un de ceux du
champ "Distribution". Ainsi, un message concernant une voiture à
vendre à New Jersey pourra avoir ces en-têtes :
Newsgroups: rec.auto,misc.forsale
Distribution: nj,ny
ainsi, il ne parviendra qu'aux personnes abonnées
à rec.auto ou misc.forsale à New Jersey ou New York. Le but
de cet en-tête est de restreindre la distribution d'un message, et
non de l'étendre. Un forum local, comme nj.crazy-eddie, ne sera
probablement pas propagé par les serveurs en-dehors du New Jersey
qui ne le considéreront pas comme valide. Un message de réponse
possédera par défaut le même champ "Distribution" que
le message original, mais l'utilisateur peut le changer en un champ moins
restrictif, ou l'étendre s'il était très restreint
à l'origine et qu'une réponse étendue à plus
de monde est appropriée.
2.2.8. Organization
Le texte de ce champ est une courte phrase décrivant
l'organisation à laquelle celui qui envoie le message appartient,
ou à laquelle la machine appartient. Le but de ce champ est d'aider
à identifier la personne qui poste le message, puisque les noms
de serveurs sont souvent assez cryptés pour rendre leur reconnaissance
par l'adresse e-mail assez difficile.
2.2.9. Keywords
Quelques mots-clés bien choisis identifiant le
message peuvent être contenus dans ce champ. Ceci est utilisé
comme une aide pour déterminer si le lecteur est intéressé
par ce message.
2.2.10. Summary
Ce champ contient un rapide résumé du message.
il est utilisé habituellement comme un morceau du message de réponse.
Encore une fois, c'est très utile au lecteur pour déterminer
s'il veut lire le message.
2.2.11. Approved
Ce champ est obligatoire pour tous les messages postés
sur un forum modéré. Il est ajouté par le modérateur
et consiste en son adresse E-mail. Il est également obligatoire
pour certains messages de contrôle.
2.2.12. Lines
Ce champ contient le nombre de lignes du corps du message.
2.2.13. Xref
Ce champ contient le nom du serveur (sans le domaine)
et une liste, des forums séparés entre eux par des espaces,
et séparés par deux-points à un numéro de message.
Ce sont les forums définis dans le champ "Newsgroups" et leurs numéros
associés dans le dossier de stockage du serveur.
Ceci est seulement en vigueur sur le système local,
et ne sera donc pas propagé. Par exemple:
Path: seismo!lll-crg!lll-lcc!pyramid!decwrl!reid
From: reid@decwrl.DEC.COM (Brian Reid)
Newsgroups: news.lists,news.groups
Subject: USENET READERSHIP SUMMARY REPORT FOR SEP 86
Message-ID: <5658@decwrl.DEC.COM>
Date: 1 Oct 86 11:26:15 GMT
Organization: DEC Western Research Laboratory
Lines: 441
Approved: reid@decwrl.UUCP
Xref: seismo news.lists:461 news.groups:6378
Le champ "Xref" montre que le message est le message numéro
461 sur le forum newslists, et le message numéro 6378 sur le forum
news.groups, sur le serveur seismo. Cette information peut être utilisée
par certaines interfaces.
3. Messages de Contrôle
Cette partie énumère les messages de contrôle
couramment utilisés Le corps du champ "Control" est le message de
contrôle. Le message est une suite de zéro mot ou plus, éventuellement
séparés par des espaces ou des tabulations. Le premier mot
est le nom du message de contrôle, les mots restants sont les paramètres
du message. Le reste du champ et le corps du message sont également
des paramètres éventuels; par exemple, le champ "From" peut
suggérer une adressse e-mail à laquelle une réponse
peut être faite.
Les administrateurs peuvent choisir de permettre aux messages
de contrôle d'être traités immédiatement, ou
d'attendre une opération annuelle. Cependant, les messages faits
manuellement seront traités rapidement.
Les messages qui n'ont pas abouti NE seront PAS envoyés
à l'expéditeur du message, mais au compte Usenet local.
3.1. Cancel
cancel <Message-ID>
Si un message avec le Message-ID donné est présent
sur le système local, ce message est annulé. Ce mécanisme
permet à l'utilisateur d'annuler un message après sa propagation
sur le réseau.
Si le système ne peut pas annuler le message démandé,
il ne répandra pas la demande d'annulation aux autres systèmes.
Seul l'auteur du message ou l'administrateur local est autorisé
à envoyer ce message. L'expéditeur de ce message est contenu
dans le champ "Sender", ou, s'il n'y a pas de champ "Sender", dans le champ
"From". L'expéditeur du message d'annulation doit être le
même que celui contenu dans le champ "Sender" ou "From" du message
d'origine. Un expéditeur authentifié pour le message d'annulation
est autorisé à posséder un "From" non authentifié
pour le message annulé.
3.2. Ihave/Sendme
ihave <liste de Message-ID> [<nom_du_serveur>]
sendme <liste de Message-ID> [<nom_du_serveur>]
Ce message fait partie du protocole ihave/sendme, qui
permet à un serveur (appelons-le A) de demander à un autre
serveur (B) qu'un message spécifique soit envoyé à
A. Supposons que le serveur A reçoive le message "<1234@ucbvax.Berkeley.edu>",
et qu'il veuille le transmettre au serveur B.
A envoie le message de contrôle "ihave <1234@ucbvax.Berkeley.edu>
A" au serveur B (en le postant sur le forum to.B). B répond par
le message de contrôle "sendme <1234@ucbvax.Berkeley.edu> B" (sur
le forum to.A), s'il n'a pas encore reçu ce message. Dès
qu'il a reçu le message "sendme", A envoie le message à B.
Ce protocole peut être utilisé pour limiter
le trafic répétitif entre serveurs. C'est facultatif et doit
être utilisé uniquement si cela en vaut la peine. Souvent,
il en résulte que, puisque la majorité des messages d'origine
sont courts, et puisqu'il y a beaucoup de frais à envoyer un nouveau
message avec UUCP, cela coûte autant d'envoyer le "ihave" que d'envoyer
le message lui-même.
Une solution envisageable à ces problèmes
de frais est de faire plusieurs demandes à la fois. Plusieurs Message-ID
peuvent être annoncés ou demandés dans un même
message. S'il n'y a pas de Message-ID dans le message de contrôle,
les Message-ID pourront être contenus dans le corps du message, un
par ligne.
3.3. Newgroup
newgroup <nom_du_forum> [moderated]
Ce message de contrôle crée un nouveau forum
avec le nom donné. Comme aucun message ne peut être posté
ou transféré tant que le forum n'est pas créé,
ce message est obligatoire avant que le forum puisse être utilisé.
Le corps du message doit être un court paragraphe décrivant
l'utilisation attendue du forum.
S'il y a quelque chose ensuite et que c'est le mot-clé
"moderated", le forum sera créé modéré; par
défaut, il est non-modéré. Le message de newgroup
sera ignoré s'il n'y a pas de champ "Approved" dans les en-têtes
de ce message.
3.4. Rmgroup
rmgroup <nom_du_forum>
Ce message supprime le forum qui a le nom donné.
Puisque le forum est supprimé de tous les serveurs du réseau,
cette commande doit être utilisée prudemment par un administrateur
responsable. Le message de rmgroup sera ignoré s'il n'y a pas de
champ "Approved:" dans les en-têtes de ce message.
3.5. Sendsys
sendsys (rien à définir)
Le fichier système, énumérant tous
les serveurs voisins et tous les forums que propage chacun de ces serveurs,
sera envoyé à l'auteur du message de contrôle ("Reply-To",
si présent, sinon "From"). Cette information est considérée
comme publique, et c'est une exigence d'USENET que cette information puisse
être fournie, en réponse automatique à ce message de
contrôle, ou manuellement, en envoyant l'information à l'auteur
du message. Cette information est utilisée pour mettre à
jour un "plan" d'USENET, et pour déterminer où les messages
sont envoyés.
Le format du fichier reçu en retour sera le même
que le fichier système. Ce format a un serveur par ligne (plus une
ligne pour le serveur local), contenant quatre champs séparés
par deux-points. Le premier champ est le nom du serveur, le deuxième
est une liste de hiérarchies décrivant les forums envoyés
au serveur. Les troisième et quatrième champs ne sont pas
définis par cette norme. Le fichier système n'est pas le
même que le fichier L.système UUCP (UUCP L.sys file). Un exemple
de réponse pourrait être :
From: cbosgd!mark (Mark Horton)
Date: Sun, 27 Mar 83 20:39:37 -0500
Subject: response to your sendsys request
To: mark@cbosgd.ATT.COM
Responding-System: cbosgd.ATT.COM
cbosgd:osg,cb,btl,bell,world,comp,sci,rec,talk,misc,news,soc,to,
test
ucbvax:world,comp,to.ucbvax:L:
cbosg:world,comp,bell,btl,cb,osg,to.cbosg:F:/usr/spool/outnews
/cbosg
cbosgb:osg,to.cbosgb:F:/usr/spool/outnews/cbosgb
sescent:world,comp,bell,btl,cb,to.sescent:F:/usr/spool/outnews
/sescent
npois:world,comp,bell,btl,ug,to.npois:F:/usr/spool/outnews/npois
mhuxi:world,comp,bell,btl,ug,to.mhuxi:F:/usr/spool/outnews/mhuxi
3.6. Version
version (rien à définir)
Le nom et la version du logiciel tournant sur le système
local sera envoyé à l'auteur du message ("Reply-to" si présent,
sinon "From").
3.7. Checkgroups
Le corps du message est une liste de forums "officiels"
avec leur description, un groupe par ligne. Ils sont comparés à
la liste de forums actifs sur le serveur actuel. Les noms de forums obsolètes
ou récents sont envoyés à l'utilisateur "usenet" et
les descriptions des nouveaux forums sont ajoutés au fichier d'aide
d'utilisation des News.
4. Méthodes de Transmission
USENET n'est pas un réseau physique, mais plutôt
un réseau logique existant à partir de plusieurs réseaux
physiques déjà existants. Ces réseaux comprennent,
UUCP, l'Internet, un Ethernet, le réseau BLICN, une Hyperchannel
NSC, et un BERKNET, mais ne sont pas limités à cela Le plus
important est que deux systèmes voisins sur USENET aient des méthodes
pour obtenir un message, dans le format présenté ici, d'un
système à l'autre, et qu'une fois sur le système récepteur,
il puisse être traité par les logiciels de News de ce système.
(Sur les systèmes UNIX, cela signifie habituellement que le programme
rnews sera lancé avec le message de l'entrée standard <1>).
Il n'est pas obligatoire aux serveurs USENET de posséder
des systèmes de courrier capables de comprendre la syntaxe du mail
Internet, mais c'est fortement recommandé. Puisque les champs "From",
"Reply-To", et "Sender" utilisent la syntaxe Internet, les réponses
seront difficiles voire impossibles sans un logiciel de courrier Internet.
Un serveur sans logiciel de mail Internet peut essayer d'utiliser le champ
"Path" pour répondre, mais ce champ n'est pas garanti comme un chemin
valable pour les réponses. Dans tous les cas, chaque serveur produisant
ou transférant des messages de news doit avoir une adresse E-mail
qui lui permettra de recevoir du courrier des serveurs qui possèdent
des logiciels de courrier Internet, et il doit mettre cette adresse E-mail
dans leur champ "From".
4.1. Commandes à Distance
Certains réseaux autorisent directement les commandes
à distance. On peut faire suivre les news en associant la commande
rnews au message de l'entrée standard. Par exemple, si le système
éloigné s'appelle remote, les news seront envoyées
par un lien UUCP avec la commande :
uux - remote!rnews
et sur un Berknet :
net -mremote rnews
Il est important que le message soit envoyé par
un mécanisme fiable, impliquant la possibilté de stocker,
plutôt que des commandes à distance en temps réel.
C'est pourquoi, si le système éloigné n'est pas opérationnel,
une commande directe va échouer, et le message ne sera jamais envoyé.
Si le message est stocké, il ne sera envoyé que lorsque les
deux systèmes seront opérationnels.
4.2. Transfert par Courrier Electronique (Mail)
Sur certains systèmes, l'exécution directe
de ce qui est situé à distance n'est pas possible. Cependant,
la majorité des systèmes supportent les courriers électroniques,
et un message de news pourra être envoyé comme un courrier.
Une façon de s'y prendre est d'envoyer un courrier identique au
message de news: les en-têtes de ce mail seront les en-têtes
du message de news, et le corps du mail sera le corps du message de news.
Par convention, ce mail est envoyé au newsmail de l'utilisateur
sur la machine éloignée.
Un problème de cette méthode est qu'il n'est
pas possible de convaincre le système de courrier que le champ "From"
du message est valide, puisque le mail a été créé
par un programme situé sur un système différent de
la source du message de news. Un autre problème est que les messages
d'erreur causés par la transmission du mail seront envoyés
à l'auteur du message de news, qui n'a aucun contrôle sur
la transmission des news entre deux serveurs et qui ne saura pas qui contacter.
Les messages d'erreur de transmission devront être adressés
à une personne responsable, sur la machine qui a envoyé le
message.
Une solution à ce problème est d'inclure le
message de news dans un mail, tel que le message entier (en-têtes
et corps) soit contenu dans le corps du mail. La convention est qu'un tel
mail est envoyé à l'utilisateur de rnews sur le système
éloigné. Le corps d'un mail est créé en faisant
précéder chaque ligne du message de news par la lettre N,
et de joindre les en-têtes qui sont faciles à créer.
Les N sont joints pour empêcher des lignes spécifiques au
message de news d'interférer avec la transmission du mail, et pour
empêcher des lignes supplémentaires ajoutées par le
logiciel (en-têtes, lignes blanches, etc.) d'apparaître dans
le message de news. Un programme sur la machine réceptrice reçoit
le mail, extrait le message en lui-même et fait appel au programme
rnews. Un exemple de ce format pourraît ressembler à cela
:
Date: Mon, 3 Jan 83 08:33:47 MST
From: news@cbosgd.ATT.COM
Subject: network news message
To: rnews@npois.ATT.COM
NPath: cbosgd!mhuxj!harpo!utah-cs!sask!derek
NFrom: derek@sask.UUCP (Derek Andrew)
NNewsgroups: misc.test
NSubject: necessary test
NMessage-ID: <176@sask.UUCP>
NDate: Mon, 3 Jan 83 00:59:15 MST
N
NThis really is a test. If anyone out there more than 6
Nhops away would kindly confirm this note I would
Nappreciate it. We suspect that our news postings
Nare not getting out into the world.
N
L'utilisation du courrier résout le problème
de stockage temporaire, puisque le courrier doit toujours être conservé
si l'hôte de destination n'est pas accessible. Cependant, cela augmente
encore les frais de transmission (pour inclure et extraire le message)
et rend plus difficile pour les logiciels la distinction entre news et
courrier.
4.3. Transmission par Paquets (batching)
Puisque les messages de news sont globalement assez courts,
et qu'un grand nombre de messages par jour transitent entre deux serveurs,
il est plus logique d'envoyer les messages par paquets. Plusieurs messages
peuvent être regroupés en un message plus gros, utilisant
les conventions convenues entre les deux serveurs. Un tel plan d'envoi
par paquets est décrit ici; cette utilisation est fortement recommandée.
Les messages de news sont regroupés dans un message,
séparés par un en-tête de la forme :
#! rnews 1234
où 1234 est la longueur du message en bytes. Chacune
de ces lignes est suivie par un message contenant le nombre donné
de bytes. (Le retour-charriot à la fin de chaque ligne du message
est compté comme un byte). Par exemple, un envoi de messages par
paquets pourrait ressembler à cela :
#! rnews 239
From: jerry@eagle.ATT.COM (Jerry Schwarz)
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
Newsgroups: news.announce
Subject: Usenet Etiquette -- Please Read
Message-ID: <642@eagle.ATT.COM>
Date: Fri, 19 Nov 82 16:14:55 EST
Approved: mark@cbosgd.ATT.COM
Here is an important message about USENET Etiquette.
#! rnews 234
From: jerry@eagle.ATT.COM (Jerry Schwarz)
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
Newsgroups: news.announce
Subject: Notes on Etiquette message
Message-ID: <643@eagle.ATT.COM>
Date: Fri, 19 Nov 82 17:24:12 EST
Approved: mark@cbosgd.ATT.COM
There was something I forgot to mention in the last
message.
Les news envoyées ainsi sont reconnaissables car
le premier caractère du message est #. Le message est ensuite passé
à un "rassembleur" (unbatcher) pour être interprété.
La première ligne (dans cet exemple "rnews") détermine
quel plan d'envoi par paquets sera utilisé. Les serveurs utiliseront
le plan le plus approprié pour eux.
5. L'Algorithme de Propagation des News
Cette partie décrit le plan général
d'USENET et l'algorithme suivi par les serveurs pour propager les news
au réseau. Puisque tous les serveurs sont gênés par
des messages mal formatés et par des erreurs de propagation, il
est important de posséder une méthode généralisée.
USENET est un graphique organisé. Chaque noeud du
graphique est l'ordinateur d'un serveur, et chaque arc est un chemin de
transmission d'un serveur à l'autre. Chaque arc est étiqueté
par un ensemble de forums, spécifiant quels types de forums sont
transmis par ce lien. La plupart des arcs sont bidirectionnels, ainsi,
si le serveur A envoie un type de forums au serveur B, le serveur B enverra
ensuite le même type de forums au serveur A. Cette bidirectionnalité
n'est cependant pas obligatoire.
USENET est fait de beaucoup de réseaux secondaires.
Chacun de ces réseaux a un nom, comme comp ou btl. Chacun de ces
réseaux est un graphique relié, un chemin existannt de chaque
noeud à tous les autres noeuds du réseau. De plus, le graphique
entier est (en théorie) relié (en pratique, certaines considérations
politiques ont empêché certains serveurs de poster des messages
sur le reste du réseau).
Un message est posté sur une machine à une
liste de forums. Cette machine l'accepte localement, puis le transmet à
tous ses voisins qui comportent au moins un des forums du message (le serveur
A suppose que le serveur B est "intéressé" par un forum si
le forum remplit les conditions de l'arc qui va de A à B. Ces conditions
sont gardées en mémoire dans un fichier sur la machine du
serveur A). Les serveurs recevant le message l'examinent pour être
vraiment sûrs qu'ils le veulent, l'acceptent localement, puis le
transmettent à leur tour à tous leurs voisins intéressés.
Ce processus continue jusqu'à ce que le réseau entier ait
vu le message.
Une grosse partie de l'algorithme consiste en la prévention
des boucles Le processus ci-dessus pourrait amener un message à
tourner éternellement autour du réseau. En particulier, quand
le serveur A envoie un message au serveur B, le serveur B va le renvoyer
au serveur A, qui va l'envoyer au serveur B, etc. Une solution à
cela est le mécanisme de l'historique. Chaque serveur garde une
trace de tous les messages qu'il a vus (par leur Message-ID) et quand un
message qu'ils ont déjà vu apparaît, ce message est
détruit immédiatement. Cette méthode suffit à
éviter les boucles, mais des optimisations supplémentaires
peuvent être faites pour éviter aux messages envoyés
aux serveurs d'être purement et simplement jetés.
L'une de ces optimisations est telle qu'un message ne puisse
jamais être envoyé à une machine nommée dans
le champ "Path" du message. Quand le nom d'une machine est dans le champ
"Path", le message est reconnu comme étant déjà passé
par cette machine. Une autre optimisation est telle que, si le message
provient du serveur A, le serveur A a déjà vu le messsage.
Ainsi, si un message est posté sur le forum misc.misc, il remplit
la condition misc.* (où * est un symbole qui comprend tous les forums),
et sera transmis à tous les serveurs qui propagent misc.* (le serveur
le détermine par ce que ses voisins lui envoient). Ces serveurs
forment le réseau secondaire misc. Un message posté sur btl.general
va atteindre tous les serveurs propageant btl.*, mais n'atteindra pas les
serveurs qui ne possèdent pas btl.*. En effet, les messages atteignent
le réseau secondaire btl. Un message posté sur les forums
misc.misc et btl.general atteindra tous les serveurs qui propagent au moins
une de ces deux hiérarchies.
Notes
<1> UNIX est une marque déposée par AT&T.