Resumen

  • PUSH pide a TCP que no espere indefinidamente más bytes antes de avanzar los datos ya entregados.
  • PSH no es un marcador de registros: una escritura, un segmento, un búfer receptor y una lectura pueden terminar en lugares distintos.
  • Si una aplicación necesita mensajes, debe definir su propio mecanismo de entramado.

Del concepto de carta al flujo

Las primeras especificaciones de TCP experimentaron con una idea de «carta». La RFC 793 explica que ese mecanismo pasó a describirse como una función PUSH. El cambio importa: TCP ofrece un flujo continuo de octetos, no unidades de mensaje que conserven sus bordes.

Al invocar PUSH, la aplicación pide que los datos ya entregados se transmitan y lleguen al usuario remoto con prontitud. Es una petición sobre cuánto puede esperar TCP, no una conversión del flujo en registros.

Cuatro límites independientes

Según la RFC 9293, cuando la interfaz permite indicar PUSH en SEND, PSH se coloca en el último segmento creado a partir de ese búfer. TCP puede dividirlo, combinarlo con otros datos o agrupar indicaciones PUSH sucesivas al formar segmentos.

Cuando una implementación no ofrece PUSH al emisor, no puede retener los datos indefinidamente: si ya no quedan más datos en cola, debe marcar con PSH el último segmento almacenado.

En el otro extremo, un búfer lleno puede entregarse antes de que llegue PSH. La interfaz puede, de manera opcional, exponer esa indicación a la aplicación; en tal caso, un PUSH también puede provocar la entrega de un búfer parcialmente lleno. Las lecturas de la aplicación tampoco tienen por qué coincidir con las escrituras del emisor.

PSH expresa progreso, no una frontera de aplicación. No garantiza un número concreto de paquetes, una entrega instantánea ni que una lectura termine. El control de flujo, la congestión, Nagle y las decisiones de implementación siguen limitando el envío.

Los protocolos que necesitan mensajes deben añadir longitud, delimitadores, estructuras de tamaño fijo u otra regla de entramado. Una captura puede mostrar dónde apareció PSH en una paquetización, pero no puede convertir ese punto en un límite de registro autorizado.

Fuentes