Что нужно для SIP RE-INVITE в отношении ICE?

Я понимаю многие тонкости перфорации отверстий NAT, вызовов ICE и SIP VOIP. Я ответил на несколько вопросов по SO по этим темам. Теперь у меня есть вопрос.

Я пытаюсь понять необходимость сообщения RE-INVITE, которое задокументировано для SIP+ICE после того, как вызов уже установлен.

Предположим топологию устройств VOIP, которые передают сигналы через SIP и используют ICE (с STUN/TURN) для установления медиа-соединения. После выполнения проверок подключения ICE обе ​​конечные точки должны определить наилучшие пары возможных адресов (IP, порт) и должны быть готовы к потоковой передаче мультимедиа в обоих направлениях.

Но мой опыт работы с SIP и большое количество документации показывают, что после того, как вызываемый абонент отправляет сообщение 200 OK, чтобы указать, что он находится в состоянии ответа, вызывающий абонент должен отправить RE-INVITE с SDP, содержащим конкретный адрес-кандидат, выбранный проверками подключения. .

Вот некоторые ссылки, описывающие ПОВТОРНОЕ ПРИГЛАШЕНИЕ с помощью ICE: здесь и здесь (шаг 8). В руководстве Розенберга (стр. 30) обсуждается, что RE-INVITE "гарантирует, что промежуточные блоки имеют правильный медиа-адрес». Я не уверен, почему это важно.

Ожидается ли, что после получения RE-INVITE вызываемый абонент переконфигурирует свой стек ICE для переключения сокетов или адресов на основе полученного нового SDP? Или RE-INVITE — это просто протокольная формальность для официального подтверждения того, что вызов был установлен? Если шаг RE-INVITE был пропущен и обе стороны начали потоковую передачу мультимедиа, что может пойти не так?

Причина, по которой я спрашиваю, заключается в том, что я изучаю использование ICE поверх службы сигнализации, которая не является SIP. Я пытаюсь выяснить, нужно ли эмулировать RE-INVITE.


person selbie    schedule 09.04.2013    source источник
comment
Что проголосовавшему против объяснить, почему ему не понравился этот вопрос?   -  person selbie    schedule 16.04.2013


Ответы (2)


Одним из примеров промежуточного блока, который может быть заинтересован в результате согласования ICE, является диспетчер пропускной способности.

Представьте себе корпоративное развертывание с конечными точками внутри корпоративного брандмауэра, а другие бродят по Интернету или за частными домашними брандмауэрами. Развертывание также включает общедоступный сервер TURN. Затем давайте представим конечную точку внутри корпоративного брандмауэра, выполняющую вызов. Если пункт назначения оказывается доступным в той же сети, вызов будет передаваться от хоста к хосту, а сервер TURN не будет использоваться (т. е. привязки будут отменены). Это локальная сеть, и нет необходимости накладывать ограничения на пропускную способность. С другой стороны, если вызов поступает в роуминговую конечную точку, то в дело вступает сервер TURN, и данные проходят через корпоративный брандмауэр, возможно, через восходящий канал с ограниченной пропускной способностью. Мы вполне можем представить себе некоторую политику, которая хотела бы ограничить пропускную способность вызова. Один из способов сделать это — чтобы диспетчер полосы пропускания оставался на пути передачи сигналов (используя маршруты записи SIP) и просматривал SDP любого проходящего INVITE, перезаписывая значения полосы пропускания в зависимости от медиа-адресов.

Я полагаю, что общее намерение состояло в том, чтобы устаревшее оборудование этого типа, не поддерживающее ICE, продолжало работать в смешанной среде, вводя конечные точки ICE. Чтобы сохранить эту обратную совместимость, ICE должен только вводить новую обработку (проверки STUN и т. д.), но с точки зрения элементов, не поддерживающих ICE, он не должен удалять какие-либо существующие правила (по-прежнему необходимы повторные INVITE для изменения пункт назначения медиапотока).

person Balint    schedule 15.04.2013
comment
Спасибо Бейнт. Лучший ответ, который я слышал до сих пор. - person selbie; 15.04.2013

В учебнике Розенберга я полагаю, что повторное ПРИГЛАШЕНИЕ отправляется, потому что сокеты, выбранные ICE, отличаются от сокетов в линиях мультимедиа и соединения (m/c-линии) исходного SDP И для того, чтобы любые сетевые элементы, которые находятся между два пользовательских агента должны быть проинформированы о фактических сокетах, которые будут использоваться. RTP повторно INVITE отправляется с выбранным сокетом (-ами) ICE в медиа- и соединительных линиях SDP.

Если бы сокеты, выбранные ICE, были бы такими же, как сокеты в строках SDP m/c исходного запроса INVITE, тогда не было бы необходимости в повторном запросе INVITE. Или, если вы знаете, что нет «мидлбоксов», которые должны быть проинформированы об изменениях в сокетах RTP, тогда также не будет необходимости отправлять повторно INVITE.

person sipsorcery    schedule 10.04.2013
comment
Вы просто цитируете материал непосредственно из документа, на который я ссылаюсь в своем вопросе, фактически не расширяя его? :) Что такое линия m/c? Что такое мидлбокс в этом контексте? Исходный INVITE будет иметь несколько возможных адресов (хост, srflx, реле) в SDP для каждого медиа-сокета. Последующее RE-INVITE будет иметь тот, который будет выбран ICE для каждого типа мультимедиа. Но стек ICE неконтролирующего агента (вызываемого) уже согласовал это (насколько я понимаю). Что должен делать вызываемый абонент с RE-INVITE, кроме как просто подтвердить его еще одним 200 OK? - person selbie; 11.04.2013
comment
Я бы порекомендовал прочитать мой ответ еще раз, медленно. Линии m/c — это линии передачи данных и соединения в SDP, как я пытался указать. Промежуточные блоки, скорее всего, являются сетевыми элементами между концами вызова, которым также необходимо передавать RTP. Повторное ПРИГЛАШЕНИЕ не предназначено для повторного согласования ICE. - person sipsorcery; 11.04.2013
comment
Я ценю ответ и усилия. Суть моего вопроса заключалась в том, почему необходимо повторное приглашение? Я думаю, вы ответили, для чего предназначен SIP RE-INVITE, но ваш ответ можно было бы улучшить, ответив на вопрос зачем это необходимо. - person selbie; 16.04.2013