Транзакции |
|
SIP - это протокол, ориентированный на транзакции: взаимодействие между элементами сети происходит путем периодического обмена сообщениями. Транзакция состоит из запроса и любого количества ответов на него (ни одного или один и более предварительных ответов и один и более окончательных ответов). В транзакцию запроса INVITE (называемую INVITE-транзакцией) входи"1" запрос АСК в случае, если окончательный ответ был класса, отличного от 2хх,в противном случае АСК не является частью INVITE-транзакции. Причиной этого . разделения является важность доставки UAC всех ответов с кодом 200 (ОК) на запрос INVITE. Чтобы доставить клиенту все ответы с кодом 200, ядро UAS берет на себя ответственность за их повторную передачу, а ядро UAC, соответственно, берет на себя ответственность за их подтверждение запросами АСК. Транзакция имеет клиентскую сторону и серверную сторону; соответственно, они носят название клиентской транзакции и серверной транзакции. Клиентская транзакция занимается передачей запросов, а серверная транзакция - передачей ответов. Они создаются в агентах пользователя и прокси-серверах с сохранением состояний (stateful). На рис. 4.1, представленном ниже, UAC выполняет клиентскую транзакцию, а его исходящий прокси-сервер выполняет серверную транзакцию. Исходящий сервер выполняет также клиентскую транзакцию, которая передает запрос серверной транзакции входящего прокси-сервера. Входящий прокси-сервер выполняет клиентскую транзакцию, которая, в свою очередь, передает запрос серверной транзакции UAS. Прокси-сервер без сохранения состояний не создает ни клиентских, ни серверных транзакций. Транзакция выполняется между UA или прокси-сервером с сохранением состояний с одной стороны и UA или прокси-сервером с сохранением состояний с другой стороны. Цель клиентской транзакции состоит в том, чтобы получить запрос от ядра клиента (этот элемент носит название пользователь транзакции - Transaction User (TU); это может быть ядро UA или ядро прокси-сервера с сохранением состояния) и надежно доставить запрос серверной транзакции. Клиентская транзакция также отвечает за получение ответов и доставку их TU, отфильтровывая ответы, переданные повторно, и запрещенные ответы (такие как ответ на запрос АСК). Кроме того, в случае с запросом INVITE в полномочия клиентской транзакции входит передача запроса АСК, подтверждающего любой окончательный ответ класса, отличного от 2хх. Подобным образом, цель серверной транзакции - принимать запросы от транспортного уровня протокола SIP и передавать их TU. Серверная транзакция отфильтровывает повторные запросы, переданные из сети. Серверная транзакция принимает ответы от TU и передает их на транспортный уровень SIP для пересылки посети; в случае INVITE-транзакции, она принимает запрос АСК на любой окончательный ответ, исключая ответ класса 2хх. Ответ класса 2хх и его подтверждение АСК имеют особое значение. Ответ 2хх может передаваться повторно только сервером UA, а запрос АСК формируется только клиентом агента пользователя. Сквозное обращение требуется для того, чтобы вызывающий пользователь знал число пользователей, принявших вызов. Поэтому передача повторных ответов 2хх, как и генерация запроса АСК, это прерогатива ядра UA, а не уровня транзакций. Прокси-сервер только пересылает каждый ответ класса 2хх на запрос INVITE и соответствующий ему АСК. |

