Protocolo TCP










Ver mi IP  See my IP  

Tu dirección IP es 54.162.139.105

  

Protocolo TCP

- TCP proporciona una cantidad considerablemente mayor de servicios a las aplicaciones que UDP, notablemente, la recuperación de errores, control de flujo y fiabilidad. Se trata de un protocolo orientado a conexión a diferencia de UDP. La mayoría de los protocolos de aplicación de usuario, como TELNET y FTP, usan TCP.

- El principal propósito de TCP es proporcionar una conexión lógica fiable entre parejas procesos. No asume la fiabilidad de los protocolos de niveles inferiores (como IP) por lo que debe ocuparse de garantizarla.

Características TCP

- Transferencia de datos a través de un canal:
Desde el punto de vista de la aplicación, TCP transfiere un flujo continuo de bytes a través de Internet. La aplicación no ha de preocuparse de trocear los datos en bloques o en datagramas. TCP se encarga de esto al agrupar los bytes en segmentos TCP, que se pasan a IP para ser retransmitidos al destino. Además, TCP decide por sí mismo cómo segmentar los datos y puede enviarlos del modo que más le convenga.
A veces, una aplicación necesita estar segura de que todos los datos pasados a TCP han sido transmitidos efectivamente al destino. Por esa razón, se define la función "push". Esta función mandará todos los segmentos que sigan almacenados al host de destino. El cierre normal de la conexión también provoca que se llame a esta función, para evitar que la transmisión quede incompleta.

- Fiabilidad:
TCP asigna un número de secuencia a cada byte transmitido, y espera una reconocimiento afirmativo (ACK) del TCP receptor. Si el ACK no se recibe dentro de un intervalo de timeout, los datos se retransmiten. Como los datos se transmiten en bloques (segmentos de TCP), al host de destino sólo se le envía el número de secuencia del byte de cada segmento.
El TCP receptor utiliza los números de secuencia para organizar los segmentos cuando llegan fuera de orden, así como para eliminar segmentos duplicados.

Control de flujo:
El TCP receptor, al enviar un ACK al emisor, indica también el número de bytes que puede recibir aún, sin que se produzca sobrecarga y desbordamiento de sus buffers internos. Este valor se envía en el ACK en la forma del número de secuencia más elevado que se puede recibir sin problemas. Este mecanismo se conoce también como mecanismo de ventanas y se estudiará posteriormente en este capítulo.

- Multiplexación:
Se consigue usando puertos, al igual que en UDP.

- Conexiones lógicas:
La fiabilidad y el control de flujo descritos más arriba requieren que TCP inicialice y mantenga cierta información de estado para cada canal. La combinación de este estado, incluyendo zócalos, números de secuencia y tamaños de ventanas, se denomina conexión lógica. Cada conexión se identifica unívocamente por el par de zócalos del emisor y el receptor.

- Full Duplex:
TCP garantiza la concurrencia de los flujos de datos en ambos sentidos e la conexión.

Pincipio de ventana en TCP

Un simple protocolo de transporte podría emplear el siguiente principio: enviar un paquete, y esperar un reconocimiento del receptor antes de enviar el siguiente. Si el ACK no se recibe dentro de cierto límite de tiempo, se retransmite.
Aunque este mecanismo asegura fiabilidad, sólo usa una parte del ancho de banda de la red que está disponible.

Considerar ahora un protocolo en el que el emisor agrupa los paquetes que va a transmitir y que utilice las siguientes reglas:
- El emisor puede enviar todos los paquetes dentro de la ventana sin recibir un ACK, pero debe disparar un cronómetro para el timeout para cada uno de ellos.
- El receptor debe reconocer cada paquete recibido, indicando el número de secuencia del último paquete bien recibido.
- El emisor desliza la ventana para cada ACK recibido.

En conclusion, este mecanismo de ventanas asegura:
- Transmisión fiable.
- Mejor aprovechamiento del ancho de banda (mejora del flujo).
- Control de flujo, ya que el receptor puede retrasar la respuesta a un paquete con un reconocimiento, conociendo los buffers libres de los que dispone y el tamaño de la ventana de comunicación.

Este mecanismo es el que se utiliza en TCP, pero con unas cuantas diferencias:
- Como TCP proporciona una conexión con un flujo de bytes, los números de secuencia se asignan a cada byte del canal. TCP divide el flujo de bytes en segmentos. El principio de la ventana se aplica a nivel de bytes; es decir, los segmentos enviados y los ACKs recibidos llevarán números de secuencia de forma que el tamaño de la ventana se exprese con un número de bytes, en vez del de paquetes.
- El tamaño de la ventana lo determina el receptor, cuando se establece la conexión, y puede variar durante la transmisión de datos. Cada ACK incluirá el tamaño de la ventana que acepta el receptor en ese momento.

Segmento TCP

Segmento TCP

- Source Port: El número de puerto de 16 bits del emisor, que el receptor usa para responder.
- Destination Port: El número de puerto de 16 bits del receptor.
- Sequence Number: El número de secuencia del primer byte de datos del segmento. Si el byte de control SYN está a 1, el número de secuencia es el inicial(n) y el primer byte de datos será el n+1.
- Acknowledgment Number: Si el bit de control ACK está a 1, este campo contiene el valor del siguiente número de secuencia que se espera recibir.
- Data Offset: El número de palabras de 32 bits de la cabecera TCP. Indica dónde empiezan los datos.
- Reserved: Seis bits reservados para su uso futuro; deben ser cero.
- URG: Indica que el campo "urgent pointer" es significativo en el segmento.
- ACK: Indica que el campo de reconocimiento es significativo en el segmento.
- PSH: Función "Push".
- RST: Resetea la conexión.
- SYN: Sincroniza los números de secuencia.
- FIN: No hay más datos del emisor.
- Window: Usado en segmentos ACK. Especifica el número de bytes de datos que comienzan con el byte indicado en el campo número de reconocimiento que el receptor esta dispuesto a aceptar.
- Checksum: El complemento a uno de 16 bits de la suma de los complementos a uno de todas las palabras de 16 bits de la pseudocabecera, la cabecera TCP y los datos TCP. Al computar el checksum, el mismo campo checksum se considera cero.
- Urgent Pointer: Apunta al primer octeto de datos que sigue a los datos importantes. Sólo es significativo cuando el bit de control URG está a uno.
- Options: Sólo para el caso de opciones de datagramas IP, las opciones pueden ser:
  - Un sólo byte conteniendo el número de opción, o
  - Una opción de longitud variable
  Actualmente hay definidas tres opciones:
    Tipo Long Significado
    ---- ----     -------
     0    -        Fin e la lista de opciones.
     1    -        No-Operación.
     2    4       Tamaño máximo del segmento.
- Padding: Bytes todos a cero para rellenar la cabecera TCP a una longitud total que sea un múltiplo de 32 bits.

Reconocimientos y retransmisiones

TCP envía los datos en segmentos de longitud variable. Los números de secuencia se basan en una cuenta de los bytes. Los reconocimientos especifican el número de secuencia del siguiente byte que el receptor espera recibir.

Ahora suponer que un segmento se pierde o se corrompe. En ese caso, el receptor reconocerá cualquier segmento sucesivo con un reconocimiento referido al primer byte del paquete perdido. Finalmente, se producirá un timeout y el segmento perdido se retransmitirá.

Cada implementación de TCP es libre de reaccionar ante un timeout del modo que deseen los diseñadores. Sea cual sea la elección, el rendimiento máximo se pierde. Esto se debe a que el ACK no contiene un segundo número de secuencia indicando la trama actual que se ha recibido.

Cada TCP debería implementar un algoritmo para adaptar los tiempos de timeout a usar para el viaje de los segmentos. Para hacerlo, TCP registra el momento de envío de un segmento, y el de recepción del ACK. Se promedia un valor para varios de estos viajes que se empleará como valor de timeout para el siguiente segmento a enviar.
Esto es una característica importante, ya que los retardos pueden ser variables en la red, dependiendo de múltiples factores, tales como la carga de las redes intermedias de baja velocidad o la saturación de las pasarelas.

API de TCP

La API de TCP no está definida del todo. Sólo algunas funciones básicas que deberían ser proporcionadas se describen en el RFC 793 - TCP ("Transmission Control Protocol"). Como ocurre con la mayoría de los RFCs de la pila de protocolos TCP/IP, se deja un elevado grado de libertad a los diseñadores, permitiendo en consecuencia implementaciones óptimas (dependientes del sistema operativo), lo que resulta en una mayor eficiencia.

Para medir la velocidad de tu conexion TCP puedes utilizar este test de velocidad.
Ver mi IP - Enlaces
Protocolo TCP - Aviso Legal
Ver mi IP en español See my IP in english Ver mi IP