Thursday, February 16, 2012

Algunos Protocolos TCP/UDP y Puertos de servicio

TCP y UDP poseen campos de 16 bits (2 bytes) en su respectivo encabezado para almacenar el número de puerto. Esto significa que pueden tener hasta 65.536 diferentes puertos o servicios, los cuales se numeran desde 0 a 65.535. 

Es importante tener en cuenta que a pesar de que un servicio está normalmente asignado a su número de puerto, nada garantiza que esto se cumpla. Telnet, por ejemplo, se encuentra normalmente en el puerto 23 de TCP. Nada lo detiene de ofrecerse en el puerto 31337.Cualquier servicio se puede ejecutar en cualquier puerto. Pero si desea trabajar en red con otros hosts, lo mejor es seguir las normas.  

Los puertos y servicios mas comunes se encuentran en el archivo /etc/services de los hosts basados en UNIX (Como Linux y MAC), este es un excelente recurso para hacer coincidir servicios TCP y UDP con los números de puertos mas comunes. (Ver la lista de los puertos de servicio en este Enlace

Si quieres ver esta lista de puertos disponibles en tu equipo solamente debes ejecutar tu consola terminal y digitar el siguiente comando:

cat /etc/services

El siguiente es un extracto con algunos de los servicios y sus puertos asociados mas comunes, Algunos de estos son ofrecidos en protocolos TCP y UDP simultaneamente. Esto es normal pero inusual, la mayoría de servicios se ofrecen en TCP o UDP.


La siguiente Figura muestra un paquete con un servicio especificado. En este caso, un encabezado UDP tiene un campo de 16 bits (2 bytes) conocido como "puerto de destino". Aquí se indica el servicio o puerto solicitado. En este ejemplo, el valor del campo de encabezado UDP representa el puerto número 53, lo que significa que el datagrama contiene datos para el Sistema de Nombre de Dominio (DNS -Domain Name System).

Anteriormente, los puertos con números menores a 1024 tenían un significado especial, y eran denominados puertos confiables (trusted ports) porque sólo el root podía usarlos. El término se originó porque dichos puertos eran asignados por los procesos internos del sistema. Por lo tanto, si un host externo mostraba una conexión entrante con un puerto de origen menor a 1024, se suponía que era confiable.

Esto tenia mucho sentido cuando Internet era un lugar seguro, pero hoy en día, esto no es tan cierto. Sin embargo ahora los puertos mayores a 1204 son los que tienen un significado especial y son a menudo llamados puertos efímeros, lo que significa que podría ser utilizados por la mayoría de servicios para cualquier propósito.

Cuando un hacker vulnera un sistema, este evita dejar huellas, la mejor manera de ocultarlas, es abriendo un servicio por un puerto efímero e inesperado, diferente al puerto convencional y preferiblemente de alta numeración. Esto hace que su conexión no autorizada sea más difícil de encontrar e identificar. 

Protocolos IP

Cuando un usuario utiliza una aplicación, como FTP para transferir archivos, telnet como un emulador de terminal, o el correo electrónico para transmitir chistes e historias a sus amigos más cercanos, este interactua las cuatro capas principales del modelo TCP/IP, la aplicación toma el mensaje, la información o el proceso del usuario, y lo organiza para ser enviado a través de las tres capas restantes que son transporte, red y enlace.
Aclaremos que existen dos modelos diferentes de transporte: un modelo orientado a la conexión (TCP) y otro no orientado a la conexión (UDP). Orientado a la conexión significa exactamente lo que parece: El software hace todo lo posible para garantizar que la comunicación es fiable y completa, el proceso que inicia el establecimiento de la conexión, se denomina Handshake (apretón de manos). Por el contrario, Cuando el modelo es No orientado a la conexión, se hace el envío y se reza para que llegue, debido a que no tiene ningún proceso de Hanshake o promesa de fiabilidad. Toda la confiabilidad ofrecida debe ser incorporada en la aplicación. La siguiente Tabla resume algunos de los atributos TCP y UDP.

UDP es un protocolo de comunicación fácil de comprender, después de todo, los paquetes se arman y se lanzan a la red. El host de destino recoge, desempaca (retira los encabezados de la capa respectiva y envía el resultado al protocolo de la capa superior correspondiente), y extrae el mensaje. Ciertamente, algunos datagramas podrían perderse en el camino, pero en general funciona ya que esto no es un problema para muchas aplicaciones. 
Al enviar audio, una  palabra se puede perder, probablemente la mente podría compensarla y rellenaría la palabra faltante. Si el caso fuera el envío de vídeo, tal vez habría un pequeño punto vacío donde los paquetes se perdieron. La mayoría de las veces, esto es aceptable. Los datos que viajan a través de UDP no son  necesariamente fiables; pero UDP en sí mismo no es responsable de esto. La aplicación debe ignorar las piezas que faltan o pedirlas de nuevo.

¿Qué pasa tenemos una aplicación que no puede tolerar la pérdida de paquetes? Utilizamos TCP para asegurar que todos los datos enviados se reciben. Existen varios mecanismos  para verificar la entrega y la secuencia adecuada de los datos TCP. Uno de los medios de control es la confirmación de recibido (ACK -Acknowledgement), el cual vuelve muy confiable al protocolo  TCP  porque cada paquete es confirmado después de que el host de destino lo recibe. 
Si un paquete no se recibe (y por lo tanto no es confirmado), se reenvía. De este modo, el TCP se asegura de que todos los paquetes son recibidos, por lo que se considera un servicio confiable. Esta es una forma mas lenta de negociar, pero se pueden establecer ciertas optimizaciones para acelerar el proceso. Dicho esto, el TCP siempre será más lento que UDP.

El último protocolo IP discutido aquí es el Internet Control Message Protocol (ICMP), que es un conjunto de aplicaciones fascinante y ligero, originalmente creado para solucionar problemas de red y para reportar condiciones de error. La solicitud ICMP más conocida sin duda es: echo request/ echo reply (ping). Podemos usar un ping para determinar si un host de red es accesible. Otras aplicaciones de ICMP se utilizan para el control de flujo, cambio de ruta de paquetes y recopilación  de información de red (por nombrar sólo algunas de las funciones).

Si tienes información adicional sobre este tema, tus comentarios o links de referencia serán bienvenidos.
Post a Comment