Bienvenidos sean a este post, hoy hablaremos sobre los protocolos que componen una red.
Se puede definir a un protocolo de la siguiente manera::
Un protocolo de red es un conjunto de reglas y formato de datos que definen la intercomunicacion entre aplicaciones
Wu Grigoryan
Tomemos el caso de un navegador, para poder transferir la informacion desde un servidor web utiliza al protocolo HTTP (HyperText Transfer Protocol) pero este mas que un protocolo de transporte es una serie de reglas que corren sobre uno. Un protocolo de transporte es TCP, el cual mencionamos en el post anterior. En realidad,, comentamos a TCP/IP al cual podemos denominarlo como TCP sobre IP. Siendo IP el verdadero corazon de la conexion de internet.
Este provee un ruteo de host a host y direccionamiento. Todo lo que enviamos y recibimos por internet esta en un Paquete IP. El encabezado IP tendra todas las opciones y flags necesarias para enviar un paquete desde su origen a destino. Este paquete tambien puede ser denominado como datagrama pero como muchos hablan de encapsular segmentos TCP en datagramas IP, esto permite que los denominemos como paquetes. A su vez, se agrega toda la informacion necesaria para asegurar la correcta entrega del paquete. Pero tambien el protocolo define algunas reglas y operaciones para poder asegurar aun mas la entrega del mismo. Por esta razon, muchas aplicaciones utilizan a este como protocolo de transporte. Tomemos nuevamente a HTTP, este se encarga de definir el formato de los mensajes que son transferidos del servidor al cliente. Y la transferencia es realizada por el protocolo TCP, aunque HTTP no se limita solamente a usar a este.
Ya mencionamos que para establecer una conexion entre dos puntos se utiliza una direccion IP y un puerto. Pero tambien tenemos dos valores denominados como secuencia y acknowledgment (conocimiento), los cuales le serviran a TCP para dar una confiabilidad de transmision. Veamos las caracteristicas mas destacadas de TCP:
- Retransmision de datos perdidos
- Entrega en orden
- Integridad de datos
- Control y evitar congestion
La base de esta comunicacion es IP (Internet Protocol) pero este no es confiable, porque no se preocupa por si el paquete llega o no a su destino. Aqui es donde TCP toma este rol, y reenvia los paquetes perdidos. Cada paquete es marcado con un identificador unico que deberia ser conocido por el otro equipo. Si el receptor no recibe el codigo de acknowledgment (ACK) de un paquete, el protocolo procede a reenviarlo nuevamente pero solo un numero limitado de veces. Si ven la lista, otro elemento crucial es recibir los paquetes en el orden correcto, afortunadamente TCP se encargara de esto por nosotros y esto evita que se vea el final de una pelicula antes que termine en sitios de streaming.
La retransmision de paquetes nos puede derivar en otro conflicto en la red como es la congestion. Esto suele ocurrir cuando un nodo no envia los paquetes de manera rapida. Los paquetes quedan atorados y se realiza una retransmision innecesaria. El protocolo TCP utiliza varios algoritmos para poder evitar la congestion. Este mantiene una ventana de congestion, un factor que determina la cantidad de datos que seran enviadas Usando un mecanismo denominado slow-start, TCP procede a incrementar esta ventana muy lentamente despues de iniciada la comunicacion.
Por otro lado, tenemos todo lo contrario a TCP, este protocol es User Datagram Protocol (UDP). Su principal diferencia con TCP es que este no es confiable, ya que este protocolo no garantiza la correcta entrega del paquete. Esta caracteristica tan importante que no posee le da una mejor eficiencia con respecto a TCP, porque mejora la velocidad. Dado que no pierde tiempo en verificaciones y otros procesos. Por esta razon, este tipo de protocolo es ideal para cuando necesitamos velocidad de conexion y no es necesario que el paquete sea entregado correctamente. Ejemplos de comunicaciones de tipo UDP pueden ser una video llamada o un juego online, porque necesitamos velocidad por sobre calidad dado que se puede perder uno o dos paquetes que no arruinaran la experiencia.
Cuando creamos un socket en nuestro codigo, como vimos en el post anterior, debemos especificar el protocolo de transporte. Si tomamos el ejemplo del post anterior elegimos a TCP porque deseamos que la conexion sea confiable entre los dos puntos. En cambio, si usamos a UDP debemos diseñar e implementar una estrategia de confiabilidad para las comunicaciones. Como mencionamos anteriormente, este no se preocupa por si el paquete llego o no a destino sino que simplemente lo envia. Supongamos que lo adoptamos pero deseamos que tenga confiabilidad, para ello debemos implementarlo. Por ejemplo, chequeando si llego una porcion de datos al destino. Una posibilidad es esperar porque el destino responda con un paquete personalizado de ACK. Si bien, para esto se puede usar TCP podemos suponer que solo necesitamos la confiabilidad pero no el gestor de congestion u otras implementaciones de TCP. Las cuales al no existir siguen siendo una opcion mas rapida que usar TCP.
Hace unos cuantos posts anterirores «diseñamos» un juego de estrategia. Vamos a suponer que deseamos agregar la opcion online, esto implica que nuestro enemigo dejara de ser uno automatico y sera otro jugador. Ahora cada frame sera mostrado en base a lo que recibe a traves de la red. Este es un buen escenario para ejemplificar lo mencionado anteriormente. Como dijimos UDP tiene mas velocidad, lo cual es ideal para nuestro juego pero necesitamos asegurarnos que el paquete llegue a destino. Es decir, la confiabilidad de este pero no es necesario hacer el resto de verificaciones de conexion. Esto es principalmente, pensado para recibir cualquier tipo de notificacion tambien, no solamente la ubicacion y/o ataque del oponente, tal como un aviso de rendicion y que este llegue en tiempo y forma.
Si bien, hoy en dia se usa mayoritariamente TCP o UDP para las comunicaciones de red. En otros tiempos existieron otros protocolos, tales como Novell,, conexion punto a punto, laplink, y otros. Estos a su vez, tambien respondian a otros tipos de diseños de redes, y otros temas que en realidad no son relevantes para nuestras aplicaciones. Pero como hemos mencionado en otros posts, no es fundamental saber como trabaja un protocolo, el modelo OSI, u otros temas que involucren al envio de la informacion por la red pero si es bueno tener un minimo conocimiento y saber que puede llegar a afectar el envio de la informacion por la red.
En resumen, hoy hemos visto a protocolos, un poco mas especificamente a TCP, como trabaja y porque es tan importante, asi como tambien su contraparte llamada UDP, diferencias entre ambas, ventajas y desventajas, asi como unos ejemplos para implementarlas a ambas. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
