miércoles, 29 de enero de 2014

Protocolos de capa de transporte TCP/IP (inicio de TCP/UDP)

Esto es solo introducción, ya están en el horno los capítulos subsiguientes, pero quería darles un adelanto. Además me cayó en las manos un artículo muy completo sobre traceroute, que esta por salir en unos días (son varios artículos de hecho ... como "mashup" ). Pues eso, provecho y hasta el siguiente.  

Protocolos de la capa de transporte TCP / IP.
Las tres primeras capas del modelo de referencia OSI - la capa física, la de enlace de datos y la de red - son capas muy importantes para la comprensión de cómo funcionan las redes. La capa física mueve los bits a través de cables; la capa de enlace de datos mueve tramas en una red, la capa de red mueve datagramas en una interconexión de redes. Tomadas en su conjunto, son las partes de la pila de protocolos responsables de las "tuercas y tornillos" reales del proceso de llevar datos de un lugar a otro.

Inmediatamente por encima de éstas tenemos la cuarta capa del modelo de referencia OSI: la capa de transporte, llamada la capa de transporte host-to-host en el modelo TCP/IP. Esta capa es interesante, ya que reside en el mismo centro arquitectónico del modelo. Por consiguiente, representa un importante punto de transición entre las capas asociadas al hardware ubicadas por debajo de ella que hacen el "trabajo sucio", y las capas que están por encima, mas orientadas al software y por ende mas abstractas.

Los protocolos que operan en la capa de transporte están a cargo de proporcionar varios servicios importantes para que las aplicaciones de software en las capas superiores trabajen a través de una interconexión de redes. Por lo general son responsables de permitir los procesos de establecer y mantener conexiones entre servicios de software en máquinas posiblemente distantes. Quizás lo más importante, sirven de puente entre las necesidades de muchas aplicaciones de capas superiores de enviar datos de forma fiable sin tener que preocuparse por la corrección de errores, la pérdida de datos o la gestión de flujo, y la capa de red protocolos, que a menudo son poco fiables y no se ocupan de los acuses de recibo. Los protocolos de capa de transporte están a menudo estrechamente vinculados a los protocolos de capa de red directamente debajo de ellos, y son diseñados específicamente para atender funciones de las que estos últimos no se ocupan.

En esta sección describiremos protocolos de capa de transporte y las tecnologías conexas utilizadas en el protocolo TCP / IP Hay dos protocolos principales de esta capa, el Protocolo de Control de Transmisión (Transmission Control Protocol TCP) y el Protocolo de datagramas de usuario (User Datagram Protocol UDP). También se discute cómo en la capa de transporte se realiza una clase de direccionamiento en TCP / IP en forma de puertos y sockets.

Nota: Puede parecer extraño que aquí solo haya una subsección, la que cubre TCP y UDP. Este es un resultado del hecho de que la guía de TCP / IP es un extracto de una referencia de redes más grandes.

Protocolo de Control de Transmisión (TCP) y el Protocolo de datagramas de usuario (UDP)
TCP / IP es el conjunto de protocolos de interconexión más importantes del mundo, es la base para el Internet, y el "lenguaje" hablado por la gran mayoría de los ordenadores conectados en red del mundo. TCP / IP incluye un gran conjunto de protocolos que operan en la capa de red y por encima. La suite en su conjunto está anclada a la capa tres en el Protocolo de Internet (IP), el que muchas personas consideran el protocolo más importante en el mundo de las redes.

Por supuesto, hay una cierta distancia arquitectónica entre la capa de red y las aplicaciones que se ejecutan en las capas por encima. A pesar de que IP es el protocolo que lleva a cabo la mayor parte de las funciones necesarias para realizar una interconexión de redes, este no incluye muchas capacidades que son requeridas por las aplicaciones. En TCP / IP estas tareas son realizadas por un par de protocolos que operan en la capa de transporte: el Protocolo de Control de Transmisión (Transmission Control Protocol TCP) y el Protocolo de datagramas de usuario (User Datagram Protocol UDP).

De estos dos, TCP recibe, con mucho, la mayor atención. Es el protocolo de capa de transporte que se asocia más con TCP / IP, y, bueno, su nombre está ahí, "iluminado". También es el protocolo de transporte utilizado por muchas de las aplicaciones más populares de Internet, mientras que UDP va segundo en la facturación. Sin embargo, TCP y UDP son realmente pares que juegan el mismo papel en TCP / IP. Funcionan de manera muy diferente y ofrecen diferentes ventajas y desventajas a las aplicaciones que los utilizan, lo que los hace importantes a ambos para la suite de protocolos como un todo. Los dos protocolos también tienen ciertas áreas de similitud, lo que hace que sea más eficiente describirlos a ambos en la misma subsección, destacando su características y métodos de operación compartidos, así como en los que divergen.

En esta sección proporciono un examen detallado de los dos protocolos de la capa de transporte TCP/IP: El Protocolo de Control de Transmisión (TCP) y el Protocolo de datagramas de usuario (UDP). Empiezo con una breve descripción de la función de estos dos protocolos en el conjunto de protocolos TCP / IP, y una discusión sobre por qué son importantes. Describo el método que emplean los protocolos para el direccionamiento, y el uso de puertos y sockets en la capa de transporte. Luego tenemos dos secciones detalladas para cada uno de ellos UDP y TCP. Concluyo con un resumen rápido y una comparación de ambos.

Incidentalmente, he descrito UDP antes que TCP por una sencilla razón: es más simple. UDP opera más como un protocolo clásico basado en mensajes, y de hecho, es más similar a IP en sí de lo que es TCP. Esta es la misma razón por la que la sección en TCP es mucho mayor que la que cubre UDP: TCP es mucho más complejo y hace mucho más que UDP.

Generalidades y rol general de TCP y UDP en la pila TCP / IP. 
La capa de transporte en una suite de protocolos es responsable de un conjunto específico de funciones. Por esta razón, se podría esperar que la suite TCP / IP tuviera un único protocolo de transporte que llevara a cabo esas funciones, así como IP es el protocolo núcleo en la capa de red. Es una curiosidad, entonces, que haya dos protocolos de capa de transporte diferentes ampliamente utilizados en TCP / IP. Esta disposición es probablemente uno de los mejores ejemplos del poder de la disposición de los protocolos en capas, y por tanto, un ejemplo de que valió la pena todo el tiempo que pasó aprendiendo a entender ese molesto modelo de referencia OSI

Diferentes Requisitos de la capa de transporte de TCP / IP.
Vamos a empezar con una mirada hacia atrás en la capa tres. En mi visión general de las características clave de funcionamiento del Protocolo de Internet, describí varias limitaciones importantes de cómo funciona el protocolo IP. La más importante de estas limitaciones es el hecho de que el protocolo IP es un protocolo no orientado a conexión. Los datos se envían a través de una red IP sin antes establecer una conexión, utilizando un esquema del "mejor esfuerzo". Los mensajes suelen llegar a donde tienen que ir, pero no hay garantías, y el remitente por lo general ni siquiera sabe si los datos llegaron a su destino.

Estas características presentan problemas graves desde el punto de vista del software. Muchos, si no la mayoría, las aplicaciones tienen que ser capaces de contar con el hecho de que los datos que envían llegarán a su destino sin pérdidas o errores. También requieren que la conexión entre dos dispositivos sea gestionada de forma automática, manejando apropiadamente cuando sea necesario problemas como la congestión y control de flujo. A menos que se proporcione algún mecanismo para esto en las capas más bajas, cada aplicación necesitaría ocuparse de estos asuntos, lo que sería una duplicación de esfuerzo excesiva.

De hecho, se podría argumentar que el establecimiento de conexiones, el aseguramiento de la fiabilidad y el manejo retransmisiones, buffering y flujo de datos son tan importantes que hubiera sido mejor simplemente incluir estas habilidades directamente en el Protocolo de Internet IP. Curiosamente, ese fue exactamente el caso en los primeros días de TCP / IP."En el principio" no era más que un solo protocolo llamado "TCP", que combinaba las funciones del Protocolo de Internet con la fiabilidad y las características de gestión de sesiones que acabamos de mencionar.

Sin embargo, hay un gran problema con esto. El establecimiento de conexiones, el aseguramiento de la confiabilidad, la gestión y el de control de flujo y los acuses de recibo y retransmisiones: todos éstos tienen un costo: el tiempo y ancho de banda. La construcción de todas estas capacidades en un único protocolo que abarque las capas tres y cuatro significaría que todas las aplicaciones percibirían no solo las ventajas de fiabilidad, sino también los costos. Mientras que esto estaría bien para muchas aplicaciones, hay otras que no necesitan tanto la fiabilidad, y "no pueden permitirse" la sobrecarga necesaria para proporcionarla.

La solución: dos protocolos de transporte muy diferentes.
La solución a este problema era simple: dejar que la capa de red (IP) se encargara del movimiento básico de datos sobre una interconexión de redes, y definir dos protocolos en la capa de transporte. Uno podría proporcionar un amplio conjunto de servicios para aquellas aplicaciones que necesiten esa funcionalidad, en el entendimiento de que se requieren algunos gastos para lograrlo. El otro sería simple, proporcionando pocas funcionalidades desde la perspectiva clásica de las funciones de capa cuatro, pero sería rápido y fácil de usar. De ahí el resultado de dos protocolos de capa de transporte en TCP/IP:
Para emplear una analogía, TCP es un sedán de alto rendimiento totalmente de lujo con chófer seguimiento por satélite y sistemas sistema de navegación. Ofrece un montón de lujos, un buen rendimiento y confort. Esto prácticamente garantiza que usted va a llegar a donde tiene que ir sin ningún problema, y ​​cualquier inquietud que surja se podrá corregir. Por el contrario, UDP es un coche de carreras básico. Su objetivo es la simplicidad y la velocidad, la velocidad, la velocidad, todo lo demás es secundario. Probablemente llegues a donde necesitas ir, pero bueno, los coches de carreras puede ser fastidiosos de operar.

Concepto clave: Para adaptarse a las diferentes necesidades de transporte de las muchas aplicaciones TCP / IP, existen dos protocolos en la capa de transporte TCP / IP. El Protocolo de Control de Transmisión (TCP) es un protocolo con todas las funciones, orientado a conexión que proporciona la entrega segura de los datos, mientras gestiona del flujo de tráfico y maneja problemas como la congestión y la pérdida de transmisión. El protocolo de datagramas de usuario (UDP), en contraste, es un protocolo mucho más sencillo que se concentra solamente en la entrega de datos, para maximizar la velocidad de la comunicación cuando no se requieren las características de TCP.

Generalidades y rol general de TCP y UDP en la pila TCP / IP.  
Aplicaciones de TCP y UDP.

Tener dos protocolos de capa de transporte con fortalezas y debilidades complementarias proporciona una gran flexibilidad a los creadores de software de red:
  • Aplicaciones TCP: La mayoría de las aplicaciones "típicas" necesitan la fiabilidad y otros servicios prestados por TCP, y no se preocupan por la pérdida de una pequeña cantidad de prestaciones a la sobrecarga. Por ejemplo, la mayoría de las aplicaciones que transfieren archivos importantes o datos entre máquinas utilizan TCP, ya que la pérdida de cualquier parte del archivo inutiliza totalmente la aplicación. Los ejemplos incluyen aplicaciones conocidas como el Protocolo de transferencia de hipertexto (Hypertext Transfer Protocol HTTP) utilizado por la World Wide Web (WWW), el protocolo de transferencia de archivos (File Transfer Protocol FTP) y el Protocolo simple de transferencia de correo (Simple Mail Transfer Protocol SMTP). Describo las aplicaciones TCP con más detalle en la sección TCP
  • Aplicaciones UDP: Estoy seguro de que usted está pensando: "¿a qué tipo de aplicación no le importa si sus datos llegan o no, y por qué iba yo a querer usarla?" Puede que se sorprenda: UDP es utilizado por una gran cantidad de protocolos TCP / IP. UDP es un buen partido para su aplicación en dos circunstancias. La primera es cuando la aplicación no le importa si algunos de los datos se pierde, el streaming de vídeo o multimedia es un buen ejemplo, ya que si pierde algunos bytes de datos ni siquiera se dará cuenta. La otra es cuando la propia aplicación elige proporcionar algún otro mecanismo para compensar la falta de funcionalidad en UDP. Las aplicaciones que envían pequeñas cantidades de datos, por ejemplo, a menudo utilizan UDP en el supuesto de que si se envía una petición y una respuesta no es recibida, el cliente sólo enviará una nueva solicitud después. Esto proporciona suficiente fiabilidad sin la sobrecarga añadida de una conexión TCP. Discuto algunas aplicaciones UDP comunes en la sección UDP.
Concepto clave: La mayoría de las aplicaciones clásicas, especialmente las que envían mensajes o archivos, requieren que los datos se entregan de manera fiable, y por lo tanto utilizan TCP para el transporte. Las aplicaciones que utilizan UDP son por lo general aquellas en las que la pérdida de una pequeña cantidad de datos no es un problema, o que utilizan sus propios procedimientos específicos para hacer frente a los problemas potenciales de entrega que TCP maneja en general.

En las siguientes secciones vamos a examinar en primer lugar el esquema común de direccionamiento  en la capa de transporte utilizado por TCP y UDP, y luego veremos  cada uno de los dos protocolos en detalle. A continuación de estas secciones haremos una comparación que le ayudará a entender de un vistazo dónde están las diferencias entre TCP y UDP. Por cierto, si quiere un buen ejemplo del "mundo real" de por qué ambos protocolos son valiosos, considere el transporte de mensajes bajo el Sistema de Nombres de Dominio (DNS), que en realidad utiliza UDP para ciertos tipos de comunicación y TCP para otros.

Antes de dejar el tema de la comparación de UDP y TCP, quiero señalar explícitamente que a pesar de que TCP se describe a menudo como más lento que UDP, esta es una medida relativa. TCP es un protocolo muy bien escrito que es capaz de ejecutar transferencias de datos de alta eficiencia. Sólo es lento en comparación con UDP debido a la sobrecarga de crear y administrar las conexiones. La diferencia puede ser importante, pero no es enorme, así que tenlo en cuenta.