10.3 Сторона Diameter¶
[!IMPORTANT] SIP несе виклик; Diameter несе те, від чого виклик залежить — ідентичність абонента, авторизацію, QoS медіа, білінг. Без нього CSCF нікого не зареєструє і не авторизує, тож Kamailio крутить повноцінний Diameter-peer поряд із SIP-стеком.
Навіщо Diameter¶
SIP — session-протокол; він не несе даних про підписку, автентифікацію чи білінг. 3GPP поклали це на Diameter (RFC 6733) — AAA-протокол із request/answer-моделлю команд, структурованими AVP (Attribute-Value Pairs) і персистентними peer-з'єднаннями. Кожен Diameter-лінк в IMS — це reference-point з 10.1: Cx до HSS, Rx до PCRF, Ro/Rf до білінгу.
cdp — C Diameter Peer¶
Diameter-стек Kamailio — це модуль cdp (C Diameter Peer), з cdp_avp для типізованих хелперів читання/побудови AVP. cdp завантажується один раз і шариться всіма IMS-модулями, яким потрібен Diameter — ims_icscf, ims_registrar_scscf, ims_auth, ims_qos, ims_charging усі звертаються до нього, а не відкривають кожен своє з'єднання.
Ключові властивості:
- Персистентні peer'и.
cdpтримає довгоживучі з'єднання до кожного Diameter-peer'а (HSS, PCRF, OCS чи DRA перед ними) зі своїм connection state machine: робить Capabilities-Exchange (CER/CEA) на конекті і Device-Watchdog (DWR/DWA) keepalive'и для виявлення мертвих peer'ів. - Конфіг в XML. На відміну від більшості конфіга Kamailio,
cdpналаштовується зовнішнім XML-файлом (realm, список peer'ів, транспорт, AVP-словники), на який посилається cfg. Це спадок OpenIMSCore. - Async за природою. Diameter round-trip стається усередині SIP-обробки — S-CSCF не може відповісти на REGISTER, поки не повернеться MAA. IMS-модулі використовують async/transaction-suspend-машинерію Kamailio (див. 8.2 Async-транзакції), щоб воркер не блокувався на дроті, чекаючи HSS.
Що Kamailio говорить, і на якому модулі¶
| Інтерфейс | Бік Kamailio | Peer | Що робить |
|---|---|---|---|
| Cx | ims_icscf, ims_registrar_scscf, ims_auth |
HSS | Auth, вибір S-CSCF, завантаження профілю/iFC |
| Rx | ims_qos |
PCRF / PCF | Авторизувати медіа, запросити виділений bearer із QoS |
| Ro (online) / Rf (offline) | ims_charging |
OCS / CHF | Credit control: зарезервувати юніти, списати, звільнити |
Command code'и, які вам трапляться¶
Cx (HSS):
| Code | Команда | Тригер |
|---|---|---|
| 300 | UAR/UAA — User-Authorization | I-CSCF на REGISTER |
| 303 | MAR/MAA — Multimedia-Auth | S-CSCF тягне auth-вектор |
| 301 | SAR/SAA — Server-Assignment | S-CSCF реєструє себе + тягне iFC |
| 302 | LIR/LIA — Location-Info | I-CSCF на термінуючому виклику |
| 304 | RTR/RTA — Registration-Termination | HSS пушить дереєстрацію в S-CSCF |
| 305 | PPR/PPA — Push-Profile | HSS пушить оновлення профілю |
Rx (PCRF), Ro (OCS):
| Code | Команда | Тригер |
|---|---|---|
| 265 | AAR/AAA — AA-Request | P-CSCF авторизує медіа сесії |
| 275 | STR/STA — Session-Termination | P-CSCF зносить авторизацію медіа |
| 274 | ASR/ASA — Abort-Session | PCRF аборти сесію |
| 272 | CCR/CCA — Credit-Control | S-CSCF резервує/списує charging-юніти |
[!NOTE] Коли мережа multi-home'ить HSS, I/S-CSCF спершу питає SLF (Subscription Locator Function), який HSS тримає даного користувача — SLF відповідає Diameter-Redirect'ом (reference-point Dx). На практиці цю роботу дедалі частіше віддають DRA (Diameter Routing Agent), що проксює Cx до правильного HSS; CSCF просто наводить
cdpна DRA. Більше про DRA — у 10.4.
Що вас вбиває¶
- Peer flapping. Якщо з'єднання до HSS/DRA падає,
cdpзносить його і ретраїть; у це вікно кожен REGISTER провалюється (немає MAA). Peer, що мовчить на DWR-watchdog'ах, втрачатиме реєстрації — алертіть на CER/DWR-стан. - Розбіжність AVP-словників.
cdpрозуміє лише AVP із завантажених словників. Vendor-specific-AVP, якого словник не має, дропається або відхиляє повідомлення, виринаючи як SIP-side-помилка далеко від причини. - Блокування воркера. Синхронний Diameter-виклик (неправильна async-обв'язка) паркує SIP-воркера на весь таймаут HSS; на registration storms це каскадить. Машинерія suspend/continue існує, щоб цьому запобігти.