miércoles, 9 de marzo de 2011

EL ORDENADOR SERVIDOR

Igual como dijimos con los ordenadores clientes, el ordenador servidor puede ser cualquier ordenador con conexión a Internet o a nuestra red privada y con un determinado software.

software servidor

Un software servidor (o servicio), es un programa que se ejecuta de manera permanente en el ordenador servidor a la espera de que un ordenador client le realice una petición, en este momento, el programa servidor, realizará las acciones nescesárias para enviar el resultado de vuelta al cliente.

Para que puedan coexistir diferentes servicios en un mismo ordenador servidor, cada servicio esta escuchando por unos determinados puertos, toda comunicación se iniciará con un puerto de destino y un puerto de origen, y será contestada con manteniendo estos puertos pero en orden inverso:



Tipos de servidores

Cómo webmasters, nos interesará conocer principalmente los siguientes tipos de servidores:
Servidores HTTP - Servidores de páginas web
Servidores HTTPS - Servidores de páginas web seguros
Servidores de Base de Datos - Servidores de datos
Servidores de Aplicación - Servidores de programas de servidor
En los siguientes artículos explicaremos con más detalle estos servidores y aprofundizaremos en los más importantes de ellos, cómo por ejemplo Apache HTTP Server, Microsoft IIS..

PROTOCOLO DNS

dns_europa_international_09Este protocolo se utiliza para poder recordar de manera sencilla las direcciones IP. De esta manera surge el concepto de nombres de dominio. Gracias a esto podemos asignar a una dirección IP un nombre, además de que es más fiable por que l a dirección IP de un servidor puede cambiar pero el nombre no lo hace. Podemos decir entonces que el DNS es un sistema jerárquico y distribuido que permite traducir nombres de dominio en direcciones IP y viceversa. Otro uso común de este es para los servidores de correo a través del nombre de dominio de correo como por ejemplo “http://www.hotmail.com/“. Dado un dominio puede leerse de derecha a izquierda por ejemplo “http://www.google.es/” seria “.es” el dominio más alto.
Cada dominio es como si terminase con un “.” Por eso nuestro dominio seria “http://www.google.es/“y el punto al final es el elemento raíz de nuestro árbol y lo que indica al cliente que debe de empezar la búsqueda en los root Server. Estos root Server son los que tienen los registros TLD que son los dominios de nivel superior ósea los que no pertenecen a otro dominio, como son “com, org, net, es, etc.” Actualmente hay 13 TLD en todo el mundo y 10 de ellos se encuentran en estados unidos, uno en Estocolmo, otro en Japón, y el último en Londres. Si alguna catástrofe hiciese que estos 13 servidores dejasen de operar provocaría un gran apagón de Internet y causaria estragos a nivel mundial.
Estos servidores dice que dominios de primer nivel existen y cuales son sus servidores de nombres recursivamente los servidores de esos dominios dicen que subdominios existen y cuales don sus servidores.
Cada componente de dominio incluyendo la raíz, tiene un servidor primario y varios secundarios. Todos tienen la misma autoridad para responder por ese dominio, pero el primario es el único sobre el que se pueden hacer modificaciones de manera que los secundarios son reaplicas del primario.
Casi todos los servidores de nombres utilizan un software llamado bind que es un software de libre distribución utilizado por la mayoría de sistemas unix.
Una herramienta útil que encontramos para probar si un dominio se resuelve correctamente es el domando “nslookup“. Se trata de un cliente DNS que nos sirve para obtener direcciones IP a través del dominio y viceversaEl DNS ( Domain Name System ) o Sistema de Nombres de Dominio es una base de datos jerárquica y distribuida que almacena informacion sobre los nombres de dominio de de redes cómo Internet. También llamamos DNS al protocolo de comunicación entre un cliente ( resolver ) y el servidor DNS.

La función más común de DNS es la traducción de nombres por direcciones IP, esto nos facilita recordar la dirección de una máquina haciendo una consulta DNS ( mejor recordar www.programacionweb.net que 62.149.130.140 ) y nos proporciona un modo de acceso más fiable ya que por multiples motivos la dirección IP puede variar manteniendo el mismo nombre de dominio.

La estructura jerárquica

Un nombre de dominio consiste en diferentes partes llamadas etiquetas y separadas por puntos. La parte situada más a la derecha es el llamado dominio de primer nivel ( Top Level Domain ) y cada una de las partes es un subdominio de la parte que tiene a su derecha.

De esta manera, si tenemos www.programacionweb.net:
net - Es el dominio de primer nivel
programacionweb - Es un subdominio de net
www - Es un subdominio de programacionweb
Cada dominio o subdominio tiene una o más zonas de autoridad que publican la información acerca del dominio y los nombres de servicios de cualquier dominio incluido.Al inicio de esa jerarquía se encuentra los servidores raíz, que responden cuando se busca resolver un dominio de primer nivel y delegan la autoridad a los servidores DNS autorizados para dominios de segundo nivel.








Tipos de consulta

Una consultas de un cliente (resolver) a un servidor DNS puede ser recursiva si el servidor al que consultamos consulta a su vez otro servidor o iterativa si responde a partir de los datos que tiene almacenados localmente.

Tipos de regístro

Hay diferentes tipos de regístro DNS que se pueden consultar:
A (Dirección) - Este registro se usa para traducir nombres de hosts a direcciones IP.
CNAME (Nombre Canónico) - Se usa para crear nombres de hosts adicionales, o alias, para los hosts de un dominio.
NS (Servidor de Nombres) - Define la asociación que existe entre un nombre de dominio y los servidores de nombres que almacenan la información de dicho dominio. Cada dominio se puede asociar a una cantidad cualquiera de servidores de nombres.
MX (Intercambiador de Correo) - Define el lugar donde se aloja el correo que recibe el dominio.
PTR (Indicador) - También conocido como 'registro inverso', funciona a la inversa del registro A, traduciendo IPs en nombres de dominio.

PROTOCOLO SMTP

SMTP ( Simple Mail Transfer Protocol ) o Protocolo Simple de Transferencia de Correo Electrónico es un conjunto de reglas que rigen el formato y la transferéncia de datos en un envío de Correo Electrónico ( e-mail ).

Tabla de contenido

La transferéncia del correo

Cuando enviamos un correo electrónico iniciamos un seguido de pasos que desencadenan diferentes comunicaciones SMTP que detallaremos en el próximo punto, primero vamos a ver que comunicaciones se realizan y porque.
Paso 1
El autor del mensaje utiliza un cliente de correo ( puede ser un programa o una aplicacion web ) para escribir un mensaje a un destinatário, el cliente de correo genera el codigo SMTP del mensaje y lo envía a un servidor SMTP saliente.

Paso 2
El servidor saliente utiliza una consulta DNS para conocer los servidores de correo entrante del dominio del destinatário ( llamados MX primário, MX secundário... ) y envía el correo SMTP al primero de ellos que responde.

Nota:
Para que el receptor reciba el mensaje tiene que tener los MX configurados en su servidor de DNS de manera que apunten a los servidores SMTP entrantes

Paso 3
Este servidor almacena el correo en el buzón de correo en el servidor del destinatário.


Paso 4
Finalmente el destinatário se conecta al servidor de correo entrante usando los protocolos POP3, IMAP4 o similar... y descarga el correo de su almacén.

La comunicación SMTP

La comunicación SMTP se realiza por TCP y normalmente en el puerto 25, es una comunicación tipo orden - respuesta delimitada por CRLF ( Retorno de carro + Salto de línea ) que podemos realizar de manera manual utilizando el comando telnet o con un cliente de correo:
 

000 
telnet smtp.example.com 25

En esta comunicación usaremos las siguientes ordenes SMTP:
HELO - Abre una sesión con el servidor
MAIL FROM - Indica el autor del mensaje
RCPT TO - Indica los destinatarios del mensaje
DATA - Cuerpo del mensaje, finaliza con la órden .
. - Final del cuerpo del mensaje ( orden DATA )
QUIT - Cierra la sesión
Y las respuestas que recibiremos serán, un código y un texto donde el código será:
2XX - Orden realizada correctamente
3XX - Orden correcta recibida pero no requiere acción.
4XX - Repetir orden correctamente
5XX - Error

ArribaEjemplo

Vamos a ver un ejemplo de envío de correo usando telnet:
 

000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015 
telnet smtp.example.com 25
< 220 relay2.programacionweb.com ESMTP Postfix (Debian/GNU) > HELO localhost
< 250 relay2.programacionweb.com > MAIL FROM: eloi@example.com
< 250 Ok > RCPT TO: eloi@programacionweb.com
< 250 Ok > DATA
> Subject: Prueba
>
> Prueba de envío
> .
< 250 Ok: queued as 3BDCD2DE91D > QUIT
< 221 Bye

PROTOCOLO HTTPS

El protocolo HTTPS es una versión segura del protocolo HTTP que implementa un canal de comunicación seguro y basado en SSL ( Secure Socket Layers ) entre el navegador del cliente y el servidor HTTP.

Tabla de contenido

¿Porque utilizar HTTPS?

TCP/IP es un canal de comunicación no seguro, donde para ir de un cliente a un servidor, la información realiza un seguido de saltos entre diferentes routers que se encargan de hacer llegar la información a su destino.

En cada uno de estos saltos, la informacion es transmitida en la red local del router, siendo recibida tambien ( dependiendo del dispositivo que crea dicha red ) por todos los dispositivos de la misma red, pudiendo ser capturada para fines malintencionados.

No podemos evitar esto, pero podemos encriptar esta información para que una vez capturada no pueda conocerse su contenido y así poder enviar con tranquilidad numeros de cuenta, datos personales...

Diferéncias con HTTP

A diferéncia de HTTP, HTTPS trabaja por defecto por el puerto 443 TCP, y antes de enviar los datos realiza algunas acciones prévias.
Para hacer esta negociación, el cliente, envía al servidor las opciones de cifrado, compresión y versión de SSL junto con algunos bytes aleatorios llamados Challenge de Cliente.

El servidor, escoje las opciones de cifrado, compresión y versión de SSL entre las que ha ofertado el cliente y le envía su decisión y su certificado.

Ambos negocian la clave secreta llamada master secret y usando esta clave, la Challenge de Cliente y las opciones pactadas se envían la información encriptada de tal manera que de ser interceptada no se puede descifrar.

El certificado del servidor

Para que nos entendamos, un certificado de clave pública es un "documento" que certifica que el interlocutor ( el servidor HTTPS en el caso de HTTPS ) es quien realmente dice ser, esto se hace para evitar que un atacante pueda hacerse pasar por el servidor y recibir la comunicación segura en su lugar.

Estos certificados pueden generarse con herramientas cómo OpenSSL y para una mayor seguridad pueden ser firmados por una autoridad certificadora, por ejemplo:
VeriSign
Thawte
GoDaddy
GeoTrust
Aunque también puede ser auto-firmado, en este caso, evitaremos desenbolsar la cantidad de dinero que cobran las autoridades certificadoras manteniendo el cifrado del canal de datos, pero el cliente no tendrá total seguridad que la información está siendo enviada al servidor correcto.
 

PROTOCOLO HTTP

HTTP ( HyperText Transfer Protocol ) o Protocolo de Transferencia de Hipertexto es un conjunto de reglas que rigen la transferencia de datos en una comunicación Web.

En su base su finalidad es la transferencia de Hipertexto ( texto con componentes y enlaces a otros textos ) pero en la actualidad es utilizado tanto para la transferencia de Hipertexto cómo para transferencia de Ficheros ( carga y descarga de ficheros ), datos ( XML ), trafico de red ( SSLVPN )...

La comunicación HTTP

Los datos de una transacción HTTP son enviados en una comunicación TCP al puerto 80 ( por defecto) tipo cliente-servidor en la que el cliente ( navegador web ) envía una petición al servidor HTTP y el servidor responde cerrado o no la conexión.

El formato de la petición y la respuesta HTTP es el siguiente:
 

000
001
002
003
004
005 
Petición/Respuesta
Encabezado-1: Valor-1
...
Encabezado-N: Valor-n

[Cuerpo]

Donde la primera línea ( Petición/Respuesta ) será:
En una petición
El método, el recurso solicitado y el protocolo/versión separados por espacios:
GET /index.htm HTTP/1.1

En una respuesta
El protocolo/versión, el código de estado y el detalle de estado separados por espacios:
HTTP/1.0 404 Not Found
Pudiendo tener cualquiera de los siguientes estados:
100 Continua
101 Cambio de protocolo
200 OK
201 Creado
202 Aceptado
203 Información no oficial
204 Sin Contenido
205 Contenido para reset
206 Contenido parcial
300 Múlpiples posibilidades
301 Mudado permanentemente
302 Encontrado
303 Vea otros
304 No modificado
305 Utilice un proxy
307 Redirección temporal
400 Solicitud incorrecta
401 No autorizado
402 Pago requerido
403 Prohibido
404 No encontrado
405 Método no permitido
406 No aceptable
407 Proxy requerido
408 Tiempo de espera agotado
409 Conflicto
410 No mapas disponible
411 Requiere longitud
412 Falló precondición
413 Entidad de solicitud demasiado larga
414 URI de solicitud demasiado largo
415 Tipo de medio no soportado
416 Rango solicitado no disponible
417 Falló expectativa
500 Error interno
501 No implementado
502 Pasarela incorrecta
503 Servicio no disponible
504 Tiempo de espera de la pasarela agotado
505 Versión de HTTP no soportada
Los encabezados ( Encabezado1-N ) son una combinación directiva: valor que contienen, en la petición, información del navegador y la petición, y en la respuesta información del servidor y el recurso.

El cuerpo contiene los datos a enviar/recibir.

Ejemplo

Hacemos una petición:
 

000
001
002
003 
GET http://www.programacionweb.net/ HTTP/1.0
From: yo@miHost.example
User-Agent: HTTPTool/1.0 


Recibimos la respuesta:
 

000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015 
HTTP/1.0 200 OK
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: PHP/4.4.1
Date: Tue, 20 Jun 2006 01:12:47 GMT
Connection: close

<html>
<body>
<h1>Página principal de tuHost</h1>
(Contenido)
 .
 .
 .
</body>
</html>

Podeis ver los encabezados HTTP de un servidor con nuestro visor de encabezados

LA COMUNICACION CON LOS SERVIDORES

Antes de enviar una información a través de Internet, el sistema operativo del ordenador, se encarga de cortar esta información en pequeñas porciones y añadir a cada porcion algunos datos para que pueda ser entregada a su destinatario, formando lo que llamamos paquetes.

Cada paquete, esta destinado a un ordenador (direccion IP), proviene de otro (direccion IP) y es enviado a un ordenador / router (direccion MAC), el paquete se irá enviando de MAC en MAC hasta encontrar su destinatario, pero solo puede enviarse a direcciones MAC que estan en nuestra misma red.

Para saber a que IP de nuestra red se tiene que enviar el paquete, cada ordenador o router, tiene una tabla de rutas, en esta tabla se le indica la dirección final y a que direccion de nuestra red tenemos que enviar la informacion, si no se encuentra el destinatario en esta tabla, se enviará la informacion a la puerta de enlace.

Sabiendo a que IP hay que enviar el paquete, entonces el ordenador o router debe conocer la MAC a la que corresponde esa IP para enviarle el paquete, para esto envía un paquete ARP (en rojo en el esquema), recibe una respuesta ARP y lo guarda en la cache de direcciones ARP.



Proceso de envío de un paquete


Como vemos, el paquete será enviado siempre de router en router usando sus direcciones MAC, enviando los paquetes ARP que hagan falta para ir conociendo las MAC de las IP que encontramos en la tabla de rutas hasta que llegemos a la red de destino y el paquete pueda ser entregado a la MAC del servidor.

Seguidamente el servidor perparará la informacion de respuesta y la enviará siguiendo el mismo procedimiento hacia la IP de origen (que ahora será destino) exactamente de la misma manara, pero ahora no haran falta los paquetes ARP porque las direcciones MAC ya estan guardadas en la cache.

LA RESOLUCION DEL NOMBRE DE DOMINIO

Antes de empezar la comunicación con el servidor, es nescesario conoder la dirección de Internet ( direccion IP ) de este servidor, para conocerla, deberemos transformar la dirección de nombre de dominio introducida por el usuario ( por ejemplo www.programacionweb.net ) a una dirección IP ( por ejemplo 213.223.12.87 ) mediante el protocolo DNS.

La consulta del nombre de dominio

Para traducir el nombre de dominio a una dirección IP (lo que se conoce como resolver el nombre de dominio o resolución DNS) nuestro ordenador deberá conocer la dirección IP de un servidor DNS, este dato nos lo dará nuestro proveedor de acceso a Internet y se lo indicaremos a nuestro ordenador en la configuración de red

Conociendo el servidor de DNS, nuestro ordenador iniciará una comunicación con él en la que le preguntará cual es la ip del nombre de dominio que se quiere resolver.

El servidor consultará una base de datos interna para ver si sabe que IP corresponde con este nombre de dominio, en el caso de no encontrar el nombre preguntado en su base de datos, preguntará a otro servidor DNS que realizará los mismos pasos hasta que alguno sepa contestar los datos.



El que sabe la IP, se la enviará al primero de los servidores y este nos enviará la respuesta y se guardará durante un tiempo el resultado por si se lo volvemos a preguntar.

Ejemplo de consulta

Conociendo el protocolo DNS veamos una consulta de un regístro de dirección y su respuesta:
 

000
001 
> www.programacionweb.net         IN      A
< www.programacionweb.net. 39332  IN      A       62.149.130.140

Podemos ejecutar consultas con el comando nslookup, podemos tambien obtener informacion con la utilidad dig