División de paquetes adhesivos en TCP y su solución
Suponiendo que el cliente envía dos paquetes de datos consecutivos al servidor (representados por el paquete de datos 1 y el paquete de datos 2), los datos recibidos por el servidor se pueden dividir en los siguientes tres tipos
Cuando los datos a transmitir son mayores que el MSS o MTU, los datos se dividirán en varios paquetes para su transmisión. Dado que el MSS se calcula en función de la MTU, cuando los datos enviados satisfacen el MSS, también deben satisfacer la MTU.
La MTU es el límite de los datos que se pueden transmitir en una red Ethernet (capa de enlace de datos).
Dado que la MTU limita el número máximo de bytes que se pueden enviar a la vez a 1.500 bytes, el protocolo TCP agrega encabezados TCP y encabezados IP adicionales al enviar datos, por lo que estas dos partes se restan. Tamaño máximo de los datos de la aplicación real que el protocolo TCP puede enviar al mismo tiempo, es decir, MSS.
Longitud MSS = longitud MTU - encabezado IP - encabezado TCP
La longitud del encabezado TCP es de 20 bytes en IPv4 y la longitud del encabezado IP es de 20 bytes en IPv6. la longitud del encabezado IP es de 40 bytes, por lo tanto: en IPv4, la longitud máxima del MSS de Ethernet puede alcanzar los 1460 bytes; en IPv6, la longitud máxima del MSS de Ethernet puede alcanzar los 1440 bytes;
Cabe señalar que MSS representa la longitud máxima de datos que se pueden enviar a la vez, no los datos ni la longitud real de los datos. Cuando el remitente envía datos, cuando la cantidad de datos es mayor que MSS, el sistema operativo dividirá los datos para que cada parte sea más pequeña que MSS. Este es el paquete dividido y luego agregará cada parte al encabezado TCP para formar múltiples. TCP completo Cuando se envía un mensaje, por supuesto, se agregará el contenido correspondiente cuando pase por la capa de red y la capa de enlace de datos.
El control de flujo TCP utiliza principalmente el protocolo de ventana deslizante. La ventana deslizante es el tamaño de ventana utilizado por el receptor para indicarle al remitente el tamaño de los datos almacenados en caché del receptor. El remitente puede controlarlo para lograr el control del flujo. El tamaño de esta ventana es la cantidad de datos que transferimos cada vez. Todos los marcos de datos están numerados en secuencia. El remitente siempre mantiene una ventana de envío durante el proceso de envío. Solo se permiten marcos de datos dentro de la ventana de envío. Al mismo tiempo, el receptor también mantiene una ventana de recepción. la ventana de recepción puede enviarse. Esto permite lograr el control del flujo ajustando el tamaño de las ventanas del remitente y del receptor.
El campo de tamaño de ventana deslizante es donde el receptor le dice al remitente cuánto buffer le queda disponible para recibir datos. Por lo tanto, el remitente puede enviar datos de acuerdo con las capacidades de procesamiento del receptor sin que el receptor no pueda procesar los datos.
Echemos un vistazo a cómo las ventanas deslizantes provocan paquetes pegajosos y sin envolver.
El propósito del algoritmo de Nagle es enviar la mayor cantidad de datos posible para evitar inundar la red con grandes cantidades de pequeños fragmentos de datos.
La definición básica del algoritmo de Nagle es que en cualquier momento dado, puede haber como máximo un pequeño segmento de red sin confirmar. "Segmento de red pequeño" se refiere al bloque de datos más pequeño que el tamaño de MSS, mientras que el segmento de red "no reconocido" se refiere al bloque de datos que no ha recibido un ACK de la otra parte para confirmar que los datos se han recibido después de ser enviados.
Implementar reglas del algoritmo Nagle:
Cada segmento de UDP es un mensaje y la aplicación debe extraer datos en unidades de mensajes, no en bytes arbitrarios a la vez.