Cómo usar la interfaz TUN / TAP para dividir paquetes, túneles y luego volver a montar.(similar a mlppp)

StackOverflow https://stackoverflow.com/questions/6018185

  •  14-11-2019
  •  | 
  •  

Pregunta

Estoy buscando crear una aplicación cliente / servidor que pueda usar para cortar paquetes de red por la mitad, túneles cada mitad del paquete sobre una conexión UDP separada (porque cada conexión UDP va a pasar a través de un enlace WiFi diferente) y Luego vuelva a montar los paquetes divididos en el otro extremo. Además de dividir los paquetes, cada medio paquete también tendrá que tener un número de identificación y secuencia para que se puedan volver a montar adecuadamente.

Básicamente, estoy tratando de hacer algo similar a MLPPP

Estoy buscando hacer esto usando Python y el controlador TUN / TOP NETWORK. He encontrado las siguientes muestras de código de Python y los módulos que creo que podría ser útil para este proyecto.

Python Tun / TAP

¿Fue útil?

Solución

Estamos haciendo algo como esto en producción y funciona bastante bien.Sin embargo, no dividimos paquetes individuales.Establecemos pesos fraccionarios para cada conexión (ilimitada) y envíemos los paquetes.Tenemos algún código en lugar para lidiar con diferentes latencias en cada línea.En el otro extremo, los amortizamos y reordenamos.El rendimiento es bastante bueno: tenemos sitios con 5+ líneas ADSL y obtenga buenas velocidades, más de 40 Mbps en la descarga.

Los paquetes de división (por ejemplo, 1500/2= 750) introducirían gastos generales innecesarios ... Mantenga sus paquetes lo más grandes posible.

Hemos desarrollado nuestro propio protocolo (formato de encabezado) para los paquetes UDP.Hemos realizado pruebas de bucle invertido en el TUN / TAP hasta 200 Mbps, por lo que definitivamente el kernel a la interacción del espacio de usuario funciona bien.Anteriormente utilizamos NFQUEUE, pero que tenían problemas de confiabilidad.

Todo lo anterior fue escrito en Python.

Otros consejos

Me parece perfectamente posible.

Los módulos TUN / TAP que ha descubierto parecer que harían el trabajo.Twisted será de alto rendimiento y el costo de lastimar su cabeza lo funcionará todo.

En cuanto a dividir los paquetes, no necesita interpretar los datos de ninguna manera, simplemente trátelo como un bulto de datos binarios, divídalo en dos y agregue un encabezado, no usaría ningún módulo de terceros.Para eso, solo manejo normal de cuerdas Python.

O podría usar NetStrings Si desea un formato de encapsulación de paquetes fácil de usar.

No supongo que iría a un cohete, ¡pero estoy seguro de que aprenderías mucho hacerlo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top