Есть два машины, обе в домашней сети за маршрутизатором, на по очереди тестируется приложение, которое обменивается данными с удалённой машиной по RTP. Читается и слушается два UDP сокета на разных портах. Когда я запускаю приложение на одной машине, то данные приходят только на первый порт, когда же я запускаю на второй машине, данные приходят только на второй порт. Иногда всё работает правильно, и данные приходят в оба порта.
Я где-то читал, что если приложение посылает данные в определённый UDP порт удалённого узла и одновременно вызывает bind(2) для того же порта, то маршрутизатор автоматически устанавливает port forwarding на какое-то время. Но поиск ничего не даёт, а точного названия этой технологии я не знаю. По описанию подходит Firewall pinhole, но технических деталей я не могу найти.
Здравствуйте, mbait, Вы писали:
M>Есть два машины, обе в домашней сети за маршрутизатором, на по очереди тестируется приложение, которое обменивается данными с удалённой машиной по RTP. Читается и слушается два UDP сокета на разных портах. Когда я запускаю приложение на одной машине, то данные приходят только на первый порт, когда же я запускаю на второй машине, данные приходят только на второй порт. Иногда всё работает правильно, и данные приходят в оба порта.
Если у вас уже возникли термины вроде RTP, то и делайте так, как обычно в телефонии делается. Ставьте внешний STUN-сервер и пробивайте дыру в NAT, как это делает тот же freeswitch.
побуду телепатом
то как вы хотите, делается по другому
а то как оно работает — оно работает правильно в том виде как вы получили, хотя результат вас не устраивает
Здравствуйте, Слава, Вы писали:
С>Если у вас уже возникли термины вроде RTP, то и делайте так, как обычно в телефонии делается. Ставьте внешний STUN-сервер и пробивайте дыру в NAT, как это делает тот же freeswitch.
А Вы уверены, что автор вопроса Вас понял?
Здравствуйте, Nikolay_Ch, Вы писали:
С>>Если у вас уже возникли термины вроде RTP, то и делайте так, как обычно в телефонии делается. Ставьте внешний STUN-сервер и пробивайте дыру в NAT, как это делает тот же freeswitch. N_C>А Вы уверены, что автор вопроса Вас понял?
Ну он сам про RTP написал, стало быть знаком с темой. И ссылку я дал.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, mbait, Вы писали:
M>>Есть два машины, обе в домашней сети за маршрутизатором, на по очереди тестируется приложение, которое обменивается данными с удалённой машиной по RTP. Читается и слушается два UDP сокета на разных портах. Когда я запускаю приложение на одной машине, то данные приходят только на первый порт, когда же я запускаю на второй машине, данные приходят только на второй порт. Иногда всё работает правильно, и данные приходят в оба порта.
С>Если у вас уже возникли термины вроде RTP, то и делайте так, как обычно в телефонии делается. Ставьте внешний STUN-сервер и пробивайте дыру в NAT, как это делает тот же freeswitch.
Благодарю, но у меня уже есть методы обхода NAT. Меня интересует причина, по которой приложение работает именно таким образом. Почему проброс одного порта идёт на одну машину, а другого — на вторую? Дело в RTP, или это не зависит от протокола? Есть какие-то средства, чтобы посмотреть правила, которые создаются? На маршрутизаторе стоит dd-wrt, и, соответственно, многие команды линукса должны быть доступны.
Здравствуйте, reversecode, Вы писали:
R>а то как оно работает — оно работает правильно в том виде как вы получили, хотя результат вас не устраивает
Меня всё устраивает, я пытаюсь понять причину. Можно подробнее, почему оно именно так работает? Так как по одному из каналов передаются RTP-пакеты, то я подозреваю, что маршрутизатор видит это и реагирует как-то странно. По второму идут контрольные данные в свободном формате.
Как написал в ветке выше, методы обхода NAT реализованы и работают, но мне интересно понять, почему сеть работает так, а не иначе.