Строгая (strict) и свободная (loose) маршрутизация SIP отличаются наличием или отсутствием модификации заголовка Request-URI (R-URI). Строгая маршрутизация устарела, сейчас обычно используется свободная.
При строгой маршрутизации SIP прокси обязан использовать для маршрутизации адреса из заголовка Route повторных запросов (ACK, BYE, Re-INVITE). При этом адрес в R-URI заменяется на "верхний" адрес из Route и сообщение передаётся на этот новый R-URI. Таким образом R-URI всегда содержит адрес следующего хоста (например, следующего прокси или уже самого получателя). Строгая маршрутизация подразумевает, что сообщение пройдет только по хостам, перечисленным в заголовке Route.
При свободной маршрутизации SIP прокси следует (should) использовать адреса из заголовка Route повторных запросов. При этом запрос также передается на "верхний" хост из заголовка Route, но адрес в R-URI не меняется. Свободная маршрутизация подразумевает, что сообщение пройдет по хостам, перечисленным в заголовке Route и, возможно, ещё по каким-либо хостам с поддержкой loose routing.
!!! Тут надо отметить, что передача поля Route в начальном запросе недопустима из соображений безопасности.
Route: <sip:proxy1.mydomain.org;lr>,<sip:proxy2.mydomain.org;lr>,<sip:proxy3.mydomain.org;lr>
Наличие параметра lr говорит о том, что прокси поддерживает loose routing.
Детали в RFC3261.
В Opensips свободная маршрутизация осуществляется функцией loose_route() модуля rr.
Эта функция анализирует заголовок Route. Если его нет, то функция возвращает FALSE и маршрутизация происходит только на основании значения R-URI.
Выбор между строгой и свободной маршрутизацией происходит на основе анализа заголовков R-URI и Route: Opensips проверяет, в каком заголовке указан его собственный адрес. Если в R-URI, то это сценарий строгой маршрутизации. Если "вверху" списка хостов Route, то это сценарий свободной маршрутизации. Сравнение адреса идёт как с IP-адресом интерфейса, так и с доменными именами модуля domain.
Комментариев нет:
Отправить комментарий