SIP: дождитесь пакета ACK на вызываемом сайте, чтобы начать сеанс RTP.

Ситуация:

У меня есть вопрос относительно сообщения ACK (желтого), которое отправляется с Asterisk вызываемому абоненту (тел. B) после того, как вызываемый абонент отправил свое сообщение 200 OK + SDP ( пурпурный). Поток вызовов Asterisk, о котором я говорю, выглядит так:

Моя сеть для тестирования предполагает:

Ноутбук+софтфон ---- Asterisk ---- Ноутбук+софтфон

Вопрос:

Все мои протестированные софтфоны с Linux (Twinkle, SFLPhone, Ekiga-Softon, Linphone и QuteCom) не ждут ACK для начала сеанса RTP. Я отфильтровал сообщение ACK с помощью iptables на сервере Asterisk, и сеанс RTP все равно начался. Однако из-за намерения моего проекта я хотел бы дождаться сообщения ACK, а затем начать сеанс RTP. Есть ли способ, переключатель, команда или предпочтение, чтобы софтфон ждал с потоком RTP, пока не будет получено сообщение ACK?

Дополнительный:

Я много гуглил и нашел какое-то устройство, например. Фирменный VoIP-маршрутизатор Belkin iiNet, который имеет параметр: Начать сеанс RTP до получения подтверждения [по умолчанию: выключено] Таким образом, я предполагаю, что должен быть способ разрешить запуск сеанса RTP. после получения ACK.

Кроме того, я обнаружил, что лучше всего начинать сеанс сразу после отправки 200 OK + SDP. Однако, как уже упоминалось выше, этого недостаточно для моего проекта.


Источник рисунка:

http://www.panoramisk.com/101/asterisk-and-voice-transport/en/


person xyz312    schedule 05.10.2011    source источник
comment
Почему вы хотите это сделать? ACK отправляются, чтобы убедиться, что окончательный ответ транзакции INVITE не дублируется как окончательный ответ. Как только ваш пользовательский агент SIP получит окончательный ответ 2xx, и, если он сможет, он должен начать отправку RTP.   -  person sipsorcery    schedule 05.10.2011
comment
ACK относятся к сообщениям 200 OK, а не к INVITE?! Причина в том, что я хочу переключить некоторые правила брандмауэра. Однако после отправки сообщения 200 OK первый пакет RTP запускается прибл. 13 мс. Этого времени недостаточно, чтобы установить правила брандмауэра с помощью команды system() в c. Таким образом, отправляются 3 пакета RTP, пока не будет установлено правило брандмауэра. Если сеанс RTP начинается после получения ACK, у меня достаточно времени, чтобы установить правила fw.   -  person xyz312    schedule 05.10.2011
comment
Сообщения 2xx являются частью транзакции INVITE (обратите внимание на различие между транзакцией INVITE и запросом INVITE, последний является частью первой вместе с ответом и ACK). Вызывают ли первоначальные пакеты RTP проблемы для вашего брандмауэра? 3 пакета RTP обычно составляют около 60 мс, определенно меньше 1 с, аудио, которое даже не будет заметно для удаленного конца.   -  person sipsorcery    schedule 05.10.2011
comment
Да я знаю, что не так уж и много. Но пакеты RTP не просто фильтруются. Пакеты RTP отправляются в NFQUEUE и передаются пользовательскому пространству. Я делаю некоторые вещи с пакетами. Вот почему мне нужны ВСЕ пакеты.   -  person xyz312    schedule 05.10.2011


Ответы (1)


Короткий ответ - нет; не будет широко поддерживаемой настройки, позволяющей принудительно запускать RTP после ACK. В лучшем случае вы обнаружите, что некоторые устройства/софтфоны, такие как тот, который вы упомянули, имеют настройки, позволяющие это делать. Я видел, как этот запрос появлялся раньше в списке рассылки разработчиков SIP, и, если я правильно помню, RFC на самом деле не определяет, должен ли RTP запускаться после ответа 2xx или ACK, но обычно исключается предположение, что это ответ 2xx. .

Еще один аспект, который вы могли бы изучить, — это поиск настройки или, возможно, даже хитрости с правилами вашего брандмауэра, для отправки первоначального ПРИГЛАШЕНИЯ без SDP. INVITE без SDP поддерживаются RFC 3261, и когда они получены, это указывает, что ответ 2xx должен содержать начальное предложение SDP, а последующий ACK будет иметь ответ SDP. С этим механизмом RTP некуда будет идти до тех пор, пока не будет отправлен ACK.

person sipsorcery    schedule 05.10.2011
comment
К сожалению, отправить приглашение без полезной нагрузки просто не получится. - person stalkerg; 06.04.2020