![]() |
|
Модераторы: feodorv |
![]()
|
|
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Какая то невообразимая штука случилось со мной.
Есть Сервер, вещает данные по UDP multicast на, предположим, 239.192.1.1:9000. Есть клиент который слушает эту группу. Получает данные. Меняем адрес группы но оставляем тот же порт, и все равно получаем данные. Туда ни кто не вещает, получаем теже данные что и по адресу 239.192.1.1:9000. Меняем еще раз, и опять получаем адрес. Порт во всех случаях один и тот же, меняется только IP адрес группы. Для того что бы отбросить сомнения в неправильности свого кода, взял примет с сайта boost usd receiver Указал ему порт 9000 какую то случайную группу, <cenzored>, я опять получаю данные. Данное поведение происходит если клиент запускается на linux. Если запускаем на Win то данные получаем только если укажем корректный адрес группы. Сервер запущен на линуксе. Использует код аналогичный как в примере boost asio для отправки. Даже если сервер запускаем на винде то у клиента все равно тоже поведение. Еще раз подчеркну, что код кроссплатформенный, при запуске клиента на линуксе он получет данные не зависимо от IP multicast группы, если указан нужный порт (нужный это в смысле куда сервер вещает). Такое вообще возможно ? Проверялось на нескольких системах и на виртуалке с изолированной сетью. Это сообщение отредактировал(а) Олег2005 - 17.4.2012, 12:27 |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Я не понимаю :(
Написал receiver на чистом Апи сокетов, включил сервер, включил ресивер, порты одинаковые адреса разные - данные получаю. Написал sender на Апи, порты одинаковые, адреса разные - данные не получаю. Взял sender из boost::asio, порты одинаковые, адреса разные - данные не получаю. Код в проекте и sender одинаковый. цензура!!! как это цензура!!! возможно ??? |
|||
|
||||
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Итак, выявил ТО при каких условиях воспроизводится проблема.
Имеем апликуху для получения данных из Multicast группы. Запускаем ее два раза, первый раз с параметрами 239.192.111.111 9998 вторую с 239.192.111.112 9998 Берем апликуху sender, запускаем ее с параметрами 239.192.111.111 9998 Получаем данные на обоих receiver'ах. Воспроизводится на Linux. --------------------- PS. что бы не быть голословным receiver
sender
Проблема, не решена. Она выявлена, и не понята. Это сообщение отредактировал(а) cupper - 28.3.2012, 16:30 |
||||
|
|||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Ну, вообще то в мультикасте нет сервера.
Напрочь. Там есть mrouted - мультикастовый рутер. А на клиентах только приложения, который могут подключаться к любой группе, таблицу о которых и поддерживает рутер. Алгоритм работы рутера и описывает протокол IGMP. Кстати, алгоритм непростой, много таймаутов и опросов/ответов. Все шлется на рутер - а он перенаправляет. |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
вы что то совсем не по делу. Сервер это мое приложение. Если вы хотите, мы можем его называть хоть санта клаусом. То что вы дальше написали, я совсем не понимаю как связать с тем что я спросил. |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
||||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Это вы писали?
О каком сервере в мультикасте вы говорите? Для того чтобы понять - сначала надо ознакомиться с элементарной теорией по IGMP. А проблемы ваши в том - что на машинах Windows - не поднимается рутер мультикаста. А на *nix'ах - mrouted - поднимается по умолчанию. Это сообщение отредактировал(а) Олег2005 - 30.3.2012, 22:11 |
|||
|
||||
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
На что в особенности вы хотите акцентировать мое внимание ? Не ходите вокруг да около, скажите прямо в чем я ошибся ?
Не понимаю. Ну и что, что есть он локально или нет ? |
||||
|
|||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Прямо ошиблись? В идеологии - в Мультикасте - НЕТ серверов. Если его нет - то мультикаст не существует По определению. Протокол IGMP - описывает взаимодействие рутера мультикаста - и клиентов (членов групп). И если нет рутера - то нет и мультикаста. |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
У меня есть ПРИЛОЖЕНИЕ которое производит вещания в заданные мультикаст группы. Довольны ? Только спокойствие. Т.е. я маг ? Я вот беру, запускаю вещатель локально, запускаю локально слушатель - и оно работает. И это на винде. И даже если я их разнесу на разные системы оно тоже работает. А знаете почему ? Потому что у нас в сети есть мультикаст роутер. Удивлены ? А я нет. Вы хотя бы поняли какая у меня проблема ? Или вам просто моя терминология не понравилась ? Мне на самом деле не особо важно куда и как от вещателя идут данные (но я на 99% уверен, что до ближайшего мультикаст роутера). Проблема, в том что... мну лень ее еще раз описывать :( вы по ссылке ходили? Да, там длинная дискуссия. Но и проблема не очевидная. |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Вполне возможно ваша проблема лежит в плоскости несовершенной фильтрации (imperfect filtering).
Как пишет Стивенс, фильтрация несовершенна, потому что если интерфейс получает указание принимать кадры, предназначенные только для одного определенного группового адреса Эзернет, может случиться так, что он также будет получать кадры, предназначенные для каких-то других групп. Проблема в карточках и способах вычисления хеш-функций для идентификации номера группы. Если хеш совпадет для другой группы - то карта получит этот кадр - и он далее пойдет на порт UDP. Одно из решений:
Может в этом и есть ваша проблема. Это сообщение отредактировал(а) Олег2005 - 17.4.2012, 16:00 |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
эх, не знал о такой проблемы. Я было предположил что фильтрации под линем просто нету. И все что сыплется на один порт но с разных групп, направляется всем кто подписан (сокет) на хотя бы одну из этих групп на этом порте. Частично эту проблему решет bind на адрес нужной мультикаст группы. Но тогда один сокет - одна мультикаст группа.
PS. и все же я сомневаюсь что у меня проблема была в imperfect filtering, потому что у меня разнные данные, разные группы и все это постоянно менялось и даже при сугубо пессимистичном сложении звезд на небе не могло это повторяться на протяжении всех экспериментов, на абсолютно разных системах, адресах, портах и данных. Это сообщение отредактировал(а) cupper - 17.4.2012, 19:09 |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Попробуйте посмотреть вот здесь
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |