Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización:
30 de Junio de 1.996 - Domingo
Los módulos SMTP (Simple Mail Transfer Protocol) [RFC821] y POP3 (Post Office Protocol - Versión 3) [RFC1725] proporcionan, sin duda, uno de los servicios más antiguos, difundidos y útiles del mundo TCP/IP: el correo electrónico.
Tradicionalmente el correo electrónico entendido como el intercambio de mensajes textuales en ASCII se estandarizó en el mundo TCP/IP en [RFC821] y [RFC822] que definen, respectivamente, el protocolo de transferencia de correo SMTP y el formato de cabecera de los mensajes. Este protocolo sencillo ha sido ampliado considerablemente. En la actualidad el protocolo SMTP ha experimentado numerosas extensiones [RFC1652] [RFC1830] [RFC1845] [RFC1846] [RFC1854] [RFC1869] [RFC1870] [RFC1891], todas ellas compatibles con el estándar primitivo e interoperantes. Asimismo el propio formato de los mensajes ha sufrido una considerable ampliación gracias al MIME (Multipurpose Internet Mail Extensions) [RFC1521] [RFC1522], facilitando el intercambio de mensajes en lengua no inglesa y conteniendo gráficos, sonidos y demás elementos multimedia.
El SMTP clásico considera que los ordenadores que constituyen la red (o, al menos los ordenadores que forman parte de la red de correo electrónico) están permanentemente accesibles. Ello resultaba asumible en el mundo de los grandes mainframes pero en la actualidad, sobre todo debido al crecimiento espectacular de las empresas proveedoras de acceso a Internet, la mayor parte de los usuarios permanecen largos lapsos de tiempo desconectados del sistema. Periódicamente (por ejemplo, una vez al día) realizan un acceso por MODEM a su proveedor para revisar el correo, enviar mensajes pendientes y actualizar su base de mensajes NEWS [RFC977] [RFC1036], por ejemplo. Ello hace necesario el desarrollo de un nuevo protocolo de correo electrónico, conocido como POP3 (Post Office Protocol - versión 3) [RFC1082] [RFC1725] [RFC1734]. Existen otros sistemas propietarios, como el PCMail [RFC993], pero POP3 es el más difundido en la actualidad. Con SMTP se envían los mensajes, mientras que POP3 se emplea para recibirlos.
Con el enorme crecimiento comercial y privado experimentado en Internet en los últimos años, se ha hecho un esfuerzo considerable en aumentar la seguridad del correo electrónico mediante servicios de privacidad y autenticidad como los definidos en PEM (Privacy Enhanced Mail) [RFC1421] [RFC1422] [RFC1423] [RFC1424] y en diversas extensiones MIME [RFC1847] [RFC1848]. De todos modos, hasta donde sabe el autor, el método más difundido de proporcionar dichos servicios es mediante el empleo del software criptográfico PGP (Pretty Good Privacy).
Por otra parte se advierte una tendencia a unificar los sistemas de correo electrónico del mundo Internet y del mundo OSI, como la atestigua el gran número de RFC's publicados sobre el particular [RFC1664] [RFC1495] [RFC1496] (y otros). El hecho de que Internet se haya difundido con gran rapidez en nuevos paises de habla no inglesa ha impulsado también el desarollo de nuevos avances [RFC1456] [RFC1468] [RFC1556] [RFC1641] [RFC1815] [RFC1842] [RFC1843].
Recientemente se ha definido un nuevo protocolo de correo
electrónico que, en cierto modo, fusiona el SMTP y el POP3. Se
trata de IMAP4 (Internet Message Access Protocol -
Versión 4)
[RFC1730]. Se trata de un esquema bastante complicado y con unas
facilidades actualmente subutilizadas, por lo que se ha
considerado preferible no implementarlo.
Interfaz
La interfaz de este módulo está constituida por diversos procesos cooperantes y varias rutinas que se ejecutan en el contexto del llamante. Es importante recordar que la capa SMTP se emplea a la hora de enviar los mensajes electrónicos, mientras que es el nivel POP3 el utilizado para recibirlos.
PROC_SMTP_BC PROC_POP3_BC
Estos procesos son los encargados de inicializar los módulos. Deben ser invocados con un mensaje "MSG_INIT" o "MSG_QUIT". La inicialización de estos módulos debe ser posterior a la del módulo TCP.
PROC_SMTP_SUP PROC_POP3_SUP
Estos procesos son los encargados de recibir los comandos provenientes de la capa superior y efectuar las tareas demandadas. Los mensajes que esperan recibir son "MSG_MBUF", con el siguiente formato:
campo1: Cadena de MBUF's conteniendo el comando a ejecutar y
todos sus parámetros. El comando y los parámetros deben
ir, cada uno de ellos, en un nodo de la cadena.
campo2: Identificador de la conexión
campo3: No utilizado
Las capas SMTP/POP3 intentarán ejecutar el comando solicitado, con los parámetros que se indiquen. La realimentación que se genera es puramente visual. Cuando estos módulos desean informar de algo al usuario envían un mensaje "MSG_MBUF" a la capa superior, con el formato habitual:
campo1: Cadena de MBUF's conteniendo el mensaje a visualizar
campo2: Identificador de la conexión
campo3: Indeterminado
Como regla general, para que el usuario pueda distinguir los mensajes textuales de las capas SMTP/POP3 de los enviados por el servidor, los primeros van precedidos por tres asteriscos ("***").
Si el usuario desea abortar la ejecución de un comando SMTP/POP3, genera un mensaje "MSG_SMTP_ABORT" o "MSG_POP3_ABORT" con el formato:
campo1: Indeterminado
campo2: Identificador de la conexión
campo3: Indeterminado
La realimentación, nuevamente, será visual.
Los comandos actualmente implementados para la capa SMTP, son:
Este comando debe ser el primero que enviamos cuando se abre una conexión SMTP, en respuesta al mensaje de bienvenida del servidor. Requiere un parámetro, que será el nombre jerárquico que identifica nuestra máquina.
Este comando es equivalente al anterior (y con el mismo parámetro), pero comprueba si el servidor es un servidor SMTP de segunda generación. Ello da pie a utilizar servicios extendidos. Para más información consultar [RFC1869]. Si se trata de un servidor de primera generación, el comando "EHLO" no será reconocido y tendremos que identificarnos mediante "HELO".
Este comando permite cambiar el directorio de trabajo para el módulo SMTP. En el directorio de trabajo se encuentran los mensajes que deseamos transmitir.
Este comando interpreta su parámetro como el nombre de un fichero que contiene una serie de mensajes con el formato definido en [RFC822]. Según ello analizará sus cabeceras Internet intentando localizar las direcciones de los destinatarios y del remitente, y enviará el mensaje a través del servidor al cual estamos conectados. Se muestra en pantalla toda la operación de transferencia.
Este comando no requiere parámetros y sirve para cerrar una conexión SMTP. Si el servidor se niega a hacerlo puede clausurarse el enlace de forma imperativa mediante una rutina definida más adelante.
Cuando la conexión se cierra se envía un mensaje "MSG_SMTP_CLOSE" con el formato:
campo1: Ignorado
campo2: Identificador de la conexión
campo3: Ignorado
Los comandos actualmente existentes para la capa POP3, son:
El parámetro especificado proporciona el nombre de usuario bajo el cual nos conoce el servidor.
Este comando debe seguir inmediatamente al comando "USER" y su parámetro será la palabra clave que le corresponda.
Este comando permite cambiar el directorio de trabajo para el módulo POP3. En el directorio de trabajo se almacenarán los mensajes que se reciban.
Este comando pide a la capa POP3 que recoja todo el correo pendiente y lo almacene en el fichero especificado como parámetro. Los mensajes se almacenan en formato MAILBOX: todos los mensajes empiezan por una línea "FROM" y entre mensaje y mensaje se almacena una línea en blanco.
Los mensajes recibidos son borrados del servidor de forma automática.
Este comando no requiere parámetros y sirve para cerrar una conexión POP3. Si el servidor se niega a hacerlo puede clausurarse la conexión de forma imperativa mediante una rutina definida más adelante.
Cuando la conexión se cierra se envía un mensaje "MSG_POP3_CLOSE" con el formato:
campo1: Ignorado
campo2: Identificador de la conexión
campo3: Ignorado
PROC_SMTP_INF PROC_POP3_INF
Estos procesos son los encargados de gestionar la recepción y el envío de mensajes electrónicos, y la información de control asociada. En general no tienen otra interacción con el usuario que la indicación de textos para ser impresos. No obstante también se encarga de informar de la apertura y cierre de enlaces SMTP/POP3.
Con estos mensajes se pretende que la capa superior imprima en la pantalla el texto indicado.
campo1: Cadena de MBUF's conteniendo el mensaje a visualizar
campo2: Identificador de la conexión
campo3: Indeterminado
Estos mensajes se generan para indicar a la capa superior que ha sido aceptado un intento de conexión SMTP/POP3 a una máquina remota. A partir de ese momento la conexión está abierta y lista para aceptar comandos. Si se trata de una conexión SMTP el primer paso será enviar un comando "HELO" o "EHLO". En el caso de POP3 será "USER" y "PASS".
campo1: Valor indeterminado
campo2: Identificador de la conexión
campo3: Valor indeterminado
Estos mensajes se generan cuando uno de los extremos cierra la conexión, ya sea mediante el comando correspondiente o gracias a una de las llamadas imperativas descrita a continuación.
campo1: Valor indeterminado
campo2: Identificador de la conexión
campo3: Valor indeterminado
En cuanto a las rutinas, su prototipos son:
void smtp_open(uint32 ip,uint16 puerto,uint32 id,proc_id proc_retorno); void pop3_open(uint32 ip,uint16 puerto,uint32 id,proc_id proc_retorno);
Estas rutinas intentan realizar una conexión SMTP/POP3 al puerto 'puerto' de la máquina 'ip'. 'id' contiene el identificador de la conexión y 'proc_retorno' es el proceso que debe ser informado de todos los eventos y que recibe los mensajes a imprimir. Como resultado de esta llamada, el proceso especificado recibirá un mensaje "MSG_SMTP_OPEN", "MSG_POP3_OPEN", o bien un "MSG_SMTP_CLOSE" o "MSG_POP3_CLOSE", según corresponda. Su formato será el declarado con anterioridad.
Aunque estas llamadas permiten abrir conexiones a cualquier puerto, el puerto por defecto asignado para SMTP es "SMTP_PUERTO" (puerto 25) y el asignado para POP3 es "POP3_PUERTO" (puerto 110).
void smtp_close(uint32 id); void pop3_close(uint32 id);
Estas rutinas cierran una conexión, especificada según su identificador 'id'. El proceso responsable recibirá un "MSG_SMTP_CLOSE" o "MSG_POP3_CLOSE", con el formato habitual, cuando la conexión se cierre finalmente. Esta orden no puede ser ignorada por el servidor, que se verá forzado a aceptar la desconexión.
estado smtp_flujo(uint32 id); estado pop3_flujo(uint32 id);
Estas rutinas informan de la disponibilidad de las capas SMTP/POP3 para aceptar nuevos comandos. La rutina devuelve "FLUJO_LLENO" si no puede hacerse cargo de comandos adicionales, y "OK" si admite nuevas peticiones. Dada la semántica implantada, si se envían comandos cuando el control de flujo está cerrado se mantendrán en una cola de espera. Adicionalmente se garantiza que si en un momento dado el control de flujo está abierto, éste permanecerá en dicho estado hasta que se envíe un nuevo comando. La utilidad de una función así consiste en la ejecución de ficheros "script" por parte del módulo principal.
'id' es el identificador de conexión sobre la cual estamos
solicitando información. Si en un momento dado el control de
flujo está cerrado habrá que reintentarlo de nuevo tras un
tiempo prudencial (por ejemplo, una décima de segundo).
Implementación
La implantación de los módulos SMTP y POP3 sigue de forma rigurosa las definiciones dadas en [RFC821] y [RFC1725]. Para que los procesos responsables de la transmisión de mensajes funcionen de forma adecuada necesitan que los mensajes propiamente dichos les proporcionen información sobre los destinatarios y remitentes de los mismos, según el formato [RFC822]. Dado que los módulos no realizan ningún otro procesado adicional sobre ellos, éstos pueden consistir en segmentos MIME [RFC1521] [RFC1522], siempre y cuando no se violen los principios de [RFC821] (en especial lo referente a la longitud de las líneas y al empleo de caracteres de ocho bits). Aún cuando se han definido ampliaciones del SMTP para facilitar el intercambio de información no textual entre máquinas remotas [RFC1869] (y otros) y a pesar de que el módulo implementado soporta la extensión "EHLO", no se ha contemplado, de momento, su implantación completa.
En cuanto al POP3, el mecanismo de autentificación empleado
implica la transmisión en claro de una clave. En un futuro se
plantea implantar la extensión POP3 "AUTH" [RFC1734] para evitar
este fallo de seguridad. De momento ello no ha sido posible porque
el servidor POP3 empleado para efectuar las pruebas no soporta
dicha funcionalidad.
Bibliografía
[RFC793] RFC793: "Transport Control Protocol" Jon Postel Septiembre 1.981 [RFC805] RFC805: "Computer Mail Meeting Notes" Jon Postel Febrero 1.982 [RFC821] RFC821: "SIMPLE MAIL TRANSFER PROTOCOL" Jonathan B. Postel Agosto 1.982 [RFC822] RFC822: "STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES" David H. Crocker Agosto 1.982 [RFC876] RFC876: "Survey of SMTP Implementations" D. Smallberg Septiembre 1.983 [RFC974] RFC974: "MAIL ROUTING AND THE DOMAIN SYSTEM" Craig Partridge Enero 1.986 [RFC976] RFC976: "UUCP Mail Interchange Format Standard" Mark. R. Horton Febrero 1.986 [RFC977] RFC977: "Network News Transfer Protocol. A Proposed Standard for the Stream-Based Transmission of News" Brian Kantor Phil Lapsley Febrero 1.986 [RFC993] RFC993: "PCMAIL: A Distributed Mail System for Personal Computers" David D. Clark Mark L. Lambert Diciembre 1.986 [RFC1036] RFC1036: "Standard for Interchange of USENET Messages" Mark Horton R. Adams Diciembre 1.987 [RFC1040] RFC1040: "Privacy Enhancement for Internet Electronic Mail: Part I: Message Encipherment and Authentication Procedures" John Linn Enero 1.988 [RFC1047] RFC1047: "DUPLICATE MESSAGES AND SMTP" Craig Partridge Febrero 1.988 [RFC1082] RFC1082: "Post Office Protocol - Version 3. Extended Service Offerings" Marshall Rose Noviembre 1.988 [RFC1090] RFC1090: "SMTP on X.25" Robert Ullmann Febrero 1.989 [RFC1123] RFC1123:"Requirements for Internet Hosts -- Application and Support" Robert Braden Octubre 1.989 [RFC1137] RFC1137: "Mapping Between Full RFC 822 and RFC 822 with Restricted Encoding" Steve Kille Diciembre 1.989 [RFC1176] RFC1176: "INTERACTIVE MAIL ACCESS PROTOCOL - VERSION 2" Mark R. Crispin Agosto 1.990 [RFC1203] RFC1203: "INTERACTIVE MAIL ACCESS PROTOCOL - VERSION 3" James Rice Febrero 1.991 [RFC1211] RFC1211: "Problems with the Maintenance of Large Mailing Lists" Ann Westine Jon Postel Marzo 1.991 [RFC1327] RFC1327: "Mapping between X.400(1988) / ISO 10021 and RFC 822" Steve Hardcastle-Kille Mayo 1.992 [RFC1343] RFC1343: "A User Agent Configuration Mechanism For Multimedia Mail Format Information" Nathaniel S. Borenstein Junio 1.992 [RFC1344] RFC1344: "Implications of MIME for Internet Mail Gateways" Nathaniel S. Borenstein Junio 1.992 [RFC1421] RFC1421: "Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures" John Linn Febrero 1.993 [RFC1422] RFC1422: "Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management" Steve Kent Febrero 1.993 [RFC1423] RFC1423: "Privacy Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and Identifiers" David Balenson Febrero 1.993 [RFC1424] RFC1424: "Privacy Enhancement for Internet Electronic Mail: Part IV: Key Certification and Related Services" Burton S. Kaliski, Jr. Febrero 1.993 [RFC1428] RFC1428: "Transition of Internet Mail from Just-Send-8 to 8bit-SMTP/MIME" Greg Vaudreuil Febrero 1.993 [RFC1429] RFC1429: "Listserv Distribute Protocol" Eric Thomas Febrero 1.993 [RFC1456] RFC1456: "Conventions for Encoding the Vietnamese Language VISCII: VIetnamese Standard Code for Information Interchange VIQR: VIetnamese Quoted-Readable Specification Revision 1.1" Cuong T. Nguyen Hoc D. Ngo Cuong M. Bui Thanh van Nguyen Mayo 1.993 [RFC1468] RFC1468: "Japanese Character Encoding for Internet Messages" Jun Murai Mark Crispin Erik M. van der Poel Junio 1.993 [RFC1480] RFC1480: "Registration of a Cyrillic Character Set" Andrew A. Chernov Julio 1.993 [RFC1494] RFC1494: "Equivalences between 1988 X.400 and RFC-822 Message Bodies" Steven J. Thompson Harald Tveit Alvestrand Agosto 1.993 [RFC1495] RFC1495: "Mapping between X.400 and RFC-822 Message Bodies" Harald Tveit Alvestrand Steve Kille Robert S. Miles Marshall T. Rose Steven J. Thompson Agosto 1.993 [RFC1496] RFC1496: "Rules for Downgrading Messages from X.400/88 to X.400/84 When MIME Content-Types are Present in the Messages" Harald Tveit Alvestrand Kevin E. Jordan, ARH215 James A. Romaguera Agosto 1.993 [RFC1505] RFC1505: "Encoding Header Field for Internet Messages" Albert K. Costanzo David Robinson Robert Ullmann Agosto 1.993 [RFC1521] RFC1521: "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies" Nathaniel S. Borenstein Ned Freed Septiembre 1.993 [RFC1522] RFC1522: "MIME (Multipurpose Internet Mail Extensions) Part Two: Message Header Extensions for Non-ASCII Text" Keith Moore Septiembre 1.993 [RFC1523] RFC1523: "The text/enriched MIME Content-type" Nathaniel S. Borenstein Septiembre 1.993 [RFC1524] RFC1524: "A User Agent Configuration Mechanism For Multimedia Mail Format Information" Nathaniel S. Borenstein Septiembre 1.993 [RFC1554] RFC1554: "ISO-2022-JP-2: Multilingual Extension of ISO-2022-JP" Masataka Ohta Ken'ichi Handa Diciembre 1.993 [RFC1556] RFC1556: "Handling of Bi-directional Texts in MIME" Hank Nussbacher Diciembre 1.993 [RFC1557] RFC1557: "Korean Character Encoding for Internet Messages" Hyunje Park Kilnam Chon Uhhyung Choi Diciembre 1.993 [RFC1590] RFC1590: "Media Type Registration Procedure" Jon Postel Marzo 1.994 [RFC1641] RFC1641: "Using Unicode with MIME" David Goldsmith Mark Davis Julio 1.994 [RFC1642] RFC1642: "UTF-7: A Mail-Safe Transformation Format of Unicode" David Goldsmith Mark Davis Julio 1.994 [RFC1652] RFC1652: "SMTP Service Extension for 8bit-MIMEtransport" John Klensin Ned Freed Marshall T. Rose Einar A. Stefferud Dave Crocker Julio 1.994 [RFC1664] RFC1664: "Using the Internet DNS to Distribute RFC1327 Mail Address Mapping Tables" Claudio Allocchio Antonio Blasco Bonito Bruce Cole Silvia Giordano Robert Hagens Agosto 1.994 [RFC1725] RFC1725: "Post Office Protocol - Version 3" John G. Myers Marshall T. Rose Noviembre 1.994 [RFC1730] RFC1730: "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4" Mark R. Crispin Diciembre 1.994 [RFC1731] RFC1731: "IMAP4 Authentication Mechanisms" John G. Myers Diciembre 1.994 [RFC1732] RFC1732: "IMAP4 COMPATIBILITY WITH IMAP2 AND IMAP2BIS" Mark R. Crispin Diciembre 1.994 [RFC1734] RFC1734: "POP3 AUTHentication command" John G. Myers Diciembre 1.994 [RFC1740] RFC1740: "MIME Encapsulation of Macintosh files - MacMIME" Patrik Faltstrom Dave Crocker Erik E. Fair Diciembre 1.994 [RFC1741] RFC1741: "MIME Content Type for BinHex Encoded Files" Patrik Faltstrom Dave Crocker Erik E. Fair Diciembre 1.994 [RFC1767] RFC1767: "MIME Encapsulation of EDI Objects" David H. Crocker Marzo 1.995 [RFC1806] RFC1806: "Communicating Presentation Information in Internet Messages: The Content-Disposition Header" Rens Troost Steve Dorner Junio 1.995 [RFC1815] RFC1815: "Character Sets ISO-10646 and ISO-10646-J-1" Masataka Ohta Julio 1.995 [RFC1830] RFC1830: "SMTP Service Extensions for Transmission of Large and Binary MIME Messages" Gregory M. Vaudreuil Agosto 1.995 [RFC1842] RFC1842: "ASCII Printable Characters-Based Chinese Character Encoding for Internet Messages" Ya-Gui Wei Yun Fei Zhang Jian Q. Li Jian Ding Yuan Jiang Agosto 1.995 [RFC1843] RFC1843: "HZ - A Data Format for Exchanging Files of Arbitrarily Mixed Chinese and ASCII characters" Fung Fung Lee Agosto 1.995 [RFC1844] RFC1844: "Multimedia E-mail (MIME) User Agent checklist" Erik Huizer Agosto 1.995 [RFC1845] RFC1845: "SMTP Service Extension for Checkpoint/Restart" Dave Crocker Ned Freed A. Cargille Septiembre 1.995 [RFC1846] RFC1846: "SMTP 521 Reply Code" Alain Durand Francis Dupont Septiembre 1.995 [RFC1847] RFC1847: "Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted" Jim Galvin Sandy Murphy Steve Crocker Ned Freed Octubre 1.995 [RFC1848] RFC1848: "MIME Object Security Services" Steve Crocker James M. Galvin Sandra Murphy Ned Freed Octubre 1.995 [RFC1854] RFC1854: "SMTP Service Extension for Command Pipelining" Ned Freed Octubre 1.995 [RFC1869] RFC1869: "SMTP Service Extensions" John Klensin Ned Freed Marshall T. Rose Einar A. Stefferud Dave Crocker Noviembre 1.995 [RFC1870] RFC1870: "SMTP Service Extension for Message Size Declaration" John Klensin Ned Freed Keith Moore Noviembre 1.995 [RFC1872] RFC1872: "The MIME Multipart/Related Content-type" Edward Levinson Diciembre 1.995 [RFC1873] RFC1873: "Message/External-Body Content-ID Access Type" Edward Levinson James Clark Diciembre 1.995 [RFC1874] RFC1874: "SGML Media Types" Edward Levinson Diciembre 1.995 [RFC1891] RFC1891: "SMTP Service Extension for Delivery Status Notifications" Keith Moore Enero 1.996 [RFC1892] RFC1892: "The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages" Gregory M. Vaudreuil Enero 1.996 [RFC1893] RFC1893: "Enhanced Mail System Status Codes" Gregory M. Vaudreuil Enero 1.996 [RFC1894] RFC1894: "An Extensible Message Format for Delivery Status Notifications" Keith Moore Gregory M. Vaudreuil Enero 1.996 [RFC1895] RFC1895: "The Application/CALS-1840 Content-type" Edward Levinson Febrero 1.996 [RFC1896] RFC1896: "The text/enriched MIME Content-type" Peter W. Resnick Amanda Walker [RFC1927] RFC1927: "Suggested Additional MIME Types for Associating Documents" Craig Milo Rogers Abril 1.996
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS