2

Я передаю данные UDP через 2 маршрутизатора на базе Linux (Intel) и испытываю низкие уровни потери пакетов, которые мешают работе приложения.

Есть ли способ (в идеале, но не обязательно с использованием iptables), чтобы я мог получать каждый UDP-пакет и отправлять 2 его копии, отбрасывая второй (если поступят оба пакета)? Я знаю, что это будет использовать удвоенную пропускную способность, и я в порядке с этим.

1 ответ1

1

Если приложение передает пакеты UDP, оно должно быть готово к тому, что некоторые (или даже многие) из этих пакетов будут отброшены.

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

Реализация внешнего слоя "просто отправь 2 копии" не является решением. Да, я знаю, что ты не хочешь это слышать, но это правда.

Поэтому перепишите приложение, чтобы использовать правильный протокол.

Альтернативно, туннелируйте пакеты через какое-то другое приложение, которое реализует надлежащий протокол (интерфейс tun/tap). Если вы настаиваете на том, чтобы "просто дублирующиеся пакеты" были правильным протоколом (нетрудно написать такое приложение, например google для приложений tun/tap), попробуйте его и посмотрите, работает ли он (не будет).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .