%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                       Legal Notice                            %
%                                                               %
% This document is copyright (C) Olaf Kirch, okir@monad.swb.de  %
%                                                               %
% For copying conditions, please refer to the file COPYING.     %
%                                                               %
% The author is not liable for any damages, direct or indirect, %
% resulting from the use of information provided in this        %
% document.                                                     %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% When viewing this document with vi on an 80-columns screen,   %
% do a ':se nonumber' first.                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
% Traduccion realizada por:                                     %
%   Urko Lusa, ulusa@arrakis.es                                 %
%                                                               %
% Revisado en Julio-1997 por:                                   %
%   Juan Jose Amor, jjamor@ls.fi.upm.es                         %
%                                                               %
% Revisado el 21-Abril-1999 por:                                %
%   I\~naki Arenaza <inaki.arenaza@jet.es>                      %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definitions local to this chapter.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Warning! These paths occur literally in a few verbatim environments!
%%
\def\newslib{\file{/usr/lib/news}}
\def\newsbin{\file{/usr/lib/news/bin}}
\def\newsspool{\file{/var/spool/news}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%               S T A R T   O F   C H A P T E R                 %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Netnews}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{news}


\section{Historia de Usenet}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% There is a good description of the history of Usenet in Brendan
%% Kehoe's ``Zen and the Art of the Internet'', a booklet published in
%% 1992. The following is a boiled-down rewording its Usenet chapter.
%% Maybe I should get Brendan's permission to quote him here.
%% Or, it might be better to cut down on that. People should read
%% Zen Zemzelves.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{news.history}
% \index{news|(}
\index{noticias|(}

La idea de las noticias en red naci\'o en 1979, cuando dos estudiantes
de graduado, Tom Truscott y Jim Ellis, pensaron en usar UUCP para
conectar ordenadores con el prop\'osito de intercambiar informaci\'on
entre usuarios de \unix{}. Instalaron una peque\~na red de tres
ordenadores en Carolina del Norte.

Inicialmente el tr\'afico de informaci\'on era manejado por cierto n\'umero
de {\it shell scripts\/} (m\'as tarde reescritos en C), pero que nunca
fueron hechos p\'ublicos. Fueron r\'apidamente reemplazados por ``A''
news, la primera edici\'on p\'ublica de programas para {\it news\/}.

``A'' news no estaba dise\~nado para manejar m\'as que unos pocos
art\'{\i}culos por grupo y d\'{\i}a. Cuando el volumen de informaci\'on continu\'o
creciendo, fue reescrito por Mark Horton y Matt Glickman, quienes lo
denominaron la versi\'on ``B'' (tambi\'en conocido como Bnews). El primer
lanzamiento p\'ublico de Bnews fue la versi\'on~2.1, en 1982. Se fue
expandiendo continuamente, conforme se le a\~nad\'{\i}an nuevas prestaciones.
La versi\'on actual es Bnews~2.11. Poco a poco se va quedando obsoleta,
habi\'endose pasado a INN su \'ultimo mantenedor oficial.

\index{Collyer, Geoff}
\index{Spencer, Henry}
\index{news!C release|see {C News}}
\index{C News}
Geoff Collyer y Henry Spencer reescribieron y lanzaron en 1987 otra
nueva versi\'on, conocida como versi\'on ``C'' o \cnews. En el tiempo
transcurrido desde entonces ha habido algunos parches para \cnews,
siendo el m\'as notable de ellos la \cnews{} Performance Release. En
sistemas que transportan un gran n\'umero de grupos, el consumo de
recursos producido al ejecutar frecuentemente \prog{relaynews} (el
programa encargado de procesar los art\'{\i}culos) es bastante
significativo. La Performance Release a\~nade una opci\'on que permite
ejecutar \prog{relaynews} en {\em modo daemon}, es decir, ejecut\'andose
como tarea de fondo.

La Performance Release es la versi\'on de \cnews{} que se incluye en la mayor\'{\i}a
de las distribuciones de \linux{} actuales.


\index{Network News Transfer Protocol|see {NNTP}}
\index{NNTP}
Todas las versiones hasta la ``C'' est\'an principalmente dise\~nadas para
utilizarse en redes UUCP, aunque igualmente pueden utilizarse en otros
entornos. La transferencia eficiente de noticias sobre redes tipo TCP/IP,
DECNet o similares, requiere otro planteamiento. Esta es la raz\'on por la
que en 1986 se introdujo el ``Network News Transfer Protocol'' (NNTP)
o {\it Protocolo de Transferencia de Noticias a través de la Red}. Este
protocolo est\'a basado en conexiones de red, y especifica cierto n\'umero de
comandos para transferir los art\'{\i}culos de forma interactiva.

Hay bastantes aplicaciones basadas en el NNTP disponibles en la Red.
Una de ellas es el paquete \prog{nntpd}, de Brian Barber y Phil Lapsley, que
puede usarse, entre otras cosas, para proporcionar un servicio de lectura de
noticias a distintos nodos de una red local. \prog{nntpd} fue dise\~nado para
complementarse con Bnews o \cnews{} y darles prestaciones NNTP.


\index{InterNet News (INN)}
\index{INN}
% Cutrada: ``demonio de noticias'' por ``news daemon''
Otra aplicaci\'on NNTP diferente es INN, o Internet News. No es
simplemente un interfaz, sino un sistema de noticias por derecho
propio.  Consta de un sofisticado demonio de noticias que es capaz de
mantener varias conexiones NNTP simult\'aneas, y es por lo tanto, el
software elegido por muchos servidores en Internet.



\section{?`Qu\'e {\protect\em es}, en definitiva, Usenet?}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{news.usenet}
%\label{noticias.usenet}
%\index{news!Usenet}
\index{noticias!Usenet}
\index{Usenet}
\index{Zen}

Una de las cosas m\'as asombrosas de Usenet es que no forma parte de
ninguna organizaci\'on, ni tiene ninguna clase de autoridad central. De
hecho, parte del saber popular de Usenet consiste en que excepto por
una descripci\'on t\'ecnica, no se puede definir {\em qu\'e} es, tan s\'olo
qu\'e no es. Si tiene Vd. a mano el excelente ``Zen and the Art of the
Internet'' (disponible en Internet o a trav\'es de Prentice-Hall, ver
\cite{zen}), de Brendan Kehoe, encontrar\'a una sorprendente lista de
{\it impropiedades} de Usenet.


%\index{news!exchanging}
\index{noticias!intercambio}
%\index{exchanging!news}
\index{intercambio!noticias}
%\index{news!feeding}
\index{noticias!alimentaci\'on}
A riesgo de sonar tonto, podr\'{\i}a definirse Usenet como la colaboraci\'on
de servidores separados que intercambian noticias de Usenet. Para ser
un servidor en Usenet, todo lo que hay que hacer es encontrar otro
servidor Usenet y llegar a un acuerdo con sus propietarios y
administradores para intercambiar noticias con ellos.  Proporcionar
art\'{\i}culos a otro servidor se denomina tambi\'en {\em alimentaci\'on} o
{\it feeding}, de d\'onde se origina otro axioma com\'un de Usenet:
``Consigue alguien que te pase las noticias, y ya eres parte de
Usenet''.

%\index{news!article}
\index{noticias!art\'{\i}culo}
La unidad fundamental de las noticias de Usenet es el art\'{\i}culo. Es un
mensaje que un usuario escribe y ``publica'' en la red. Para
posibilitar que los sistemas de noticias lo manejen, est\'a precedido de
informaci\'on administrativa, conocida como cabecera del art\'{\i}culo. Es
muy similar a la cabecera utilizada para el correo que se describe en
el est\'andar RFC~822, y como \'esta, consiste en varias l\'{\i}neas de texto,
cada una de las cuales comienza con el nombre de un campo terminado en
dos puntos, siguiendo despu\'es el valor de dicho campo.\footnote{ El
  formato de los mensajes de noticias de Usenet se especifica en la
  RFC~1036, ``Standard for interchange of USENET messages''.  }


%\index{news!groups}
\index{noticias!grupos}
Los art\'{\i}culos son enviados a uno o m\'as {\em grupos de noticias}.
Podr\'{\i}an considerarse a los grupos como foros para art\'{\i}culos relativos a
una misma tem\'atica. Todos los grupos est\'an organizados en una
jerarqu\'{\i}a, en la cual el nombre de cada grupo indica su lugar en la
misma. Esto a menudo hace m\'as f\'acil ver sobre qu\'e versa un grupo de
noticias. Por ejemplo, todo el mundo puede deducir por el nombre que
\ngrp{comp.os.linux.announce} se usa para anuncios relativos a un
sistema operativo para computadoras llamado \linux.

%\index{news!exchanging}
\index{noticias!intercambio}
%\index{exchanging!news}
\index{intercambio!noticias}
%\index{news!feeding}
\index{noticias!alimentaci\'on}
Estos art\'{\i}culos son intercambiados entre todos los servidores de
Usenet a los que interese tener noticias de este grupo. Cuando dos
servidores acuerdan intercambiar noticias, son libres de intercambiar
cualquier grupo que deseen, y pueden incluso a\~nadir sus propias
jerarqu\'{\i}as locales. Por ejemplo, \host{groucho.edu} puede tener un
enlace de noticias con \host{barnyard.edu}, un gran servidor de
noticias, y varios enlaces con servidores menores a los que {\it
  alimenta} con noticias. El Colegio Barnyard puede recibir todos los
grupos de Usenet, mientras que la UGM s\'olo quiere algunas jerarqu\'{\i}as
mayores como \ngrp{sci}, \ngrp{comp}, \ngrp{rec}, etc. Algunos
servidores situados m\'as abajo en esta cadena, digamos un servidor UUCP
llamado \host{brewhq}, querr\'an incluso menos grupos, ya que no tendr\'an
los suficientes recursos de hardware o de red. Por otro lado,
\host{brewhq} puede querer recibir grupos de la jerarqu\'{\i}a \ngrp{fj}
que la UGM no tiene. Por lo tanto, mantiene otro enlace con
\host{gargleblaster.com}, quien tiene todos los grupos \ngrp{fj} y se
los pasa a \host{ brewhq}. El flujo de noticias se muestra en la
figura~\ref{news.fig.article-flow}.


\begin{figure}[htbp]
\iftex
 \ifps
  \begin{center}
   \mbox{\epsffile{figures/gmu.epsf}}
  \end{center}
 \else
  \begin{center}
   \input{gmu.eepic}
  \end{center}
 \fi
\else
\fi
 \caption{
  \label{news.fig.article-flow}
  Flujo de noticias a trav\'es de la Universidad Groucho Marx
 }
\end{figure}

Las etiquetas en las flechas que parten de \host{brewhq} pueden
requerir ciertas explicaciones. Por defecto, \host{brewhq} quiere que
todas las noticias generadas localmente sean enviadas a
\host{groucho.edu}. Sin embargo, ya que \host{groucho.edu} no lleva
los grupos \ngrp{fj}, no hay raz\'on para enviar ning\'un art\'{\i}culo de
estos grupos. Por tanto, la alimentaci\'on de \host{brewhq} a la UGM
est\'a etiquetada \ngrp{all,!fj}, lo que significa que se env\'{\i}an todos
los grupos excepto los \ngrp{fj}.



\section{?`C\'omo maneja Usenet las noticias?}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{news.algorithm}
\index{exchanging!news}
\index{news!exchanging|(}
\index{news!feeding|(}
\index{news!flooding algorithm}
\index{flooding algorithm}

Hoy en d\'{\i}a, Usenet ha crecido hasta alcanzar dimensiones enormes. Los
servidores que llevan la totalidad de los grupos suelen tener que
transferir unos sesenta megabytes por d\'{\i}a.\footnote{ Un momento: 60~Mb
  a 9600~bps, o sea, 60 millones por 1200, eso es\ldots murmullo,
  murmullo,\ldots !`Eh! !`Son 34~horas!  } Por supuesto esto requiere
mucho m\'as que enredar con unos cuantos ficheros. Veamos c\'omo se las
apa\~nan la mayor\'{\i}a de sistemas \unix{} para manejar las noticias.


\index{feed, news}
Las noticias se distribuyen por la red de varias formas. El medio
hist\'orico sol\'{\i}a ser UUCP, pero hoy en d\'{\i}a el caudal principal es
llevado por servidores permanentemente conectados a Internet. El
algoritmo para encaminar se denomina {\em inundaci\'on}: cada servidor
mantiene cierto n\'umero de enlaces con otros servidores. Cualquier
art\'{\i}culo generado o recibido por el sistema local de noticias es
enviado a estos servidores, a no ser que ya haya pasado por ellos. Se
puede saber por qu\'e servidores ha pasado un art\'{\i}culo mirando el campo
\mhdr{Path:} de la cabecera. Este campo contiene una lista con todos
los sistemas por los que el art\'{\i}culo ha pasado, separados por un signo
de admiraci\'on.


%% We have to output the < and > below in math mode, because
%% some LaTeX's produce a heads-down ! and ? instead.
\index{news!message id}
\index{news!history}
Para distinguir entre los art\'{\i}culos y reconocer los duplicados, los
art\'{\i}culos de Usenet llevan un identificativo (especificado en el campo
\mhdr{Message-Id:} de la cabecera) que combina el nombre del servidor
donde se public\'o y un n\'umero de serie
``\email{$<$\var{num-serie}@\var{servidor}$>$}''. Cada vez que se
procesa un art\'{\i}culo, el sistema de noticias registra su identificativo
en un fichero (generalmente llamado {\em history}) con el que despu\'es
se coteja cualquier nuevo art\'{\i}culo.

\index{news!limitar alimentaci\'on}
\index{news!distribuci\'on}
El flujo entre dos servidores puede ser limitado por dos criterios:
por un lado, al art\'{\i}culo se le asigna una distribuci\'on (campo
\mhdr{Distribution:} de la cabecera) que puede ser usada para
confinarlo a cierto grupo de servidores. Por otro lado, los grupos de
noticias intercambiados pueden limitarse tanto en el sistema emisor
como en el receptor. El conjunto de grupos y distribuciones que se
permite transmitir a un sistema se suelen especificar en el fichero
\file{sys}.


\index{news!batching}
\index{news!por lotes}
\index{batching!news}
\index{entrega!news|(}
Debido al gran n\'umero de art\'{\i}culos, habitualmente se necesita mejorar
el esquema anterior. En las redes UUCP, lo natural es recoger los
art\'{\i}culos durante un cierto per\'{\i}odo de tiempo y combinarlos en un solo
fichero, que posteriormente es comprimido y enviado a un sistema
remoto.  Esto se llama {\em batching}.\footnote{ La regla de oro de
  las noticias de red, seg\'un Geoff Collyer: ``Empaquetar\'as tus
  art\'{\i}culos''.  }


\index{news!ihave/sendme}
Una t\'ecnica alternativa es la del protocolo {\em ihave/sendme} ({\it
  tengo/env\'{\i}ame}) que evita que los duplicados sean enviados en primer
lugar, ahorrando ancho de banda. En vez de empaquetar todos los
art\'{\i}culos en ficheros y enviarlos, s\'olo se env\'{\i}an los identificativos
de los mensajes en un gigantesco mensaje ``ihave''. El sistema remoto
lee el mensaje, lo compara con su fichero hist\'orico ({\it history}), y
env\'{\i}a un mensaje ``sendme'' con la lista de art\'{\i}culos que quiere. De
este modo, s\'olo se enviar\'an estos art\'{\i}culos.

Por supuesto, el protocolo ihave/sendme s\'olo tiene sentido si ata\~ne a
dos grandes sistemas que reciben noticias desde varios sitios
independientes, y que se intercambian art\'{\i}culos entre s\'{\i} con la
suficiente frecuencia como para mantener un flujo de noticias
eficiente.

\index{news!NNTP}
Los sevidores conectados a Internet generalmente se basan en programas
bajo TCP/IP que usan el protocolo NNTP\footnote{
  Descrito en la RFC~977.}, mencionado anteriormente. Con este
protocolo se transfieren art\'{\i}culos entre servidores y se da
acceso a Usenet a usuarios individuales en sistemas remotos.


\index{news!pulling}
\index{news!pushing}
NNTP contempla tres formas diferentes de transferir las noticias.  Una
es una versi\'on en tiempo real de ihave/sendme, tambi\'en conocida como
{\em empujar} las noticias. La segunda t\'ecnica se denomina {\em tirar}
de las noticias. El cliente solicita una lista de art\'{\i}culos de un
grupo o jerarqu\'{\i}a determinado que ha llegado al servidor despu\'es de
una fecha especificada, y elige los que no puede encontrar en su
fichero hist\'orico. La tercera forma es para lectura interactiva, y
permite al lector escoger art\'{\i}culos de grupos especificados, as\'{\i} como
publicar art\'{\i}culos con cabeceras incompletas.

\index{entrega!news|)}
\index{news!intercambio|)}
\index{news!alimentaci\'on|)}


\index{news!spool}
\index{news!cola}
\index{news!fichero active@fichero \file{active}}
En cada sistema, las noticias se guardan en una estructura de
directorios bajo \newsspool, cada art\'{\i}culo en un fichero separado, y
cada grupo en un directorio separado. El nombre del directorio se crea
a partir del nombre del grupo, donde los componentes del mismo son los
componentes de la ruta. As\'{\i} pues, los art\'{\i}culos de
\ngrp{comp.os.linux.misc} se guardan en
\file{\newsspool/comp/os/linux/misc}. A cada art\'{\i}culo se le asigna un
n\'umero seg\'un su orden de llegada. Este n\'umero sirve como nombre de
fichero. El rango de art\'{\i}culos vigentes en un momento dado se guarda
en un fichero llamado \file{active}, que al mismo tiempo sirve como
lista de grupos disponibles en el sistema.

\index{news!borrado de art\'{\i}culos antiguos}
\index{news!expiraci\'on de art\'{\i}culos}
Puesto que el espacio en disco es un recurso finito,\footnote{ Alguna
  gente afirma que Usenet es un conspiraci\'on entre vendedores de
  modems y discos duros.  } uno tiene que empezar a desechar los
art\'{\i}culos de cierta antig\"uedad.  Esto se denomina {\em expiraci\'on}.
Generalmente, los art\'{\i}culos de un determinado grupo o jerarqu\'{\i}a
expiran al transcurrir un n\'umero determinado de d\'{\i}as desde de su
llegada. El autor puede modificar este valor especificando una fecha
de expiraci\'on en el campo \mhdr{Expires:} de la cabecera del art\'{\i}culo.

\index{news|)}

