Разбор SIP-трассы: одного Call-ID недостаточно для выделения диалога
Фотография конкретного исполнения не приложена.
В длинной трассе одинаковый Call-ID связывает сообщения, но не всегда обозначает единственную ветвь разговора. Параллельная маршрутизация и ранние ответы могут создавать несколько SIP dialogs. Если объединить их без tags, диагностика приписывает ответ не тому участнику.
RFC 3261 определяет dialog ID через Call-ID, local tag и remote tag. На противоположной стороне локальная и удалённая роли tags меняются местами. Это нужно учитывать при сравнении двух точек захвата. Сам по себе адрес пользователя также не заменяет идентификатор конкретного dialog.
Внутри диалога остаются отдельные транзакции и методы. CSeq содержит число и метод, поэтому строка ACK либо CANCEL с похожим номером не является обычным повтором INVITE. Re-INVITE может менять существующий сеанс, сохраняя dialog, вместо создания полностью нового вызова.
В приёмке трассировку строят по dialog и затем по транзакциям. Проверяют параллельные ветви, изменение SDP и завершение нужного участника. Исходные идентификаторы сохраняют в защищённой диагностике. Понятная временная линия должна объяснять каждое сообщение без предположения, что любое совпадение Call-ID означает один и тот же этап и один медиапуть.
Основание — Numbered IETF voice and NAT-traversal RFCs with selected RFC8863 ICE update; protocol scopes identified per task, разделы RFC3261 12 Dialogs; CSeq; client transactions. Сохранён текст публичной справочной публикации; конкретная реализация может поддерживать только часть возможностей. Основание — указанные номерные RFC о SIP, SDP, RTP и NAT traversal; рассматриваются конкретные границы поведения, а не полный современный профиль реализации или защиты. Реальные шлюзы, АТС, терминалы и медиапотоки не проверялись; вызовы и записи звука не выполнялись.