في أغلب الشركات يوجد صندوق في غرفة السيرفرات أو خلف مكتب الاستقبال اسمه «السنترال»، تدخل إليه خطوط شركة الاتصالات من جهة، وتخرج منه أسلاك الهواتف المكتبية من الجهة الأخرى، ولا يعرف أحد كيف يعمل من الداخل إلا الفني الذي يأتي عند كل تعديل. ثم يقرر أحدهم أن ينقل الهواتف إلى «VoIP»، فيسمع الفريق كلمات جديدة في أول اجتماع: SIP وTrunk وExtension وCodec وDID، ويوافق الجميع على كل شيء دون أن يعرف أحد ما الذي يمر فعلاً في الشبكة عندما يرن الهاتف.
وهذا المقال هو أول مقال في مرحلة الاتصالات الهاتفية VoIP على خريطة التعلم، والهدف منه أن تفهم هذه المصطلحات واحداً واحداً، ثم ترى كيف تعمل معاً في مكالمة حقيقية من لحظة الضغط على زر الاتصال إلى وصول الصوت، قبل أن تختار أداة أو تشتري خطاً. وسوف نناقش في هذا المقال ما يلي:
- ما هو VoIP، وما الفرق بينه وبين شبكة الهاتف التقليدية PSTN.
- المقسم PBX والتحويلة الداخلية Extension وخطة الاتصال Dial Plan.
- الخط الخارجي SIP Trunk والرقم المباشر DID، وكيف تصل المكالمة من جوال عميل إلى هاتف على مكتبك.
- بروتوكول SIP ورسائله، ثم SDP وRTP اللذان يتفقان على الصوت وينقلانه.
- الترميز Codec وكم تستهلك المكالمة الواحدة من Bandwidth.
- مكالمة كاملة رسالة برسالة كما التقطناها في تجربة عملية، وأين تنكسر المكالمات عادة.
ما هو VoIP؟
الاتصال الصوتي عبر بروتوكول الإنترنت Voice over IP، واختصاراً VoIP، هو نقل المكالمة الهاتفية على شكل حزم بيانات IP عبر الشبكة نفسها التي يمر عليها البريد وتصفح الويب، بدل أن تمر عبر خط نحاسي مخصص لها. وفي شبكة الهاتف التقليدية Public Switched Telephone Network، واختصاراً PSTN، كانت المكالمة تحجز دائرة كاملة من طرف إلى طرف طوال مدة المكالمة، أما في VoIP فيقطع الصوت إلى أجزاء صغيرة، كل جزء منها مدته 20 ms في الغالب، ويرسل كل جزء في حزمة مستقلة، والطرف الآخر يجمعها ويشغلها بالترتيب.
ولاحظ أن هذا التحول له نتيجتان مهمتان لمن يدير السيرفرات: الأولى أن الهاتف أصبح جهازاً على الشبكة له عنوان IP مثل أي حاسوب، فيتأثر بال NAT وجدار الحماية Firewall وجودة الاتصال، والثانية أن المقسم الذي كان صندوقاً مغلقاً أصبح برنامجاً يعمل على سيرفر Linux، فتستطيع أن تستضيفه بنفسك وتتحكم في إعداداته وسجلاته، وهذا ما تدور حوله هذه المرحلة كلها.
المقسم PBX والتحويلة الداخلية Extension
المقسم الخاص Private Branch Exchange، واختصاراً PBX، هو النظام الذي يدير هواتف مؤسسة واحدة: يعرف من هم موظفوها، ويوصل مكالماتهم الداخلية ببعضها دون أن تخرج إلى شركة الاتصالات، ويوجه المكالمات الخارجية إلى الخط المناسب. وكل هاتف في المقسم له رقم قصير يسمى التحويلة الداخلية Extension، مثل 1001 و1002، وهذا الرقم له معنى داخل المقسم فقط، فلو طلبت 1001 من جوالك الشخصي لن يصل إلى أحد. والمقسم الذي يعمل بال VoIP يسمى IP PBX، وأشهر البرامج مفتوحة المصدر التي تقوم بهذا الدور هي Asterisk المرخص بترخيص GPLv2 كما في ملف الترخيص، وFreePBX الذي يضيف واجهة إدارة ويب فوق Asterisk، وسوف نخصص لكل منهما مقالاً في هذه المرحلة. والصورة التالية تبين مكتباً صغيراً بثلاثة هواتف ومقسم وخط خارجي:

والهاتف نفسه قد يكون جهازاً مكتبياً Desk Phone يتصل بالشبكة بكابل Ethernet، أو برنامجاً على الحاسوب يسمى الهاتف البرمجي Softphone، أو تطبيقاً على الجوال، وكلها بالنسبة للمقسم شيء واحد: عميل يتحدث بروتوكول SIP ويسمى في المعايير وكيل المستخدم User Agent.
خطة الاتصال Dial Plan
عندما تطلب رقماً، يحتاج المقسم أن يقرر ماذا يفعل به، وهذا القرار مكتوب في خطة الاتصال Dial Plan، وهي مجموعة قواعد تقول مثلاً: إذا كان الرقم من أربع خانات يبدأ ب 10 فهو تحويلة داخلية فاتصل بها مباشرة، وإذا بدأ بصفر فأرسله عبر الخط الخارجي، وإذا كان الرقم 9000 فشغل البريد الصوتي Voicemail. وفي Asterisk تكتب هذه القواعد في الملف extensions.conf، والقاعدة التي استخدمناها في التجربة سطر واحد تقريباً:
[office]
exten => _10XX,1,NoOp(Call from ${CALLERID(num)} to ${EXTEN})
same => n,Dial(PJSIP/${EXTEN},20)
same => n,Hangup()في الإعداد أعلاه لاحظ التالي:
_10XXنمط Pattern يطابق أي رقم من أربع خانات يبدأ ب 10، والشرطة السفلية في البداية تعني أن ما بعدها نمط وليس رقماً حرفياً.Dial(PJSIP/${EXTEN},20)يتصل بالتحويلة نفسها عبر قناة SIP، وينتظر 20 ثانية قبل أن يستسلم إذا لم يرد أحد.- كل شيء آخر في المقسم، مثل الطوابير Queues والتسجيل وقوائم «اضغط 1 للمبيعات» IVR، هو في النهاية قواعد إضافية في هذه الخطة.
الخط الخارجي SIP Trunk والرقم المباشر DID
المقسم وحده يكفي للمكالمات الداخلية، أما الاتصال بالعالم الخارجي فيحتاج خطاً إلى شبكة الهاتف العامة، وهذا الخط يسمى Trunk. وفي الماضي كان ال Trunk كابلاً حقيقياً يحمل عدة مكالمات في وقت واحد، أما اليوم فالأشهر هو SIP Trunk، وهو حساب عند مزود خدمة اتصال عبر الإنترنت Internet Telephony Service Provider، واختصاراً ITSP، يتصل به مقسمك عبر الإنترنت، إما بالتسجيل كما يسجل الهاتف في المقسم، أو بعنوان IP ثابت يعرفه المزود، ويمرر له المزود المكالمات من وإلى الأرقام العادية. وال Trunk يأتي عادة بعدد قنوات Channels محدد، وكل قناة تعني مكالمة واحدة في الوقت نفسه، فإذا كان عندك أربع قنوات وفيها أربع مكالمات قائمة، فالمكالمة الخامسة تسمع رسالة انشغال.
أما الرقم المباشر Direct Inward Dialing، واختصاراً DID، فهو رقم هاتف عام يحجزه لك المزود ويرسل كل مكالمة تصل إليه عبر ال Trunk إلى مقسمك، ومعه الرقم المطلوب، فيقرر المقسم بحسب خطة الاتصال أي تحويلة ترن. وبهذا يمكن أن يكون لكل موظف رقم عام مباشر، أو أن تذهب كل الأرقام إلى قائمة ترحيب واحدة. والأرقام العامة تكتب بالصيغة الدولية التي يعرفها معيار ITU-T E.164، وهي رمز الدولة ثم الرقم الوطني، مثل +966 للسعودية.
بروتوكول SIP: الرسائل التي تجهز المكالمة
بروتوكول بدء الجلسات Session Initiation Protocol، واختصاراً SIP، الذي يعرفه RFC 3261، هو اللغة التي تتحدث بها الهواتف والمقسمات لتجهيز المكالمة وإنهائها، وهو بروتوكول نصي يشبه HTTP كثيراً: طلب Request في سطره الأول طريقة Method وعنوان، ثم ترويسات Headers، ثم جسم اختياري، ورد Response برمز حالة من ثلاث خانات. فإذا كنت قرأت شرح HTTP للمبتدئين فسوف تجد أغلب الشكل مألوفاً، والفرق أن الطرفين في SIP يرسلان الطلبات لبعضهما، فكل هاتف هو كلاينت وسيرفر في الوقت نفسه.
وأهم الطرق Methods التي سوف تراها في السجلات:
- REGISTER: الهاتف يخبر المقسم «أنا التحويلة 1002 وتجدني على هذا العنوان»، ويكرر ذلك قبل انتهاء المدة المحددة في
expires. - INVITE: طلب بدء مكالمة، ويحمل في جسمه وصف الصوت المطلوب بصيغة SDP كما سيأتي.
- ACK: تأكيد استلام الرد النهائي على INVITE.
- BYE: إنهاء مكالمة قائمة، وCANCEL: إلغاء مكالمة ما زالت ترن.
- OPTIONS: سؤال «هل أنت موجود؟»، ويستخدمه المقسم لفحص الهواتف بشكل دوري.
ورموز الحالة تتبع منطق HTTP نفسه: 1xx رد مؤقت مثل 100 Trying و180 Ringing، و2xx نجاح مثل 200 OK، و4xx خطأ في الطلب مثل 401 Unauthorized و403 Forbidden و404 Not Found، و5xx خطأ في السيرفر مثل 503 Service Unavailable، ويضيف SIP فئة سادسة 6xx للرفض النهائي مثل 603 Decline. وتستخدم SIP المنفذ 5060 عبر UDP أو TCP، والمنفذ 5061 عند التشفير ب TLS كما في RFC 3261.
وقد يتساءل البعض: كيف يعرف المقسم أن من يرسل REGISTER هو صاحب التحويلة فعلاً؟ والإجابة أن المقسم يرد على أول طلب بالرمز 401 Unauthorized ومعه قيمة عشوائية تسمى nonce، فيحسب الهاتف هاشاً من اسم المستخدم وكلمة المرور وهذه القيمة، ويعيد إرسال الطلب ومعه الترويسة Authorization، وهذه هي طريقة Digest Authentication التي يعرفها RFC 3261، وميزتها أن كلمة المرور نفسها لا تمر في الشبكة. ولذلك لا تقلق عندما ترى 401 في كل مكالمة في السجلات، فهي الخطوة الأولى الطبيعية وليست خطأ.
المقسم يقف في المنتصف B2BUA
عندما يتصل 1001 ب 1002 عبر Asterisk، لا يمرر المقسم رسالة INVITE كما هي، وإنما يستقبلها وينهي جلسة مع 1001، ثم يبدأ جلسة جديدة تماماً مع 1002 برسالة INVITE من عنده، ويربط الجلستين ببعضهما، وهذا الدور يسمى Back-to-Back User Agent، واختصاراً B2BUA. وهذا مهم عند التشخيص، لأنك سوف تجد في السجلات مكالمتين منفصلتين لكل منهما Call-ID مختلف، وسوف تجد في Asterisk قناتين Channels لكل مكالمة، واحدة لكل طرف.
SDP وRTP: الاتفاق على الصوت ثم نقله
رسائل SIP لا تحمل الصوت أبداً، وإنما تحمل وصفاً له مكتوباً بصيغة وصف الجلسة Session Description Protocol، واختصاراً SDP، التي يعرفها RFC 8866، ويتبادل الطرفان هذا الوصف بنموذج العرض والجواب Offer/Answer الذي يعرفه RFC 3264: يرسل المتصل في INVITE عرضاً يقول فيه «أرسل لي الصوت على هذا العنوان وهذا المنفذ، وأنا أدعم هذه الترميزات»، ويرد الطرف الآخر في 200 OK بجواب بالمعلومات نفسها من جهته. وهذا هو العرض الذي أرسله الهاتف 1001 في التجربة، كما التقطناه من الشبكة:
v=0
o=- 3276203282 677258408 IN IP4 10.77.50.21
s=-
c=IN IP4 10.77.50.21
t=0 0
a=tool:baresip 1.0.0
m=audio 20004 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv
a=ptime:20في الوصف أعلاه لاحظ التالي:
c=IN IP4 10.77.50.21هو العنوان الذي يريد الهاتف أن يستقبل الصوت عليه، وm=audio 20004هو المنفذ، وهذا السطران هما سبب أغلب مشكلات الصوت خلف NAT كما سنرى في المقال التالي.RTP/AVP 0 8 101قائمة الترميزات بالترتيب المفضل، والأرقام 0 و8 ثابتة في RFC 3551 وتعني PCMU وPCMA، وهما نسختا ترميز G.711.telephone-eventهو الطريقة التي تنقل بها ضغطات الأزرار DTMF، مثل «اضغط 1 للمبيعات»، كحدث منفصل عن الصوت كما في RFC 4733.ptime:20يعني أن كل حزمة صوت تحمل 20 ms من الكلام.
وبعد الاتفاق يبدأ الصوت نفسه بالتدفق عبر بروتوكول النقل في الوقت الحقيقي Real-time Transport Protocol، واختصاراً RTP، الذي يعرفه RFC 3550، وهو يضيف لكل حزمة صوت رقماً تسلسلياً وطابعاً زمنياً Timestamp حتى يرتبها الطرف الآخر ويعرف الحزم المفقودة، ويرافقه بروتوكول التحكم RTCP على المنفذ التالي الذي يرسل تقارير دورية عن الفقد والتأخير. والنسخة المشفرة منه تسمى SRTP ويعرفها RFC 3711. والصورة التالية تبين أن المكالمة الواحدة لها طريقان مختلفان:

وهذا الفصل بين الطريقين هو مفتاح فهم مشكلات VoIP، فقد تنجح كل رسائل SIP ويرن الهاتف ويرد الطرف الآخر، ثم لا يسمع أحدهما الآخر، لأن الصوت يمر على منافذ أخرى مغلقة في جدار الحماية، أو يرسل إلى عنوان خاطئ. وفي Asterisk يحدد الخيار direct_media هل يمر الصوت عبر المقسم أم يذهب مباشرة بين الهاتفين، ونطاق منافذ RTP عنده يحدد في الملف rtp.conf، وقيمته في الملف النموذجي من 10000 إلى 20000. وإذا كنت قرأت شرح مكالمات WebRTC خلف NAT فهذا هو الفصل نفسه بين قناة التنسيق Signaling وطريق الوسائط Media، والفرق أن WebRTC يفرض التشفير ويحمل معه آلية ICE لاكتشاف الطريق، أما هواتف SIP التقليدية فتعتمد على المقسم وإعداداته.
الترميز Codec وكم تستهلك المكالمة من Bandwidth
الترميز Codec، وهو اختصار Coder/Decoder، هو الخوارزمية التي تحول موجة الصوت إلى بايتات وتعيدها إلى صوت في الطرف الآخر. وأقدم ترميز ما زال الأكثر انتشاراً هو ITU-T G.711، الذي يأخذ 8000 عينة Sample في الثانية ويحفظ كل عينة في بايت واحد، أي 64 kbit/s، وله نسختان: μ-law وتسمى PCMU، وA-law وتسمى PCMA. وهناك ترميزات أوضح مثل G.722 الذي ينقل نطاقاً صوتياً أعرض بنفس 64 kbit/s ويسمى عادة الصوت عالي الوضوح HD Voice، وترميزات أحدث مثل Opus الذي يتغير معدله من 6 إلى 510 kbit/s بحسب الشبكة، وهو أحد الترميزين اللذين يجب أن يدعمهما كل تطبيق WebRTC مع G.711 كما في RFC 7874. والصورة التالية تبين كيف تتحول 20 ms من الكلام إلى حزمة واحدة:

لاحظ أن الترويسات وحدها تضيف 40 بايت على كل حزمة، لذلك فالمكالمة بترميز G.711 تستهلك نحو 80 kbit/s في كل اتجاه على مستوى IP، وليس 64 فقط، وهذا حساب نظري من أحجام الترويسات في المعايير وليس قياساً، ويزيد قليلاً مع ترويسات Ethernet. وفي التجربة رأينا أن كل طرف أرسل نحو 50 حزمة في الثانية كما يتوقع الحساب. فإذا كان في مكتبك عشرون مكالمة في الوقت نفسه فأنت تحتاج نحو 1.6 Mbit/s في كل اتجاه للصوت وحده، وهذا رقم صغير لأي اتصال حديث، والمشكلة الحقيقية في جودة الصوت ليست حجم الاتصال وإنما التأخير Latency والاهتزاز Jitter وفقد الحزم، وسوف نخصص لها مقالاً في هذه المرحلة.
وقد يتساءل البعض: لماذا لا نستخدم دائماً أفضل ترميز؟ والإجابة أن الطرفين يجب أن يتفقا على ترميز مشترك في SDP، فإذا لم يجدا ترميزاً مشتركاً فشلت المكالمة، وإذا اختار كل منهما ترميزاً مختلفاً اضطر المقسم إلى التحويل بينهما Transcoding، وهذا يستهلك المعالج ويضيف تأخيراً. لذلك يبقى G.711 هو الخيار الآمن مع شبكة الهاتف العامة لأن كل مزود يدعمه، وتستخدم الترميزات الأحدث بين هواتف المكتب نفسها.
مكالمة كاملة من البداية إلى النهاية
الآن نجمع كل ما سبق في مكالمة واحدة، وقد بنينا لذلك تجربة صغيرة فيها مقسم Asterisk وهاتفان برمجيان في Containers، وسوف نشرحها بالتفصيل مع كل أوامرها في المقال التالي، أما هنا فنأخذ منها التسلسل الحقيقي للرسائل كما التقطناه ب tcpdump على المقسم، بعد أن حذفنا من نهايته أسطر إلغاء التسجيل عند إغلاق الهاتف:
19:13:42 10.77.50.21.5060 > 10.77.50.10.5060 REGISTER sip:10.77.50.10 SIP/2.0
19:13:42 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 401 Unauthorized
19:13:42 10.77.50.21.5060 > 10.77.50.10.5060 REGISTER sip:10.77.50.10 SIP/2.0
19:13:42 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 200 OK
19:13:44 10.77.50.21.5060 > 10.77.50.10.5060 INVITE sip:[email protected] SIP/2.0
19:13:44 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 401 Unauthorized
19:13:44 10.77.50.21.5060 > 10.77.50.10.5060 ACK sip:[email protected] SIP/2.0
19:13:44 10.77.50.21.5060 > 10.77.50.10.5060 INVITE sip:[email protected] SIP/2.0
19:13:44 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 100 Trying
19:13:44 10.77.50.10.5060 > 10.77.50.22.5060 INVITE sip:[email protected]:5060 SIP/2.0
19:13:44 10.77.50.22.5060 > 10.77.50.10.5060 SIP/2.0 180 Ringing
19:13:44 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 180 Ringing
19:13:44 10.77.50.22.5060 > 10.77.50.10.5060 SIP/2.0 200 Answering
19:13:44 10.77.50.10.5060 > 10.77.50.22.5060 ACK sip:[email protected]:5060 SIP/2.0
19:13:44 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 200 OK
19:13:44 10.77.50.21.5060 > 10.77.50.10.5060 ACK sip:10.77.50.10:5060 SIP/2.0
19:13:54 10.77.50.21.5060 > 10.77.50.10.5060 BYE sip:10.77.50.10:5060 SIP/2.0
19:13:54 10.77.50.10.5060 > 10.77.50.21.5060 SIP/2.0 200 OK
19:13:54 10.77.50.10.5060 > 10.77.50.22.5060 BYE sip:[email protected]:5060 SIP/2.0
19:13:54 10.77.50.22.5060 > 10.77.50.10.5060 SIP/2.0 200 OKالعنوان 10.77.50.21 هو هاتف Alice بالتحويلة 1001، و10.77.50.10 هو المقسم، و10.77.50.22 هو هاتف Bob بالتحويلة 1002، والصورة التالية ترسم الرسائل نفسها على شكل سلم Ladder بين الأطراف الثلاثة، وهو الشكل الذي تعرضه أدوات التشخيص مثل sngrep:

وفيما يلي ما يحدث في كل مرحلة:
- التسجيل Registration: يرسل هاتف Alice طلب REGISTER، فيرد المقسم ب 401 ومعه nonce، فيعيد الهاتف الطلب مع الهاش، فيرد المقسم ب 200 OK، ومن هذه اللحظة يعرف المقسم أين يجد التحويلة 1001. وكان هاتف Bob قد سجل بالطريقة نفسها قبل ذلك.
- تجهيز المكالمة: ترسل Alice طلب INVITE إلى 1002 ومعه SDP، فيطلب المقسم إثبات الهوية مرة أخرى ب 401، لأن الإعداد يطلب المصادقة على كل INVITE وليس على التسجيل فقط، فلا يستطيع أحد أن يتصل باسم تحويلة لا يعرف كلمة مرورها، ثم يرد ب 100 Trying ويبحث في خطة الاتصال، فيجد أن 1002 تحويلة داخلية مسجلة على العنوان 10.77.50.22، فيرسل إليها INVITE جديداً من عنده.
- الرنين والرد: يرد هاتف Bob ب 180 Ringing فينقلها المقسم إلى Alice فتسمع نغمة الرنين، ثم يرد Bob ب 200 OK ومعه SDP بعنوانه ومنفذه، فيؤكد المقسم ب ACK، ثم يرسل 200 OK إلى Alice فتؤكد هي أيضاً ب ACK.
- الصوت: يبدأ RTP في الاتجاهين، وفي التجربة أرسل كل طرف نحو 490 حزمة خلال عشر ثوان تقريباً، أي نحو 50 حزمة في الثانية كما حسبنا.
- الإنهاء: تغلق Alice الخط فترسل BYE، فيرد المقسم ب 200 OK ويرسل BYE إلى Bob فيرد ب 200 OK.
أين تنكسر المكالمات؟
لو كان كل هاتف وكل مقسم على عنوان عام يصل إليه الجميع لما احتجنا إلى أكثر مما سبق، ولكن الهواتف في الواقع خلف NAT في المكتب أو البيت، والمقسم خلف جدار حماية، وهنا تظهر الأعراض المشهورة: الهاتف مسجل ولا يرن، أو يرن ولا يصل الصوت، أو يصل الصوت في اتجاه واحد فقط، أو تنقطع المكالمة بعد 30 ثانية بالضبط. والسبب في أغلب هذه الحالات أن SIP وSDP يكتبان العناوين داخل الرسائل نفسها، وال NAT يغير عنوان الحزمة ولا يغير ما بداخلها، فيرسل المقسم الصوت إلى عنوان خاص لا يصل إليه. وقد شرحنا كيف يعمل ال NAT في شرح NAT للمبتدئين، وفي المقال التالي من هذه المرحلة نبني هذه المشكلة بأيدينا ونصلحها خطوة خطوة:
وإذا كانت المكالمات في المتصفح عبر WebRTC وليس عبر هواتف SIP، فالحل المعتمد هناك هو STUN وTURN، وقد شرحناه في مكالمات WebRTC خلف NAT. وإذا كان للمؤسسة عدة فروع، فالشائع أن يكون المقسم في المركز، وتصل إليه هواتف الفروع عبر شبكة خاصة بين المواقع كما في معمارية المحور والأطراف Hub and Spoke، فيبقى SIP داخل الشبكة الخاصة دون أن يمر بال NAT أصلاً، وكثير من الشركات تضع الهواتف أيضاً في شبكة VLAN خاصة بالصوت كما شرحنا في تقسيم الشبكة.
جدول المصطلحات
| المصطلح | المعنى | مثال |
|---|---|---|
| VoIP | نقل المكالمة على شكل حزم IP | هاتف مكتبي متصل بكابل الشبكة |
| PSTN | شبكة الهاتف العامة التقليدية | الخط الأرضي وشبكات الجوال |
| PBX / IP PBX | مقسم المؤسسة الذي يدير هواتفها ومكالماتها | Asterisk وFreePBX |
| Extension | رقم داخلي للهاتف داخل المقسم | 1001 |
| Dial Plan | قواعد المقسم لتوجيه الأرقام المطلوبة | _10XX إلى تحويلة داخلية |
| Trunk / SIP Trunk | الخط الذي يربط المقسم بشبكة الهاتف العامة عبر مزود | حساب عند ITSP بأربع قنوات |
| DID | رقم عام يوجهه المزود إلى مقسمك | رقم مباشر لقسم المبيعات |
| SIP | بروتوكول تجهيز المكالمة وإنهائها | INVITE وBYE على المنفذ 5060 |
| SDP | وصف الصوت داخل رسائل SIP | c= وm=audio |
| RTP / RTCP / SRTP | نقل الصوت، وتقاريره، ونسخته المشفرة | 50 حزمة في الثانية |
| Codec | طريقة تحويل الصوت إلى بايتات | G.711 وG.722 وOpus |
| DTMF | ضغطات أزرار الهاتف أثناء المكالمة | telephone-event |
| Softphone | هاتف برمجي على الحاسوب أو الجوال | baresip وLinphone |
| B2BUA | المقسم الذي ينهي جلسة ويبدأ أخرى ويربط بينهما | قناتان في Asterisk لكل مكالمة |
ماذا بعد في هذه المرحلة؟
بعد هذا المقال والمقال العملي الذي يليه، تكمل مرحلة الاتصالات الهاتفية VoIP بمقالات عن جودة الصوت والترميزات والتأخير، وربط المقسم بشبكة الهاتف عبر SIP Trunk والأرقام DID، ثم Asterisk وFreePBX وFreeSWITCH كل منها في دليل مستقل، ثم المقارنة بينها، والهواتف والتطبيقات، ومراكز الاتصال Call Center، وتأمين المقسم ضد الاحتيال على المكالمات، وتوجيه SIP للمنصات الكبيرة مع Kamailio، وسوف نربط كل مقال منها هنا عند نشره بإذن الله.
الخلاصة
- VoIP ينقل المكالمة على شكل حزم IP، فيصبح الهاتف جهازاً على الشبكة ويصبح المقسم برنامجاً على سيرفر تستطيع أن تستضيفه بنفسك.
- المقسم PBX يدير التحويلات الداخلية Extensions ويقرر مصير كل رقم عبر خطة الاتصال Dial Plan، والخط الخارجي SIP Trunk يربطه بشبكة الهاتف العامة، والرقم المباشر DID رقم عام يوجهه المقسم إلى تحويلة.
- SIP يجهز المكالمة وينهيها برسائل نصية تشبه HTTP، و401 في بداية كل طلب هي خطوة المصادقة الطبيعية وليست خطأ.
- الصوت لا يمر في SIP، وإنما يتفق عليه الطرفان في SDP ثم ينتقل عبر RTP على منافذ أخرى، وهذا الفصل هو سبب أغلب مشكلات الصوت.
- مكالمة G.711 تستهلك نحو 80 kbit/s في كل اتجاه مع الترويسات، والتأخير والاهتزاز وفقد الحزم أهم من حجم الاتصال.
- العناوين المكتوبة داخل SIP وSDP لا يغيرها ال NAT، وهنا تبدأ مشكلات الصوت في اتجاه واحد، وهي موضوع المقال التالي.
سجل التحديثات
- أكتوبر 2026: كتابة المقال، مع التقاط المكالمة الكاملة من تجربة على Asterisk 20.6.0 وbaresip 1.0.0 في Docker.
