Red de conocimiento informático - Problemas con los teléfonos móviles - Fragmentación TCP UDP Fragmentación IP

Fragmentación TCP UDP Fragmentación IP

Blog de aprendizaje de ip udp

Protocolo de enlace de 3 vías y forma de onda de 4 vías

¿Unidad de transmisión máxima de MTU de capa de enlace 1500? MISS segmentación máxima

¿Datos de capa TCP? +Datos

TCP+MISS+id2

D1

ip +TCP +D1+id2

tcp a través de un segmento ( D1) ¿Pasó con éxito el segundo segmento (D2)? Número de datos id1

¿Temporizador de supervivencia del paquete? 2 h ¿No hay confirmación de la otra parte después de 2 h? ¿Enviar un paquete de sonda cada 75 segundos y enviarlo 10 veces o falla si? no hay respuesta

UDP (Protocolo de datagramas de usuario)-SMS

Solo envía, sin confirmar si la otra parte lo ha recibido

Combina los datos y la fuente dirección, el destino está encapsulado en un paquete y no se requiere conexión

El tamaño de cada paquete está limitado a 64K

Debido a que no se requiere conexión, no es confiable. Debido a que no necesita establecer una conexión, es un protocolo poco confiable

No necesita establecer una conexión y es muy rápido

Escenarios de aplicación: transmisión de video en tiempo real, juego LOL

TCP (Protocolo de control de transmisión)

Establece una conexión para formar un canal para transmitir datos

Realiza grandes transferencias de datos dentro de la conexión (sin límite de tamaño de datos)

La conexión se completa mediante un protocolo de enlace de tres vías. La conexión se completa mediante un protocolo de enlace de tres vías, que es un protocolo confiable y se puede entregar de manera segura

Se debe establecer la conexión y la eficiencia será ligeramente menor

Los datos la capa de enlace no puede tener más de 1500 bytes. Demasiados datos deben estar fragmentados

Sabemos que cuando los datos de la red se transmiten entre programas de la capa de aplicación, en el lado del remitente, los datos se transmitirán a través de la pila de protocolos. la capa de aplicación, a través de la capa TCP/IP, y luego a través de la capa de ruta de cadena, y luego a través de la capa TCP/IP.

En el extremo receptor, la secuencia se invierte. Los datos se reciben a través de la capa de enlace, luego se transmiten hacia arriba a través de la capa IP/TCP y finalmente el programa de la capa de aplicación los lee.

Cuando la capa IP transmite datos a la capa de enlace, generalmente lo hace poco a poco. Para la mayoría de las capas de enlace, tiene una Unidad de Transmisión Máxima (MTU), que representa la cantidad de datos enviados está determinada por. el hardware. Por ejemplo, Ethernet tiene una MTU de 1500 bytes. Cuando la cantidad de datos transmitidos por la capa IP a la capa de enlace es mayor que su MTU, la capa IP dividirá los datos en fragmentos de datos más pequeños que la MTU de la capa de enlace y luego los transmitirá a la capa de enlace para su transmisión. Sin embargo, para diferentes protocolos de capa de transporte (TCP/UDP), la necesidad de dividir o cortar en la capa IP también es diferente

Segmentación en la capa TCP

Para TCP, aunque probablemente es muy importante evitar rebanar. Para TCP, evite la fragmentación cuando sea posible. Porque si la capa IP se fragmenta y se pierde parte de los datos, para el protocolo TCP, para garantizar la confiabilidad, aumentará la probabilidad de retransmisión del paquete de datos, y solo se puede retransmitir el paquete de datos TCP completo (paquete de fragmentación IP antes), porque la capa TCP no conoce los detalles de la fragmentación de la capa IP y no le importa.

Cuando la capa TCP retransmite paquetes TCP, también tiene un impacto directo en el rendimiento de la capa de aplicación, especialmente cuando la aplicación utiliza IO de bloqueo para lectura y escritura. Para comprender esto, primero debemos comprender qué hace el programa de la capa de aplicación cuando escribe datos en la pila TCPIP.

En el programa de la capa de aplicación, podemos tener nuestro propio búfer de envío, y la propia capa TCP también tiene su propio búfer de envío. El tamaño predeterminado suele ser 8k, que se puede configurar o leer a través de SO_SNDBUF. Cuando escribimos datos desde la capa de aplicación a la capa TCP, en realidad copiamos los datos del búfer de envío de la capa de aplicación al búfer de envío de la capa TCP.

Cuando el búfer de envío de la capa TCP está lleno o la red está inactiva, la capa TCP pasa los datos de su búfer a la cola de envío de la capa de enlace a través de la capa IP. Si el búfer de envío de la capa TCP está lleno y los datos de la capa de aplicación aún no se han escrito, el kernel suspenderá la llamada al sistema de escritura hasta que todos los datos de la capa de aplicación se copien en el búfer de la capa TCP antes de regresar. a la capa de aplicación. Dado que la capa TCP quiere garantizar la confiabilidad del paquete de datos, es decir, la retransmisión cuando se pierde el paquete de datos, la capa TCP necesita guardar temporalmente los datos del paquete de datos TCP saliente en su búfer de envío para que pueda enviarse al Es posible que se produzcan retransmisiones posteriores después de alcanzar la red.

Teniendo esto en cuenta, si IP fragmenta los datos de la capa TCP, existe la posibilidad de que el programa de la capa de aplicación se bloquee mientras escribe las llamadas al sistema, lo que resultará en una degradación del rendimiento.

Cómo la capa TCP evita la fragmentación en la capa IP

Primero, revisemos el protocolo de enlace de tres vías que utiliza TCP para establecer una conexión:

En En estos apretones de manos, además de reconocer el bloque SYN, los dos extremos de la comunicación también negocian un valor MSS que le indica a la otra parte el tamaño del bloque TCP que se puede enviar. Este valor generalmente se toma como el tamaño de MTU de la capa de enlace menos el tamaño del encabezado TCP y el tamaño del encabezado IP. MSS = MTU - Tamaño del encabezado TCP - Tamaño del encabezado IP. El valor de MTU se puede encontrar preguntando a la capa de enlace. Cuando ambos extremos confirman el MSS de la comunicación, cuando la capa TCP transmite datos a la capa IP, si el tamaño del búfer de la capa TCP es mayor que el MSS, la capa TCP cortará los datos en su búfer de envío en tamaño MSS. paquetes para su transmisión. Debido a que el MSS se calcula restando el tamaño del encabezado TCP y el tamaño del encabezado IP de la MTU, el MSS debe ser más pequeño que la MTU para evitar la fragmentación de la capa IP.

Fragmentación en la capa UDP

¿Qué pasa si utilizamos el protocolo UDP en lugar del protocolo TCP? ¿Se producirá fragmentación en la capa IP? Dado que UDP no es necesario para garantizar la confiabilidad, no guarda los paquetes enviados, mientras que la razón por la que TCP guarda los paquetes enviados es para las retransmisiones. Por lo tanto, UDP en sí no tiene un búfer de envío como TCP. Esto da como resultado que cuando se emite una llamada del sistema de escritura a UDP, los datos de la capa de aplicación en realidad se transmiten directamente a la capa IP. Dado que la capa IP en sí no tiene búfer, los datos se escribirán directamente en la cola de salida de la. capa de enlace. En este caso, ¿la capa IP fragmentará los datos provenientes de UDP? Esto depende del tamaño del datagrama UDP. Si el tamaño del datagrama UDP es mayor que la MTU de la capa de enlace, entonces la capa IP lo fragmentará directamente y lo enviará a la cola de salida de la capa de enlace. De lo contrario, no lo fragmentará ni lo enviará junto con el. IP El encabezado se envía directamente a la cola de salida de la capa de enlace.

Experimento TCP/UDP

Después de leer la teoría, practiquémosla para ver si se ajusta a la teoría anterior.

Para TCP, se debe intentar evitar la fragmentación. Supongamos que el tamaño de los datos que enviamos a la capa TCP es 2748 bytes, que es significativamente mayor que el tamaño de los datos enviados por la capa de enlace. En este caso,

Echemos un vistazo a los datos enviados desde TCP. capa, ¿Se fragmentará la IP?

En la primera imagen, parece que los 2748 bytes de la capa de aplicación están segmentados en la capa TCP. Hay dos segmentos TCP en la capa, uno de 1460 bytes y el otro de 1288 bytes. Cuando se trata de la capa IP, naturalmente no existe segmentación.

Como puede ver en la segunda imagen, el campo del encabezado IP (No fragmentar) está configurado en el número de serie 3 de los dos segmentos de red TCP para indicarle a la capa IP que no procese estos datos. .

En cuanto a la negociación del tamaño de MSS, podemos ver en la siguiente imagen, que muestra el primer segmento SYN TCP enviado por el CLIENTE TCP:

Para UDP, digamos que queremos enviar El tamaño del paquete UDP es de 1600 bytes, por lo que cuando se distribuya realmente a través de UDP/IP, ¿se fragmentará? Mire la siguiente imagen:

En la imagen de arriba podemos ver que el tamaño del paquete de datos que enviamos es 1600 bytes (número de secuencia 1) y, en la capa UDP, la longitud es 1608 bytes (número de secuencia 2). Entre ellos, 8 bytes es la longitud del campo del encabezado UDP, y en la capa IP (número de secuencia 3), podemos ver claramente que IP corta el paquete UDP en dos partes, una parte es 1480. bytes, y la otra pieza es de 128 bytes. Uno tiene 1480 bytes y el otro 128 bytes.

Diferencias:

1. La fragmentación de IP es causada por la MTU de la capa de red y la fragmentación de TCP es causada por el MSS.

2. La fragmentación de IP la completa la capa de red y también se reorganiza en la capa de red; la fragmentación de TCP la completa la capa de transporte y también se reorganiza en la capa de transporte. //Para Ethernet, el MSS es de 1460 bytes y el MUT suele ser mayor que el MSS. Por lo tanto, el uso del protocolo TCP para la transmisión de datos no provoca fragmentación de IP. Si los datos son demasiado grandes, solo los fragmentarán en la capa de transporte sin necesidad de fragmentación en la capa IP.

La fragmentación de IP que solemos decir es causada por el protocolo de transmisión UDP. Esto se debe a que el protocolo de transmisión UDP no limita el tamaño del datagrama transmitido.