وثائق واجهة Gx Diameter
واجهة وظيفة قواعد السياسة والفوترة (PCRF)
جدول المحتويات
- نظرة عامة
- أساسيات واجهة Gx
- بروتوكول Diameter
- رسائل التحكم في الائتمان
- قواعد السياسة والفوترة
- تقرير تغيير الموقع
- التكوين
- تدفقات الرسائل
- معالجة الأخطاء
- استكشاف الأخطاء وإصلاحها
نظرة عامة
تربط واجهة Gx PGW-C بـ PCRF (وظيفة قواعد السياسة والفوترة) أو PCF (وظيفة التحكم في السياسة) في شبكات 5G. تتيح هذه الواجهة:
- التحكم الديناميكي في السياسة - تنفيذ QoS والسياسة في الوقت الحقيقي
- التحكم في الفوترة - تفويض الائتمان وتت��ع الاستخدام
- الوعي بالخدمة - تمييز حركة المرور على مستوى التطبيق
- إدارة ملف تعريف المشترك - تطبيق السياسة لكل مستخدم
Gx في هيكل الشبكة
الوظائف الرئيسية
| الوظيفة | الوصف |
|---|---|
| توفير السياسة | يوفر PCRF قواعد PCC التي تحدد كيفية التعامل مع حركة المرور |
| التحكم في QoS | التعديل الديناميكي لمعدلات البيانات ومعلمات QoS |
| التحكم في الفوترة | تفويض الائتمان لسيناريوهات الدفع المسبق/الدفع اللاحق |
| التحكم في البوابة | تمكين/تعطيل تدفقات الحركة بناءً على السياسة |
| مراقبة الاستخدام | تتبع استهلاك البيانات لكل خدمة |
أساسيات واجهة Gx
مرجع 3GPP
- المواصفة: 3GPP TS 29.212
- معرف تطبيق Diameter: 16777238 (Gx)
- البروتوكول: بروتوكول Diameter الأساسي (RFC 6733)
مفهوم الجلسة
كل اتصال PDN لـ UE له جلسة Gx المقابلة التي يتم تحديدها بواسطة Session-ID. هذه الجلسة:
- يتم إنشاؤها عندما يتصل UE (CCR-Initial)
- يتم تحديثها خلال عمر الاتصال (CCR-Update) - اختياري، مثل تغييرات السياسة أو تقرير تغيير الموقع
- يتم إنهاؤها عندما ينفصل UE (CCR-Termination)
تنسيق Session ID
Session-ID: <Origin-Host>;<high32>;<low32>[;<optional>]
مثال: omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org;1234567890;98765
المكونات:
- Origin-Host: هوية Diameter لـ PGW-C
- high32: 32 بت العليا من المعرف الفري��
- low32: 32 بت السفلى من المعرف الفريد
بروتوكول Diameter
هيكل الرسالة
تكون رسائل Diameter مشفرة ثنائياً بالهيكل التالي:
رأس Diameter (20 بايت)
├── الإصدار (1 بايت) = 1
├── طول الرسالة (3 بايت)
├── الأعلام (1 بايت)
│ ├── R: طلب (1) / إجابة (0)
│ ├── P: قابلة للتوجيه
│ ├── E: خطأ
│ └── T: قد يتم إعادة إرساله
├── رمز الأمر (3 بايت)
├── معرف التطبيق (4 بايت) = 16777238 (Gx)
├── معرف Hop-by-Hop (4 بايت)
└── معرف End-to-End (4 بايت)
AVPs (أزواج السمة والقيمة)
├── رأس AVP
│ ├── رمز AVP
│ ├── الأعلام (V، M، P)
│ ├── طول AVP
│ └── معرف البائع (اختياري)
└── بيانات AVP
المفاهيم الرئيسية في Diameter
AVP (زوج السمة والقيمة):
- وحدة البيانات الأساسية في Diameter
- تحتوي على رمز، أعلام، وقيمة
- يمكن أن تكون متداخلة (AVP مجمعة)
الأمر:
- زوج طلب/إجابة
- CCR (طلب التحكم في الائتمان) / CCA (إجابة التحكم في الائتمان)
رموز النتائج:
2001- DIAMETER_SUCCESS3xxx- أخطاء بروتوكول4xxx- فشل مؤقت5xxx- فشل دائم
رسائل التحكم في الائتمان
تستخدم PGW-C تطبيق التحكم في الائتمان Diameter (RFC 4006) لـ Gx.
أنواع الرسائل
CCR-Initial (طلب التحكم في الائتمان - أولي)
عندما: ينشئ UE اتصال PDN جديد
الغرض:
- طلب قواعد السياسة والفوترة الأولية
- توفير سياق UE والشبكة لـ PCRF
- الحصول على معلمات QoS وتفويض الفوترة
AVPs الرئيسية المرسلة بواسطة PGW-C:
| اسم AVP | رمز AVP | النوع | الوصف |
|---|---|---|---|
| Session-Id | 263 | UTF8String | معرف جلسة Gx الفريد |
| Auth-Application-Id | 258 | Unsigned32 | 16777238 (Gx) |
| Origin-Host | 264 | DiamIdent | هوية Diameter لـ PGW-C |
| Origin-Realm | 296 | DiamIdent | مجال Diameter لـ PGW-C |
| Destination-Realm | 283 | DiamIdent | مجال PCRF |
| CC-Request-Type | 416 | Enumerated | 1 = INITIAL_REQUEST |
| CC-Request-Number | 415 | Unsigned32 | رقم التسلسل (يبدأ من 0) |
| Subscription-Id | 443 | Grouped | معرف UE (IMSI/MSISDN) |
| Called-Station-Id | 30 | UTF8String | اسم APN |
| Framed-IP-Address | 8 | OctetString | عنوان IPv4 المخصص لـ UE (IPv4 و IPv4v6 PDNs) |
| Framed-IPv6-Prefix | 97 | OctetString | بادئة IPv6 المخصصة لـ UE (IPv6-only PDNs) |
| 3GPP-User-Location-Info | 22 | OctetString | معلومات موقع المشترك الأولية (TS 29.061) |
| User-Equipment-Info | 458 | Grouped | هوية UE (مثل IMEISV)، عند توفرها |
| IP-CAN-Type | 1027 | Enumerated | 5 = 3GPP-EPS |
| RAT-Type | 1032 | Enumerated | تم تعيينه من نوع RAT GTP (مثل 1004 = EUTRAN) |
| QoS-Information | 1016 | Grouped | QoS الحالي (APN-AMBR UL/DL) |
| Default-EPS-Bearer-QoS | 1049 | Grouped | QoS للناقل الافتراضي QCI/ARP (QCI 5) |
| Network-Request-Support | 1024 | Enumerated | إجراءات بدء الشبكة |
| Supported-Features | 628 | Grouped | قائمة ميزات Gx (Rel-8/9/10 Gx) |
يتم اختيار AVP عنوان الإطار بواسطة عائلة عنوان UE:
Framed-IP-Addressلـ IPv4 (و IPv4 من PDN IPv4v6)،Framed-IPv6-Prefixلـ PDN فقط IPv6. بالنسبة لـ IPv4v6، لا يتم حمل بادئة IPv6 على Gx. انظر IPv6 / Dual-Stack.
مثال على هيكل CCR-I:
CCR (رمز الأمر: 272، طلب)
├── Session-Id: "pgw_c.example.com;123;456"
├── Auth-Application-Id: 16777238
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
├── Subscription-Id (Grouped)
│ ├── Subscription-Id-Type: END_USER_IMSI (1)
│ └── Subscription-Id-Data: "310260123456789"
├── Called-Station-Id: "internet"
├── Framed-IP-Address: 100.64.1.42
├��─ IP-CAN-Type: 3GPP-EPS (5)
├── RAT-Type: EUTRAN (1004)
├── QoS-Information (Grouped)
│ ├── APN-Aggregate-Max-Bitrate-UL: 100000000 (100 Mbps)
│ └── APN-Aggregate-Max-Bitrate-DL: 50000000 (50 Mbps)
├── Network-Request-Support: 1
└── Supported-Features: [...]
CCA-Initial (إجابة التحكم في الائتمان - أولية)
مرسلة بواسطة: PCRF استجابةً لـ CCR-I
الغرض:
- تفويض أو رفض الجلسة
- توفير قواعد PCC لمعالجة الحركة
- تحديد معلمات QoS
AVPs الرئيسية المستلمة بواسطة PGW-C:
| اسم AVP | رمز AVP | الوصف |
|---|---|---|
| Result-Code | 268 | النجاح (2001) أو رمز خطأ |
| Experimental-Result | 297 | رموز نتائج محددة من البائع |
| QoS-Information | 1016 | QoS المفوض (قد يختلف عن الطلب) |
| Charging-Rule-Install | 1001 | قواعد PCC للتفعيل |
| Charging-Rule-Definition | 1003 | تعريفات القواعد المضمنة |
| Default-EPS-Bearer-QoS | 1049 | QoS للناقل الافتراضي |
مثال على استجابة النجاح:
CCA (رمز الأمر: 272، إجابة)
├── Session-Id: "pgw_c.example.com;123;456"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "pcrf.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 16777238
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
├── QoS-Information (Grouped)
│ ├── APN-Aggregate-Max-Bitrate-UL: 50000000 (50 Mbps - مخفض)
│ └── APN-Aggregate-Max-Bitrate-DL: 100000000 (100 Mbps - مرتفع)
├── Charging-Rule-Install (Grouped)
│ ├── Charging-Rule-Name: "default_internet_rule"
│ └── Charging-Rule-Name: "video_streaming_rule"
└── Charging-Rule-Definition (Grouped)
├── Charging-Rule-Name: "default_internet_rule"
├── QoS-Information: {...}
└── Precedence: 1000
CCR-Termination (طلب التحكم في الائتمان - إنهاء)
عندما: ينفصل UE أو يتم حذف اتصال PDN
الغرض:
- إبلاغ PCRF بإنهاء الجلسة
- سجل المحاسبة/الفوترة النهائي
الاختلافات الرئيسية عن CCR-I:
CC-Request-Type: TERMINATION_REQUEST (3)- قد تتضمن إحصائيات الاستخدام
- مجموعة AVP مبسطة
مثال على CCR-T:
CCR (رمز الأمر: 272، طلب)
├── Session-Id: "pgw_c.example.com;123;456"
├── Auth-Application-Id: 16777238
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: TERMINATION_REQUEST (3)
├── CC-Request-Number: 1
└── Termination-Cause: DIAMETER_LOGOUT (1)
CCA-Termination
مرسلة بواسطة: PCRF استجابةً لـ CCR-T
الغرض:
- تأكيد إنهاء الجلسة
- لا يتم إرجاع قواعد السياسة
مثال على CCA-T:
CCA (رمز الأمر: 272، إجابة)
├── Session-Id: "pgw_c.example.com;123;456"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "pcrf.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 16777238
├── CC-Request-Type: TERMINATION_REQUEST (3)
└── CC-Request-Number: 1
قواعد السياسة والفوترة
هيكل قاعدة PCC
تعرف قاعدة PCC (التحكم في السياسة والفوترة) كيفية التعامل مع تدفقات الحركة المحددة:
مكونات القاعدة
1. اسم القاعدة:
- معرف فريد للقاعدة
- مثال:
"video_streaming_rule"
2. الأولوية:
- رقم أقل = أولوية أعلى
- النطاق: 0-65535
- يستخدم عندما تتطابق قواعد متعددة
3. مرشحات التدفق (TFT - نموذج تدفق الحركة):
- يحدد الحزم التي تتطابق مع هذه القاعدة
- أمثلة:
- IP 5-tuple: البروتوكول، Src/Dst IP، Src/Dst Port
"permit out ip from any to 8.8.8.8 80"
4. معلومات QoS:
- QCI (معرف فئة QoS): 1-9 (موحد)، 128-254 (محدد من قبل المشغل)
- QCI 1: صوت محادثة
- QCI 5: إشارات IMS
- QCI 9: الإنترنت الافتراضي
- ARP (أولوية التخصيص والاحتفاظ): قدرة الإقصاء
- MBR/GBR: معدلات البيانات القصوى/المضمونة
5. معلومات الفوترة:
- مجموعة التصنيف: تحدد فئة الفوترة (تستخدم بواسطة OCS - انظر واجهة Diameter Gy)
- طريقة القياس: حجم، وقت، أو بناءً على الحدث
- الفوترة عبر الإنترنت/غير المتصلة: OCS (مدفوع مسبقاً عبر Diameter Gy) مقابل CDRs غير المتصلة (مدفوع لاحقاً - انظر تنسيق CDR البيانات)
6. حالة التحكم:
- مفتوح: السماح بحركة المرور
- مغلق: حظر حركة المرور
توفير القاعدة الديناميكية
يمكن لـ PCRF توفير القواعد بطريقتين:
1. القواعد المحددة مسبقاً (حسب الاسم):
Charging-Rule-Install (Grouped)
├── Charging-Rule-Name: "gold_subscriber_internet"
└── Charging-Rule-Name: "video_qos_boost"
2. القواعد الديناميكية (تعريف مضمن):
Charging-Rule-Definition (Grouped)
├── Charging-Rule-Name: "dynamic_rule_123"
├���─ Precedence: 100
├── Flow-Information (Grouped)
│ ├── Flow-Description: "permit out ip from any to 192.0.2.0/24"
│ └── Flow-Direction: DOWNLINK
├── QoS-Information (Grouped)
│ ├── QoS-Class-Identifier: 5
│ ├── Max-Requested-Bandwidth-UL: 10000000
│ └── Max-Requested-Bandwidth-DL: 50000000
└── Rating-Group: 1000
AVP معلومات QoS
APN-AMBR (معدل البيانات الأقصى المجمع):
ينطبق على جميع الناقلات غير GBR لهذا APN:
QoS-Information (Grouped)
├── APN-Aggregate-Max-Bitrate-UL: 100000000 # 100 Mbps
└── APN-Aggregate-Max-Bitrate-DL: 200000000 # 200 Mbps
استجابة PGW-C:
- تحديث حالة AMBR الداخلية
- إرسال طلب تعديل الجلسة إلى PGW-U مع QER المحدث
تقرير تغيير الموقع
يمكن لـ PGW-C إبلاغ PCRF عندما يتغير موقع المشترك، تكنولوجيا الوصول اللاسلكي (RAT)، PLMN الخادم أو المنطقة الزمنية لـ UE خلال عمر الجلسة. يتم حمل التغيير في CCR-Update كـ 3GPP-User-Location-Info وAVPs ذات الصلة.
التقرير اختياري (تحت تحكم PCRF)
هذا التقرير مشروط بطلب PCRF — تماماً كما هو مطلوب بموجب 3GPP TS 29.212 §4.5.7 / §5.3.7. يقوم PCRF بتسليح الأحداث التي يريد سماعها عن طريق تضمين واحد أو أكثر من Event-Trigger AVPs في CCA (أو في RAR). يقوم PGW-C بتخزين المجموعة المسلحة لكل جلسة Gx ويرسل CCR-Update فقط عندما:
- يحدث شرط Event-Trigger المسلح فعلياً، و
- توجد جلسة Gx للمشترك.
إذا لم يقم PCRF بتسليح أي Event-Triggers ذات الصلة بالموقع، يبقى PGW-C صامتاً بشأن تغييرات الموقع — فهو ببساطة يقوم بتحديث حالته الداخلية ويجيب على طلب تعديل الناقل GTP-C. هذا يحافظ على واجهة هادئة لـ PCRFs التي لا تهتم بالحركة، ومتوافقة لتلك التي تهتم.
يمكن أن تتغير المجموعة المسلحة في أي وقت خلال الجلسة. يقوم PGW-C بتحديثها من كل مجموعة AVP Event-Trigger التي يرسلها PCRF — في CCA-Initial، في CCA-Update، أو في RAR الذي يبدأه PCRF. تحل مجموعة Event-Trigger الحالية محل المجموعة المسلحة حالياً؛ الرسالة التي تحمل لا AVP Event-Trigger تترك المجموعة المسلحة دون تغيير. لذا يمكن لـ PCRF بدء جلسة بدون تقرير الموقع ثم تشغيله (أو إيقافه) لاحقاً باستخدام RAR، والعكس صحيح.
Event-Triggers المدعومة
| Event-Trigger | القيمة | يحدث عندما... | AVP المبلغ |
|---|---|---|---|
RAT_CHANGE | 2 | تتغير RAT-Type (مثل EUTRAN → UTRAN) | RAT-Type |
PLMN_CHANGE | 4 | تتغير الشبكة الخادمة (MCC/MNC) | 3GPP-SGSN-MCC-MNC |
USER_LOCATION_CHANGE | 13 | أي تغيير في معلومات موقع المستخدم | 3GPP-User-Location-Info |
UE_TIME_ZONE_CHANGE | 25 | تتغير المنطقة الزمنية لـ UE | 3GPP-MS-TimeZone |
TAI_CHANGE | 26 | تتغير هوية منطقة التتبع | 3GPP-User-Location-Info |
ECGI_CHANGE | 27 | تتغير هوية الخلية العالمية E-UTRAN | 3GPP-User-Location-Info |
يمكن أن تحدث عدة مشغلات في وقت واحد (مثل الانتقال إلى خلية جديدة في منطقة تتبع جديدة يحدث USER_LOCATION_CHANGE، TAI_CHANGE و ECGI_CHANGE)؛ يتم سرد جميع المشغلات المفعلة ��المسلحة في AVPs Event-Trigger لـ CCR-Update.
من أين يأتي الموقع
- CCR-Initial الآن يتضمن
3GPP-User-Location-Infoالأولية للمشترك، مما يمنح PCRF قاعدة بيانات. - خلال الجلسة، يحمل طلب تعديل الناقل GTP-C (S5/S8) معلومات موقع المستخدم المحدثة، RAT-Type، الشبكة الخادمة ومنطقة زمنية UE. يقوم PGW-C بتحليل هذه، يقارنها بالقيم المخزنة، ويبلغ عن أي تغيير مسلح.
- تبقى المعلومات المفقودة من طلب تعديل الناقل على قيمتها السابقة، لذا فإن طلب تعديل الناقل الجزئي لا يبدو أبداً كتغيير موقع زائف.
ترميز 3GPP-User-Location-Info
يتم ترميز AVP وفقاً لـ 3GPP TS 29.061 §16.4.7.2: نوع الموقع الجغرافي بايت واحد متبوعاً بحقل (حقول) الموقع، مع ترميز هويات PLMN وفقاً لـ 3GPP TS 24.008 §10.5.1.3. الأنواع المدعومة:
| النوع | القيمة | المحتويات |
|---|---|---|
| CGI | 0 | PLMN + LAC + CI (2G) |
| SAI | 1 | PLMN + LAC + SAC (3G) |
| RAI | 2 | PLMN + LAC + RAC |
| TAI | 128 | PLMN + TAC (LTE) |
| ECGI | 129 | PLMN + ECI (LTE) |
| TAI و ECGI | 130 | PLMN + TAC + PLMN + ECI (LTE، مفضل) |
تدفق الرسالة
الصلابة: الإبلاغ عن التغيير إلى PCRF لا يمنع استجابة تعديل الناقل GTP-C. إذا انتهى وقت CCR-Update أو أعاد PCRF خطأ، يقوم PGW-C بتسجيله وما زال يجيب على SGW-C — مسار بيانات المشترك لا يتوقف بسبب فشل الإبلاغ عن السياسة.
فحص المشغلات المسلحة عبر API
تقوم واجهة API للجلسات (GET /api/sessions و GET /api/sessions/:imsi) بإرجاع تفريغ كامل، آمن بتنسيق JSON للجلسة تحت مفتاح state، بالإضافة إلى الحقول الرئيسية المنسقة. تكون Event-Triggers المسلحة بواسطة PCRF مرئية في state.gx.requested_event_triggers، جنباً إلى جنب مع بقية حالة جلسة Gx (session_id، cc_request_number، المضيف/المجال الوجهة) وstate.uli الحالية. هذا يجعل من الممكن تأكيد من أدوات العمليات ما إذا كان المشترك مشتركاً فعلياً في تقرير الموقع.
تجاوز المشغلات المسلحة عبر API
يمكن أيضاً تغيير المجموعة المسلحة مباشرةً على جلسة حية باستخدام PATCH /api/sessions/:imsi (مفيد لاختبار الميزة بدون PCRF، أو لفرض الإبلاغ على/إيقاف). يكون الجسم مدمجاً بعمق في حالة الجلسة، لذا فإن المسار يعكس الهيكل الذي تم إرجاعه بواسطة GET — تعيش المشغلات المسلحة تحت gx:
PATCH /api/sessions/310260000000001
Content-Type: application/json
{ "gx": { "requested_event_triggers": [13, 26, 27] } }
- القيمة هي قائمة من رموز Gx Event-Trigger؛ تحل محل المجموعة المسلحة (تُترك الحقول الأخرى في
gxدون تغيير بواسطة الدمج). - قائمة فارغة (
[]) تلغي جميع تقارير الموقع للجلسة. - تعكس الاستجابة حالة الجلسة المحدثة والمطهرة.
تحتوي هذه النقطة على لا حواجز: يتم دمج الجسم بعمق في الجلسة الحية، لذا يمكن تغيير أي حقل — بما في ذلك إلى قيمة تعطل الجلسة. يتم تمرير التغييرات التي لها آثار سفلية إلى UPF. يؤدي تحديث APN-AMBR أو QoS الناقل الافتراضي إلى إعادة حساب QER الناقل الافتراضي (QCI / MBR / GBR) ويدفعه كـ Update QER في تعديل جلسة PFCP:
PATCH /api/sessions/310260000000001
Content-Type: application/json
{ "ambr": { "uplink": 200000, "downlink": 200000 } }
PATCH /api/sessions/310260000000001
Content-Type: application/json
{ "default_bearer_qos": { "qci": 5, "mbr_ul": 300000, "mbr_dl": 250000 } }
عندما يوفر default_bearer_qos MBR/GBR صريح (ناقلات GBR) فإنها تقود حدود معدل QER؛ بخلاف ذلك، يتم استخدام APN-AMBR كمعدل MBR للناقل الافتراضي.
ملاحظة: تجاوز المشغلات المسلحة يغير الرؤية المحلية لـ PGW-C لما قام PCRF بتسليحه. لا يزال بإمكان PCRF إعادة تسليح المجموعة لاحقاً عبر CCA أو RAR، مما سيعيد كتابة تجاوز يدوي.
التكوين
تكوين Gx الأساسي
قم بتحرير config/runtime.exs:
config :pgw_c,
diameter: %{
# عنوان IP للاستماع إلى اتصالات Diameter
listen_ip: "0.0.0.0",
# هوية Diameter لـ PGW-C (Origin-Host)
host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
# مجال Diameter لـ PGW-C (Origin-Realm)
realm: "epc.mnc999.mcc999.3gppnetwork.org",
# قائمة أقران PCRF
peer_list: [
%{
# هوية Diameter لـ PCRF
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",
# مجال PCRF (عادة ما يكون نفس مجال PGW-C)
realm: "epc.mnc999.mcc999.3gppnetwork.org",
# عنوا�� IP لـ PCRF
ip: "10.0.0.30",
# ما إذا كان PGW-C يبدأ الاتصال بـ PCRF
# true = PGW-C يتصل بـ PCRF
# false = الانتظار حتى يتصل PCRF
initiate_connection: true
}
]
}
أقران PCRF متعددة
للتكرار أو التوزيع الجغرافي:
config :pgw_c,
diameter: %{
listen_ip: "0.0.0.0",
host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
peer_list: [
%{
host: "pcrf-primary.example.com",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.1.30",
initiate_connection: true
},
%{
host: "pcrf-backup.example.com",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.2.30",
initiate_connection: true
}
]
}
توازن الحمل:
- يتعامل بروتوكول Diameter مع اختيار الأقران
- يتم توزيع الطلبات بناءً على التوفر
- الفشل التلقائي عند فشل القرين
حل اسم المضيف
يجب أن تكون هويات Diameter أسماء نطاق مؤهلة بالكامل (FQDN):
# صحيح - تنسيق FQDN
host: "pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
# غير صحيح - ليس هوية Diameter صالحة
host: "pgw_c"
host: "10.0.0.20" # عناوين IP غير مسموح بها
تنسيق المجال:
- يجب أن يكون اسم نطاق صالح
- يتطابق عادةً مع تنسيق PLMN لـ 3GPP:
epc.mncXXX.mccYYY.3gppnetwork.org
تدفقات الرسائل
إنشاء جلسة ناجحة
ملاحظة: يتم ترجمة معلمات QoS من PCRF إلى QERs (قواعد تنفيذ QoS) ويتم برمجتها في PGW-U عبر PFCP. انظر واجهة PFCP لتفاصيل QER.
تحديث السياسة (مبادرة الشبكة)
إنهاء الجلسة
معالجة الأخطاء
رموز النتائج
يتعامل PGW-C مع رموز النتائج المختلفة في رسائل CCA:
رموز النجاح:
| الرمز | الاسم | الإجراء |
|---|---|---|
| 2001 | DIAMETER_SUCCESS | متابعة إنشاء الجلسة |
الفشل الدائم (5xxx):
| الرمز | الاسم | إجراء PGW-C |
|---|---|---|
| 5002 | DIAMETER_UNKNOWN_SESSION_ID | تسجيل الخطأ، فشل الجلسة |
| 5030 | DIAMETER_USER_UNKNOWN | رفض الجلسة (المستخدم غير معروف) |
| 5140 | DIAMETER_ERROR_INITIAL_PARAMETERS | تسجيل الخطأ، إعادة المحاولة أو الفشل |
| 5003 | DIAMETER_AUTHORIZATION_REJECTED | رفض الجلسة (غير مصرح) |
الفشل المؤقت (4xxx):
| الرمز | الاسم | إجراء PGW-C |
|---|---|---|
| 4001 | DIAMETER_AUTHENTICATION_REJECTED | إعادة المحاولة أو فشل الجلسة |
| 4010 | DIAMETER_TOO_BUSY | إعادة المحاولة مع التراجع |
| 4012 | DIAMETER_UNABLE_TO_COMPLY | تسجيل الخطأ، قد تعيد المحاولة |
رموز النتائج التجريبية
رموز الأخطاء المحددة من قبل البائع:
Experimental-Result (Grouped)
├── Vendor-Id: 10415 (3GPP)
└── Experimental-Result-Code: <رمز محدد من قبل البائع>
رموز 3GPP التجريبية الشائعة:
| الرمز | الاسم | المعنى |
|---|---|---|
| 5065 | IP_CAN_SESSION_NOT_AVAILABLE | ��ا يمكن لـ PCRF إنشاء جلسة |
| 5143 | INVALID_SERVICE_INFORMATION | بيانات الخدمة غير صالحة |
معالجة المهلات
مهلة CCR-I:
إذا لم يستجب PCRF لـ CCR-Initial خلال المهلة:
1. ينتظر PGW-C المهلة المكونة (مثل 5 ثواني)
2. إذا لم يتم تلقي CCA:
- تسجيل: "مهلة CCR-Initial لجلسة-ID: ..."
- الرد على SGW-C بسبب الخطأ
- تنظيف الموارد المخصصة
3. يتلقى SGW-C: استجابة إنشاء الجلسة (السبب: لم يستجب نظير بعيد)
استجابة الخطأ لـ SGW-C:
عندما تنتهي مهلة CCR-Initial، يرسل PGW-C استجابة إنشاء جلسة مع رمز السبب :remote_peer_not_responding إلى SGW-C.
سيناريوهات الفشل
السيناريو 1: يرفض PCRF الجلسة (المستخدم غير معروف)
السيناريو 2: PCRF غير متاح مؤقتاً
استكشاف الأخطاء وإصلاحها
المشكلات الشائعة
1. فشل اتصال نظير Diameter
الأعراض:
- تسجيل: "نظير Diameter غير متصل"
- لم يتم إرسال CCR-Initial
الأسباب المحتملة:
- PCRF غير قابل للوصول
- عنوان IP غير صحيح لـ PCRF في التكوين
- جدار ناري يحظر منفذ Diameter (3868)
- هويات Diameter غير صحيحة (host/realm)
الحل:
# اختبار الاتصال الشبكي
ping <pcrf_ip>
# اختبار منفذ Diameter (TCP 3868)
telnet <pcrf_ip> 3868
# التحقق من تكوين هوية Diameter
# تأكد من أن host و realm هما FQDNs، وليس IPs
تحقق من التكوين:
config :pgw_c,
diameter: %{
# يجب أن تكون FQDN، وليس IP
host: "pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
peer_list: [
%{
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.30"
}
]
}
2. انتهاء مهلة CCR-Initial
الأعراض:
- فشل طلب إنشاء الجلسة
- تسجيل: "مهلة CCR-Initial"
الأسباب المحتملة:
- PCRF محمل
- تأخير الشبكة
- PCRF لا يستجيب لهذا Session-ID
الحل:
- تحقق من سجلات PCRF بحثاً عن الأخطاء
- تحقق من أن PCRF يعالج الطلبات
- تحقق من تأخير الشبكة:
ping <pcrf_ip> - زيادة المهلة إذا كان تأخير الشبكة مرتفعاً
3. الجلسات المرفوضة بواسطة PCRF
الأعراض:
- CCA-Initial مع Result-Code != 2001
- فشل استجابة إنشاء الجلسة
رموز النتائج الشائعة:
| رمز النتيجة | السبب المحتمل | الحل |
|---|---|---|
| 5030 | IMSI غير موجود في قاعدة بيانات المشتركين | توفير المشترك في HSS/SPR |
| 5003 | تم رفض التفويض | تحقق من أذونات المشترك |
| 4010 | PCRF مشغول جداً | إعادة المحاولة أو إضافة سعة PCRF |
تحقق من السجلات:
# سجلات PGW-C تظهر:
[error] خطأ Diameter Gx: رمز النتيجة 5030 (DIAMETER_USER_UNKNOWN)
[error] IMSI 310260999999999 تم رفضه بواسطة PCRF
4. عدم تطبيق QoS
الأعراض:
- تم إنشاء الجلسة ولكن QoS خاطئ
- معدلات البيانات لا تتطابق مع القيم المتوقعة
خطوات التصحيح:
-
تحقق من CCA-Initial:
- تحقق من وجود AVP
QoS-Information - تحقق من قيم
APN-Aggregate-Max-Bitrate-UL/DL
- تحقق من وجود AVP
-
تحقق من إنشاء جلسة PFCP:
- تحقق من إنشاء QER بالقيم الصحيحة لـ MBR
- تحقق من سجلات PGW-U لتثبيت QER
-
تحقق من سياسة PCRF:
- تحقق من تكوين PCRF
- تحقق من أن ملف تعريف المشترك يتضمن QoS الصحيح
5. مشكلات توجيه Diameter
الأعراض:
- رسائل Diameter لا تصل إلى PCRF
- تسجيل: "لا يوجد مسار إلى Destination-Realm"
السبب:
- عدم تطابق المجال بين التكوين والرسائل
الحل:
تأكد من الاتساق:
# يجب أن تتطابق جميعها
config :pgw_c,
diameter: %{
realm: "epc.mnc999.mcc999.3gppnetwork.org", # مجال PGW-C
peer_list: [
%{
realm: "epc.mnc999.mcc999.3gppnetwork.org" # مجال PCRF (عادة ما يكون نفس المجال)
}
]
}
في CCR-Initial:
Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
مراقبة صحة Gx
المقاييس الرئيسية:
# معدلات رسائل Gx
rate(gx_inbound_messages_total{message_type="gx_CCA"}[5m])
rate(gx_outbound_messages_total{message_type="gx_CCR"}[5m])
# معدلات أخطاء Gx
rate(gx_inbound_errors_total[5m])
# معدل نجاح استجابات Gx (مقياس جديد)
sum(rate(gx_outbound_responses_total{result_code_class="2xxx"}[5m])) /
sum(rate(gx_outbound_responses_total[5m])) * 100
# فشل استجابات Gx حسب مضيف PCRF
rate(gx_outbound_responses_total{result_code_class!="2xxx"}[5m]) by (diameter_host)
# عدد جلسات Gx
session_id_registry_count
# مدة معالجة الرسائل Gx
histogram_quantile(0.95, rate(gx_inbound_handling_duration_bucket[5m]))
مقاييس الاستجابة حسب فئة رمز النتيجة:
يوفر مقياس gx_outbound_responses_total رؤية تفصيلية حول استجابات Diameter المرسلة إلى أقران PCRF، مصنفة حسب:
message_type: نوع رسالة الاستجابة (gx_RAA,gx_CCA)result_code_class: فئة رمز النتيجة (2xxx,3xxx,4xxx,5xxx)diameter_host: نظير PCRF الذي يتلقى الاستجابة
أمثلة التنبيه:
# تنبيه على ارتفاع معدل أخطاء Gx
- alert: GxErrorRateHigh
expr: rate(gx_inbound_errors_total[5m]) > 0.1
for: 5m
annotations:
summary: "تم الكشف عن ارتفاع معدل أخطاء Gx"
# تنبيه على ارتفاع معدل فشل استجابات Gx
- alert: GxResponseFailureRate
expr: |
sum(rate(gx_outbound_responses_total{result_code_class!="2xxx"}[5m])) /
sum(rate(gx_outbound_responses_total[5m])) > 0.1
for: 5m
annotations:
summary: "ارتفاع معدل فشل استجابات Gx"
description: "أكثر من 10% من استجابات Gx هي فشل"
# تنبيه على رفض الجلسات
- alert: GxSessionRejection
expr: rate(gx_inbound_errors_total{result_code="5030"}[5m]) > 0.01
for: 5m
annotations:
summary: "PCRF يرفض الجلسات (USER_UNKNOWN)"
تسجيل الأخطاء
قم بتمكين تسجيل Diameter التفصيلي:
# config/runtime.exs
config :logger, level: :debug
# أو في وقت التشغيل
iex> Logger.configure(level: :debug)
ابحث عن:
[debug] إرسال CCR-Initial لجلسة-ID: ...[debug] استلام CCA-Initial: رمز النتيجة 2001[error] خطأ Diameter: ...
مراقبة نظير Diameter
يتم مراقبة اتصال نظير Diameter Gx بـ PCRF من خلال API OAM REST. يتم تقديم API عبر HTTPS/TLS على https://<host>:8443 مع جميع المسارات تحت بادئة /api. تتوفر وثائق API التفاعلية (Swagger UI) على https://<host>:8443/api/docs.
نقاط نهاية نظير Diameter
GET /api/diameter # جميع الأقران المكونة + الحالة الحية
GET /api/diameter?status=disconnected # تص��ية حسب حالة الاتصال
GET /api/diameter/<origin-host> # نظير واحد حسب Origin-Host
مثال:
curl -k https://localhost:8443/api/diameter
GET /api/diameter يعيد كل نظير Diameter مكون وحالته الحالية. أضف ?status=connected أو ?status=disconnected لتصفية حسب حالة الاتصال، أو أضف GET /api/diameter/<origin-host> لجلب نظير واحد.
لكل نظير، يتم إرجاع الحقول التالية:
| الحقل | الوصف |
|---|---|
host | هوية Diameter (Origin-Host) للنظير |
status | حالة الاتصال (مثل متصل / غير متصل / جارٍ الاتصال) |
ip | عنوان IP للنظير |
port | منفذ النظير |
transport | TCP أو SCTP |
connection_initiation | ما إذا كان OmniPGW يبدأ (خارجي) أو يقبل (داخلي) الاتصال |
realm | مجال Diameter المبلغ عنه من قبل النظير في CEA |
product_name | سلسلة منتج البائع المبلغ عنها من قبل النظير في CEA |
application_ids | معرفات تطبيق Diameter المتفاوض عليها في CEA (Gx = 16777238) |
يظهر النشر الصحي جميع أقران PCRF المكونة على أنها متصلة. يمنع فقدان جميع أقران Gx تثبيت السياسة ويمنع إنشاء جلسات جديدة.
حالات الاستخدام التشغيلية
مراقبة اتصال PCRF:
curl -k https://localhost:8443/api/diameter
تحقق من أن جميع أقران PCRF تظهر متصلة، وأن connection_initiation يتطابق مع التكوين، وأن application_ids تشمل Gx (16777238).
استكشاف فشل إنشاء الجلسة (مشكلات Gx): عندما تفشل جلسات المستخدم مع أخطاء "مهلة PCRF"، استعلم عن النظير المتأثر:
curl -k https://localhost:8443/api/diameter/<origin-host>
statusهوغير متصل→ تحقق من الاتصال الشبكي، تأكد من أن PCRF قيد التشغيل، وتأكد من أن قواعد جدار الحماية تسمح بـ TCP 3868.statusهومتصلولكن الجلسات لا تزال تفشل → المشكلة على مستوى التطبيق (تحقق من السجلات)؛ قد يرفض PCRF المشتركين.
التحقق من تكوين Diameter:
بعد تكوين نظير PCRF جديد، تأكد من ظهوره والوصول إلى متصل:
curl -k https://localhost:8443/api/diameter/<origin-host>
تحقق من أن realm يتطابق مع التكوين، وأن application_ids تشمل Gx، وأن product_name يظهر معرف PCRF المتوقع.
مراقبة الفشل:
عندما يفشل PCRF الأساسي، يتم إدراج GET /api/diameter?status=disconnected كـ غير متصل بينما يبقى PCRF الاحتياطي متصل. تستخدم الجلسات الجديدة تلقائياً الاحتياطي؛ عندما يتعافى الأساسي، تعود حالته إلى متصل.
الكشف عن مشكلات توجيه Diameter:
- يظهر النظير
متصلولكنrealmخاطئ - لا تشمل
application_idsGx (16777238) - لا يتطابق
product_nameمع PCRF المتوقع
تحديد عدم تطابق التكوين:
إذا كان connection_initiation يبلغ عن بدء النظير بينما يحدد التكوين initiate_connection: true، فإن كلا الطرفين يحاولان البدء، مما قد يسبب حالات سباق الاتصال.
التكامل مع المقاييس
يوفر API OAM حالة النظير في الوقت الحقيقي؛ اجمعها مع Prometheus لـ:
- معدلات أخطاء Gx التاريخية
- عدد رسائل CCR/CCA
- اتجاهات التأخير
GET /api/diameter يجيب على "هل تعمل بشكل صحيح الآن؟"; المقاييس تجيب على "كيف كانت تعمل على مر الزمن؟"
الوثائق ذات الصلة
التكوين والسياسة
- دليل التكوين - تكوين Diameter، إعداد نظير PCRF
- واجهة PFCP - تنفيذ QoS عبر QERs من قواعد PCC
- إدارة الجلسة - دورة حياة الجلسة مع تكامل السياسة
- QoS وإدارة الناقلات - تكوين QoS التفصيلي وإعداد الناقل
تكامل الفوترة
- واجهة Diameter Gy - الفوترة عبر الإنترنت التي يتم تشغيلها بواسطة قواعد PCC
- تنسيق CDR البيانات - سجلات الفوترة غير المتصلة مع معلومات السياسة
- تكوين PCO - تسليم P-CSCF للتحكم في سياسة IMS
العمليات
- دليل المراقبة - مقاييس Gx، تتبع السياسة، تنبيهات اتصال PCRF
- واجهة S5/S8 - تكامل إدارة الناقل مع السياسة