Linux - Могу ли я дублировать, отправлять, затем и дублировать UDP-пакеты?

498
davidgo

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

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

2
Это неудачное решение. Как вы справляетесь со случаем, когда обе дейтаграммы теряются? Вы изучали Надежный UDP, RUDP или Надежный протокол дейтаграмм, RDP? sawdust 6 лет назад 0
@sawdust - Спасибо за эти опции, но я не вижу, как их можно развернуть в моем случае использования. Я пытался избежать раскрытия этого, но я пытаюсь взломать сеть VOIP, где я не могу изменить клиентов или сервер - и вижу очень низкий уровень потери пакетов (значительно менее 1%). Я также не в состоянии справиться с сильным дрожанием, вызванным повторной передачей потерянных пакетов по каналу связи средней дальности. Кроме того, схема всегда будет иметь очень завышенную пропускную способность и является постоянной скоростью со 100% CIR, так что все в порядке, чтобы тратить биты. davidgo 6 лет назад 0
@sawdust - Кроме того, соединение используется ТОЛЬКО для VOIP, поэтому нет необходимости обрабатывать смесь больших и маленьких пакетов или пакетное использование. davidgo 6 лет назад 0
Я мало что знаю об этом, так что это может быть глупой идеей, но ... Что если вы передали UDP-пакеты через VPN, которая использует TCP? Разве они не смогут эффективно получить надежность TCP? Kamil Maciorowski 6 лет назад 0
@KamilMaciorowski - Спасибо за эту мысль, но это может ухудшить ситуацию. Это приведет к повторной отправке кадров UDP, что создаст гораздо больше дрожания, что не годится для соединения VOIP. davidgo 6 лет назад 0
Я подозреваю, что без ARQ вы не сможете добиться надежности. Но если вы копируете дейтаграммы и отправляете их в виде пары, то вы максимально увеличиваете вероятность потери обоих (из-за всплеска шума продолжительностью x). Вы можете минимизировать вероятность потери обоих, отделяя дубликаты дейтаграмм, т.е. откладывать отправку реплицированных дейтаграмм на время х. Но вам лучше понять, почему вы в первую очередь теряете дейтаграммы. То есть, может быть, есть что-то, что можно сделать, чтобы снизить уровень потерь. sawdust 6 лет назад 1
@sawdust Спасибо за это. Я принимаю, что у моего решения есть существенные ограничения, но поскольку соединения не идут рядом с беспроводными соединениями, я предполагаю, что проблема связана с тем, что пакеты сбрасываются вышестоящими маршрутизаторами - над которыми у меня нет контроля - и я повторяю, если я повторная отправка есть высокая вероятность того, что один из 2 пройдет. Я только что обнаружил модуль "tee" для iptables и сейчас пытаюсь понять, смогу ли я использовать это для поиска полезного хака! davidgo 6 лет назад 0
Я согласен с @sawdust, если вы не проталкиваете большой объем трафика через соединение, вы не должны отбрасывать столько UDP-пакетов. Я нахожу, что даже стандартные интернет-соединения передают UDP от конца до конца почти безупречно при любой пропускной способности, подходящей для VoIP. Вы можете использовать iPerf для тестирования качества UDP и пропускной способности. Я думаю, что ответ, чтобы узнать, почему у вас потеря пакетов. Является ли это маршрутизатором, QoS, шумовой линией, неисправным модемом и т. Д. Бьюсь об заклад, вы могли бы даже сузить его до одной стороны соединения с проблемой, протестировав на третьем сайте. Appleoddity 6 лет назад 1
@Appleoddity причина, по которой у меня проблемы, в том, что наземный Интернет в Австралии невероятно плохо сосет. Я испытываю потерю пакетов, потому что их проводная инфраструктура была повреждена политикой (общенациональное развертывание оптоволокна недоступно в CBD?). Я получаю в 5 раз более быструю связь с моим сельским домом, чем 3 (телекоммуникационная) пара в Мельбурне, которая стоит в 5 раз дороже - я не придумываю - https://delimiter.com.au/2016/03 / 24 / АВСТРАЛИЯ-огромный-проскальзывания глобального широкополосного рейтинга / davidgo 6 лет назад 0

1 ответ на вопрос

1
dirkt

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

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

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

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

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

это никоим образом не отвечает на вопрос. Я мог бы принять это как комментарий, но не решение. Кроме того, как уже говорилось, у меня нет возможности изменять клиенты (sip-телефоны) или сервер - на самом деле это стандартные sip-компоненты (контролируемые третьей стороной). Вы хотели бы удалить свой ответ и сделать его комментарием? davidgo 6 лет назад 0
Если речь идет о SIP-телефонах, пожалуйста, включите его в вопрос. Не добавляйте дополнительную информацию в комментарии, редактируйте вопрос. И ответ остается прежним: если вы испытываете большую потерю пакетов UDP, приложение должно с этим справиться. dirkt 6 лет назад 0
Дело не в SIP телефонах. Речь идет о дублировании пакетов UDP и их дедупликации. Как сетевой администратор, я хочу улучшить производительность ссылки, над которой я могу иметь ограниченный контроль. davidgo 6 лет назад 0

Похожие вопросы