sockets - Programación de socket: ¿Cómo manejo los datos fuera de banda?
out-of-band (4)
"¿Podría alguien explicar qué son los datos OOB?"
En terminología de comunicación (Out-Of-Band) OOB simplemente significa un paquete malicioso que contiene un puntero urgente (URG flage in TCP Packet).
El puntero urgente es un campo que se usa con poca frecuencia en el encabezado de TCP, y se utiliza para indicar que el destinatario debe procesar rápidamente algunos de los datos de la secuencia de TCP.
Desde WIKI 1 Mediante los datos OOB, One puede interrumpir o abortar la secuencia en cola en lugar de esperar a que finalice la secuencia. Esto se hace especificando los datos como urgentes. Esto le indica al programa receptor que lo procese de inmediato, junto con el resto de los datos urgentes. Cuando termine, TCP informa a la aplicación y vuelve a la cola de transmisión. Un ejemplo es cuando se usa TCP para una sesión de inicio de sesión remota, el usuario puede enviar una secuencia de teclado que interrumpe o interrumpe el programa en el otro extremo. Estas señales suelen ser necesarias cuando un programa en la máquina remota no funciona correctamente. Las señales deben enviarse sin esperar a que el programa finalice su transferencia actual. Los datos TCP OOB no fueron diseñados para la Internet moderna. El puntero urgente solo altera el procesamiento en el host remoto y no acelera ningún procesamiento en la propia red. Cuando llega al host remoto, hay dos interpretaciones ligeramente diferentes del protocolo, lo que significa que solo los bytes individuales de datos OOB son confiables. Esto es asumiendo que es confiable ya que es uno de los elementos de protocolo menos usados y tiende a ser implementado pobremente.
Acabo de ver la entrada de wikipedia en los datos fuera de banda y, según tengo entendido, los datos OOB se marcan de forma más importante y se tratan como datos ordinarios, pero se transmiten en una secuencia separada, lo que me confunde profundamente.
La pregunta real sería (además de "¿Podría alguien explicar qué son los datos OOB?"):
Estoy escribiendo una aplicación de Unix que usa sockets y necesito hacer uso de select() y me preguntaba qué hacer con el parámetro exceptfds. ¿Debo poner todos mis sockets en este parámetro y reaccionar ante tales eventos? ¿O simplemente los ignoro?
Creo que encontré la respuesta en esta página . En breve:
No necesito manejar los datos OOB en el lado receptor si no estoy enviando ningún dato OOB. Pensé que los datos OOB podrían ser generados por el sistema operativo del remitente.
No es necesario que lo maneje en el extremo receptor, incluso si lo está enviando: los datos de OOB se ignoran de forma transparente en todas las circunstancias, a menos que vaya activamente a recibirlos.
Sé que has decidido que no necesitas manejar los datos de OOB, pero aquí hay algunas cosas que debes tener en cuenta si alguna vez te preocupas por OOB ...
- IPv4 realmente no envía datos OOB en un canal separado o con una prioridad diferente. Es solo una bandera en el paquete.
- Los datos OOB son extremadamente limitados - 1 byte!
- Los datos OOB se pueden recibir en línea o por separado dependiendo de las opciones de socket
- Una "excepción" de señalización de datos OOB puede ocurrir incluso si la próxima lectura no contiene los datos OOB (la pila de la red en el remitente puede marcar cualquier información ya en cola, por lo que el otro lado sabrá que hay OOB LO ANTES). Esto a menudo se maneja ingresando un bucle de "drenaje" donde descarta los datos hasta que los datos reales de OOB estén disponibles.
Si esto parece un poco confuso y sin valor, es porque en su mayoría lo es. Hay buenas razones para usar OOB, pero es raro. Un ejemplo es FTP, donde el usuario puede estar en medio de una gran transferencia pero decide abortar. El aborto se envía como datos OOB. En ese momento, el servidor y el cliente simplemente ingieren datos "normales" para drenar cualquier cosa que aún esté en tránsito. Si el aborto se manejó en línea con los datos, entonces todo el tráfico pendiente tendría que ser procesado, solo para ser volcado.
Es bueno tener en cuenta que OOB existe y lo básico de cómo funciona, en caso de que alguna vez lo necesite. Pero no te molestes en aprenderlo al revés, a menos que tengas curiosidad. Las posibilidades son decentes, nunca puede usarlo.