Comprender los principios del uso de una ventana corredera. Retransmisión y ventana corredera.

La capa de transporte utiliza los servicios proporcionados por la capa de red:

selección de ruta óptima y servicios de direccionamiento lógico. Estos servicios de capa 3 proporcionan una conexión de extremo a extremo entre el remitente y el destinatario. Este capítulo describe cómo la capa de transporte regula el flujo de información transmitida desde un remitente a un destinatario. La capa de transporte tiene las siguientes características:

Un flujo de datos de la capa de transporte es una conexión lógica entre puntos finales de la red;

---------------- El mecanismo de ventana deslizante proporciona control de extremo a extremo y confiabilidad de la conexión, le permite rastrear la secuencia de números de paquetes y notificaciones;

​Para gestionar varias conexiones de red en los protocolos de cuarta capa TCP y UDP y transmitir información a niveles superiores, los llamados puertos(puerto).

Pila de capas de transporteTCP/IP

Como sugiere su nombre, la capa de transporte de la pila de protocolos TCP/IP es responsable de transportar datos entre aplicaciones en el dispositivo receptor y el dispositivo emisor. El conocimiento de cómo funciona la capa de transporte es clave para una comprensión profunda de las tecnologías de redes modernas. Las siguientes secciones detallan las funciones y servicios de una de las capas más importantes del modelo TCP/IP: la capa de transporte.

Introducción a la pila de capas de transporteTCP/IP

Para describir el cuarto nivel, el de transporte, se utiliza a menudo la expresión calidad de servicio. UDP, que se analiza en detalle a continuación, es un protocolo de capa de transporte que proporciona servicios de transporte sin conexión. Sin embargo, el protocolo principal que opera en esta capa es TCP, que utiliza un mecanismo de establecimiento de conexión. Las funciones principales de este protocolo son el transporte y el control confiable del flujo de información desde el remitente al destinatario. Las funciones principales de la capa de transporte incluyen proporcionar control de transmisión de extremo a extremo, control de flujo a través de un mecanismo de ventana deslizante y garantizar la confiabilidad de la entrega mediante el establecimiento de números de secuencia y el uso de acuses de recibo.

Para entender por qué se necesita una transmisión de datos fiable y un control de flujo, imaginemos a un extranjero que habla muy rápido. Lo más probable es que su oyente se vea obligado a repetir a veces palabras individuales (análogo a la confiabilidad de la transmisión) y pedirle que hable más lentamente (análogo a la fluidez).

La capa de transporte proporciona los medios para transferir datos de manera confiable desde un nodo emisor a un nodo receptor. Esta capa crea una conexión lógica entre los puntos finales de la red; Además, las tareas de la capa de transporte incluyen la segmentación y el reensamblaje de datos transmitidos por varios aplicaciones capas superiores en un flujo de datos de la capa de transporte. Esta transmisión proporciona transferencia de datos de un extremo a otro entre puntos finales.

Un flujo de datos de la capa de transporte es una conexión lógica entre puntos finales de una red; La capa de transporte también comprueba si se puede establecer una conexión entre aplicaciones. En la Fig. La figura 11.2 ilustra el funcionamiento de la capa de transporte.

La capa de transporte proporciona las siguientes funciones:

    segmentación de datos de aplicaciones de nivel superior;

    gestión de interacciones de un extremo a otro;

    transferir segmentos de un nodo extremo a otro;

    control de flujo cambiando el tamaño de la ventana;

    asegurando la confiabilidad mediante la asignación de números y el uso de confirmaciones.

Para la capa de transporte, una red externa se puede representar como un medio determinado (generalmente representado como una nube) a través del cual se transmiten paquetes de datos desde el remitente al destinatario. Este entorno es responsable de determinar qué ruta es óptima para un destinatario en particular. Ya en esta etapa se puede comprender el importante papel que desempeñan los enrutadores en el proceso de transmisión de datos en la red.

El conjunto de protocolos TCP/IP consta de dos protocolos separados: TCP e IP. El protocolo IP es un protocolo de Capa 3 sin conexión que permite una transferencia de datos eficiente a través de una red. TCP es un protocolo de Capa 4 y es un servicio orientado a la conexión que proporciona control de flujo y, por lo tanto, una alta confiabilidad de transmisión. La combinación de estos dos protocolos le permite resolver una amplia gama de tareas de transferencia de datos. Por supuesto, la pila de protocolos TCP/IP consta de muchos otros protocolos, pero TCP e IP son los protocolos principales. Por cierto, toda la red de Internet se basa en la pila de protocolos TCP/IP.

Control de flujo

Cuando la capa de transporte TCP reenvía segmentos de datos, puede garantizar la integridad de los datos. Un método para lograr este objetivo es control de flujo (fluircontrol) , lo que evita problemas asociados con situaciones en las que un nodo en un extremo de una conexión desborda los buffers de una estación en el otro extremo. El desbordamiento causa serios problemas porque puede provocar la pérdida de datos.

Los servicios de la capa de transporte permiten a los usuarios exigir un transporte confiable de datos entre los nodos emisores y receptores. Para garantizar una transferencia de datos fiable entre los sistemas de los interlocutores de comunicación, se utiliza un mecanismo orientado a la conexión. El transporte confiable proporciona las siguientes funciones:

    asegura que el remitente reciba la confirmación de la entrega de cada segmento;

    proporciona retransmisión de cualquier segmento para el cual no se recibió confirmación de entrega;

    permite ordenar los segmentos en el destino en el orden correcto;

    previene la congestión de la red y garantiza la gestión de la congestión si ocurre.

Instalación, gestión y terminación de sesión

En el modelo de referencia OSI, varias aplicaciones pueden utilizar simultáneamente una única conexión de transporte. La función de transporte de datos se implementa segmento por segmento. Esto significa que varias aplicaciones pueden transferir datos según el principio de primero en entrar, primero en salir (FIFO). Los segmentos pueden estar destinados a uno o diferentes destinatarios. Esta regla a veces se denomina mecanismo de multiplexación de diálogos de aplicaciones de nivel superior (Figura 3).

Arroz. 3. Varias aplicaciones en la capa superior del modelo OSI utilizan la capa de transporte.

Una de las funciones principales de la capa de transporte es organizar una sesión de comunicación para establecer una conexión con un sistema peer-to-peer. Para comenzar a transferir datos, las aplicaciones del remitente y del destinatario informan a sus sistemas operativos que inicialicen la conexión. Una de las estaciones inicia una conexión que debe ser aceptada por la otra estación. Los módulos del sistema operativo responsables del funcionamiento de los protocolos se comunican entre sí enviando un mensaje especial y verifican la posibilidad de transferencia de datos y la preparación de los nodos finales.

Una vez completado el proceso de sincronización y establecida la conexión, comienza la transferencia de datos. Durante el proceso de transferencia, ambas estaciones continúan intercambiando mensajes para garantizar que los datos recibidos sean correctos. En la Fig. La Figura 4 ilustra una conexión típica entre un remitente y un receptor. El primer mensaje de solicitud es necesario para sincronizar los nodos finales. El segundo y el tercero son necesarios para confirmar la solicitud de sincronización inicial; también sincronizan los parámetros de conexión en dirección inversa. El último mensaje es confirmación(acuse de recibo), que se utiliza para informar al destinatario que ambas partes están listas para establecer una conexión. Una vez establecida la conexión, comienza la transferencia de datos.

Arroz. 4. Proceso de establecimiento de una conexión con un sistema peer-to-peer

Durante la transferencia de datos, la congestión puede ocurrir por dos razones. La primera es que una computadora rápida puede generar un flujo de datos más rápido de lo que la red puede transmitirlos. El segundo ocurre en una situación en la que muchas computadoras necesitan enviar datos simultáneamente a un destinatario. En este caso, el destinatario puede experimentar una sobrecarga, aunque cada remitente individualmente no causa problemas.

En los casos en que los datagramas llegan demasiado rápido para que el nodo final o la puerta de enlace los procese, se almacenan temporalmente en la memoria. Si el flujo de datos no disminuye, el nodo final o puerta de enlace, eventualmente agotando sus recursos de memoria, se verá obligado a descartar todos los datagramas posteriores.

Para evitar la pérdida de datos, la función de transporte puede enviar un mensaje informativo al remitente: "El dispositivo no está listo para recibir". Actuando como un semáforo en rojo, este mensaje indicador indica al remitente que deje de enviar datos. Una vez que el receptor puede procesar datos adicionales nuevamente, envía un mensaje indicador de transporte "dispositivo listo para recibir datos", que es similar a un semáforo en verde. Al recibir dicho indicador, el remitente puede reanudar la transmisión de segmentos.

Una vez finalizada la transferencia de datos, el remitente envía una señal al destinatario, que indica la finalización de la transferencia. El destinatario confirma que la conexión se ha interrumpido, tras lo cual se completa la conexión entre las máquinas.

Apretón de manos de tres pasos

El protocolo TCP utiliza un algoritmo orientado a la conexión, por lo que se debe establecer una conexión lógica antes de poder transferir datos. Para establecer una conexión de red entre dos estaciones de trabajo, es necesario sincronizar sus números de secuencia iniciales (ISN - Número de secuencia inicial). La sincronización se logra mediante el intercambio de segmentos especializados que contienen el SYN (abreviatura de ssincronización) y números ISN. Los módulos que llevan el bit SYN a veces también se denominan mensajes SYN. Para resolver el problema de establecimiento, debe seleccionar un mecanismo apropiado para seleccionar números ISN estableciendo una conexión inicial para intercambiar números ISN.

La sincronización requiere que cada lado envíe su ISN inicial y reciba confirmación en forma de ACK (abreviatura de Reconocimiento) de otra parte a la conexión. Además, cada parte debe obtener el número ISN del interlocutor de comunicación y enviar una notificación ACK al respecto. La secuencia de intercambio de mensajes entre dos nodos de red, A y B, se describe a continuación.

Este mensaje se llama reconocimiento de tres pasos (tres- forma apretón de manos) (Figura 5).

Arroz. 5. Apretón de manos de tres pasos

1. UnB SINC. Mi número de secuencia ISN inicial es X, número ACK = 0, el bit SYN está establecido, sin embargo el bit ACK no está establecido.

2.BUN ACK. Su número de secuencia es X+1, mi número ISN es Y, los bits SYN y ACK están configurados.

3.AATRÁS. Su número de secuencia es Y+1, mi número de secuencia es X+1, el bit ACK está establecido y el bit SYN no está establecido.

El protocolo de enlace de tres vías es un mecanismo de conexión asíncrono necesario para sincronizar números de secuencia, ya que dichos números no dependen de ningún contador global virtual en la red. Por lo tanto, en una red que ejecuta el protocolo TCP, se utilizan varios mecanismos para asignar números ISN. Uno de ellos es el apretón de manos de tres pasos. Sin embargo, este mecanismo no sólo está destinado a obtener un número ISN. Al usarlo, los dispositivos finales intercambian información sobre el tamaño de la ventana de transmisión de datos, el parámetro MTU y el retraso de la transmisión de datos en la red. El destinatario del primer SYN no tiene medios para determinar si el segmento recibido era un mensaje antiguo diferido o un mensaje nuevo hasta que se reciba el siguiente mensaje; la única excepción es si el destinatario almacena el último número de secuencia utilizado en la conexión (lo cual no siempre es posible). Por lo tanto, el destinatario debe solicitar al remitente que verifique dicho mensaje SYN.

Mecanismo de ventana corredera

En la forma más general de reenvío de datos confiable orientado a la conexión, los paquetes de datos deben entregarse al extremo receptor en el mismo orden en que fueron transmitidos. El protocolo señala una falla si algún paquete de datos se pierde, se corrompe, se duplica o se recibe fuera de servicio. La solución más sencilla a este problema es utilizar confirmaciones de recepción del destinatario de cada segmento de datos.

Sin embargo, si el remitente se ve obligado a esperar un acuse de recibo después de enviar cada segmento, como se muestra en la Fig. 6, entonces la velocidad de transmisión con este método se reduce significativamente. Dado que pasa un cierto intervalo de tiempo desde el momento en que el remitente termina de enviar un paquete de datos hasta que se completa el procesamiento de cualquier acuse de recibo recibido, se puede utilizar para transmitir un dato adicional. La cantidad de paquetes de datos que se pueden enviar al remitente sin recibir un acuse de recibo se llama ventana(ventana).

TCP utiliza lo que se denomina acuses de recibo pendientes; contienen un número relacionado con el octeto esperado a continuación. El mecanismo de ventana deslizante es donde los tamaños de ventana se negocian dinámicamente durante toda la sesión TCP. Mecanismo de ventana corredera Es un mecanismo de control de flujo que requiere que el receptor acepte un acuse de recibo del remitente después de transmitir una cierta cantidad de datos.

Arroz. 6. El tamaño de la ventana es uno.

Para controlar el flujo de datos transferidos entre dos dispositivos, TCP utiliza mecanismo de control de flujo(mecanismo de control de flujo). El destinatario informa al remitente que los datos han sido recibidos; recibir dicha notificación le permite configurar el tamaño de la ventana. La ventana especifica la cantidad de octetos, según el número de confirmación actual, que un dispositivo TCP es capaz de recibir en un momento dado.

Por ejemplo, con un tamaño de ventana de 3, el remitente puede enviar tres octetos al destinatario. Después de esto, deberá esperar la confirmación del destinatario. Si el destinatario ha recibido tres octetos, deberá enviar un acuse de recibo al remitente de los octetos. El remitente puede entonces enviar los siguientes tres octetos. Si el destinatario no recibe tres octetos, por ejemplo debido a un desbordamiento del búfer, no enviará un acuse de recibo. Si el remitente no recibe un acuse de recibo, esto significa que se deben retransmitir los últimos octetos y al mismo tiempo reducir la velocidad de transmisión.

El tamaño de la ventana TCP puede cambiar a medida que los datos fluyen entre dos dispositivos de red. Cada acuse de recibo enviado por el destinatario contiene información sobre la cantidad de bytes que el destinatario es capaz de recibir. TCP utiliza lo que se conoce como ventana de control de congestión, que normalmente tiene el mismo tamaño que la ventana del dispositivo receptor, pero su tamaño se reduce a la mitad si se pierde un segmento de datos (por ejemplo, debido a una congestión de la red). Este mecanismo permite reducir o aumentar el tamaño de la ventana según sea necesario mientras se administra el búfer del dispositivo y se procesa el flujo de datos. Un tamaño de ventana mayor permite transmitir más octetos simultáneamente.

Cuando el remitente transmite tres octetos, espera una señal ACK durante cuatro octetos. Si el receptor es capaz de procesar un bloque de datos de dos octetos, descarta el tercer octeto y lo designa como el siguiente bloque de datos esperado. Esto especifica el nuevo tamaño de la ventana, que es igual a dos. El remitente transmite los dos octetos siguientes, pero el tamaño de la ventana sigue siendo tres (suponiendo que el dispositivo todavía pueda manejar tres octetos a la vez). El destinatario solicita el octeto número 5 y establece el nuevo tamaño de ventana en dos.

Confirmaciones

Un mecanismo de entrega confiable garantiza que un flujo de datos enviado por una estación se entregará a través del enlace de datos de otra sin duplicación ni pérdida de datos. El reconocimiento positivo con retransmisión es una de las técnicas que garantiza la entrega confiable de flujos de datos. El reconocimiento positivo requiere que el destinatario se comunique con el remitente enviando un mensaje de reconocimiento después de recibir los datos. El remitente registra cada paquete que envía y espera confirmación antes de enviar el siguiente paquete de datos. En el momento en que se reenvía el segmento, el remitente también inicia un temporizador y retransmite el bloque de datos si el temporizador expira antes de recibir un acuse de recibo.

En la Fig. La Figura 7 muestra un remitente transmitiendo los paquetes 1, 2 y 3. El receptor reconoce los paquetes solicitando el paquete 4. El remitente, después de recibir un acuse de recibo, envía los paquetes 4, 5 y 6. Si el paquete 5 no se entrega al destinatario , envía un acuse de recibo solicitando otro envío del paquete 5. El remitente reenvía el paquete 5 y debe recibir un acuse de recibo adecuado para continuar enviando el paquete número 7.

El protocolo TCP impone una secuencia de segmentos seguidos de un reconocimiento. A cada datagrama se le asigna un número antes de la transmisión (Fig. 8). Una vez que el destinatario ha recibido todos los datagramas, se ensamblan en un mensaje completo. La responsabilidad del protocolo TCP es recuperar datos dañados, perdidos, duplicados o desordenados que se transmitieron a través de Internet. El mecanismo de recuperación funciona asignando un número de secuencia a cada octeto transmitido, al recibirlo el destinatario debe enviar un acuse de recibo (ACK). Si no se recibe confirmación dentro del intervalo de tiempo de espera, el remitente retransmite los datos. Una vez que los octetos se entregan al destinatario, sus números de secuencia se utilizan para volver a ensamblar el mensaje a partir de fragmentos y eliminar duplicados. Los datos dañados se recuperan mediante una suma de comprobación que se agrega a cada segmento transmitido. El destinatario verifica la suma de verificación y, si no coincide, los datos dañados se descartan.

Arroz. 7. El tamaño de la ventana es tres.

Arroz. 8. Números de secuencia y confirmaciones.

Protocolotcp

tcp(Protocolo de control de transmisión - protocolo de control de transmisión) es un protocolo de capa de transporte orientado a conexión y proporciona una transmisión de datos confiable y full-duplex. El protocolo TCP es parte de la pila de protocolos TCP/IP. En un entorno orientado a la conexión, se debe establecer una conexión entre dos computadoras para comenzar a transferir datos. El protocolo TCP es responsable de segmentar los mensajes en paquetes, volver a ensamblarlos en el destinatario y retransmitir cualquier dato si no se recibió. El protocolo también es capaz de crear canales virtuales entre aplicaciones de usuario final.

Servicios y protocolos de nivel superior que utilizan mecanismos TCP:

    FTP (Protocolo de transferencia de archivos);

    HTTP (Protocolo de transferencia de hipertexto);

    SMTP (Protocolo simple de transferencia de correo - protocolo de correo electrónico simple);

Los campos del segmento TCP que se muestran en la diapositiva se describen a continuación.

Puerto del remitente - número de puerto de llamada.

Puerto receptor - número de puerto llamado.

Número de serie - Número utilizado para organizar los datos entrantes en la secuencia correcta.

Número de confirmación- número del siguiente octeto TCP esperado.

HLEN número de palabras de 32 bits en el encabezado.

Campo reservado- todos los bits se ponen a 0.

Trozos de código- funciones de servicio (por ejemplo, establecer y finalizar una sesión).

Ventana- el número de octetos que el remitente está dispuesto a aceptar.

Suma de cheque- suma de comprobación calculada del encabezado y los campos de datos.

Puntero de datos urgentes- indica el final de los datos urgentes.

Opciones- Actualmente está definido un parámetro: el tamaño máximo del segmento TCP.

Datos- datos de protocolo de nivel superior.

ProtocoloUDP

UDP (Usuario datagrama Protocolo- protocolo de transferencia de datagramas de usuario), cuyo formato de segmento se muestra en la diapositiva, es un protocolo de transporte sin conexión en la pila de protocolos TCP/IP. UDP es un protocolo simple que intercambia datagramas sin acuse de recibo y sin garantía de entrega. La simplicidad del protocolo resulta evidente al comparar los formatos de segmento de los protocolos UDP y TCP. Cuando se utiliza el protocolo UDP, el manejo de errores y la retransmisión de datos deben ser manejados por un protocolo de nivel superior. Por ejemplo, si la transferencia se interrumpe mientras se envían datos vía TFTP, sólo un operador humano puede volver a descargar la información.

La siguiente lista muestra los campos del segmento UDP que se muestra en la diapositiva.

    Puerto del remitente - número de puerto de llamada.

    Puerto receptor - número de puerto llamado.

    Longitud- número de bytes, incluidos el encabezado y los datos.

    Suma de cheque- suma de comprobación calculada del encabezado y los campos de datos.

    Datos- datos de protocolo de nivel superior.

El protocolo UDP no utiliza un mecanismo de ventana deslizante, por lo que se debe garantizar la confiabilidad de la transmisión de datos. protocolos de capa de aplicación(protocolo de capa de aplicación). UDP fue diseñado para aplicaciones que no necesitan conectar segmentos ordenados entre sí.

El protocolo UDP lo utilizan los siguientes protocolos y servicios de nivel superior:

    TFTP (Protocolo trivial de transferencia de archivos: el protocolo de transferencia de archivos más simple);

    SNMP (Protocolo simple de administración de red - protocolo simple de administración de red);

    DHCP (Protocolo de configuración dinámica de host - protocolo de configuración dinámica de host);

    DNS (Sistema de nombres de dominio - servicio de nombres de dominio).

Números de puerto de protocolotcpYUDP

Para transmitir información a niveles superiores, tanto el protocolo TCP como el protocolo UDP utilizan un número de puerto o el llamado socket. Los números de puerto se utilizan para rastrear las diversas interacciones que ocurren simultáneamente en la red.

Los desarrolladores de software de aplicaciones han acordado utilizar números de puerto reservados, cuya asignación es gestionada por la Autoridad de Números Asignados de Internet (IANA). Por ejemplo, cualquier intercambio que implique transferencia de datos mediante el protocolo FTP debe utilizar los puertos estándar 20 (para datos) y 21 (para control). A las comunicaciones de red que no involucran aplicaciones que tienen un número de puerto conocido se les asignan números de puerto al azar, pero se seleccionan de un rango específico de valores superiores a 1023. Algunos puertos están reservados en los protocolos TCP y UDP. Aunque algunos puertos están reservados en TCP y UDP, es posible que las aplicaciones no estén cableadas a estos números.

Como se muestra en la diapositiva, el sistema final utiliza el número de puerto para seleccionar la aplicación adecuada. El número de puerto de origen suele ser un número mayor que 1023, que el nodo emisor asigna dinámicamente. Por ejemplo, un nodo intenta conectarse a otro nodo a través de FTP enviando paquetes que especifican el número de puerto TCP del destinatario 21 (FTP) y genera dinámicamente un número de puerto de origen de 1028. Este par de puertos (remitente y destinatario) determina la unicidad. de la interacción entre los dos nodos. Si el mismo nodo inicia una conexión FTP con un tercer nodo, el puerto de destino permanece configurado en 21, pero se elige que el puerto del remitente sea diferente (por ejemplo, 1030) para separar las dos sesiones de comunicación.

Algoritmo de tiempo de espera adaptativo de KARN

Tiempos de espera

Números de bytes

Duplicados

Problemas resueltos mediante el procedimiento de apretón de manos.

Si la estación transmite 20 bytes, entonces el servidor aumentará el ACK en 20 (se convertirá en 751 bytes), etc.

Se generan confirmaciones para todos los bytes que llegan en la secuencia requerida. Si se envían duplicados, esto no estropeará la imagen. Puedes confirmar 3 veces que han llegado 731 bytes (este es un ejemplo). Todas las confirmaciones son acumulativas. Las confirmaciones perdidas no son un problema.

Pueden ocurrir duplicados en TCP:

  1. Debido a la pérdida del segmento original.
  2. Por pérdida de confirmación.
  3. Debido al tiempo de espera de retransmisión
  4. Debido al retraso del segmento
  5. Debido a la búsqueda de todos los números de bytes posibles.

Números consecutivos hasta 2 32. A una velocidad de 2 Mbit/s, se necesitarán 9 horas para clasificar todos los valores. La duplicación del número de secuencia puede resultar en un duplicado. A medida que aumenta la velocidad, aumenta la probabilidad de que esto suceda.

Luchan con una cantidad increíble de dinero.

Establecer tiempos de espera. El valor del tiempo de espera afecta el rendimiento. El tiempo de espera está asociado con doble tiempo de viaje(RTT). Tiempo de espera prolongado: espera larga al cometer un error. Un tiempo de espera breve es una retransmisión innecesaria.

Hay varios algoritmos de tiempo de espera adaptativo(tarea del sistema operativo). CISCO utiliza el algoritmo KARN.

La esencia del algoritmo. El tiempo promedio de RTT se calcula y se multiplica por un determinado coeficiente (en KARN el coeficiente es 2). Es necesario cambiar no sólo el tiempo de espera promedio, sino también el tamaño de la ventana. En KARN, la ventana se cambia hasta que entre el 20% y el 40% de la ventana esté libre.

El protocolo TCP asume una ventana dinámica. El destinatario informa la cantidad de bytes que puede recibir (de 0 a 65535). El número de ventana inicial siempre se establece en la etapa de establecimiento de la conexión. El receptor determina qué ventana debe ser según las capacidades mínimas. El proceso de aplicación del destinatario que utiliza buffers tiene un impacto significativo en el rendimiento de TCP. El tamaño adecuado de la ventana optimiza TCP. Se abre una ventana cuando el proceso de recepción del otro lado lee el acuse de recibo y libera el búfer TCP. Si el límite izquierdo coincide con el límite derecho, el remitente debe dejar de transmitir (ventana cero). La ventana se cierra cuando se transmiten y confirman los datos (el borde izquierdo se mueve hacia la derecha).

La conexión finaliza cuando la estación envía el indicador FIN al servidor. El servidor envía ACK y FIN. A continuación, el servidor envía FIN nuevamente y la estación envía ACK y FIN.

Protección de sobrecarga - comienzo lento– no envíe paquetes a la red de forma inmediata y rápida.

También hay mecanismo de retransmisión rápida(no es necesario un inicio lento) y

Mecanismo de reconocimiento retrasado (en Windows).

¿Qué es una ventana corredera?

TCP no envía un paquete mientras espera que llegue una confirmación antes de enviar el siguiente. En su lugar, utiliza el principio de ventana corredera. Este principio le permite enviar varios mensajes y solo entonces esperar la confirmación.

ventana deslizante tcp

¿Qué es un protocolo de transporte?

En sentido figurado, TCP coloca una ventana en el flujo de datos en espera de ser transmitido y transmite todos los datos que se encuentran dentro de la ventana. Después de recibir la confirmación de que se han entregado todos los datos, TCP mueve la ventana más abajo en la secuencia y transmite los siguientes mensajes que caen en ella. Al trabajar con varios mensajes a la vez, TCP puede "colocarlos" simultáneamente en el canal de red y solo entonces esperar a que llegue el acuse de recibo. El método de ventana deslizante aumenta significativamente el rendimiento de la conexión, así como la eficiencia de los ciclos de confirmación de entrega y mensajes.

Transmisión de mensajes y confirmaciones de entrega mediante un esquema de ventana deslizante.

El transmisor y el receptor utilizan una ventana deslizante de tres paquetes de ancho. Es decir, el transmisor primero envía tres paquetes y solo luego espera que llegue la confirmación. Habiendo recibido la confirmación de la entrega del penúltimo paquete, el transmisor puede enviar los tres siguientes.

TCP regula el ancho de banda de la red negociando con la otra parte ciertos parámetros del flujo de datos. Además, el proceso de ajuste se produce a lo largo de toda la conexión TCP. En particular, el ajuste consiste en cambiar el tamaño de la ventana corredera. Si la red no está muy cargada y la probabilidad de colisión de datos es mínima, TCP puede aumentar el tamaño de la ventana deslizante. Al mismo tiempo, la velocidad de salida de datos por canal aumenta y la conexión se vuelve más eficiente, ya que pasan más datos por la red al mismo tiempo.

Si por el contrario la probabilidad de colisión de datos es alta, TCP reduce el tamaño de la ventana deslizante. Si se considera que el tamaño de la ventana deslizante es de ocho paquetes para el tráfico de red normal, en las peores condiciones, cuando Internet está muy cargado, su tamaño se puede reducir a cinco. Por el contrario, cuando hay pocos datos en la red, el tamaño de la ventana puede aumentar, por ejemplo, a 10-20 paquetes.

Tenga en cuenta que el diagrama descrito en los párrafos anteriores está algo simplificado. TCP en realidad especifica el tamaño de la ventana en bytes. Es decir, el tamaño de ventana predeterminado puede ser de varios miles de bytes, en lugar de ocho, diez o doce bytes como en el ejemplo anterior. Normalmente, el módulo TCP transmite varios segmentos antes de que la ventana deslizante se llene por completo. La mayoría de los sistemas de Internet configuran la ventana en 4096 bytes de forma predeterminada. A veces, el tamaño de la ventana es de 8192 o 16384 bytes.

Una de las técnicas más naturales utilizadas para organizar una transmisión confiable es el apretón de manos. El remitente envía los datos y espera hasta recibir un recibo que confirme que sus datos han llegado de forma segura al destinatario. El protocolo TCP utiliza un caso especial de protocolo de enlace: el algoritmo de ventana deslizante. Antes de pasar a una consideración detallada de las características de implementación de este algoritmo en el protocolo TCP, resulta muy útil discutirlo desde una perspectiva general.

Por tanto, existen dos métodos para organizar el proceso de intercambio de recibos: el método de fuente inactiva y el método de ventana deslizante.

El método de fuente inactiva requiere que la fuente que envía la trama (en este caso, no importa qué nombre se use para la unidad de datos transmitidos) espere una recepción del receptor que indique que se ha recibido la trama original y que los datos en es correcto, y solo entonces envió el siguiente fotograma (o repitió el distorsionado). Si el recibo no llega dentro del tiempo de espera, entonces la trama (o recibo) se considera perdida y se repite su transmisión. En la Fig. La Figura 1 muestra que la segunda trama se envía sólo después de que ha llegado un recibo que confirma la entrega de la primera trama. Sin embargo, luego hubo una larga pausa en el envío del siguiente tercer fotograma.

Durante esta pausa, la fuente se vio obligada a repetir la transmisión del cuadro 2, ya que se perdió el recibo de la primera copia del mismo. Está claro que con un algoritmo de este tipo para la operación de origen, el receptor debe poder reconocer fotogramas duplicados y deshacerse de ellos.

Arroz. 1. Método de fuente inactiva

Es bastante obvio que cuando se utiliza este método, el rendimiento del intercambio de datos es menor de lo potencialmente posible: el transmisor podría enviar la siguiente trama inmediatamente después de enviar la anterior, pero debe esperar a que llegue el recibo.

El segundo método se llama método de ventana deslizante. En este método, para aumentar la velocidad de transferencia de datos, se permite a la fuente transmitir una cierta cantidad de cuadros en modo continuo, es decir, a la velocidad máxima posible para la fuente incluso antes de recibir recibos de estos cuadros. El número de fotogramas que se permite transmitir de esta forma se denomina tamaño de ventana.

La Figura 2 ilustra la aplicación de este método para una ventana de 5 cuadros. En el momento inicial, cuando todavía no se han enviado fotogramas, la ventana define un rango de números de fotogramas del 1 al 5 inclusive. La fuente comienza a transmitir tramas y después de un tiempo recibe recibos en respuesta. Para simplificar, supongamos que los recibos llegan en la misma secuencia (pero no necesariamente al mismo ritmo) que los fotogramas a los que corresponden. En el momento en que el remitente recibe el recibo 1, la ventana sube una posición, definiendo un nuevo rango de tramas permitidas para el envío (de 2 a 6).

Los procesos de envío de paquetes y recepción de recibos son bastante independientes entre sí. En nuestro ejemplo, el remitente continúa transmitiendo tramas, pero pasa un tiempo sin recibir un recibo. Después de transmitir el cuadro 6, la ventana se agota y la fuente detiene la transmisión.

Arroz. 2. Método de ventana deslizante

Después de recibir el recibo 2 (para el cuadro 2), la ventana sube en uno, definiendo el rango de cuadros permitidos para la transmisión del 3 al 7. Un "deslizamiento" similar de la ventana hacia arriba ocurre después de recibir cada recibo: la ventana sube 1, pero su tamaño no cambia y permanece igual a 5. Luego de que llega el recibo 8, la ventana termina en el rango de 9 a 13 y permanece así por bastante tiempo, ya que por alguna razón la fuente deja de recibir confirmaciones sobre el entrega de marcos. Habiendo enviado la última trama permitida 13, el transmisor detiene nuevamente la transmisión para reanudarla después de recibir el recibo 9.

Cuando se envía una trama, se establece un tiempo de espera en el origen. Si un recibo de la trama enviada no llega dentro del tiempo especificado, entonces la trama (o el recibo de la misma) se considera perdida y se transmite nuevamente. Si el flujo de recibos llega regularmente dentro de una tolerancia de 5 cuadros, entonces el tipo de cambio alcanza el valor máximo posible para un canal determinado y el protocolo adoptado.

En general, el método de ventana deslizante es más complejo de implementar que el método de fuente inactiva, ya que el transmisor debe almacenar en un buffer copias de todas las tramas para las cuales aún no se han recibido acuses de recibo. Además, cuando se utiliza este método, es necesario monitorear varios parámetros del algoritmo, como el tamaño de la ventana, el número de cuadro para el cual se recibió el recibo y el número de cuadro que aún se puede transmitir antes de recibir un nuevo recibo.

Este algoritmo (algoritmo LZ77 4 El nombre de los autores Abraham Lempel y Jacob Ziv. Publicado en 1977.) fue uno de los primeros en utilizar un diccionario. Los últimos N elementos ya codificados de la secuencia se utilizan como diccionario. Durante el proceso de compresión, el diccionario de subsecuencias se mueve ("se desliza") a lo largo de la secuencia de entrada. La cadena de elementos en la salida se codifica de la siguiente manera: la posición de la parte coincidente de la cadena de elementos procesada en el diccionario: desplazamiento (en relación con la posición actual), longitud, el primer elemento que sigue a la parte coincidente de la cadena. La longitud de la cadena coincidente está limitada arriba por el número n. En consecuencia, la tarea es encontrar la cadena más grande del diccionario que coincida con la secuencia que se está procesando. Si no hay coincidencias, se registra el desplazamiento cero, la longitud unitaria y solo el primer elemento de la secuencia no codificada: (0, 1, e).

El esquema de codificación descrito anteriormente conduce al concepto ventana deslizante(Ventana corredera inglesa), que consta de dos partes:

  1. subsecuencia de elementos ya codificados de longitud N - diccionario - búfer de búsqueda(búfer de búsqueda en inglés);
  2. una subsecuencia de longitud n de una cadena de elementos para la cual se intentará encontrar una coincidencia - búfer de vista previa(búfer de anticipación en inglés).

En términos ventana deslizante El algoritmo de compresión se describe a continuación: si e 1, . . . , e i es una subsecuencia ya codificada, entonces e i-N+1 , . . . , e i es un diccionario o búfer de búsqueda, y e i+1 , . . . , e i+n - búfer de vista previa. De manera similar, la tarea es encontrar la cadena más grande de elementos del búfer de vista previa, comenzando desde el elemento e i+1, que coincida con la cadena del búfer de búsqueda; esta cadena puede comenzar desde cualquier elemento y terminar con cualquier elemento, es decir ir más allá del búfer de búsqueda, invadiendo el búfer de vista previa. Es natural ir más allá ventana deslizante está prohibido. Deje que la cadena de elementos coincidentes de longitud máxima e i-p , , se encuentre en la ventana deslizante. . . , e i+q , entonces se codificará de la siguiente manera: (p+1, q+p+1, e i+p+q+2 ) - desplazamiento relativo al comienzo del búfer de vista previa (e i+1) , longitud de la cadena coincidente, el elemento que sigue a la cadena coincidente del búfer de vista previa. Si la búsqueda da como resultado dos coincidencias de la misma longitud, se selecciona la más cercana al comienzo del búfer de vista previa. Después de esto, la ventana deslizante se desplaza p + q + 2 elementos hacia adelante y se repite el procedimiento de búsqueda.

La elección de los números N y n es un problema importante aparte, porque Cuanto mayores sean N y n, más espacio se necesitará para almacenar los valores de desplazamiento y longitud. Naturalmente, el tiempo de ejecución del algoritmo también aumenta al aumentar N y n. Tenga en cuenta que N y n suelen diferir en un orden de magnitud.

Demos un ejemplo de compresión usando este algoritmo. Comprimamos la cadena "TOBEORNOTTOBE" con los parámetros N = 10 y n = 3:

paso ventana deslizante Máx. cadena combinada salida
1 ""+"TOB" t 0,1,T
2 "T"+"OBE" oh 0,1,O
3 "A"+"BEO" B 0.1.B
4 "TOB"+"EOR" mi 0.1.E
5 "TOBE"+"ORN" oh 3,1,R
6 "TOBEOR"+"NO" norte 0,1,norte
7 "TOBEORN"+"OTT" oh 3,1,T
8 "TOBEORNOT"+"TOBE" TOB 9.3.E

Si asignamos 4 bits para almacenar el desplazamiento, 2 bits para la longitud y 8 bits para los elementos, entonces la longitud de la secuencia codificada (sin tener en cuenta el final de la designación de la secuencia) será 4 x 8 + 2 x 8 + 8 x 8 = 112 bits, y el original será de 102 bat. En este caso, no comprimimos la secuencia, sino que, por el contrario, aumentamos la redundancia de la representación. Esto se debe a que la longitud de la secuencia es demasiado pequeña para dicho algoritmo. Pero, por ejemplo, el dibujo del árbol de código de Huffman en la Fig. 13.1, que ocupa 420 kilobytes de espacio en disco, después de la compresión tiene un tamaño de aproximadamente 310 kilobytes.

A continuación se muestra el pseudocódigo del algoritmo de compresión.

// M - límite fijo // lee caracteres secuencialmente del flujo de entrada // in - entrada - secuencia comprimida // n - longitud máxima de la cadena // pos - posición en el diccionario, len - longitud de la cadena // nelem - elemento detrás de la cadena, str - cadena encontrada // entrada - entrada, salida - salida // SlideWindow - búfer de búsqueda while(!in.EOF()) //mientras hay datos ( // buscando la coincidencia máxima y su parámetros SlideWindow.FindBestMatch(in, n, pos, len, nelem); // escribir salida: desplazamiento, longitud, elemento out.Write(pos out.Write(len); elementos SlideWindow.Move (in, len + 1); Listado 13.2. Algoritmo de compresión LZ77

Decodificar una secuencia comprimida es una decodificación directa de los códigos grabados: cada entrada se relaciona con una cadena del diccionario y un elemento escrito explícitamente, después de lo cual se desplaza el diccionario. Obviamente, el diccionario se recrea a medida que se ejecuta el algoritmo de decodificación.

Se puede observar que el proceso de decodificación es mucho más sencillo desde el punto de vista computacional.

// n - longitud máxima de la cadena // pos - posición en el diccionario, len - longitud de la cadena // nelem - elemento detrás de la cadena, str - cadena encontrada // in - entrada, out - salida // Dict - diccionario while(!in. EOF()) //mientras hay datos ( in.Read(pos); in.Read(len); in.Read(nelem); if(pos == 0) ( //nuevo separado carácter //elimina el primero del diccionario (lejos) un elemento Dict.Remove(1); //agrega un elemento al diccionario Dict.Add(nelem out.Write(nelem); línea correspondiente del diccionario str = Dict.Get(pos, len); //eliminar elementos len + 1 del diccionario Dict.Remove(len + 1); //Agregar una cadena al diccionario Dict.Add(str + nelem); ); fuera.Escribir(cadena + nelem) ) Listado 13.3. Algoritmo

Este algoritmo es el fundador de toda una familia de algoritmos y prácticamente no se utiliza en su forma original. Sus ventajas incluyen un grado decente de compresión en secuencias bastante grandes, una descompresión rápida y la ausencia de una patente 5 un documento que otorga el derecho exclusivo a explotar la invención durante un tiempo determinado (normalmente entre 15 y 20 años) al algoritmo. Las desventajas incluyen una velocidad de compresión lenta, así como una relación de compresión más baja que los algoritmos alternativos (las modificaciones del algoritmo combaten esta desventaja). La combinación de los algoritmos de Huffman ("Algoritmos de compresión de imágenes sin pérdida") y LZ77 se denomina método DEFLATE 6. Esto se llama compresión y la descompresión se llama INFLATE (inglés: DEFLATE - desinflar, INFLATE - inflar).. El método DEFLATE se utiliza tanto en el formato gráfico PNG como en el formato universal de compresión de datos ZIP.




Arriba