Заголовки Via содержат записи обо всех устройствах (прокси, АТС и т.п.), которые прошел начальный запрос на своём пути к получателю. Ответы на запрос получатель должен отправлять на адрес из последнего заголовка Via. На обратном пути к отправителю каждое устройство удаляет заголовок Via со своим адресом, таким образом к отправителю приходит ответ с одним исходным Via, и UAC не получает информацию, каким путем прошли сообщения транзакции.
Для statefull маршрутизации используются заголовки Record-Route и Route. Каждый прокси добавляет к начальному запросу заголовок Record-Route со своим адресом. Важна последовательность заголовков, т.к. их порядок определяет путь запроса через сеть. UAS в ответах передает полный набор полученных заголовков Record-Route, и они не удаляются в процессе передачи сообщения между прокси.
Для непосредственных ответов (таких как "200 OK") на начальный запрос в рамках одной транзакции используются адреса из заголовков Via в обратном порядке. А вот для маршрутизации последующих запросов диалога (ACK, BYE, Re-INVITE) берутся адреса из Record-Route. Для этого UAC формирует заголовок Route, используя адреса из заголовков Record-Route, полученных с финальным ответом на начальный запрос. Для формирования заголовка Route адреса берутся в обратном порядке, что позволяет проходить прокси в нужной очерёдности. Прокси, получивший сообщение с заголовком Route, пересылает это сообщение на адрес из Route.
Таким образом, использование заголовков Record-Route позволяет сохранить путь запросов через сеть в рамках всего диалога. Что может быть важно для корректной маршрутизации и биллинга.
Про диалоги и транзакции читаем тут.
Подробное описание на английском тут.
Комментариев нет:
Отправить комментарий