Hoy voy a hablar en #introred sobre los protocolos de la capa de transporte ( TCP y UDP ). Ayer vimos lo maravilloso que es conectarse al puerto 80 de un servidor y escribir el HTTP a mano, ignorando de forma completa como el cliente establece la conexión con el servidor. Aquí radica la importancia de la capa de transporte.
En la capa de transporte existe algo esencial que son los puertos. Cada puerto va asociado a una aplicación. Esto es importante porque lo habitual es que haya varias aplicaciones en red al mismo tiempo. Por ejemplo, un servidor con XMPP y HTTPS, no podría distinguir que peticiones son para Jabber y cuales para la web de no existir los puertos. Por supuesto, no solo se usan puertos en el servidor. El cliente que hace la petición también los emplea para poder tener varias aplicaciones en red y saber a cual mandarle las respuestas. Explicado esto, pasamos a hablar sobre TCP y UDP.
UDP
Empiezo con UDP porque es mucho más simple que TCP. Este protocolo no está orientado a conexión. Se mandan los datos y a otra cosa. La ventaja de UDP es que, debido a su simplicidad, es más rápido que TCP. Sin embargo, tiene serios problemas, como que no hay confirmación de entrega, ni tampoco se pueden evitar duplicados. Además, a veces sucede que por extrañas situaciones en la red no llega primero el paquete que fue enviado antes, descolocando toda la sintaxis de los protocolos de capa de aplicación.
Este protocolo es útil para enviar datos como, por ejemplo, frames de vídeo. Estos requieren velocidad, pero no son datos críticos. No pasa nada porque se pierda un frame ya que el ojo no lo nota.
TCP
El protocolo TCP es muy complejo, y para conocerlo bien no queda más remedio que mirar los RFC, que son unos documentos técnicos que explican los protocolos de red con todo lujo de detalles. TCP es un protocolo orientado a conexión, es decir, antes de mandar ningún dato se tiene que establecer una conexión por el Three Way Handshake que se explicará a continuación. Además, TCP tiene garantía de entrega, eliminación de duplicados y reconstrucción de los datos por orden de envío. Tiene una serie de indicadores, o flags, que son principalmente estos :
SYN
Este flag se emplea durante el Three Way Handshake que mencionaba antes. El TCP Three Way Handshake sigue el siguiente esquema :
- A envía a B un paquete SYN.
- B envía a A un SYN/ACK si el puerto está abierto o un RST/ACK si está cerrado y rechaza la conexión.
- Si B ha aceptado la conexión, A le envía un ACK a B.
ACK
Este flag da una confirmación de que hemos recibido los datos que nos ha mandado el otro extremo. Puede estar desactivado si ya se confirmó el último paquete del otro extremo anteriormente. En caso de estar activo, indica hasta que byte hemos recibido lo que nos ha mandado el otro. Los diseñadores de TCP fueron bastante avispados al incluir el flag ACK dentro de otros paquetes de datos. Así, en vez de desperdiciar recursos enviando un paquete que solo contenga la confirmación del anterior, lo que se envía es un paquete con el contenido propio que se quiere transmitir y, ya de paso, la confirmación.
FIN
Este flag indica que quien lo envía ya no quiere enviar más datos. Esto no significa el cierre de la conexión. Puede ser que el otro lado quiera mandar más cosas, y no se termina hasta que ambos lados manden el respectivo FIN.
RST
Este flag indica un cierre forzoso por un problema en la conexión. Puede deberse a un intento de conexión a un puerto cerrado, o a una conexión que le de «mala espina» a un miembro de la conexión.
Bueno, pues con esto ya finalizo el artículo de hoy. Seguir leyendo #introred, porque voy a explicar en la próxima entrega el protocolo IP y la capa de red en general.
Saludos !!
Esta muy buena esta serie de post. La verdad que me van a servir muchísimo. Me gustaría preguntar si existe o conocen alguna manera de mostrar un poco mas prácticamente este tema del que se habla en el post. No se me imagino de alguna forma de demostrar o ver con algún programa como funciona todo esto.
Pablo, por supuesto que existe. De hecho, lo mejor que se puede hacer para comprender la red es …
… Usar un sniffer ( como wireshark, por ejemplo ). Así se pueden ver todas las capas con lujo de detalles y observar por tí mismo el funcionamiento de internet.
Saludos !
Fanta, joder, estas idiota perdido. El post no estaba terminado. Ayer me tuve que ir ostias !!!. No te has molestado en leerlo. La parte del final no tiene coherencia. Para que narices lo publicas ???
Bueno tranquilo. Ya anda editado.
xD