transporte protocolos protocolo modelo funcionamiento caracteristicas capa aplicacion tcp network-programming packet

protocolos - ¿Cuándo se fragmentará un paquete de red TCP en la capa de aplicación?



protocolo udp (10)

A la "capa de aplicación" un paquete TCP (bueno, segmento realmente; TCP en su propia capa no sabe de los paquetes) nunca está fragmentado, ya que no existe. La capa de aplicación es donde ve los datos como una secuencia de bytes, entregados de manera confiable y en orden.

Si lo piensas de otra manera, probablemente estés abordando algo de la manera incorrecta. Sin embargo, esto no quiere decir que no exista una capa superior a esta, por ejemplo, una secuencia de mensajes entregados a través de este confiable y ordenado bytest.

¿Cuándo se fragmentará un paquete TCP en la capa de aplicación? Cuando se envía un paquete TCP desde una aplicación, ¿recibirá el destinatario en la capa de la aplicación el paquete en dos o más paquetes? Si es así, qué condiciones causan que el paquete se divida. Parece que un paquete no se fragmentará hasta que alcance el límite de Ethernet (en la capa de red) de 1500 bytes. Pero esa fragmentación será transparente para el destinatario en la capa de aplicación, ya que la capa de red volverá a ensamblar los fragmentos antes de enviar el paquete a la siguiente capa, ¿verdad?


Correcto: la forma más informativa de ver esto es usando Wireshark , una herramienta invaluable. Tómese el tiempo para resolverlo, me ha salvado varias veces y me da una buena verificación de la realidad


Diferentes segmentos de red pueden tener diferentes valores de MTU. En ese caso, la fragmentación puede ocurrir. Para obtener más información, vea TCP Tamaño máximo del segmento

Esta (de) fragmentación ocurre en la capa TCP. En la capa de aplicación no hay más paquetes. TCP presenta una secuencia de datos contigua a la aplicación.


En la capa de aplicación hay varias razones por las cuales los 1500 bytes enteros pueden no mostrar una lectura. Diversos factores en el sistema operativo interno y la pila TCP pueden hacer que la aplicación obtenga algunos bytes en una llamada de lectura, y algunos en la siguiente. Sí, la pila TCP tiene que volver a ensamblar el paquete antes de enviarlo, pero eso no significa que tu aplicación lo obtendrá todo de una vez (es probable que lo obtenga en una sola lectura, pero no está GARANTIZADO obtenerlo en una lectura).

TCP intenta garantizar la entrega ordenada de bytes, con verificación de errores, reenvíos automáticos, etc. sucediendo a sus espaldas. Piense en ello como una tubería en la capa de aplicaciones y no se quede demasiado empantanado en cómo la pila realmente la envía a través de la red.


La fragmentación debe ser transparente para una aplicación TCP. Tenga en cuenta que TCP es un protocolo de transmisión: ¡obtiene un flujo de datos, no paquetes! Si está creando su aplicación basándose en la idea de paquetes completos de datos, entonces tendrá problemas a menos que agregue una capa de abstracción para ensamblar paquetes completos de la transmisión y luego pasar los paquetes a la aplicación.


La pregunta hace una suposición que no es cierta: TCP no entrega paquetes a sus extremos, sino que envía una secuencia de bytes (octetos). Si una aplicación escribe dos cadenas en TCP, puede entregarse como una cadena en el otro extremo; asimismo, una cadena se puede entregar como dos (o más) cadenas en el otro extremo.

RFC 793 , sección 1.5:

"El TCP puede transferir un flujo continuo de octetos en cada dirección entre sus usuarios al empacar un número de octetos en segmentos para su transmisión a través del sistema de Internet".

Las palabras clave son flujo continuo de octetos (bytes).

RFC 793 , sección 2.8:

"No existe una relación necesaria entre las funciones de inserción y los límites de los segmentos. Los datos en cualquier segmento en particular pueden ser el resultado de una única llamada SEND, en su totalidad o en parte, o de múltiples llamadas SEND".

La totalidad de la sección 2.8 es relevante.


Se dividirá cuando llegue a un dispositivo de red con una MTU más baja que el tamaño de los paquetes. La mayoría de los dispositivos ethernet son 1500, pero a menudo pueden ser más pequeños, 1492 si ese ethernet pasa por encima de PPPoE (DSL) debido a la información de enrutamiento adicional, incluso menor si se agrega una segunda capa como el uso compartido de conexión a Internet de Windows. ¡Y el acceso telefónico es normalmente 576!

En general, debe recordar que TCP no es un protocolo de paquete . Utiliza paquetes en el nivel más bajo para transmitir por IP, pero en lo que respecta a la interfaz para cualquier pila TCP, es un protocolo de transmisión y no tiene ningún requisito para proporcionarle una relación 1: 1 con los paquetes físicos enviados o recibidos (por ejemplo, la mayoría de las pilas contendrán mensajes hasta que haya expirado un cierto período de tiempo, o haya suficientes mensajes para maximizar el tamaño del paquete IP para la MTU dada)

Como ejemplo, si envió dos "paquetes" (llame a su función de envío dos veces), el programa receptor solo podría recibir 1 "paquete" (la pila TCP receptora podría combinarlos juntos). Si está implementando un protocolo de tipo de mensaje sobre TCP, debe incluir un encabezado al comienzo de cada mensaje (o algún otro mechansim de encabezado / pie de página) para que el lado receptor pueda dividir la transmisión TCP en mensajes individuales, ya sea cuando aparece un mensaje se recibe en dos partes, o cuando se reciben varios mensajes como un fragmento.


Si un paquete de 3000 bytes ingresa a una red Ethernet con un tamaño de MTU predeterminado de 1500 (para ethernet), se fragmentará en dos paquetes de 1500 bytes de longitud. Esa es la única vez que se me ocurre.

Wireshark es tu mejor apuesta para verificar esto. Lo he usado por un tiempo y estoy totalmente impresionado


Si un paquete excede la en.wikipedia.org/wiki/Maximum_transmission_unit máxima de un dispositivo de red, se dividirá en varios paquetes. (Tenga en cuenta que la mayoría de los equipos están configurados en 1500 bytes, pero esto no es necesario).

La reconstrucción del paquete debe ser completamente transparente para las aplicaciones.


This página es una buena fuente de información sobre algunos de los problemas que otros han planteado, a saber, la necesidad de encapsular datos en un protocolo de aplicación por protocolo de aplicación. No tiene autoridad en el sentido que usted describe, pero tiene ejemplos y proviene de algunos. grandes nombres en programación de red.