en un proyecto en el que estoy trabajando, estamos viendo problemas fuera de orden en ciertas circunstancias en un sistema SMP cuando estamos leyendo un flujo UDP desde la red. Podemos ver que llega de la red en orden olfateando un hub conectado entre el emisor y el receptor. Sin embargo, a veces parece llegar fuera de orden cuando se lee desde el zócalo. ¿Hay alguna garantía para los paquetes UDP en este caso o debería la aplicación implementar un buffer de reorden? No estamos estableciendo la afinidad de la CPU aquí, sospecho que podría ayudar pero, idealmente, me gustaría que todos los subprocesos de CPU/hw manejen el tráfico de la red.¿El kernel de Linux en un sistema SMP garantiza que los paquetes UDP que llegan de una red en orden se leerán desde un socket en orden?
Respuesta
UDP no garantiza ninguna orden en absoluto. Es responsabilidad de la aplicación. De hecho, ni siquiera garantiza que los paquetes no se repitan/suelten, etc. Sugiero que lea: http://en.wikipedia.org/wiki/User_Datagram_Protocol
No tiene sentido que el kernel haga tales garantías, especialmente si los paquetes entrantes podrían estar fuera de servicio, ya que el kernel puede (razonablemente) esperar que la aplicación se encargue de él, si la aplicación requiere un pedido.
No se puede garantizar que un paquete UDP no se descarte durante la transmisión, por lo que no puede tener ninguna garantía de pedido. Cuando el sistema recibe, por ejemplo, paquete # 14 y paquete # 16, no tiene manera de saber si debe esperar a que el paquete # 15 entre antes de entregar el paquete # 16, o si el paquete # 15 se cayó y nunca vendrá pulg. El sistema simplemente le dará un montón de paquetes, y le toca a usted ponerlos en orden.
sí, eso es lo que obtenemos con UDP, lo maneja como lo hace, pero debería el kernel introducir la secuencia fuera de orden mientras maneja los paquetes saliendo de la red? – tylernol
@ tylernol- ¿Importa si el kernel cambia el orden? Su aplicación no sabe el orden en que el kernel recibió los paquetes, por lo que la pregunta es irrelevante. Todo lo que su aplicación sabe es que debe estar preparado para volver a ordenar los paquetes, independientemente de la razón por la cual podrían estar fuera de servicio. – bta
muy cierto, ahora si solo puedo persuadir al autor de esta interfaz en particular en la aplicación para que haga lo que se supone que debe hacer ... ¡gracias! – tylernol
- 1. asegurando el orden de paquetes en UDP
- 2. ¿readdir() garantiza una orden?
- 3. envío de paquetes UDP desde el núcleo de Linux
- 4. Recepción de paquetes en UDP
- 5. ¿Se garantiza que las solicitudes AJAX subsiguientes se recibirán en orden?
- 6. ¿El bucle foreach en C# garantiza un orden de evaluación?
- 7. ¿El orden de ejecución de los parámetros garantiza en Java?
- 8. ¿entrySet() en un LinkedHashMap también garantiza el orden?
- 9. ¿Dir.glob garantiza la orden?
- 10. Conector en bruto de Python que escucha paquetes UDP; sólo la mitad de los paquetes recibidos
- 11. ¿Se garantiza que invocar kernel/sched.c/context_switch() cada vez que se conecta un proceso?
- 12. Envío de paquetes UDP desde el iPhone
- 13. ¿Cuál será el orden en que se llamarán los filtros?
- 14. el orden en que se imprime el resultado de un conjunto en Python
- 15. Error de socket 10052 en el socket UDP
- 16. Socket de Python UDP que falla al recibir semi-aleatoriamente
- 17. ¿puedo leer exactamente un paquete UDP de un socket?
- 18. Acceso a DataGridView filas el orden en que se agregaron
- 19. WPF Dispatcher BeginInvoke garantiza el orden
- 20. ¿Hay una versión std :: streambuf que convierta el host en orden de bytes de red?
- 21. El socket de escucha UDP deja de escuchar después de cambios en la configuración de red
- 22. ¿Los controladores de eventos en JavaScript se llaman en orden?
- 23. Orden de CPU en Linux (con hiperamientaje)
- 24. Cómo establecer el orden de byte sockaddr_in6 :: sin6_addr en orden de bytes de red?
- 25. ¿Se garantiza que el orden de las claves() y values () en el diccionario python será el mismo?
- 26. ¿Cómo se puede simplificar la conversión de orden de bytes de red desde un BinaryReader?
- 27. ¿Se están cayendo los paquetes Winsock UDP?
- 28. Colección clave/valor que mantiene el orden
- 29. ¿Cómo puedo especificar el orden en que se ejecutan before_filters?
- 30. ¿Se garantiza que los datos en un archivo mapeado en memoria se descarguen secuencialmente?
Entiendo eso, y entiendo que debería haber un búfer de reordenación, pero lo que estoy diciendo es que vienen en orden, pero parece que el kernel está revolviendo el orden. ¿Es esto aceptable para el kernel? – tylernol
@tylernol: Sí, es aceptable que kernel pueda darle a la aplicación los paquetes udp en cualquier orden. ¿Por qué deberíamos siquiera esperar eso? El protocolo en sí mismo no lo garantiza, y hacer que el kernel se asegure de que proporciona los paquetes en el orden en que lo obtiene solo complicaría las cosas (en el kernel) sin ningún tipo de uso. –
@tylernol: Tal vez esto te ayude: http://lkml.indiana.edu/hypermail/linux/net/0211.2/0036.html –