Servei de notícies: l’NNTP

Introducció

El servei NNTP un protocol a nivell d'aplicació que utilitza el TCP per enviar missatges, igual que FTP, el SMTP o el POP3, dels quals s'ha parlat en altres ampliacions.

El servei de notícies permet llegir i escriure missatges (articles Usenet), com el servei de correu electrònic, però amb la diferència que l’originador no especifica el destinatari o destinataris, sinó que qualsevol usuari amb accés al servei els pot llegir. Aquesta funcionalitat, doncs, es pot comparar a la d’un tauler d’anuncis, en el qual tothom pot llegir els missatges que hi ha penjats.

El servei de notícies a Internet es coneix amb el nom Usenet, que prové del de la xarxa en la qual es va desenvolupar originàriament. Actualment, la distribució de notícies s’ha estès per tot Internet, de manera que els anuncis enviats es poden llegir a qualsevol part del món. A la pràctica, tanmateix, és possible restringir l’àmbit en el qual es vol distribuir els missatges, ja que alguns només seran interessants, per exemple, en una zona geogràfica determinada.

Model NNTP

En el servei de notícies, la distribució dels missatges o anuncis, que a Usenet es denominen articles, s’efectua de manera descentralitzada. Tenint en compte l’enorme volum de trànsit que genera aquest servei, no seria viable tenir un servidor central en què tothom deixés els seus articles i anés a llegir els dels altres. Per aquest motiu, s’utilitza un mecanisme de propagació en el qual l’autor d’un article l’envia a un servidor de notícies, que s’encarregarà de reenviar-lo a una sèrie de servidors pròxims o amb els quals estigui connectat directament, que al seu torn el reenviaran a altres servidors, i així successivament.

Amb aquest mecanisme de propagació, s’aconsegueix que un article estigui disponible per a ser llegit, idealment, a tots els servidors de la xarxa. Els usuaris que vulguin llegir els articles ho podran fer, doncs, connectant-se a qualsevol servidor, preferiblement al que tinguin més pròxim.

D’altra banda, els servidors només emmagatzemen cada article durant cert temps. Hi ha articles que tenen una data de caducitat predeterminada, i el servidor els esborra automàticament. D’altres s’esborren, per exemple, quan el servidor decideix que els usuaris que hi puguin estar interessats ja han tingut bastant temps per a llegir-los.

El mètode utilitzat per a propagar els articles té certes limitacions, per exemple, no es pot garantir que un article arribi a tots els servidors en un termini determinat (o, a vegades, que arribi a un servidor concret), és necessari controlar el camí per on passa cada article per a evitar bucles, etc. Tot i amb això, aquest mètode és més pràctic i eficient que la solució d’un sol servidor central.

Tant si es tracta d’un client local, com d’un client remot, per norma general hi haurà un altre procés encarregat de la interfície amb l’usuari. Aquest tipus de programa se sol anomenar lector de notícies.

Així mateix, hi ha la possibilitat que un grup de clients accedeixi a un servidor central d’una organització per mitjà d’un servidor esclau:


El servidor es clau per millorar l’eficiència en l’accés, per exemple, emmagatzemant localment còpies dels últims articles llegits, per si els sol·liciten altres clients.

Els articles disponibles en un servidor s’han d’organitzar en grups, segons el seu tema, per a facilitar l’accés als usuaris que els vulguin llegir. Aquesta organització segueix un model jeràrquic: en el nivell més alt dels grups es troben els temes generals que, en un segon nivell, estan dividits en subtemes, que, al seu torn, poden estar subdividits en nivells inferiors. Un article pot estar en més d'un grup, quan un usuari envia un article al sistema de notícies, a més de poder especificar en quin àmbit s’ha de distribuir, és necessari que indiqui obligatòriament a quin grup o grups el vol enviar.

La nomenclatura que s’utilitza per a designar els grups consisteix a concatenar els noms de cada nivell, de més alt a més baix, separant-los amb “.” (per exemple, news.announce o comp.os.linux.hardware). En el nivell més alt de la jerarquia, els grups originals de Usenet eren els següents:

Actualment, hi ha altres grups del nivell superior, com els que només contenen articles destinats a una regió geogràfica. Per exemple eu per a Europa, es per a Espanya, fr per a França, etc.

En la comunitat Usenet s’han establert una sèrie de regles, basades en un sistema de votacions, per a decidir la creació de grups nous o l’eliminació d’algun dels ja existents. Aquest caràcter de democràcia assembleària, i altres aspectes com la possibilitat de publicar escrits (fotografies, vídeos, etc.) o donar a conèixer les idees d’una persona de manera global i gairebé instantània (un somni que, fins a l’arribada d’Internet, només era a l’abast dels grans mitjans de comunicació), van fer de Usenet el gran fenomen sociològic d’Internet durant uns quants anys.

Conceptes bàsics

L’NNTP utilitza el protocol de transport TCP. El número de port assignat al servei de notícies és el 119.

En l’NNTP, s’utilitza un esquema de peticions i respostes com el de l’SMTP. Cada petició constitueix una línia acabada amb <CRLF> que conté una comanda, possiblement amb paràmetres. Les respostes també segueixen l’estructura general utilitzada en l’FTP o l’SMTP. Cada resposta es representa amb una línia que comença amb un codi numèric de tres dígits. A continuació, segons el codi de resposta, hi pot haver una sèrie de paràmetres seguits d’un text arbitrari opcional, fins al final de la línia, que acaba amb <CRLF>.

Els significats del primer dígit del codi de resposta són similars als de l’FTP i l’SMTP, els del segon digit són els següents:

Algunes respostes van seguides d’un text format per una seqüència de línies. En aquest cas, cada línia acaba amb <CRLF>, i el final de la seqüència s’indica amb una línia que només conté el caràcter “.” abans de <CRLF>. Si alguna de les línies de la resposta ha de començar amb “.”, l’emissor hi insereix un altre “.” al principi. És a dir, el receptor ha d’eliminar tots els “.” inicials que trobi abans del final de la resposta.

Quan el client estableix la connexió, el servidor respon amb un codi 200 o 201 per a indicar que permet que el client enviï articles o que no ho permet, respectivament.

Format dels articles

El format dels articles Usenet està definit en l’especificació RFC 1036, i es basa en el dels missatges de correu electrònic (definit en l’especificació 822), encara que amb algunes restriccions addicionals. Per tant, cada article consta d’una capçalera formada per una sèrie de camps, i d’un cos separat d’aquesta per una línia en blanc.

Hi ha sis camps obligatoris en la capçalera:

també el seu nom).

La capçalera d’un article també pot incloure els camps opcionals següents:

Ordres de l’NNTP

A continuació, es detallen les comandes definides en l’especificació RFC 977 de l’NNTP:

1. Fer una llista de grups (LIST)

Aquesta comanda serveix per a obtenir una llista dels grups de notícies disponibles. El servidor respon amb un codi 215 (la taula amb el que significa cada codi està al final de la ampliació) i, a continuació,envia una seqüència de línies (acabada amb “.”), una per a cada grup de notícies disponible, cada una amb el format següent:

grup
últim
primer
permís

LIST

on, grup és el nom del grup. Últim és el número correlatiu (identificador local) de l’últim article que hi ha en aquest grup. Primer és número del primer article. I permís pot ser i o n per a indicar si es poden enviar articles a aquest grup o no, respectivament.

2.Seleccionar un grup (GROUP)

Aquesta comanda permet seleccionar un grup concret. El servidor envia una resposta 211 amb els paràmetres següents (per aquest ordre): nombre estimat d’articles del grup, número del primer article, número de l’últim i nom del grup. Si el grup no existeix, la resposta és 411.

 GROUP grup 

3. Llegir l’article (ARTICLE)

El paràmetre d’aquesta comanda pot ser un identificador únic d’article o un número d’article dins del grup actualment seleccionat (l’article llegit passa a ser considerat com l’article actual). Sense paràmetre, aquesta comanda llegeix l’article actual. El servidor respon amb un codi 220 seguit de dos paràmetres: el número de l’article i el seu identificador únic. A continuació, envia el contingut de l’article (capçalera i cos), acabat en “.”. Si hi ha algun error, el servidor respon amb els codis 412, 420, 423 o 430, segons el cas.

 ARTICLE [ < identificador > | número] 

4. Llegir la capçalera (HEAD)

Aquesta comanda és idèntica a ARTICLE; però el servidor només torna la capçalera de l’article. El codi de resposta serà el 221 en lloc del 220, amb els mateixos paràmetres.

 HEAD [ < identificador > | número>] 

5. Llegir el cos (BODY)

Aquesta comanda és idèntica a ARTICLE; però el servidor només torna el cos de l’article. El codi de resposta serà el 222 en lloc del 220, amb els mateixos paràmetres.

 BODY [ < identificador > | número] 

6. Obtenir l’estatus (STAT)

Aquesta comanda és idèntica a ARTICLE; però el servidor no torna cap text, només la línia de resposta. El codi serà el 223 en lloc del 220, amb els mateixos paràmetres.

 STAT [ < identificador > | número] 

7. Seleccionar l’article següent (NEXT)

Aquesta comanda selecciona l’article següent del grup i fa que passi a considerar-se l’article actual (és a dir, el que es llegirà si s’envia la comanda ARTICLE sense paràmetre). El codi de resposta normal serà el 223, com en l’ordre STAT. Un codi d’error específic és el 421.

 NEXT 

8. Seleccionar l’article anterior (LAST)

Aquesta comanda selecciona l’article anterior a l’actual. Els codis de resposta són com els de la comanda NEXT, però canviant el 421 pel 422.

 LAST 

9. Fer una llista de grups nous (NEWGROUPS)

NEWGROUPS disposa de les mateixes funcions que la comanda LIST, excepte que el codi de resposta és 231 (en lloc de 215) i la llista de grups està restringida als que s’han creat després de la data indicada pels paràmetres (el primer són sis dígits que representen any, mes i dia, i el segon, sis més que representen hora, minuts i segons). Opcionalment, es pot restringir encara més la llista especificant una o més jerarquies d’alt nivell separades per comes (per exemple, news, rec, etc.).

NEWGROUPS aammdd hhmmss 
[GMT][< jerarquies >]

10. Fer una llista d’articles nous (NEWNEWS)

El servidor respon a aquesta comanda amb un codi 230 i, a continuació, envia una seqüència de línies (acabada amb “.”), una per a cada article dels grups especificats en el primer paràmetre que s’hagi enviat o rebut després de la data indicada pel segon i el tercer. Les línies contenen els identificadors únics dels articles.

 NEWNEWS grups aammdd hhmmss 

El primer paràmetre és un nom de grup o una llista de noms separats per comes. En un nom, pot aparèixer el caràcter especial “*”. En aquest cas, es considera que equival a tots els noms de grups que, en lloc del “*”, tinguin una seqüència qualsevol de caràcters, que pot incloure el separador “.” (per exemple, alt.biz* pot equivaler a alt.biz.misc, alt.bizarre, etc.). D’altra banda, si un nom té el prefix “!”, el grup o grups corresponents s’exclouran de la llista (per exemple, comp.lang.*,!comp.lang.c.* equival als grups que comencin per comp.lang., però no per comp.lang.c.).

Opcionalment, es pot restringir la llista d’articles a un conjunt d’una o més jerarquies si s’especifiquen en l’últim paràmetre separades per comes. La llista només contindrà articles que pertanyin almenys a un grup de les jerarquies.

11. Enviar un article (POST)

Aquesta comanda s’utilitza per a enviar un article. El servidor respon amb un codi 440 per a indicar que no es permet l’operació, o amb un 340 per a sol·licitar l’article. En el segon cas, el client ha d’enviar el contingut de l’article (capçalera i cos) amb el format definit en l’especificació RFC 1036 i acabat amb una línia en què només hi hagi un “.”. Llavors, el servidor enviarà la resposta definitiva, que serà 240 o, si hi ha hagut algun error, 441.

 POST 

12. Oferir un article (IHAVE)

Quan un servidor es connecta a un altre, pot utilitzar la comanda IHAVE per a fer saber de quins articles disposa.

 IHAVE < identificador > 

A cada article, el servidor receptor enviarà en la resposta un codi 335 si en vol rebre una còpia o 435 si no li interessa. Si cal passar l’article, es fa mitjançant la comanda POST, i el servidor receptor enviarà en la resposta un codi 235 o, en cas d’error, un 436. Així mateix, pot succeir que al receptor no li interessi l’article després d’examinar-ne el contingut; en aquest cas, la resposta serà 437.

13. Connexió des d’un servidor esclau (SLAVE)

Aquesta comanda serveix per a informar el servidor que la connexió prové d’un servidor esclau. El servidor pot decidir, per exemple, donar més prioritat a aquesta connexió que a les que provenen directament de clients perquè se suposa que atén més usuaris. El codi de resposta és el 202.

 SLAVE 

14. Missatge d’ajuda (HELP)

Aquesta comanda s’utilitza per a obtenir un missatge d’ajuda. El servidor respon amb un codi 100 i, a continuació, un text informatiu de les comandes que accepta, acabat amb una línia amb un caràcter “.”.

 HELP 

15. Tancar la connexió (QUIT) Aquesta comanda s’utilitza per a tancar la connexió. El servidor respon enviant un codi 205 i tancant la connexió.

 QUIT 

L’especificació RFC 977 permet que les implementacions afegeixin altres comandes als estàndards; tanmateix, recomana que el nom d’aquestes noves comandes comenci amb X per a evitar possibles conflictes amb posteriors extensions oficials.

Alguns exemples de comandes implementades per molts servidors són els següents:

Taula de codis de resposta de NNTP

Codi

Significat

100

Missatge d’ajuda.

200

Servidor preparat; es permet enviar articles.

201

Servidor preparat; no es permet enviar articles.

202

Connexió des de servidor esclau.

205

El servidor tanca la connexió.

211

Grup seleccionat.

215

Llista de grups.

220

Contingut de l’article.

221

Capçalera de l’article.

222

Cos de l’article.

223

Identificador de l’article.

230

Llista d’articles nous.

231

Llista de grups nous.

235

Article rebut.

240

Article enviat.

335

Preparat per a rebre un article d’un altre servidor.

340

Preparat per a rebre un article del client.

400

Servei no disponible.

411

No existeix el grup.

412

No hi ha cap grup seleccionat.

420

No hi ha cap article seleccionat.

421

No hi ha article següent.

422

No hi ha article anterior.

423

No hi ha cap article amb aquest número.

430

No hi ha cap article amb aquest identificador.

435

No es vol rebre l’article.

436

Error a la recepció de l’article.

437

Article rebutjat.

440

No es permet enviar article.

441

No s’ha pogut enviar l’article.

500

Comanda desconeguda.

501

Error de sintaxi en la comanda.

502

Permís denegat.

503

Error intern.

Exemple

Exemple d’article Usenet:

From: usuari@acme.com (Ernest Udiant)
Path: News.uoc.es!news.rediris.es!
news.eu.net!newsfeed.omninet.
org!nntp.acme.com!usuari
Newsgroups: soc.culture.espanol
Subject: Nou llibre de receptes tradicionals
Message-ID: <KvjsSAam9Ly@acme.com>
Date: Thu, 12 Dec 2002 09:12:30 GMT
Expires: Sat, 19 Dec 2002 00:00:00 GMT
Organization: ACME Inc.
Lines: 2
La setmana que ve es publicarà un llibre
nou de receptes de cuina tradicional.
Continuarem informant...

Conclusions

Avui dia el servei Usenet està eclipsat per l’enorme popularitat del servei WWW, que té una orientació molt més comercial, però no és tan participatiu.


Fonts:
http://www.uoc.edu/masters/cat/web/materials_lliures.html
http://es.wikipedia.org/wiki/NNTP
http://en.wikipedia.org/wiki/Network_News_Transfer_Protocol