\documentclass[12pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[spanish]{babel}
\author{Margarita Manterola y Maximiliano Curia}
\title{Introducción a conceptos de redes en GNU/Linux}
\date{Junio 2003}
\begin{document}

%\hyphenrules{nohyphenation}

\maketitle

\section{Introducción}

Todos los días, cuando usamos internet, nos comunicamos a diversos
puntos del planeta. Cada vez que leemos nuestro correo, navegamos en la
web o entramos en un chat estamos utilizando un número inmenso de
computadoras, todas interconectadas entre sí.

Todo esto lo hacemos usando un protocolo de comunicación entre partes de
la red. Se denomina {\bf protocolo} a cualquier lenguaje que puede ser
utilizado por computadoras, switchs, routers y demás elementos de red
para comunicarse entre sí.

El protocolo que se utiliza más comúnmente en Internet es el TCP/IP que,
en realidad, es la suma de dos protocolos distintos (TCP e IP).

TCP/IP forman un protocolo tan flexible que permiten la comunicación de
una multitud de plataformas y una enorme cantidad de computadoras.
Millones de usuarios de todo el planeta acceden cada día a los servicios
de red que proveen estos protocolos.

\section{Conceptos básicos de TCP/IP}

Hablaremos a continuación de los conceptos relacionados exclusivamente
con el protocolo IP, y en gran parte con el protocolo TCP.  Estos
conceptos son generales, más allá del sistema operativo.  Además, nos
pueden ser útiles para poder comprender el funcionamiento de otros
protocolos.

En particular, hablaremos del la versión del protocolo IP llamada {\it
ipv4}, que es la versión que se utiliza actualmente en Internet.  Existe
un prototipo para constituir una nueva versión (la ipv6), pero todavía
se encuentra en experimentación.

Por otro lado, el protocolo TCP utiliza al protocolo IP como base y se
usa para una gran variedad de servicios de red (web, mail, ftp, etc).
Otros protocolos, similares al TCP son el UDP (utilizado para consultas
a DNS, por ejemplo) y el ICMP (utilizado para hacer \verb!ping!).

\subsection{Dirección IP}

Toda máquina que está en una red de computadoras debe identificarse de
alguna manera que la haga distinguible de las otras computadoras.  Esta
identificación se hace mediante un número.  Y dependerá de los valores
correspondientes a la red a la que pertenece.

El número, llamado {\bf dirección IP} (Internet Protocol) - o a veces
simplemente {\bf IP}, está compuesto por cuatro bytes. Generalmente lo
representamos por cuatro números (menores a 256) separados por puntos.
Por ejemplo: {\bf 200.45.34.59}.

De los 4,29 giga de direcciones disponibles con este formato, existen
unas cuantas que se encuentran destinadas para usos particulares o
privados.

\begin{itemize}
\item Las dirección 127.0.0.1 se encuentra reservada para identificar a la
computadora local.  Por añadidura, todo el rango de IPs que comienza con
127 también identifica a la computadora local.

\item El rango de direcciones 192.168.0.0 - 192.168.255.255 se encuentra
reservado para utilizarlo en redes privadas menores a 255 computadoras.

\item El rango 172.16.0.0 - 172.16.255.255 se utiliza para redes
privadas compuestas por un número menor a 65500 computadoras.

\item El rango 10.0.0.0 - 10.255.255.255 se encuentra reservado para
utilizarlo en redes privadas de hasta 16 millones de computadoras

\item Existen muchos otros rangos que también están reservados para usos
especiales, de manera que el gigantesco número de IPs disponibles se ve
empequeñecido.
\end{itemize}

Llamamos redes {\bf privadas} a aquellas cuyas direcciones IP no son
válidas para utilizar en Internet.  Estas dirección son válidas
únicamente dentro de la red a la que esté conectada la computadora. \\

Mientras que la red {\bf pública} es Internet, y las direcciones IPs
{\bf públicas} son todas las direcciones que son válidas para usar en
Internet.

En los orígenes de Internet, había una sobreabundancia de direcciones IP,
de modo que grandes cantidades de estas direcciones fueron otorgadas a
algunas entidades (como ciertas universidades, o empresas que aportaron al
desarrollo de Internet).  En la actualidad, el número de direcciones IP
disponibles para ser utilizadas es muy pequeño, de modo que se han
convertido en un recurso muy preciado y, por lo tanto, muy caro.

\subsection{Hosts}

Además de tener una dirección IP que las identifica, las computadoras
suelen tener algún nombre un poco más amigable, que permite identificarlas
dentro del lenguaje humano.

En el archivo {\bf /etc/hosts}, podemos asignar, a cada dirección IP,
uno o varios nombres.  La sintaxis es muy sencilla, por ejemplo:

\begin{small}
\begin{verbatim}
192.168.21.10    amadeus.amadeus  amadeus
192.168.21.1     erwin.amadeus    erwin
192.168.21.7     peperina.amadeus peperina
192.168.21.13    freak.amadeus    freak
\end{verbatim}
\end{small}

\subsection{Subredes}

Acompañando la dirección IP habrá también una {\it máscara de subred}
(netmask), que nos indica qué parte de la dirección es interna de la red
a la que está conectada la computadora, y qué parte representa a la red
en sí.

Por ejemplo, si la dirección IP es 192.168.35.65 y la máscara de subred es
255.255.255.0, nuestra computadora se identifica con el número 65 dentro
de nuestra red, que a su vez utiliza el rango 192.168.35.0 al
192.168.35.255. Este rango también se puede escribir 192.168.35.0/24.

La denominación de {\it máscara} indica justamente esta capacidad
de separar lo que pertenece a la red y lo que es específico de la
computadora local.  Es decir, escribiendo 255 en binario tendremos
11111111 (8 unos).  Y si escribimos 255 tres veces, tendremos 24 unos.
Esto indica que los primeros 24 bits de nuestra dirección IP
identifican a la red y los últimos 8 a nuestra máquina dentro de la
red.

Otro ejemplo: la dirección IP 10.1.130.210 podría tener la
máscara 255.0.0.0, que nos indica que nuestra red es 10.0.0.0/8 y el
resto de los números son la identificación de esa computadora dentro
de su red. \\

Las redes suelen clasificarse según el rango de IPs válido que posean.
Se agrupan en {\it Clases}

\begin{description}
\item[Clase C] serán las redes que tengan una máscara 255.255.255.0,
es decir, las redes que tengan un máximo de 255 computadoras.
\item[Clase B] serán las redes que tengan la máscara 255.255.0.0.
\item[Clase A] serán las redes que tengan la máscara 255.0.0.0.
\end{description}

\subsection{Ruteos}

Un grupo de computadoras que pertenezcan a una misma red pueden
comunicarse entre sí directamente. Lo usual será que se encuentren
conectadas a través de un hub o switch. O también, puede darse la situación
de que tengamos dos computadoras conectadas entre sí con un cable de una a
otra.

Pero cuando queremos interconectar redes debemos poseer un equipo que se
encargue de rutear la información de una red a la otra.  Se denomina
{\bf ruta} de un determinado paquete de información al destino que debe
asignarse a ese paquete según una serie de criterios (la dirección de
origen, el puerto de origen, la dirección de destino, el puerto de destino,
el protocolo utilizado (TCP, UDP, ICMP), etc). Esto es lo que sucede en el
caso de Internet.

Por ejemplo, tomemos el caso de un usuario que desea acceder, a través de
Internet, al sitio www.google.com.  Para ello, su computadora se
comunicará con la del ISP (Internet Service Provider), que a su vez se
comunicará con otra computadora, ubicada en el exterior, que por su parte
se comunicará con una serie de equipos hasta llegar a la computadora que
corresponde a google.

Para ver el trayecto que realizan los paquetes de información al
transmitirse por la red, podemos utilizar el comando \verb!traceroute!. Por
ejemplo, para ver el caso de google que mencionamos, debemos ejecutar

\verb!traceroute www.google.com!. \\

Para poder interconectar redes, necesitamos tener al menos un equipo que
exista en las dos redes (puede ser una computadora común, o también un
equipo especialmente armado para esto, llamado {\bf router}). Este equipo
será el que actuará de nexo entre ambas.  En ese equipo existirá una
configuración de las rutas que deben seguir los paquetes de información
dentro de cada red.  A este equipo lo llamamos {\bf gateway} (puerta de
enlace).

Las estaciones que pertenezcan a las diversas redes deben tener
configurado cuál es el gateway correspondiente para acceder a la otra red.
\\

Tanto para realizar la configuración como para ver el estado actual de las
tablas de ruteo, en GNU/Linux utilizamos el comando \verb!route!.  Si lo
ejecutamos sin parámetros nos muestra la tabla de ruteo actual.  Veremos
la misma tabla, pero sin resolución de nombres, si ejecutamos
\verb!route -n!.

La ruta con el nombre de {\it default}, será la ruta por la cual se
dirigirán los paquetes cuando no coincidan con ninguna otra ruta.  Es por
esta ruta por la que normalmente se realizarán nuestras conexiones a
Internet.

\subsection{Firewall}

Así como existe un equipo que se encarga de que los paquetes pasen de una
red a otra, puede existir un equipo que se encarga de que los paquetes {\bf
no} pasen de una red a otra.  Se trata de un {\bf firewall}, cuya función
principal es proteger a las computadoras de posibles ataques externos.

Además, en las empresas se suele utilizar estos equipos para impedir que
los empleados accedan a un determinado servicio (ICQ, MSN, etc). \\

Muchas veces, cuando una computadora con GNU/Linux es el gateway de una
red, esa misma computadora funciona como firewall.  Esto se debe a que
cualquier sistema GNU/Linux posee ambas funcionalidades integradas
directamente en el kernel del sistema, y la configuración es
muy estable y relativamente sencilla.

\subsection{Proxy}

Se denomina {\bf proxy} a una computadora que almacena las páginas más
visitadas en una memoria caché, de manera que se haga más rápido el acceso
a esas páginas.

Según la configuración de la red, puede suceder que la única forma de
acceder a Internet sea a través del proxy.  Esto se puede dar en dos
situaciones:

\begin{itemize}
\item cuando no hay ningún gateway que interconecte la red interna con la
externa, y el proxy funciona como el único gateway existente;

\item cuando existe un gateway, pero también un firewall que
bloquea la utilización de la red externa para un determinado grupo de
computadoras, pero no para el proxy.
\end{itemize}

Sin embargo, esto no tiene porqué ser así.  Aún si el firewall permite la
utilización de la red externa, es posible elegir utilizar el proxy para
acceder a Internet, ya que al tener las páginas previamente cargadas en
memoria, se hace mucho más rápida la navegación.

Este fue el objetivo de la creación de los proxies, aunque en la
actualidad, muchas veces se los utiliza como gateway, impidiendo de esta
manera la utilización de {\bf toda} Internet, permitiendo el acceso
únicamente al servicio web.

\section{Servicios}

Existen muchos servicios que se utilizan a través de redes.  Algunos de
los más difundidos son el acceso web y el e-mail.  Pero existen,
literalmente, miles de servicios que podríamos utilizar dentro de una red.

Muchos de estos servicios están especificados en el archivo {\bf
/etc/services}.  Este archivo define un nombre para conexiones de red en
determinado puerto, con determinado protocolo.  Los protocolos, por otro
lado, se definen en el archivo {\bf /etc/protocols}.

Para ver en qué puertos está escuchando la computadora que estemos
utilizando en este momento, se puede utilizar el comando
\verb!netstat -nl!. (La n es para que no resuelva los nombres, y la l para
que muestre los puertos de escucha (listening) ).

Otro comando útil para saber en qué puertos correspondientes a qué
servicios están habilitados es \verb!nmap localhost!.  Además de {\bf
localhost} (que es el nombre que identifica a nuestra computadora), podemos
utilizar la dirección IP, o el nombre correspondiente, de cualquier máquina
para saber qué puertos tiene abiertos esa computadora y a qué servicios
corresponden.

\subsection{DNS}

El servicio de DNS (Domain Name Server), es el que nos permite traducir
nombres (por ejemplo: www.gnu.org) a direcciones IP (199.232.41.10,
en este caso).

Nació por la necesidad de poder expandir y centralizar el archivo {\bf
/etc/hosts} que se encuentra en cada una de las computadoras. En un
principio, este archivo había que actualizarlo cada vez que una computadora
se agregaba a la red.  Esto implicaba un importante trabajo de
mantenimiento para tener actualizado el listado de estaciones.

A medida que la red (Internet) fue creciendo, fue necesario delegar
ciertas tareas de administración para hacer más fácil la vida de los
administradores de las redes. Para eso se creó el servicio de DNS, uno de
los primeros protocolos distribuidos y uno de los servicios más utilizados.
\\

Para ver cómo funciona este servicio, usaremos el comando \verb!nslookup!.
Este comando nos provee de una consola interactiva con la que podemos
efectuar distintas consultas.  Empezaremos por una sencilla.

\begin{small}
\begin{verbatim}
nslookup

> set q=any
> ar
Server:         192.168.21.13
Address:        192.168.21.13#53

Non-authoritative answer:
(...)
ar      nameserver = athea.ar.
ar      nameserver = ctina.ar.

Authoritative answers can be found from:
(...)
ar      nameserver = athea.ar.
ar      nameserver = ctina.ar.
\end{verbatim}
\end{small}

Las respuestas {\it non-authoritative} son respuestas que hacen los DNS Servers a partir de lo que tienen almacenado (caché). Existe un grupo de DNS Servers que son las raíces de este árbol. Lo usual es que cada servidor nos diga dónde tenemos que seguir preguntando, hasta llegar a la raíz.

Para hacer esto, debemos indicarle a la aplicación, cuál es el servidor al que debe efectuar la consulta. Por ejemplo, teniendo en cuenta la respuesta anterior, podemos buscar la dirección IP de \verb!athea.ar!:

\begin{small}
\begin{verbatim}
> athea.ar
(...)
Non-authoritative answer:
Name:   athea.ar
Address: 200.16.98.2
(...)
\end{verbatim}
\end{small}

Y con esta dirección fijar el servidor a utilizar en las próximas consultas.

\begin{small}
\begin{verbatim}
> server 200.16.98.2
Default server: 200.16.98.2
Address: 200.16.98.2#53
\end{verbatim}
\end{small}

Una vez fijado el servidor podemos efectuar una nueva consulta.

\begin{small}
\begin{verbatim}
> com.ar
Server:         200.16.98.2
Address:        200.16.98.2#53
 
com.ar
        origin = athea.ar
        mail addr = noc-ar.atina.ar
        serial = 2003050701
        refresh = 21600
        retry = 3600
        expire = 1728000
        minimum = 21600
com.ar  nameserver = ns.uu.net.
com.ar  nameserver = ns1.retina.ar.
com.ar  nameserver = athea.ar.
com.ar  nameserver = ctina.ar.
com.ar  nameserver = merapi.switch.ch.
com.ar  nameserver = relay1.mecon.ar.
\end{verbatim}
\end{small}

Ahora buscaremos la dirección de un dominio en particular.

\begin{small}
\begin{verbatim}
> gnuservers.com.ar
Server:         200.16.98.2
Address:        200.16.98.2#53
 
Non-authoritative answer:
*** Can't find gnuservers.com.ar: No answer
 
Authoritative answers can be found from:
gnuservers.com.ar       nameserver = ns2.aktiv-assekuranz.com.
gnuservers.com.ar       nameserver = ns1.aktiv-assekuranz.com.
\end{verbatim}
\end{small}

En este caso, el servidor no poseía dentro de su caché la dirección IP del 
dominio que buscamos.  Para obtener el resultado correcto, debemos hacer 
la búsqueda de ns1.aktiv-assekuranz.com, yendo de nuevo al server donde empezamos las preguntas. Una vez que obtenemos esa dirección (200.68.69.99), podremos ejecutar la consulta en ese server.

\begin{small}
\begin{verbatim}
> server 200.68.69.99
> gnuservers.com.ar
Server:         200.68.69.99
Address:        200.68.69.99#53
 
gnuservers.com.ar
        origin = gnuservers.com.ar
        mail addr = root.gnuservers.com.ar
        serial = 2003041208
        refresh = 604800
        retry = 86400
        expire = 2419200
        minimum = 604800
gnuservers.com.ar       nameserver = aktiv-assekuranz.com.
gnuservers.com.ar       nameserver = aleli.aktiv-assekuranz.com.
Name:   gnuservers.com.ar
Address: 200.42.58.163
gnuservers.com.ar       mail exchanger = 0 mail.gnuservers.com.ar.
\end{verbatim}
\end{small}

El trabajo que acabamos de hacer, normalmente es realizado por el servicio
del DNS que tengamos configurado en el archivo {\bf /etc/resolv.conf}.  Es
decir, cuando nosotros hacemos una consulta a algún DNS, es este equipo
el que se encarga de preguntar a los otros DNS del mundo hasta encontrar la
respuesta a nuestra consulta.

Para pedirle al DNS que tenemos configurado que busque la información
correspondiente a una determinada dirección, podemos utilizar el comando
\verb!dig gnuservers.com.ar!.  Si queremos seleccionar un DNS en particular
para hacer la pregunta, podemos escribir
\verb!dig @200.42.0.108 gnuservers.com.ar!

\subsection{Telnet}

El servicio de telnet es uno de los servicios más básicos y más antiguos,
anterior incluso al servicio de DNS. Nos permite ingresar a un servidor
remoto, con un usuario y contraseña, y acceder a ese servidor como si
estuviéramos conectados desde una terminal. Normalmente este servicio
funciona sobre el puerto 23 de TCP.

Se trata de un servicio muy antiguo y bastante obsoleto, ya que no utiliza
ningún tipo de encriptación, y la información (incluyendo la contraseña del
usuario) se transmite en texto plana, que algún usuario mal intencionado
podría capturar. \\

Con el programa \verb!tcpdump! pueden verse los paquetes que pasan por una
placa de red, un módem o cualquier otro dispositivo de red.  Con este
programa, por ejemplo, es posible ver los paquetes de telnet que se
transmiten sin encriptación.  Sin embargo, es necesario ser super usuario
para poder utilizarlo. \\

Sin embargo, el cliente de telnet (en GNU/Linux \verb!telnet!) nos
permite interactuar con otros servicios TCP de otros servidores de manera
sencilla.  Es decir, es posible acceder a una computadora (o un equipo
cualquiera) utilizando diversos protocolos y puertos.  Esto se debe a que
el cliente de telnet utiliza el protocolo TCP en su forma más básica.

En cada caso será necesario conocer las palabras claves del protocolo para
poder hacer las consultas que se desee.

\subsection{Web}

El servicio de www es uno de los más utilizados en Internet actualmente.
Normalmente se lo utiliza a través de un programa especialmente pensado
para ello ({\it browser} o {\it navegador}).  El protocolo que se utiliza
en este servicio es el HTTP ({\it HyperText Transfer Protocol}. Este
servicio normalmente se utiliza en el puerto 80.  El browser debe conocer
tanto el protocolo HTTP, como el lenguaje HTML en que recibe el contenido
que debe mostrar por pantalla.

Como se dijo antes, es posible utilizar el cliente de telnet para observar
de forma detallada el accionar de este protocolo.

\begin{verbatim}
# telnet www.fi.uba.ar 80
GET /
\end{verbatim}

En el caso de la página de www.fi.uba.ar, al efectuar esta consulta
obtenemos una página muy sencilla que lo que hace es indicarle al navegador
que debe pedir otra página (index.php).  Una vez que hemos obtenido el
resultado, la sesión se cierra, esto es parte del protocolo HTTP 1.0.
Haciendo nuevamente la consulta, podremos obtener la página deseada.

\begin{verbatim}
# telnet www.fi.uba.ar 80
GET /index.php
\end{verbatim}

Por otro lado, si queremos obtener una página a través de un proxy, será
necesario conectarnos al puerto del proxy, que normalmente se
encuentra en el puerto 8080, y hacer una consulta un poco distinta,
incluyendo el protocolo a utilizar para el pedido.

\begin{verbatim}
# telnet proxy.fi.uba.ar 8080
GET http://www.google.com.ar HTTP/1.0
\end{verbatim}

En este caso, al tener que especificarle el protocolo, también debemos
escribir {\bf ENTER} dos veces.  Esto se debe a que en la siguiente línea
sería posible especificar un nuevo pedido.

\subsection{FTP}

Otro servicio muy utilizado en Internet es el de FTP, {\it File Transfer
Protocol}, que se utiliza para bajar o subir archivos a un determinado
servidor.  Este servicio normalmente se utiliza en el puerto 21.

Dos comandos que pueden existir en un sistema GNU/Linux pueden servir para
aprender cómo funciona este protocolo: \verb!ftp! y \verb!lftp!.  Ambos son
clientes de ftp de consola, el segundo bastante más poderoso que el
primero. \\

A continuación se explican algunos de los comando básicos de ftp.
Dado que este protocolo nació dentro de computadoras UNIX, y aún hoy la
mayoría de los servidores de FTP utilizan UNIX o GNU/Linux, los comandos
que se usan son muy similares a los de GNU/Linux.

\begin{description}
\item[open host] abre una conexión.  En el caso del programa {\bf ftp},
pregunta el usuario y contraseña inmediatamente, en otros programas, será
necesario utilizar {\bf user nombre} para que luego nos pregunte la
contraseña.
\item[ls] lista los archivos en el servidor remoto.
\item[cd directorio] cambia de directorio.
\item[put archivo] sube el archivo al servidor.
\item[get archivo] baja el archivo del servidor.
\item[mput archivos] sube varios archivos al servidor (acepta
meta-caracteres de shell para coincidir con varios archivos).
\item[mget archivos] baja varios archivos del servidor (también acepta
meta-caracteres de shell).
\end{description}

Además de estos, en {\bf lftp} existen muchos otros comandos para realizar
tareas más complejas, como subir o bajar directorios completos con todos
sus subdirectorios ({\bf mirror}).

\subsection{SSH}

Una versión mejorada del servicio de telnet es el servicio de {\bf ssh},
{\it Secure Shell}.  Permite, al igual que el telnet, ingresar a un
servidor remoto y utilizarlo del mismo modo que una terminal.

La diferencia principal reside en que el ssh utiliza encriptación para
enviar la información, de modo que el usuario una seguridad apreciablemente
mayor de la información que se transfiere a través de Internet.

El comando a usar en GNU/Linux para utilizar este servicio es simplemente
\verb!ssh!, que normalmente se conecta al puerto 22 del servidor remoto.
Como para el resto de los servicios, también existen clientes de ssh para
otros sistemas operativos. \\

Otros comandos relacionados con ssh son {\bf scp} y {\bf sftp}.  El
comando \verb!scp! permite copiar archivos en forma segura entre dos
computadoras diferentes, mientras que el comando \verb!sftp! es un
reemplazo del FTP, la diferencia reside en que utiliza encriptación
mientras que FTP no. \\

%ssh-keygen -t dsa

%/.ssh/authorized\_keys

\subsection{Correo electrónico}

En el envío y recepción del correo electrónico participa más de un
protocolo.  El protocolo SMTP es el que se utiliza para {\bf enviar}
emails, mientras que los protocolos POP e IMAP pueden utilizarse para {\bf
recibir} emails.

El protocolo SMTP funciona en el puerto 25, un servidor de SMTP recibe
mensajes en ese puerto.  El POP funciona en el puerto 110, un servidor POP
envía mensajes desde ese puerto.  El IMAP es una mejora sobre el
protocolo POP, que funciona en el puerto 143, un servidor IMAP permite leer
los mensajes en ese puerto.

\subsubsection{SMTP}

Se reproduce a continuación una sesión de SMTP con el servidor
mail.fi.uba.ar, desde una computadora que no se encuentra dentro de la red
de la Facultad de Ingeniería.

\begin{small}
\begin{verbatim}
#telnet mail.fi.uba.ar 25

Trying 157.92.49.3...
Connected to srv-pc2.fi.uba.ar.
Escape character is '^]'.
220 srv-pc2.fi.uba.ar ESMTP Sendmail 8.11.6/8.11.6;
Sat, 10 May 2003 17:54:22 -0300
HELO ulises
250 srv-pc2.fi.uba.ar Hello h066060006167.netizen.com.ar [66.60.6.167]
(may be forged), pleased to meet you
MAIL FROM: marga@marga.com.ar
250 2.1.0 marga@marga.com.ar... Sender ok
RCPT TO: ngiaved@fi.uba.ar
250 2.1.5 ngiaved@fi.uba.ar... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: Prueba.

Esto es una prueba.

.
250 2.0.0 h4AKt9H02006 Message accepted for delivery
QUIT
\end{verbatim}
\end{small}

Los comandos de SMTP utilizados son estándar y funcionan con cualquier
servidor SMTP.  El comando {\bf HELO} se utiliza para comenzar la conexión.
Una vez que se ha comenzado la conexión se pueden enviar varios mensajes.
El comando {\bf MAIL FROM:} indica la dirección que está enviando el
mensaje, mientras que el comando {\bf RCPT TO:} indica la dirección que va
a recibir el mensaje. El comando {\bf DATA} indica que comienza a
transmitirse el contenido del mensaje, que termina con un punto.

Es interesante notar que el tema del mensaje ({\it Subject}) es parte del
contenido del mensaje, es una tarea del programa que se utilice para
leer el correo separar esta información del cuerpo del mensaje. \\

En este caso, el servidor SMTP está configurado para recibir correo de
cualquier dirección, solamente para direcciones dentro de fi.uba.ar, si se
intenta enviar un mensaje a una dirección que no se encuentre dentro del
dominio, el servidor indicará que no se permite hacer {\it relay}:
"Relaying denied. IP name possibly forged [66.60.6.167]".

Es decir, {\bf relay} es enviar un mensaje desde una dirección cualquiera,
a otra dirección cualquiera.  Lo usual es que los servidores SMTP permitan
hacer relay únicamente a las computadoras que se encuentran en un rango de
IPs determinado, que las identifica como computadoras que se
encuentran dentro del mismo dominio que el servidor.

Esto significa que el servidor acepta dos tipos de mensajes únicamente:

\begin{itemize}
\item Los que tienen como destinatario una dirección @fi.uba.ar
(normalmente, estos mensajes los enviarán otros programas de SMTP, en algún
otro lugar del mundo).
\item Los que se envían desde una dirección IP {\bf dentro} del
dominio de fi.uba.ar (estos serán los mensajes que enviaríamos con un
cliente de correo normal, configurando mail.fi.uba.ar como nuestro SMTP,
siempre que estemos dentro de la facultad).
\end{itemize}

Se reproduce a continuación otra sesión de envío de email, pero esta vez
desde dentro de un servidor de la facultad de ingeniería. Notar la
diferencia en la respuesta al HELO.

\begin{small}
\begin{verbatim}
telnet mail.fi.uba.ar 25
Trying 157.92.49.3...
Connected to mail.fi.uba.ar.
Escape character is '^]'.
220 srv-pc2.fi.uba.ar ESMTP Sendmail 8.11.6/8.11.6;
Sat, 10 May 2003 18:19:15 -0300
HELO aleph
250 srv-pc2.fi.uba.ar Hello aleph.fi.uba.ar [157.92.49.1],
pleased to meet you
MAIL FROM: marga@marga.com.ar
250 2.1.0 marga@marga.com.ar... Sender ok
RCPT TO: gnu@marga.com.ar
250 2.1.5 gnu@marga.com.ar... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Esto es otra prueba.
.
250 2.0.0 h4ALJqH03701 Message accepted for delivery
QUIT
221 2.0.0 srv-pc2.fi.uba.ar closing connection
Connection closed by foreign host.
\end{verbatim}
\end{small}

\subsubsection{IMAP}

Entre las mejoras que incluye el protocolo IMAP están el
manejo de carpetas directamente en el servidor y la posibilidad de ver los
encabezados de los mensajes sin tener que ver todo el contenido.

De este modo, el usuario puede leer sus mensajes directamente del servidor,
sin importar desde dónde los lea.  También es posible utilizar este
protocolo como si fuera POP, es decir, bajando todos los mensajes del
servidor y almacenándolos en la computadora local.

\subsection{NFS}

El servicio NFS (Network File-System) es la forma más usual con la que se
comparten archivos o, mejor dicho, sistemas de archivos en ambientes
UNIX, es un servicio muy rápido que no sufre el tener un gran número de
conexiones abiertas para distintos clientes, y tiene un básico manejo de
seguridad (basado en las direcciones de las máquinas). No es un sistema
seguro, los archivos se transmiten sin encriptación a través de la red y
asume que los números (UID y GID) asignados a los usuarios serán los mismos
en toda la red.

\subsection{Samba}

El protocolo que utiliza Microsoft Windows para compartir archivos e
impresoras se llama SMB. En GNU/Linux podemos utilizar este protocolo
utilizando las herramientas Samba.

Por ejemplo si queremos montar el directorio compartido Música de la
maquina Ponce en el directorio tmp de nuestro home pondríamos:

\begin{verbatim}
smbmount //Ponce/Música ~/tmp
\end{verbatim}

Esto nos pedirá la contraseña del directorio compartido para poder
realizar la operación.  Muchas veces no se necesita una
contraseña y alcanza con presionar ENTER una vez más.
Es posible utilizar el parámetro \verb!-o guest!, para decirle que no
tiene contraseña y que no se necesite el ENTER adicional.

\subsection{NIS}

Es un protocolo destinado a exportar información y configuraciones a
diversas máquinas de la red, como por ejemplo, los usuarios y contraseñas.
Modifica y regula en gran parte el funcionamiento de la red, ya que, en
vez de tener cada máquina una configuración local tendrán que preguntarle
al servidor de NIS cada vez que se necesita esa configuración.

\end{document}
