VoIP به زبان جادی
میدونم که عنوان مطلب کمی خودپسندانه شد ولی چارهای نبود. اول خواستم بنویسم «ویپ به زبان ساده» ولی دیدم عبارت «زبان ساده» یک جوری است که انگار برای کسانی نوشته شده که زبان پیچیده رو نمیفهمن. بعد خواستم به جای ویپ (که آدم رو یاد پشه میندازه) بگم «مکالمه اینترنتی» دیدم معنی درست نداره. برای قسمت دوم هم «مقدماتی» رو در نظر گرفتم بعد دیدم چیزی که میگم مقدماتی نیست بلکه خلاصه است. عمیق ولی بدون اصطلاحات فنی ولی اصطلاحات فنی هم داره… بگذریم. اصل جریان اینه که بعد از نوشتن مجموعه خاطرات مربوط به سفر نیجریه، چند نفر ایمیل زدن و پرسیدن برای چه کاری نیجریه هستم و من هم فکر کردم فرصت خوبی است که دقیقتر هم کارم رو توضیح بدم هم هر کس دوست داشت بتونه با یکی از جدیدترین تکنولوژیهای مخابرات آشنا بشه (:
من برای VoIP اینجا هستم. سیستم مکالمه روی شبکه آی.پی. . در صورت موفقیت پروژه ما، شرکتها و آدمها میتونن با استفاده از گوشیهای ویپ یا برنامه کامپیوتری یا گوشی معمولی به مشتریان دیگه زنگ بزنن. این مکالمه کاملا ارزونتر از مکالمه سنتی با تلفن خواهد بود (در مواردی می شه حتی بستههای مجانی برای مثلا کل ارتباطات داخلی یک شرکت با پنج تا دفتر در کشور خرید) و سرویسهای خیلی خیلی بیشتری از مکالمه سنتی تلفن ارائه خواهد داد. بذارین دقیقتر به تکنولوژی ویپ نگاه کنیم.
ویپ یا VOIP یا همون Voice Over IP به این میگن که شما روی اینترنت با یکی حرف بزنین. یا به جای اینترنت روی یک شبکه آی.پی. مثل هر چیز مخابراتی دیگه، تمام سختیاش به اسمهای مخففاش است و ریزهکاریهای اجراییش. سادهترین جوری که میشه یک سیستم ویپ رو نشون داده اینه:

هاهوهاهه.. دقیقا! یک ابر هست که شبکه آی.پی. است (مثلا اینترنت) و دو نفر که از طریق یک کابل به اون وصلن. هر کدوم از این دو نفر یک آی.پی. دارن و یک جا (مثلا سکایپ) لاگین میکنن و با هم حرف میزنن. اما بذارین یک کم دقیقتر به این جریان نگاه کنیم. فرض کنید یک سرور ویپ هست و من توش لاگین میکنم:

دقت کنید که روی سرور نوشتهام «سافت سوییچ» یا شاید مثلا «سوویچ نرم». این در مقابل سوییچهای مکانیکی و بعدا الکترونیکی قدیمی تلفن است. ما اینجا یک سوییچ نرم افزاری داریم که وقتی من بهش وصل میشم از طریق پروتکلی به اسم SIP (سیپ) بهش خبر میدم که من اینجام و آی پی ام فلانه. حالا اگر کسی بخواد به من زنگ بزنه کافیه اونهم به همین سوییچ وصل بشه:

نفر جدید که مییاد، به سافت سوییچ (از طریق پروتکل سیپ که مبتنی بر متن و خیلی هم ساده است) میگه که میخواد با جادی حرف بزنه. جادی قبلا توی این سافت سوییچ لاگین کرده و در نتیجه سیپ میدونه آی پی جادی چنده پس به نفر جدید خبر میده که جادی هست و آی پی اش فلان است و یک پیام هم برای جادی میفرسته که فلانی داره بهت زنگ میزنه. بعد من میتونم «گوشی رو بردارم، آی پی طرف رو نگاه کنم و مستقیم باهاش ارتباط صوتی برقرار کنم». به همین سادگی (: فقط با بودن همین سافت سوییچ میتونیم کلی کار بکنیم. مثلا نفر دوم که لاگین کرد بهش خبر بدیم که جادی هم آنلاین است ولی چون نفر دوم توی لیست دوستان طرف نیست به نفر سوم از نفر دوم چیزی نگیم. این دقیقا اونجا است که فهرست دوستاتون رو میبینین و میتونین اگر بخواین باهاشون چت کنید. اما…
اما این همه جریان نیست… فرض کنید بخواهید از سیستم بپرسید که چقدر شارژ دارید. گوشی رو برمیدارید و یک شماره رو میگیرید و مثلا گزینه «شنیدن شارژ باقی مانده» رو که مثلا عدد ۳ است فشار میدین. سافت سوییچ که نمیتونه حرف بزنه! باید یک دستگاه باشه که سافت سوییچ بهش دستور حرف زدن بده و اون هم «پیام» رو پخش کنه. نگاه کنید:

اینجا مثلا یک نفر جدید به سافت سوییچ وصل شده و به اون گفته که «پیامهای صندوق صوتی منو پخش کن» یا «گزینه انتقال مکالمه رو برام فعال کن.» در مورد اول سافت سوییچ باید براش یکسری پیغام ضبط شده پخش کنه و در مورد دوم باید توی خودش اون گزینه رو فعال کنه (که اوکی است) اما باید به یک دستگاه جانبی هم بگه که برای کاربر پخش کنه «گزینه انتقال مکالمه، برای شما فعال شد.»… این کار اون چیزی است که کشیدم. این دقیقا چیزی است که به خاطرش من اینجام. ما از یکی از محصولات یک شرکت دیگه برای اینکار استفاده میکنیم به اسم Movius Mereon. یک دستگاه سیاه رنگ نسبتا بزرگ (تقریبا اندازه مایکروفر بزرگ) که میتونه دستور بگیره «فلان صدا رو پخش کن» و از صداهای ضبط شدهاش، فلان صدا رو در بیاره بده دست مشتری. از نظر فنی به این میگن Media Server.
حالا اگر پدربزرگ شما که اهل کامپیوتر و این قرتیبازیها هم نیست بخواهد به شما زنگ بزنه چی؟ بذارین یک چیز دیگه به نقشه اضافه کنم:

ایول! اون مثلث با اون علامت بانمک توش، Packet Manager است: مدیر بسته. یک طرفش از بستههای TDM سر در میاره که بستههای کلاسیک تلفنهای سیمدار معمولی ما هستن و یک طرفش از بستههای IP (و الان دیگه میدونیم که به خاطر سافت سوییچ باید با پروتکل سیپ حرف بزنه). این دستگاه از یک طرف به سیستم تلفن قدیمی وصله و از طرف دیگه به سیپ و در نتیجه آدمها میتونن از توی خونه یا تلفنهای معمولی قدیمیشون هم به سیپ زنگ بزنن و برعکس. البته همینجا بگم که ما تلفنهای سیپ هم داریم (مال شرکت سیسکو مثلا) که به جای سیم تلفن، باید بهشون کابل شبکه بزنیم و آدرس سافت سوییچ و این چیزها رو بهش بدیم (:
اوه.. این رو هم اضافه کنم که اون چیزهایی که توی براکت مربعی ( یعنی اینها [...] ) نوشتهام اسمهای این دستگاهها است در شرکت ما. مثلا اسم سافت سوییچ ما hiQ است، اسم مدیر بسته ما hiE و غیره و غیره.
اما امنیت! بخش مهمی از زندگی دیجیتال، جلوگیری از ورود هکرها (یعنی آدمهای باهوش که میخوان از کارها سر در بیارن)، دزدها (یعنی آدمهای باهوشی که میخوان پول در بیارن) و بچههای اسکریپتی است (یعنی کسایی که دوست دارن هکر باشن ولی تنبلن و فقط به دانلود کردن یک برنامه یا راهنما از اینترنت و اجراش بسنده میکنن و ادای هکرها رو در میارن). در سیستمهای ویپ یکی از بهترین دستگاهها برای اینکار ACME است:

سر راه هر چیزی که به سیستم وصل است، یک «Session Border Controller» میذاریم (مارک مال ما آکمه است). آکمه مثل دیوار آتش است تقریبا یعنی فقط و فقط به ترافیکی که ما تعریف کردیم اجازه عبور میده و در عین حال به افراد بیرون از سیستم هم نشون نمیده که توی سیستم چه خبره.
راحت بود نه؟ (: مطمئن هستم که کاملا متوجه شدین و حالا میدونین که چرا دوست نداشتم اسم مطلب رو بذارم «به زبان ساده» یا «مقدماتی» (: سوالی بود در خدمتم (:
اگر از این مطلب خوشتان آمد کامنت بگذارید یا مشترک خوراکخوان کیبرد آزاد شوید و مطالب بعدی را در خبرخوانتان، بخوانید.








ما ازین مطللب خوشمون اومد ، واسه همین کامنت گذاشتیم .. راستی زبون جادی خیلی بهتر از زبونای دیگه هم بود ..
موفق باشی ..
سلام،
مرسی جادی جان عالی بود، سوالم اینه که پس سیستم های مثل Asterisk برای خودشون Built in Media Server دارن که می تونن صدا رو پخش کنن؟ مثل گذاشتن سیستم IVR درسته؟
آره شهاب، من پر رویی می کنم جواب میدم،چون یک سوال مشابه دارم. آره که آستریسک IVR داره. با IVR هم خیلی کارها میشه کرد، انتخاب کاربر را پاس بدی به یک صف و یا یک AGI و خیلی چیزهای دیگه.
سوال من اینه: جادی، شما که از آستریسک استفاده نمی کنید، نه؟ از سیستمهای خودتون استفاده می کنید، درسته؟
من نمودم سیستمی که جادی استفاده کرده چیه ولی اولین بار بود که همچین چیزی شنیدم شاید به خاطر اینه وقتی تو سیستمی مثل MTN تعداد CALL ها زیاد میشه دیگه Media Server خود سسیتم نمی تونه هندل کنه؟! درسته؟
منظورم این بود که مثلا اگه من Cisco CME استفاده کنم بازم باید یدونه Media Server بزارم کنارش؟
مرسی
ممنون جادی جان از مطلب مفید و واضح شما
بسیار خوب
خب، جمع ویپ کارا جمعه! راستش یه خرده ادبیات جادی با چیزایی که ما میگیم تفاوت داره: مثلا ما به اون سافت سوییچ میگیم: SIP registrar یا به اون مثلثه میگیم PSTN gateway، به اون مدیا سرور، میگیم IVR Server.
مطلب جالب و خوبی بود، بخصوص که من فقط با سیستمهای ویپ اپن سورس مثل Asterisk, OpenSER (OpenSIPS), Freeswitch کار کردم و از برند appliance های ویپ خیلی خبر ندارم.
ممنون جادی جان.
خوب شد که اینجا در این مورد مطلب نوشتید. که جمع ویپ کارها جمع شد.
همونطور که توی ایمیل گفتم، ما روی پروژه PJSIP کار می کنیم. یک پروژه متن باز هست به زبان C . یک اپلیکیشن برای موبایل هست که ویپ رو فراهم می کنه.
اگر کسی روی این پروژه کار کرده، میکنه، خواهد کرد یا دوست داره بکنه! ما هستیم. و خوشحال میشیم همکاری داشته باشیم.
در مورد پروتکل ها یک سؤال از استریسک کارها داشتم. همونطور که جادی عزیز توی تصویر مشخص کردند، SIP بین هر endpoint یک اتصال جدید ایجاد میکنه و بسته های RTP ارسال میکنه. (توی تصویر مرحله شماره 3 هست). اما IAX یک ارتباط مجزا و خارج از سرور درست نمیکنه. درواقع همه بسته ها باید از سرور عبور کنند. چه بسته های سیگنالینگ و چه بسته های حامل صدا.
حالا آیا این ویژگی IAX یک مزیت محسوب میشه یا نه؟
به نظر من نه تنها به بهینه سازی استفاده از پهنای باند کمکی نمیکنه بلکه ترافیک سمت سرور رو افزایش میده. و با زیاد شدن تعداد کاربران، مشکل به وجود میاد؟ کسانی که از Asterisk استفاده می کنند در این مورد نظرشون چی هست؟ می دونم که دارم اشتباه فکر می کنم اما می خوام بدونم که چه اتفاقی میوفته.
با تشکر/
جسارتا من اگه جای مدیرت بودم، به خاطر لو دادن اسم دستگاها که کار هکر هارو راحت تر کردی، ماموریت بعدی می فرستادمت افغانستان
به یک تعداد ایکس: من جسارتا به عنوان یک استریسک کار جواب میدم، اینکه وقتی از SIP استفاده میکنی، بعد از برقرار ارتباط، ترافیک کماکان از سرور عبور بکنه یا نه، بستگی به استفاده یا عدم استفاده از متدی به نام reinvite داره و خیلی به تفاوت SIP و IAX ربطی نداره. البته گاهی دوسرارتباط از کدکهای مختلفی استفاده میکنند و استریسک علاوه بر نقش registrar، باید کار transcoding رو هم انجام بده، در این حالت reinvite ممکن نیست و ترافیک باید حتما از سرور عبور کنه. استفاده از reinvite بار پردازشی سرور رو به طور قابل ملاحظه ای کاهش میده، در واقع شاید 10 سال پیش، زمانی که سریعترین پردازنده ها 200 مگاهرتزی بودند، ویپ بدون reinvite ممکن نبود، اما مسائل امنیتی و نظارتی خاص خودش رو هم داره.
اما داستان IAX: IAX همونطور که از اسمش پیداست، پروتکلی است که خاص استریسک طراحی شده و سعی کرده اند کاستی هایی که SIP (بیشتر در رابطه با استریسک) داشته رو برطرف کنند و متدها و قابلیتهای مورد نیازشون رو بهش اضافه کنند. توی استریسک IAX به شما امکاناتی میده که با سیپ باید با هزار جور کلک و تعریف هدرهای custom و کلی کد زنی ایجاد بشن، پس وقتی با استریسک سروکار دارید، و بسترش مهیاست، صرفه با IAX هست. اما endpoint های موجود، اکثرا با سیپ سازگارند و اونایی که IAX هم پشتیبانی میکنن، معمولا خیلی ایراد دارند. در مورد IAX و مزایاش نسبت به سیپ اینجا رو ببینید:
http://www.voip-info.org/wiki/view/IAX+versus+SIP
ببخشید، اینجا دیگه رسما تبدیل به فروم ویپ شد!
سلام جادی عزیز
اگه امکان داره این rss رو اصلاح کن که فکر کنم تو ایران فیلتره
اصلا با rss تو سایت نمیتونم بیام
سلام،
از پنج عدد ایکس به سعید آقا:
متشکرم بابت پاسختون. میگم این فروم دکمه تشکر نداره؟
راستی برای ارتباط ازطریق گوشی باید گوشی های خاصی داشته باشه؟
یعنی مثلا مایه viop server راه انداختیم حالا برای ازتباط کاربرها فرضا می خواهیم ازگوشی استفاده کنیم(کسی کاری داشت زنگ بخوره) گوشی خاصیه؟
@مهدی SIP Phone
سلام جادی جان
از وقتی این پست رو نوشتی تا الان هر دفعه میخوام بیام بخونم ولی نمیشه !
دیگه امشب خوندم
خیلی عالی بود و خیلی هم استفاده کردم، ممنون
مطلب خیلی خوبی بود جادی عزیز. وبلاگستان به این جور مطالب نیاز داره. امیدوارم پروژه تان موفق باشه.
مرسی . خیلی عالی بود. اون ایمیل که گفتی از کارم پرسیدن رو من فرستاده بودم.