Como vimos anteriormente el protocolo IP es bastante sencillo, pero no ofrece confiabilidad en la entrega, detección de errores, retransmisión de datos, etc; sin embargo realiza una labor muy importante la cual es el envío de datos desde un dispositivo remitente a un dispositivo destino dentro de una red.
El encargado de realizar la conexión y envío de datos de forma sólida y confiable entre aplicaciones es el protocolo TCP. Como se vio anteriormente con el protocolo UDP, también el protocolo TCP asigna puertos para identificar a la aplicación que está solicitando los servicios de red; estos puertos se pueden asignar desde el 0 al 65, 535, sin embargo los más empleados y que son llamados puertos “Bien Conocidos” van del 0 al 1023 que se emplean para acceso a servicios estándar. Algo importante que hay que saber es que los puertos UDP y TCP aun cuando tengan el mismo numero de puerto, son puertos totalmente diferentes.
Para que TCP logre la confiabilidad en la entrega de datos, emplea un esquema de numeración donde cada primer byte dentro de un paquete es numerado en secuencia, cuando el dispositivo destino recibe el paquete envía un acuse de recibido llamado ACK; si el ACK no es enviado durante un intervalo de tiempo, por el dispositivo destino, el dispositivo remitente retransmitirá el paquete. Una vez que llega el paquete al dispositivo destino, este lo analiza revisando el primer byte y confirma que posición lleva dentro de la secuencia numerada de paquetes y con esto ordenar los paquetes y confirmar que no se hayan perdido paquetes. Durante el proceso de conexión entre dos dispositivos empleando el protocolo TCP, cada dispositivo entrega la siguiente información:
1. Que espacio tiene disponible en la memoria intermedia (buffer) para recibir datos.
2. El monto máximo de datos que cada segmento puede tener.
Cuando se realiza una conexión se realiza el siguiente proceso para establecer una conexión (este proceso es conocido comúnmente como Handshaking):
1. La computadora destino se encuentra lista para aceptar conexiones (passive open).
2. La computadora remitente solicita abrir una conexión hacia la computadora destino con una dirección IP y un puerto determinado (active open).
3. La computadora remitente envía un segmento o paquete de sincronización hacia la computadora destino.
El segmento de sincronización lleva el tamaño del buffer de recepción de datos (también conocido como receive window), el tamaño máximo de segmento que la computadora remitente puede recibir y un numero de secuencia inicial, el cual es generado aleatoriamente.
4. La computadora destino recibe el segmento de sincronización. Posteriormente genera un segmento de sincronización hacia la computadora remitente que incluye, el numero de secuencia inicial de la computadora destino, un ACK con el numero de la secuencia siguiente (secuencia inicial de la computadora remitente más uno), el tamaño del buffer de recepción, y el tamaño máximo de segmento que la computadora destino puede recibir.
5. La computadora remitente envía un ACK con el numero de secuencia siguiente (secuencia inicial de la computadora destino mas uno) informado que está lista para enviar datos.
Una observación importante es que regularmente el tamaño del buffer de recepción (reception window) es un múltiplo de tamaño máximo de segmento (MSS - Maximum Segment Size). El tamaño máximo de segmento esta basado en la unidad máxima de transmisión (MTU - Maximum Transmition Unit) que la red puede soportar (el cual es regularmente 1500). Para el cálculo sería MSS = MTU – 40 = 1460.
Una vez establecida la conexión, el proceso que continua es la transferencia de datos, control de flujo y control de errores. Este proceso de una forma simple se realizaría de la siguiente forma:
1. Una vez establecida la información del tamaño de segmento que se enviará, el numero de secuencia que se empleará en la transmisión de datos.
2. Se envía el segmento de datos el cual contiene, la secuencia posterior a la secuencia de inicio, el monto de bytes que se estan enviando, etc.
3. Del lado de la computadora destino revisa el número de la secuencia. Si alguna secuencia no llegó; la computadora envía un ACK que contiene el número de secuencia faltante a fin de que sea retransmitido por la computadora remitente.
4. La computadora remitente también cuenta con un buffer para envío donde se acumula los segmentos enviados, y también se lleva la cuenta de que segmentos ya han recibido ACK, que segmentos fueron enviados y no han recibido ACK y que segmentos no han sido enviados. La computadora remitente también asigna un periodo de tiempo para recibir ACK de los segmentos enviados, si no recibe ACK durante este periodo se retransmiten los segmentos faltantes de ACK.
5. Cuando la computadora destino recibe los segmentos correspondientes envía un ACK donde viene el siguiente numero de la secuencia de bytes (la siguiente secuencia posterior al último numero de secuencia del grupo completo de segmentos).
6. Una vez finalizada la transmisión de datos la computadora remitente envía un ACK que contiene una secuencia de FIN (Finalización).
7. La computadora destino recibe la secuencia de finalización y envía un ACK de confirmación de finalización. Existen varios algoritmos que se implementaron a fin de mejorar la transmisión de datos mediante TCP: ACK retrasado (Delayed ACK), Inicio Lento (Slow Start), Síndrome de Buffer Perezoso (Silly Window Syndrome), Algoritmo de Nagle (Nagle Algorithm), etc.
Explicación de protocolo TCP (video publicado en Youtube(mr)):
--Fin--
No hay comentarios.:
Publicar un comentario
Por favor dejanos tus comentarios....