Colección de citas famosas - Colección de consignas - Analizar los principios del protocolo TCP

Analizar los principios del protocolo TCP

Cuatro aspectos principales del principio:

1. Establecimiento de conexión y desconexión del protocolo tcp

2. Retransmisión de tiempo de espera del protocolo tcp

En tercer lugar, gestión de la ventana tcp. el protocolo

4. Control de congestión del protocolo tcp

TCP es un protocolo orientado a la conexión, es decir, los datos solo se pueden enviar cuando la otra parte existe. TCP logra una transmisión confiable a través de mecanismos como sumas de verificación, números de secuencia, confirmaciones, control de retransmisión, administración de conexiones y control de ventanas.

1. Propósito: El protocolo de enlace de tres vías TCP significa que el cliente y el servidor siempre envían tres paquetes. Estos tres paquetes se utilizan para confirmar si la capacidad de envío activo y la capacidad de recepción pasiva son normales.

2. Esencia: establezca una conexión TCP a través del enlace cuádruple especificado (dirección de origen, puerto de origen, dirección de destino, puerto de destino), sincronice a ambas partes para enviar el número de secuencia seq y el número de confirmación ACK respectivamente, y También intercambie información sobre el tamaño de la ventana.

El proceso de protocolo de enlace de tres vías se implementa intercambiando números de secuencia seq.

Simplemente busque una dirección en línea. Si desea ver la dirección IP por nombre de dominio, puede hacer ping para ver la conexión.

① 192.168.3.7 envía el segmento [SYN] a 222.169.228.6438+046, notificando que el número de secuencia X es 0.

② 222.169.228.146 envía el segmento [SYN, ACK] a 192.168.3.7, notificando que el número de secuencia Y es 0 y el número de confirmación ACK es x+1=1.

③192.168.3.7 envía el segmento [ACK] al 222.169.228.146, notificando que el número de confirmación ACK es y+1=1.

Otros parámetros en el segmento de mensaje:

MSS=1460: El segmento de mensaje máximo que se permite recibir de la otra parte, la cifra es 1460 bytes (refiriéndose a los datos transportados, excluyendo el encabezado del párrafo del mensaje).

Win=8192: el tamaño de la ventana deslizante es 8192 bytes.

SACK_PERM=1: Activa la confirmación de selección. Por qué utilizar SACK: el modo de reconocimiento TCP no es un reconocimiento segmento por segmento, sino un modo de reconocimiento acumulativo. Los segmentos de mensajes recibidos por el servidor están desordenados, por lo que los números de secuencia también son discontinuos y la cola de recepción del servidor estará vacía. Para comprender el agujero, conozca de antemano el agujero actual, maneje la fuga y adopte la retransmisión. La forma de saberlo de antemano es a través del mensaje de opción SACK, que contiene el rango de números de secuencia de los bloques de datos que el receptor ha recibido exitosamente. El campo SACK_PERM es 1, lo que indica que la función SACK está habilitada.

La capa de red puede tener problemas de pérdida, duplicación y desorden. tcp proporciona servicios confiables de transmisión de datos. Para garantizar la precisión de los datos, TCP retransmitirá los paquetes de datos que crea que se han perdido. Existen dos mecanismos de retransmisión: uno se basa en la retransmisión en tiempo y el otro se basa en la información proporcionada por el segmento de acuse de recibo.

RTT: el tiempo desde la finalización del envío de datos (el último bit se envía al enlace de datos) hasta la recepción de la señal de confirmación (tiempo de ida y vuelta).

RTO: tiempo de espera de retransmisión (tcp establece un temporizador al enviar datos. Cuando el temporizador no recibe información de confirmación de datos, provoca un tiempo de espera y una retransmisión. El estándar de juicio es RTO).

Pensamiento: Se envían cuatro segmentos con números de secuencia 1, 2, 3 y 4, y el segmento con número de secuencia 2 se pierde. ¿Qué debo hacer?

Después de recibir el mensaje de confirmación de seq1 (ACK=2), el remitente espera el mensaje de confirmación de seq=2.

Cuando el receptor recibe un mensaje con número de secuencia 3 (se ha perdido 2), envía un mensaje de acuse de recibo con acuse de recibo 4 y un mensaje de acuse de recibo con acuse de recibo 2. Ante un mensaje omitido, el remitente esperará hasta que transcurra el tiempo especificado y reenviará el mensaje 2.

¿Por qué no aparece una ventana emergente para confirmar?

Tcp es un método de confirmación acumulativa. Si se confirma el mensaje 3, significa que el mensaje 1 y el mensaje 2 se han recibido correctamente.

Modo de procesamiento de tiempo de espera:

Pensamiento: el temporizador anterior se basa en el tiempo de retransmisión, por lo que la retransmisión puede determinarse por la cantidad de veces que se confirma el mensaje.

Después de recibir el mensaje de confirmación de seq1 (ACK=2), el remitente espera el mensaje de confirmación de seq=2.

El receptor recibe los mensajes 3, 4 y 5, pero no el mensaje 2, por lo que el receptor envía tres mensajes de confirmación con ACK de 2. El remitente recibe estos tres mensajes de confirmación y reenvía el mensaje 2. .

Pensamiento: si los paquetes se pierden en muchos lugares durante la retransmisión rápida (mensaje 2, mensaje 7, mensaje 9, mensaje 30, mensaje 300...), será muy doloroso retransmitirlo de principio a fin. fin. .

Pensamiento: la retransmisión SACK no tiene reglas claras sobre cómo operar los segmentos de datos repetidos recibidos. La retransmisión DSACK permite al remitente saber qué datos se han recibido repetidamente y descubrir qué lo causó.

El remitente no recibe el paquete ACK 100-199 y reenvía el mensaje después del tiempo especificado.

El receptor ha recibido los mensajes enviados por 200-299, y 100-199 son mensajes duplicados.

Luego envíe un mensaje ACK al remitente, configure SACK 100-199 para notificar al remitente que se han recibido los paquetes 100-199, solo en respuesta a la pérdida del paquete ACK.

Debido a retrasos en la red, los paquetes 100-199 enviados por el remitente nunca llegan al receptor.

El receptor envía tres mensajes de confirmación ACK 200 consecutivos, lo que activa una retransmisión rápida. El remitente recibe un mensaje de confirmación ACK 500, que indica que todos los mensajes anteriores se han entregado correctamente.

El receptor recibe el mensaje retrasado 100-199 y envía nuevamente el mensaje ACK 500 de SACK 100-199 al remitente.

El remitente descubrió que se trataba de un mensaje duplicado y consideró que se debía a un retraso en la red.

Retransmisión con temporizador: retransmisión según el tiempo de espera.

Retransmisión rápida: retransmite una vez en función del mismo mensaje ACK recibido tres veces.

Seleccione la retransmisión de confirmación: retransmita según la información SACK proporcionada por el extremo receptor.

Retransmisión DSACK: En función de los mensajes repetidos, se puede determinar si el mensaje ACK se pierde o la red se retrasa.

Categoría 1: Enviar y confirmar (se han recibido datos del mensaje ACK).

Categoría 2: Enviado pero no confirmado.

Categoría 3: Se enviará próximamente.

Categoría 4: Sólo se puede enviar después de mover la ventana.

Ventana disponible: 46-51 bytes.

Ventana de envío: 32-51 bytes.

RCV. NXT: Borde Izquierdo

RCV. WND: Ventana de recepción

RCV. NXT+RCV. WND: Límite derecho

El número de secuencia recibido por el receptor es menor que el límite izquierdo, por lo que se considera datos duplicados y se descarta.

El número de secuencia recibido por el receptor es mayor que el límite derecho, por lo que se considera que está más allá del rango de procesamiento y se descarta.

Nota: El protocolo tcp es una estructura ACK acumulativa. Solo cuando el número de secuencia de datos sea igual al límite izquierdo, los datos no se descartarán.

Si se pierde el ACK de la actualización de la ventana, el borde izquierdo de la ventana se mueve hacia la derecha para el remitente. Una vez que ACK confirma los datos enviados, la distancia entre los límites izquierdo y derecho se vuelve más pequeña y la ventana del remitente también se hace más pequeña. Cuando los límites izquierdo y derecho son iguales, se denomina ventana cero. Después de la ventana cero: cuando el receptor envía una actualización de la ventana, el ACK de actualización de la ventana se perderá.

& lt& lttcp/ip >Descripción detallada; & gtExplicación:

TCP implementa el control de flujo a través de la ventana de notificación del extremo receptor. La ventana de notificación indica la cantidad de datos que el receptor. final puede recibir.

Cuando el valor de la ventana se convierte en 0, evita efectivamente que el remitente continúe enviando hasta que el tamaño de la ventana devuelva un valor distinto de cero.

Cuando el receptor recupere espacio libre, enviará una ventana de actualización al remitente, notificándole que puede continuar enviando datos. Estas actualizaciones de ventana generalmente no contienen datos (ACK puro) y el ACK de actualización de ventana enviado por el receptor al remitente puede perderse. Como resultado, las dos partes estaban a la espera y se produjo un punto muerto.

Solución:

El remitente utilizará un temporizador persistente para consultar de forma intermitente al receptor para ver si su ventana ha aumentado. Activa la detección de ventana y obliga al receptor a devolver un ACK. Envíe varias sondas, el tamaño de la ventana sigue siendo 0 y luego desconéctese.

En el caso del sistema de agua de fábrica:

①La ventana de notificación del extremo receptor es demasiado pequeña.

②Los datos enviados por el remitente son demasiado pequeños.

Solución:

① Para el receptor: No publicar el valor de la ventana pequeña.

[RFC1122] Descripción: No se puede anunciar ninguna ventana más grande que la ventana actual hasta que la ventana pueda aumentarse a un segmento de mensaje de longitud completa (MSS en el extremo receptor) o la mitad del espacio de búfer del extremo receptor ( el que sea menor) valor de la ventana. Estándar: min(MSS, espacio de caché/2).

②Para el remitente: No envíe mensajes de texto.

Se cumple al menos uno de los siguientes requisitos:

(1) Puede enviar mensajes de bytes MSS.

Tamaño de ventana>=MSS o tamaño de datos>=MSS

(2) La longitud del segmento de datos>=la mitad del valor máximo de ventana anunciado por el receptor antes del envío.

Reciba el paquete de confirmación de los datos enviados anteriormente y luego envíe los datos; de lo contrario, los datos se guardarán.

(3) -1 No hay datos no reconocidos en la transmisión o -2 El algoritmo Nagle está deshabilitado en la conexión.

Tcp implementa un control de flujo basado en el campo de tamaño de la ventana de notificación en el paquete ACK.

Cuando la red se paraliza debido a una carga de comunicación a gran escala, la red predeterminada entra en un estado de congestión, lo que ralentiza la transmisión TCP. Cuando el remitente y el receptor necesitan soportar tareas de comunicación sobrecargadas, se adopta el método de reducir la tasa de envío o eventualmente descartar parte de los datos.

La variable que refleja la capacidad de transmisión de la red se denomina ventana de congestión (cwnd).

Ventana de anuncio (awnd).

Ventana de envío swnd=min(cwnd, awnd)

Propósito: TCP puede obtener el valor de cwnd antes de usar el algoritmo para evitar la congestión, explorar más ancho de banda disponible y ayudar a TCP a establecer el ACK reloj.

[RFC5681]: En la etapa inicial de transmisión, dado que se desconoce la capacidad de transmisión de la red, es necesario detectar lentamente los recursos de transmisión disponibles para evitar la congestión causada por la inyección masiva de datos en un corto período de tiempo. . El algoritmo de inicio lento está diseñado para resolver este problema. Es necesario realizar un inicio lento al comienzo de la transferencia de datos o después de que el temporizador de retransmisión detecte una pérdida de paquete.

Valor de la ventana de congestión: cwnd se duplica por cada valor de ACK recibido. Por lo tanto, suponiendo que no hay pérdida de paquetes y que cada paquete tiene un valor de reconocimiento correspondiente, swnd= aumenta exponencialmente después de K rondas.

SMSS es el tamaño máximo de segmento de datos del remitente.

Durante la fase de inicio lento, cwnd crecerá exponencialmente, lo que ayudará a establecer rápidamente el umbral de inicio lento (ssthresh). Con el umbral, tcp entrará en la fase de prevención de congestión y cwnd aumentará linealmente cada vez, lo que es similar al tamaño del segmento de datos transmitido con éxito.

Fórmula de implementación: cwnd+=SMSS*SMSS/cwnd.

Cuando la conexión recién se establece, se utiliza el algoritmo de inicio lento. La ventana inicial es 4. Después de recibir el ACK, cwnd cambia a 8. Después de recibir otro ACK, cwnd se convierte en 16 y luego baja a 32 y 64, alcanzando el umbral de ssthresh de 64.

Empiece a utilizar el algoritmo para evitar la congestión y establezca ssthresh en ssthresh/2 con un valor de 32. Comenzando desde la ventana inicial 4, aumentando linealmente hasta ssthresh=32.

Cuando cwnd

Cuando cwnd> Ssthresh, se utiliza el algoritmo para evitar la congestión.

Momento para aplicar el algoritmo de recuperación rápida: antes de que comience la retransmisión rápida y antes de que llegue el segmento ACK normal no desordenado. Inicie el algoritmo de recuperación rápida.

Proceso de implementación:

①Establezca ssthresh en 1/2 cwnd y establezca cwnd en ssthresh+3*SMSS.

② Cada vez que se recibe un ACK duplicado, el valor cwnd aumenta temporalmente en 1 SMSS.

③Después de recibir el nuevo ACK de datos, configure cwnd en ssthresh.

Referencia: >