Как использовать интерфейс tun / tap для разделения пакетов, туннелирования и последующей сборки. (аналог МЛППП) - PullRequest
6 голосов
/ 16 мая 2011

Я ищу создание клиент-серверного приложения, которое я могу использовать для разделения сетевых пакетов пополам, туннелирования каждой половины пакета через отдельное соединение udp (потому что каждое соединение udp будет проходить через отдельную ссылку wifi) и затем соберите разделенные пакеты на другом конце. В дополнение к разбиению пакетов каждый полупакет также должен иметь идентификатор и порядковый номер, чтобы их можно было правильно собрать.

В основном я пытаюсь сделать что-то похожее на MLPPP

Я собираюсь сделать это, используя python и сетевой драйвер TUN / TAP. Я нашел следующие примеры кода и модули Python, которые, как мне кажется, могут быть полезны для этого проекта.

Python tun / tap

Python-обработка необработанных пакетов

Мой вопрос: можно ли выполнить необходимую модификацию пакета с помощью python и каков был бы возможный способ приблизиться к этому? Могу ли я использовать описанные выше модули для этого или есть лучшее решение? Я ищу какой-то вклад, который направит меня в правильном направлении, так как я не опытный программист. Любые примеры кода или дополнительные ссылки приветствуются.

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Мы делаем что-то подобное в производстве, и это работает довольно хорошо. Мы не разделяем отдельные пакеты. Мы устанавливаем дробные веса для каждого соединения (без ограничений) и отправляем пакеты. У нас есть некоторый код для работы с разными задержками в каждой строке. На другом конце мы буферизируем их и переупорядочиваем. Производительность довольно хорошая - у нас есть сайты с 5+ линиями ADSL и мы получаем хорошую скорость, 40+ Мбит / с при загрузке.

Разделение пакетов (например, 1500/2 = 750) может привести к ненужным накладным расходам ... сохранить ваши пакеты максимально большими.

Мы разработали наш собственный протокол (формат заголовка) для пакетов UDP. Мы выполнили тестирование по шлейфу на скорости до 200 Мбит / с, поэтому взаимодействие между ядром и пользовательским пространством определенно работает хорошо. Ранее мы использовали NFQUEUE, но у него были проблемы с надежностью.

Все вышеперечисленное было написано на Python.

1 голос
/ 16 мая 2011

Мне это кажется вполне возможным.

Модули tun / tap, которые вы обнаружили, выглядят так, как будто они справятся со своей работой.Twisted будет иметь высокую производительность, а затраты на то, чтобы ушибить голову, заставят все это работать.

Что касается разделения пакетов, вам не нужно каким-либо образом интерпретировать данные, просто рассматривайте их как двоичный двоичный объект.данных, разделите их на две части и добавьте заголовок - я бы не стал использовать для этого сторонние модули, просто обычную обработку строк Python.

Или вы можете использовать netstrings , если хотитепростой в использовании формат инкапсуляции пакетов.

Я не думаю, что это пойдет как ракета, но я уверен, что вы многому научитесь, делая это!

...