-->

مقدمة أنشىء خادم فويب مع NO-1) OpenSER)


لنبدأ أوﻻ ًمن عنوان الموضوع " أنشىء خادم فويب مع OpenSER" فى البداية قد ﻻ يعلم الكثير عن تقنية نقل الصوت عبر بروتوكول الإنترنت أو Voice Over Internet Protocol ولذلك سأقوم بذكر مقدمة بسيطة عن ال Voip ولماذا نحتاج إلى إستخدام تلك التقنية .

الكل يعلم أن إيقاع الحياة يتسم بالسرعة يوماً بعد يوم نتيجة للنقلة الحضارية والهائلة فى مجالات الإتصالات سواء كانت على صعيد الإتصالات الهاتفية أو الإتصالات الخلوية أو حتى الإتصالات عبر شبكات الإنترنت ، ونتيجة لتلك النقلة ظهرت العديد من التطبيقات والتقنيات العظيمة المنفعة فى مجال الإتصالات عبر شبكات الإنترنت وأهمها وهذه وجهة نظرى " تقنية نقل الصوت عبر بروتوكول الإنترنت أو فيما يعرف ب Voip " .

تقنية الفويب هكذا تُنطق (voip) تعنى نقل المحادثات الصوتية بإستخدام شبكة الإنترنت عن طريق توجيه تلك المحادثات الصوتية شأنها شأن الحزم العادية أو ال Packets وبالتالى ﻻ يقتصر الأمر على شبكات الإنترنت أو Internet Networks بل يمكن إستخدام تلك التقنية داخل أى شبكة تستخدم بروتوكول الإنترنت والتى تعرف ب IP-Based Networks ، وبالتالى يتم التعامل مع المحادثات الصوتية على أنها حزم يتم نقلها بإحدى بروتوكولات النقل الشهيرة وأشهرها TCP و UDP وحينها ﻻ تستطيع طبقات الشبكة المختلفة أو Network Layers التفرقة بين حزم البيانات و الحزم الصوتية .


ولكن قد يستغرب البعض ما الفائدة التى تعود علينا من تقنية ال voip ؟

للإجابة على ذلك التساؤل ومعذرة قد تكون الإجابة غير واضحة المعالم لمن ليست لهم دراية بالإتصالات الهاتفية ، تخيل معى السيناريو الإفتراضى لشبكات الهاتف العامة أو فيما تعرف بال PSTN فحينما يريد مستخدم ما على تلك الشبكة الإتصال بمستخدم آخر يحدث التالى :

فى البداية حينما يريد المستخدم A أن يهاتف المستخدم B بإستخدام ال PSTN تقوم شبكة الهاتف أوﻻ ًبعمل إنشاء للإتصال قبل بدء المحادثة ثم بعد ذلك تقوم الشبكة بحجز مسار محدد لكل من المستخدم A و B لإجراء المكالمة ، وبالتالى كلما أراد المستخدم A محادثة المستخدم B أو العكس ستقوم شبكة الهاتف بحجز نفس المسار لكى تتم عملية الإتصال بشكل سليم وبذلك دائماً يتم حجز ذلك المسار بنفس السعة والموارد للمستخدم A حتى فى حالة عدم احتياجه لذلك المسار فى وقت ما ، فمثلا ًقد يحتاج المستخدم A ذلك المسار بالنهار فقط وﻻ يقوم بإستخدامه بالليل وبالتالى يتم حجز الموارد الخاصة بالمستخدم A له فقط وﻻ يتم الإستفادة منها فى حالة عدم إستخدامها ، شبكات الهاتف هذه تسمى علمياً ب Circuit-Switched Networks .

أما شبكات الإنترنت المُسماه ب Packet-Switched Networks فالأمر مختلف بمعنى أن موارد الشبكة والمسارات المختلفة لها تكون مشتركة بين المستخدمين أو Shared Network Resources ويعنى ذلك أنه فى حالة عدم وجود أى من المستخدمين لتلك الموارد يستطيع مستخدم آخر على نفس الشبكة إستخدام تلك الموارد فى حالة عدم إسخدامها من قِبل مستخدمين آخرين .


أضرب مثالاً عملياً على ذلك :

نفترض أنه يوجد لديك حيز اتساع أو Bandwidth مثلا واحد ميجا ، ولديك عشرة مستخدمين فكيف يمكن تقسيم ذلك الحيز الإتساعى على كل من المستخدمين فى شبكات الهاتف العادى أو PSTN وشبكات الإنترنت ؟

أوﻻ ً: بالنسبة لشبكات الهاتف العادى أو ال PSTN سنقوم بتقسمة ذلك الحيز الترددى وهو 1 ميجا على العشرة مستخدمين وبالتالى يكون نصيب الفرد الواحد من مورد الشبكة هو 100 كليو وتكون تلك ال 100 كيلو هى نصيب الفرد على الدوام ﻻ يستطيع أن يأخد أكثر أو أقل منها ، وإحتمال إستخدام العشرة مستخدمين لمواردهم المحجوزة لهم فى وقت واحد صعب جدا ولنفترض أن واحدا من هؤﻻء العشرة هو المستخدم لموارده فقط وباقى المستخدمين غير موجودين ؟ معنى ذلك أن نسبة 90% من موارد الشبكة محجوزة بدون فائدة وﻻ يمكن إستخدامها .

ثانيا : شبكات الإنترنت أو أى شبكة تستخدم بروتوكول الإنترنت إذا كان الحيز الإتساع 1 ميجا فيتم مشاركة تلك الواحد ميجا بين المستخدمين العشرة وذلك أن إحتمال دخول المستخدمين العشرة فى نفس الوقت صعب جداً ويصل إلى نسبة ضئيلة أيضاً ، ولنفترض أنه يوجد مستخدم واحد من العشرة موجود online فسيكون بإمكانه التمتع بالحيز الإتساعى أو ال Bandwidth بالكامل فى حال عدم إستخدامه من قِبل المستخدمين الآخرين وذلك أن شبكات الإنترنت تعمل بمبدأ المورد عند الطلب أو Resources on Demand .


طبعا المقارنة البسيطة التى قمت بسردها فى السطور السابقة ما هى إﻻ مجرد نقطة فى بحر من المقارنات التى تتم بين كل من مؤيدى شبكات الإتصال الهاتفية أو Circuit-Switched Networks وبين شبكات الإنترنت أو Packet-Switched Networks .

وبالتالى نظراً لأن تقنية الفويب تعمد فى طبيعة عملها على إستخدام الشبكات التى تعمل ببروتوكول الإنترنت فإنها تتمع بنفس ميزة المورد عند الطلب أو Resource on Demand ، وهنا نستيطع إستخدام الحيز الإتساعى بشكل فعال وأكثر كفاءة من شبكات الهاتف العادى أو ال PSTN .

كما تتميز تقنية الفويب أيضا بخاصية مهمة جدا ًوهى رخص التكلفة ! نعم فتخيل كل ما تحتاجه مثلا لعمل voip-server ﻻ يتعدى كونه وجود جهاز حاسب لديك مع بعض البرامج مفتوحة المصدر والمجانية أى دون مقابل مالى ، كذلك البنية التحتية للتقنية موجودة فعلا وﻻ نحتاج إلى موارد إضافية.


أعلم أن تلك المقدمة بسيطة جداً فى التعريف بمفاهيم كثيرة ذكرتها ولكن فعلاً إعذرونى فكل مصطلح قد يحتاج إلى موضوع كامل وسنخرج عن صلب الموضوع فأرجو المعذرة منكم .


ندخل الآن فى صلب الموضوع ماذا نحتاج لكى نتمكن من إستخدام تلك التقنية ؟

أوﻻ ًبشكل أو بآخر قد تكون مستخدم لتلك التقنية وأنت ﻻ تشعر ! نعم فبرامج المحادثة الصوتية والكتابية مثل msn messenger , skype , yahoo وغيرها من تلك البرامج والتى تعتمد فى طريقة عمل المحادثات الصوتية الخاصة بها على تقنية voip لكن مع أختلاف البروتوكولات المستخدمة .

لذا ماهو الجديد فى موضوعنا ؟ سؤال يستحق الإجابة فعلا !

الجديد فى الموضوع أنك ستتمكن بنفسك من عمل خادم فويب أو voip-server خاص بك دون الحاجة إلى الآخرين والفائدة التى ستعود عليك من ذلك أنه سيكون لديك عدة ميزات هائلة منها :

1- سيكون لديك مقسم هاتف داخلى مُعتمداً على بروتوكول الإنترنت أو فيما يعرف ب IP PBX
2- تستطيع ربط خادم الفويب الخاص بك بشبكة الهاتف العادى أو PSTN
3- تستطيع عمل محادثات صوت وصورة بين المشتركين فى الخادم الخاص بك
4- تستطيع عمل المحادثات الكتابية إلى جانب إستخدام خدمة البريد الصوتى , خدمة الإجتماعات أو conference , خدمة الأعلانات أو Announcements .... 

ملحوظة : بعض من الخدمات السابقة تحتاج إلى أكثر من تطبيق لكن تحصل عليها ، فوجود OpenSER فقط لا يكفى لتزويد تلك الخدمات . 

تلك كانت بعض الميزات القليلة والتى سوف تتمكن من الحصول عليها فى حالة إمتلاكك لخادم فويب خاص . وقد يفرض سؤاﻻ ً آخراً نفسه ما هى المتطلبات اللازمة لعمل خادم الفويب ؟

كل ما تحتاجه لتنفيذ الأمور التى نحن بصدد الحديث عنها فى موضوعنا هو مجرد وجود جهاز حاسب وبعض البرامج التى سوف نقوم بتحميلها من على الإنترنت ، ويفضل أن يكون الحاسب لديك ذو إمكانيات معقولة ليست بالكبيرة التى تكلفك المال الكثير وﻻ بالقليلة والتى قد تسبب لك شللاً نصفيا نتيجة البطىء فى التعامل مع الجهاز !


خطة العمل :

لنناقش سويا خطة العمل والتى سوف نقوم بتنفيذها والمطلوب منك إنجازه وسأقوم بسرد عدة نقاط رئيسية :

أوﻻ : هل لديك شبكة حاسب داخلية وتود الربط بين تلك الأجهزة لكى تستطيع عمل مكالمات داخلية (مثال سنترال داخلى

ثانيا : هل يوجد لدين نطاق أو Domain خاص بك وتريد عمل خادم فويب لكى تقوم بالربط بين مجموعة من المشتركين ؟

ثالثا : هل تنوى الربط مع شبكات الهاتف العادى أو ال PTSN لكى تتمكن من الإتصال بالهواتف العادية سواء كانت داخل نطاق البلد أو سواء كانت على نطاق عدة دول ؟


فى البداية لكل خطة ذكرتها سابقاً الإعدادات الخاصة بها ولكن سيوجد قاسم مشترك فى الإعدادات بين تلك الخطط فمثلاً الخطة الأولى ستتمكن من خلالها إذا كنت تعمل فى شركة تحتوى على عدد من الموظفين وهؤﻻء الموظفين يعملون على حواسيب مرتبطة بشبكة أن تمتلك مقسم هاتف داخلى مماثل تماما للجهاز الذى يوجد داخل الشركة الخاصة بك وسيمكنك الآن أن تخبر رئيسك فى العمل أنكم بعد اليوم لن تحتاجوا إلى ذلك الجهاز ( مكانه فى ال Trash ) .

ملحوظة :

الشركات الكبيرة ليست بحاجة إلى تغيير السنترال الموجود لديها والبنية التحتية لهذا السنترال, بوجود IP PBX الشركات الكبيرة ممكن أن تحتفظ حتى بالأرقام الداخلية للتحويلات, وبإستخدام ال IP PBX سيتم تحويل المكالمات الداخلية من خلال الشبكة داخل الشركة وتسمح للمستخدمين بمشاركة نفس التحويلات الداخلية القديمة بالشركة مع الخطوط الخارجية.

فى الخطة الثانية إذا كنت تمتلك domain خاص بك وتريد توسعة الأمر لربط عدة مستخدمين داخل عدة دول مختلفة فحينها ستحتاج بعض الإعدادات الإضافية وبعض الأمور والتى ستقوم بوضعها فى الحسبان نتيجة قدومك على ذلك الأمر .

أما أخيراً وبالنسبة للخطة الثالثة وهى الربط مع شبكات الهاتف العادى فحينها ستحتاج إلى بعض العتاد الإضافى ، وأعنى بالعتاد الإضافى أن تمتلك PSTN Gateway لكن تتمكن من الربط مع ال PSTN

لذا سيكون محور الحديث فى موضوعنا عن كيفية تنفيذ الخطة الأولى والثانية والتى قد يكون كثير منا يمتلك المقومات الخاصة بها أما الخطة الثالثة فنظرا لكونها تتطلب بعض التكلفة لن نتطرق إليها . 


خادمات الفويب (برمجيات حرة )

برامج خادمات الفويب كثيرة جداً منها ماهو تجارى وبمبالغ مالية ومنها ماهو مجانى مفتوح المصدر ، أشهر خادمات الفويب المجانية والمفتوحة المصدر هو Asterisk يليها خادم إسمه OpenSER ، وإن شاء الله سيكون محور حديثنا هو OpenSER خلال السطور القادمة وكما ذكرت سيكون الكلام عملى أكثر منه نظرى نظراً لأن الموضوع متشعب وكل مصطلح يحتاج إلى فقرات لشرحه ، وبالتالى نريد عمل خادم الفويب خطوة بخطوة كى يتمكن الفرد العادى من إنشاء خادم يخصه سواء داخل LAN أو على مستوى النطاقات العامة أو Public Domains .


لكن قد يتسائل البعض ماهى أوجه الإختلاف بين خادمات الفويب مثلا OpenSER وبين Asterisk ؟ 

فى الحقيقة بالنسبة للمستخدم العادى قد لا يشكل الفرق عاملا مهما بالنسبة لديه ، أما على صعيد مزودى خدمة الفويب فسيكون الفارق كبير جدا ومهم فى نفس الوقت ، لان متطلبات الخدمة وتنفيذها ستتوقف على عدة عوامل منها : 

1- عدد المستخدمين الذين سوف نقوم بتزوديدهم الخدمة .

2- الخدمات المطلوب توفيرها للمستخدمين .

3- نوعية البروتوكولات المستخدمة (سأتحدث عن بعضها لاحقاً)


هذه العوامل الثلاث هى الركائز الأساسية التى ينبغى وضعها فى عين الاعتبار عند اختيار خادم الفويب ، لذا ينبغى عدم اهمال اين منها حتى لا تحدث مشاكل بعد ذلك قد تؤدى إلى فشل الخدمة من الأساس .

وكما ذكرت سابقاً توجد العديد من البرمجيات الحرة التى تقدم خدمة الفويب بأشكال عديدة اخترت منها OpenSER لعدة عوامل هى : 

1- كفاءة البرنامج فى تغطية عدد مهول من المستخدمين دون القلق بشأن الأداء .

2- مرونة البرنامج فى استخدامه فى عمل اشكال عديدة للخدمات حيث تستطيع استخدامه ك xmpp server ، presence server بجانب توفيره لخدمات الفويب المطلوبة دون أى مشكلة .

3-سهولة تثبيت البرنامج على اكثر من نظام تشغيل مختلف نظرا لكون الشفرة المصدرية للبرنامج مبرمجة بلغة C

4- سهولة إنشاء تطبيقات مختلفة لتكون مكملة لعمل البرنامج بأى لغة برمجة أخرى عن طريق عمل modules لها ، مثل java , perl

5- اعتماد OpenSER فى طريقة عمله على بروتوكل بدء الجلسة (SIP) والذى يعتبر فى وقتنا الحالى أهم البروتوكولات المستخدمة لتوفير خدمات نقل الصوت . 

هذه كانت بعض ميزات OpenSER التى ستحصل عليها باستخدامك له ، وحينما تستخدمه بشكل فعلى ستكتشف المزيد من الأسرار التى لا تتوقعها جعلت من OpenSER محل اهتمام كبرى شركات الشبكات (Cisco) ليعمل على احدى منصات خادمات الفويب لديها وهى سلسلة Cisco Service Node for Linksys one


بروتوكول بدء الجلسة SIP

حينما يتبادر إلى الأذهان كلمة بروتوكول فالبعض يشعر بالاشمئزاز نتيجة لسماع تلك الكلمة ، فأصعب ما يمكن فهمه حينما نعتمد فى عملنا على بروتوكول معين هو فهم طبيعة البروتوكول وكيف يعمل ، قد يكون الأمر فى البداية صحيحا لكن مع التعود على فهم البروتوكول وكيفية عمله سندرك أن الأمر بسيط جدا ولا يعدو كونه لغة تخاطب بين حاسبين على الشبكة كل ما عليك حينها هو فهم تلك اللغة واتقانها كى تتمكن انت من الحديث بها أيضا !! 

كما ذكرنا سابقا أن بروتوكول بدء الجلسة (SIP) هو احد البروتوكولات المسيطرة حاليا على سوق تقنية الفويب ، حيث يعمل البروتوكول بشكل فعلى داخل العديد من التطبيقات التى تستخدمه سواء كانت خادمات أو مستخدمين (clients) ، وبالتالى يستقطت البروتوكول شريحة واسعة من قطاع مزودى خدمة الفويب أو على مستوى المستخدمين على حد سواء . 

ترمز كلمة SIP إلى الكلمات الإنجليزية الثلات Session Initiation Protocol أى بروتوكول بدء الجلسة ، تم تطويره من قبل منظمة IETF ، تم توصيفه فى عدة مستندات مختلفة ، المستند الرئيسى يحمل الرقم RFC3261 والذى يمثل الإصدار رقم اثنان من البروتوكول أو SIP/2.0 . بروتوكول بدء الجلسة SIP يعمل بشكل أساسى فى طبقة التطبيقات فى نموذج الشبكات TCP/IP أو التى تعرف ب Layer 1 والتى تحمل الإسم Application Layer ، وظيفة البروتوكول ببساطة هى إنشاء وتعديل وإنهاء الجلسات أو المكالمات الصوتية . 


الجلسات (Sessions) قد تكون عبارة عن خدمة اجتماعات (Conference) , تعليم إلكترونى (E-Learning) أو محادثات كتابية (Instant Messaging) . 

طريقة عمل بروتوكول بدء الجلسة SIP تشبه فى طريقة عمل بروتوكول HTTP ، اى يعتمد بشكل أساسى فى بدء الجلسة أو إنهائها فى صورة رسائل نصية . 

يستطيع بروتوكول بدء الجلسة SIP توفير خمس خصائص أساسية لإنشاء وإنهاء المكالمات الصوتية وهى : 

1- أماكن المستخدمين (User Locations) : حيث يستطيع البروتوكول تحديد أماكن المستخدمين بشكل فعال وتحديد ماهية أماكنهم بالضبط عن طريق عناوين الإنترنت الخاصة (Internet Addresses) إلى جانب المنافذ التى يستخدمونها (Ports) . 

2- متغيرات المستخدمين (User Parameters Negotiation) : وهى تعبر عن عدد من المتغيرات تستخدم لتوصيف جلسة المكالمة كمثلا نوع الكوديك المُستخدم لتقسيم الصوت التماثلى إلى بيانات رقمية . 

3- تواجد المستخدمين (User Availability): امكانية تحديد وجود المستخدمين (online) من عدمه لبدء المكالمة . 

4- إنشاء المكالمات Call Establishment: هذه الخاصية تعبر عن المتغيرات اللازمة والمطلوبة لإنشاء وبدء المكالمة لكل من المُتصِل والمتصل به لإعلام كلا منهما أن المكالمة فى طريقها للبدء (كمثال رنين الهاتف لدى المتصل به(Ringing) , رنين الهاتف لدى المتصل (Ringback)). 

5- ادارة المكالمة Call Management: تعبر هذه الخاصية عن عمل العديد من الخصائص أثناء إنشاء المكالة وكمثال على ذلك تحويل المكالمة إلى رقم آخر (Call Transfer) , رفض المكالمة (Call Rejection) أو إنهاء المكالمة . 


تم تطوير بروتوكول بدء الجلسة SIP بجانب مجموعة من البروتوكولات الأساسية التى تمثل الهيكل الأساسى لتقنيات الوسائط المتعددة(Multimedia Architecture) ، من ضمن تلك البروتوكولات RVSP, RTP , RTSP وفى الأخير بروتوكول توصيف الجلسة SDP أو الذى يرمز إلى Session Description Protocol ، لكن على الرغم من ضرورة تواجد احدى تلك البروتوكولات فى مرحلة ما أثناء إنشاء المكالمة إلا أن بروتوكول بدء الجلسة SIP لا يعتمد على أين منها لكل يعمل . 


هذه كانت نبذة بسيطة عن البروتوكول ،لكن إن أحيانا الله قد أتطرق فى القريب إلى بعض الأساسيات المهمة التى يجب أن نفهمها ونعيها جدا بخصوص البروتوكول . 

الآن سنبدأ فى تطبيق الجانب العملى من الموضوع وسيكون مقسم على عدة مراحل : 


1- تثبيت OpenSER من الشفرة المصدرية على توزيعة ديبيان جنو/لينوكس الإصدار الرابع اتش (Debian Gnu/Linux etch 4.0) . 

2- ضبط OpenSER للعمل مع محرك قواع البيانات MySQL

3- تثبيت تطبيق serMyAdmin لإدارة المستخدمين من خلال واجهة رسومية .


تابعونا

Mahmoud Reda
كاتب المقالة
كاتب ومحرر اخبار اعمل في موقع أثرياء بالعلم .

جديد قسم : voip

إرسال تعليق