Introducción a internet

Internet es una red de ordenadores conectados por todo el mundo que ofrece diversos servicios a sus usuarios, como pueden ser el correo electrónico, el chat o la web. Todos los servicios que ofrece Internet son llevados a cabo por miles de ordenadores que están permanentemente encendidos y conectados a la red, esperando a que los usuarios soliciten los servicios y sirviéndolos posteriormente. Estos ordenadores se conocen con el nombre de servidores. Como decimos, hay servicios para todo: los hay que ofrecen correo electrónico, otros hacen posible nuestras conversaciones por chat, otros la transferencia de ficheros o la visita a páginas web, y así hasta completar la lista de servicios de Internet.

Internet no pertenece a ninguna compañía, no pertenece a nadie, se mueve mediante estándares que decide la propia comunidad de usuarios. Internet ha llegado a tener más de 800 millones de usuarios en más de 159 países que utilizan la red de forma habitual. La tasa de crecimiento anual es del 180%.

Estas cifras ilustran de forma clara el alcance de este fenómeno que es Internet. Todo el mundo habla de esta red de redes. Todas las compañías importantes empiezan a tener su propia oferta para competir en este nuevo mercado.

La familia de protocolos TCP/IP

Para que todo esto sea posible, es necesario una infraestructura sólida y firme en cuanto a transporte e intercambio de datos. No sólo es necesario una serie de dispositivos de hardware como ordenadores, routers, servidores, cables de conexión, etc, sino que se debe implementar una base a nivel de software, llamémosle de primer nivel –ya que no se trata de las aplicaciones a la que estamos acostumbrados-, que permita todo este transporte e intercambio de información. Esta base se consigue con los denominados protocolos de red.

Un protocolo de red no son más que unas reglas que los distintos dispositivos conectados entre sí deben cumplir. De esta manera se consigue que todos estos dispositivos "hablen" el mismo "idioma" y puedan entenderse, haciendo posible que la información viaje por todos y cada uno de los elementos de hardware conectados a una red.

El protocolo que se ha impuesto como estándar en las comunicaciones de la inmensa mayoría de redes –y, como no, Internet- es el TCP/IP. En realidad este protocolo consta de dos protocolos: TCP (Transmision Control Protocol, Protocolo de Control de Transmisión) e IP (Internet Protocol, Protocolo de Internet). Decir a grandes rasgos que el TCP se encarga de la calidad y control en el transporte de datos, y el IP de asegurarse de que esos datos lleguen a su destino correcto. Es decir, TCP se encarga del transporte y el IP del enrutamiento.

Pero además del TCP/IP existen otros protocolos que, sustentándose en éste, ofrecen soporte para cada uno de los servicios de red e Internet. A continuación se mencionan los más extendidos y utilizados:

  • HTTP: HiperText Transfer Protocol, Protocolo de Transferencia de HiperTexto. Es el utilizado en el servicio web de Internet.
  • POP3: Post Office Protocol, Protocolo de Oficina de Correo. Se utiliza para la obtención del correo electrónico.
  • SMTP: Simple Mail Transfer Protocol, Protocolo Simple de Transferencia de Correo. Es el utilizado en el envío de correo electrónico.
  • NNTP: Network News Transfer Protocol, Protocolo de Transferencia de Noticias de Red. Utilizado para el servicio de noticias en red.
  • FTP: File Transfer Protocol, Protocolo de Transferencia de Fichero. Se usa en el servicio de envío y descarga de ficheros. (No confundirlo con el P2P utilizado en los programas de intercambio de archivos).
  • IRC: Internet Relay Chat, Charla Transmitida en Internet (traducción libre). Se utiliza en los servicios de chat.

El protocolo HTTP

De todos estos protocolos, el más importante en relación con Apache 2.0, es el HTTP. HTTP es el protocolo de la Web (WWW). Las letras significan HyperText Transfer Protocol, es decir, Protocolo de Transferencia de HiperTexto. El hipertexto es el contenido de las páginas web, y el protocolo de transferencia es el sistema mediante el cual se envían las peticiones para acceder a una página web y obtener las respuestas de esa web, remitiendo la información que se verá en pantalla. También sirve para enviar información adicional en ambos sentidos, como formularios con mensajes y otros similares. Desde el punto de vista de las comunicaciones, está soportado sobre los servicios de conexión TCP/IP, y funciona de la misma forma que el resto de los servicios comunes de los entornos UNIX: un proceso servidor escucha en un puerto de comunicaciones TCP (por defecto, el 80), y espera las solicitudes de conexión de los clientes Web. Una vez que se establece la conexión, el protocolo TCP se encarga de mantener la comunicación y garantizar un intercambio de datos libre de errores.

HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece una conexión con un servidor y envía un mensaje con los datos de la solicitud. El servidor responde con un mensaje similar, que contiene el estado de la operación y su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso sobre el que actúan; cada objeto Web (documento HTML, fichero multimedia o aplicación CGI) es conocido por su URL.

HTTP es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores. Al finalizar la transacción todos los datos se pierden.

La versión actual de HTTP es la 1.1, y su especificación está en el documento RFC-2616.

Los recursos u objetos que actúan como entrada o salida de un comando HTTP están clasificados por su descripción MIME. De esta forma, el protocolo puede intercambiar cualquier tipo de dato, sin preocuparse de su contenido. La transferencia se realiza en modo binario, bit a bit, y la identificación MIME permitirá que el receptor trate adecuadamente los datos.

MIME significa Multipurporse Internet Mail Extensions (Extensiones de Correo de Internet Multiuso), y se encarga de definir el tipo de contenido de los datos de se envían en una red de ordenadores.

Las principales características del protocolo HTTP son:

  • Toda la comunicación entre los clientes y servidores se realiza a partir de caracteres de 8 bits. De esta forma, se puede transmitir cualquier tipo de documento: texto, binario, etc., respetando su formato original.
  • Permite la transferencia de objetos multimedia. El contenido de cada objeto intercambiado está identificado por su clasificación MIME.
  • Existen tres verbos básicos (hay más, pero por lo general no se utilizan) que un cliente puede utilizar para dialogar con el servidor: GET, para recoger un objeto, POST, para enviar información al servidor y HEAD, para solicitar las características de un objeto (por ejemplo, la fecha de modificación de un documento HTML).
  • Cada operación HTTP implica una conexión con el servidor, que es liberada al término de la misma. Es decir, en una operación se puede recoger un único objeto.
  • No mantiene estado. Cada petición de un cliente a un servidor no es influida por las transacciones anteriores. El servidor trata cada petición como una operación totalmente independiente del resto.
  • Cada objeto al que se aplican los verbos del protocolo está identificado a través de la información de situación del final de la URL.

La Apache Software Foundation

apache.gif

¿Qué es?

La Historia del Grupo Apache se remonta a febrero de 1995, momento en el que el software más popular de servidores de HTTP para la Web era el servidor HTTP de dominio público, desarrollado por Rob McCool miembro del Centro Nacional para Aplicaciones de Supercomputación (NCSA), de la Universidad de Illinois en Urbana-Champaign.

Sin embargo, el desarrollo de este servidor se detuvo tras la marcha de Rob McCool de la NCSA a mediados de 1994 y muchos webmasters se vieron obligados a desarrollar sus propias extensiones y corregir de forma individual los fallos de funcionamiento de la aplicación original. Fue entonces cuando un pequeño grupo de aquellos webmasters, entró en contacto -vía e-mail- con el objetivo de coordinar sus trabajos de corrección y mejora de la aplicación original de NCSA.

Fueron Brian Behlendorf y Cliff Skolnick quienes -a través de una lista de correo- coordinaron el trabajo y lograron establecer un espacio compartido de libre acceso para los desarrolladores en un ordenador instalado en el área de la Bahía de California utilizando ancho de banda y espacio de disco cedido por HotWired y Organic Online.

A finales de febrero, ya eran ocho personas las que constituían el núcleo que fundó originalmente el Grupo Apache: Brian Behlendorf, Roy T. Fielding, Rob Hartill, David Robinson, Cliff Skolnick, Randy Terbush, Robert S. Thau, Andrew Wilson con contribuciones de Eric Hagberg, Frank Peters y Nicolas Pioch.

Usando como base el servidor 1.3 de NCSA y aplicando los patchs desarrollados hasta el momento, lanzaron la primera versión oficial (0.6.2) del software de servidor de Apache en abril de 1995.

Aquella primera versión y sus sucesivas evoluciones y mejoras alcanzaron una gran implantación como software de servidor inicialmente solo para sistemas operativos UNIX, y fruto de esa evolución es la versión para Windows.

Apache es una muestra, al igual que el sistema operativo Linux (un Unix desarrollado inicialmente para PC), de que el trabajo voluntario y cooperativo dentro de Internet es capaz de producir aplicaciones de calidad profesional a precios difíciles de igualar.

El código abierto (open-source)

El servidor web Apache se distribuye bajo el concepto de código abierto. Esto significa que se puede obtener su código fuente (código que se utiliza para crear un programa informático) para poder modificarlo sin problema alguno. Esto permite mejoras y correcciones en el servidor hechas por cualquier persona interesada en ello y que esté capacitada para hacerlo.

Entendiendo la licencia de Apache

Todo software gratuito trata de serlo para todos. Sin embargo, hay algunas restricciones legales que fuerzan las licencias de software individuales. Por ejemplo Linux, que es gratuito desde GNU Public License (GPL), exige que cualquier cambio en Linux se haga público. Apache por su lado, no necesita que los cambios hechos en Apache se hagan públicos.

En pocas palabras, piense en Apache como un software gratuito, un software con derechos de autor publicado por el Grupo Apache, no es ni de dominio público ni de prueba. Además no olvide que Apache no esta cubierto por GPL. El documento original de la licencia puedes encontrarlo aquí http://www.opensource.org/licenses/apachepl.php

Básicamente la licencia Apache, y en general todas las descendientes de BSD, te permiten hacer lo que quieras con el código fuente (incluso forks y productos propietarios) siempre que les reconozcas su trabajo.

Las nuevas funcionalidades de la versión 2.0

Principales mejoras

Hebrado en Unix

En los sistemas Unix que soportan hebras POSIX, la nueva versión de Apache puede ejecutarse en modo híbrido multiproceso-multihebra. Esto mejora la escalabilidad para muchas aunque no para todas las configuraciones.

Nuevo sistema de configuración y compilación

El sistema de configuración y compilación ha sido escrito de nuevo desde cero para basarlo en autoconf y libtool. Esto hace que el sistema de configuración de Apache se parezca ahora más al de otros proyectos Open Source.

Soporte Multiprotocolo

La nueva versión tiene la infraestructura necesaria para servir distintos protocolos. Por ejemplo, se ha escrito el módulo mod_echo.

Soporte mejorado para las plataformas que no son tipo Unix

La versión 2.0 de Apache es más rápida y más estable en sistemas que no son tipo Unix, tales como BeOS, OS/2 y Windows, que la versión antigua. Con la introducción de módulos de multiprocesamiento (MPMs) específicos para cada plataforma y del Apache Portable Runtime (APR), estas plataformas tienen ahora implementada su propia API nativa, evitando las capas de emulación POSIX que provocan problemas y un bajo rendimiento.

Nueva interfaz de programación (API) de Apache

La API para los módulos ha cambiado significativamente en la nueva versión. Muchos de los problemas de ordenación y prioridad de módulos de la versión 1.3 deben haber desaparecido. Apache 2.0 hace automáticamente mucho de lo que es necesario, y la ordenación de módulos se hace ahora por hooks, lo que ofrece una mayor flexibilidad. También se han añadido nuevas llamadas que ofrecen capacidades adicionales sin tener que parchear el núcleo del servidor Apache.

Soporte de IPv6

En los sistemas que soportan IPv6 con la librería Apache Portable Runtime, Apache soporta IPv6 listening sockets por defecto. Además, las directivas Listen, NameVirtualHost, y VirtualHost soportan direcciones IPv6 numéricas (por ejemplo, "Listen [fe80::1]:8080").

Filtros

Los módulos de Apache pueden ahora escribirse para que se comporten como filtros que actúan sobre el flujo de contenidos tal y como salen del servidor o tal y como son recibidos por el servidor. Esto permite, por ejemplo, que el resultado de un script CGI sea analizado por las directivas Server Side Include usando el filtro INCLUDES del módulo mod_include. El módulo mod_ext_filter permite que programas externos actúen como filtros casi del mismo modo que los CGIs pueden actuar como handlers.

Mensajes de error en diferentes idiomas

Los mensajes de error que se envían a los navegadores están ahora disponibles en diferentes idiomas, usando documentos SSI. Estos mensajes pueden personalizarse por el administrador del sitio web para conseguir un look and feel coherente con el resto de los contenidos.

Configuración simplificada

Muchas directivas que podían inducir a confusión han sido simplificadas. Las directivas Port y BindAddress han desaparecido; para configurar la dirección IP en la que escucha el servidor ahora se usa únicamente la directiva Listen; la directiva ServerName especifica el nombre del servidor y el número del puerto solo para redirecionamiento y reconocimiento de host virtual.

Soporte de Unicode Nativo para Windows NT

Apache 2.0 en Windows NT usa ahora utf-8 para la codificación de los nombres de fichero. Estos se mapean directamente al sistema de ficheros Unicode subyanciente, suministrando soporte para diferentes idiomas para todas instalaciones en Windows NT, includidos Windows 2000 y Windows XP. Este soporte no se extiende a Windows 95, 98 o ME, que continúan usando la codificación que tenga la máquina local para el acceso al sistema de archivos.

Actualización de la librería de expresiones regulares (regular expressions)

Apache 2.0 incluye la Librería de expresiones regulares compatibles de/con Perl (PCRE). Ahora, cuando se evalúan las expresiones tipo, se usa siempre la potente sintaxis de Perl 5.

Mejoras en los módulos

mod_ssl

Módulo nuevo en Apache 2.0. Este módulo es una interfaz para los protocolos de encriptado SSL/TLS de OpenSSL.

mod_dav

Módulo nuevo en Apache 2.0. Este módulo implementa la especificación del HTTP Distributed Authoring and Versioning (DAV) para colgar y mantener contenidos web.

mod_deflate

Módulo nuevo en Apache 2.0. Este módulo permite soportar navegadores que requieren que el contenido sea comprimido antes de ser servido, ahorrando ancho de banda.

mod_auth_ldap

Módulo nuevo en Apache 2.0.41. Este módulo permite que se pueda usar una base de datos LDAP para almacenar las credenciales en la autentificación básica HTTP. El módulo de acompañamiento, mod_ldap ofrece connection pooling y cache de resultados.

mod_auth_digest

Incluye soporte adicional para cache de sesiones entre procesos usando memoria compartida.

mod_charset_lite

Módulo nuevo en Apache 2.0. Este módulo experimental permite for traducción o recodificación de sets de caracteres.

mod_file_cache

Módulo nuevo en Apache 2.0. Este módulo incluye la funcionalidad que mod_mmap_static tenía en Apache 1.3, e incorpora nuevas capacidades de cacheado.

mod_headers

Este módulo es mucho más flexible en Apache 2.0. Ahora puede modificar las cabeceras de las peticiones usadas por mod_proxy, y puede fijar condicionalmente cabeceras de respuesta.

mod_proxy

El módulo proxy ha sido completamente reescrito para aprovechar la nueva infraestructura de filtros y para implementar de una manera más fiable un proxy que cumpla con requerimientos de la especificación HTTTP/1.1. Además, se han incorporado nuevas secciones de configuración a la directiva <Proxy> que hacen mas fácil (e internamente más rápido) el control de los sitios web que usan proxys; las configuraciones de sobrecarga <Directory "proxy:…">no se soportan. El módulo está ahora dividido en módulos específicos para cada protocolo, incluidos proxy_connect, proxy_ftp y proxy_http.

mod_negotiation

La nueva directiva ForceLanguagePriority se puede usar para asegurarse de que el cliente recibe siempre solo un documento, en lugar de obtener una respuesta de tipo NOT ACCEPTABLE o MULTIPLE CHOICES. Además, los algoritmos de negociación y MultiView han sido modificados para ofrecer resultados más consistentes y se ha incluido a nuevo tipo de correspondencia de tipos (type map).

mod_autoindex

Ahora pueden configurarse listados de directorios autoindexados para usar tablas HTML, darles formato de forma más sencilla, y permitir control detallado del ordenamiento, incluidos ordenamiento por versión, y filtrado usando caracteres comodines de los listados de directorios.

mod_include

Estas nuevas directivas permiten cambiar las etiquetas por defecto de comienzo y final para elementos SSI y permiten que la configuración de errores y el formato de la hora y la fecha se hagan en el fichero de configuración principal en lugar de en el documento SSI. Los resultados del análisis y la agrupación de las expresiones tipo (ahora basadas en la sintaxis de Perl 5) pueden ser devueltos usando las variables $0 .. $9 del módulo mod_include.

mod_auth_dbm

Ahora se soportan varias clases de bases de datos de tipo DBM usando la directiva AuthDBMType.

El porqué del liderazgo de Apache entre los servidores web

Lo conseguido por Apache es simplemente asombroso. Quién hubiese dicho que ese servidor de código fuente abierto podría vencer a sus dos mayores competidores comerciales, Microsoft y Netscape, como plataforma de servidores Web. Cada persona tiene sus razones para justificar la popularidad de Apache. Aquí están algunas:

  • Apache es un servidor altamente configurable de diseño modular. Es muy sencillo ampliar las capacidades del servidor Web Apache. Cualquiera que posea una experiencia decente en la programación de C o Perl puede escribir un modulo para realizar una función determinada. Esto significa que hay una gran cantidad de módulos Apache disponibles para su utilización.
  • Apache es una tecnología gratuita de código fuente abierto. El hecho de ser gratuita es importante pero no tanto como que se trate de código fuente abierto.
  • Apache trabaja con gran cantidad de Perl, PHP y otros lenguajes de script. Perl destaca en el mundo del script y Apache utiliza su parte del pastel de Perl tanto con soporte CGI como con soporte mod perl. También trabaja con Java y páginas jsp. Teniendo todo el soporte que se necesita para tener páginas dinámicas.
  • Apache permite personalizar la respuesta ante los posibles errores que se puedan dar en el servidor. Es posible configurar Apache para que ejecute un determinado script cuando ocurra un error en concreto.
  • Alta configurabilidad en la creación y gestión de logs. Apache permite la creación de ficheros de log a medida del administrador.
  • Apache utiliza el formato Common Log Format (CLF) para la generación de los logs de error. Este formato es usado por varios servidores web y existen herramientas para el análisis de ficheros con este formato.
  • Gran escalabilidad. Se pueden extender las características de Apache hasta donde nuestra imaginación y conocimientos lleguen.
  • Apache soporta Dinamic Shared Object (DSO). Gracias a ello se pueden construir módulos que le den nuevas funcionalidades que son cargadas en tiempo de ejecución.

« Apache 2

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License