RPC چیست؟ – Remote Procedure Call – به زبان ساده


Remote Procedure Call که به اختصار RPC خطاب میشود، یک قاعده ارتباطی میان-پردازهای در حوزه سیستمهای توزیعیافته است که در کاربردهای کلاینت-سروری مورد استفاده قرار میگیرد. RPC پروتکلی است که به واسطه آن یک برنامه میتواند از برنامهای روی کامپیوتر دیگری در شبکه، بدون اطلاع از جزئیات آن شبکه، درخواست خدمت کند. علاوه بر «فراخوانی رویه راه دور» یا «فراخوانی روال راه دور» از عبارتهای «فراخوانی زیر روال» (Subroutine Call) و «فراخوانی تابع» (Function Call) نیز برای اشاره به پروتکل RPC استفاده میشود. در این مقاله به این سوال پاسخ داده شده است که RPC چیست و همچنین مفاهیم و موضوعات پیرامون پروتکل RPC شرح داده شدهاند. در ضمن به سوالات رایج در مورد RPC نیز پاسخ داده شده است.
RPC چیست ؟
RPC سرنامی برای عبارت «Remote Procedure Call» به معنی «فراخوانی رویه از راه دور» یک روش ارتباط میان پردازشی (Interprocess Communication | IPC) است که برای اپلیکیشنهای مبتنی بر کلاینت-سرور استفاده میشود. RPC برای فراخوانی پردازههای یک سیستم راه دور مورد استفاده قرار میگیرد، به طوری که گویی آن پردازهها روی سیستم محلی فراخوانی شده باشند. یک کلاینت، پیام درخواستی دارد که RPC آن را ترجمه و به سرور ارسال میکند. این درخواست ممکن است یک فراخوانی رویه (Procedure Call) یا فراخوانی تابع از یک سرور راه دور باشد. وقتی که سرور درخواست را دریافت میکند، پاسخ مورد نیاز را به کلاینت باز میگرداند.
در طول مدتی که سرور در حال پردازش فراخوانی است، کلاینت مسدود میشود و تنها پس از پایان کار سرور و دریافت پاسخ به کار خود ادامه خواهد داد. در واقع، مشابه یک فراخوانی رویه محلی (Local Procedure Call)، فرایند RPC نیز عملیاتی همزمان است و برنامه درخواست کننده باید تا زمان بازگرداندن نتایج رویه راه دور، معلق بماند. اگرچه، استفاده از پردازههای کم حجم یا Threadهایی که فضای آدرس یکسانی را به اشتراک میگذارند، امکان اجرای چند RPC به طور همزمان را به وجود میآورد.
RPC مخفف چیست ؟
RPC مخفف «Remote Procedure Call» به معنی «فراخوانی رویه از راه دور» است. کلمه «Procedure» در علوم کامپیوتر به بخشی از یک برنامه گفته میشود که وظیفه مشخصی را انجام میدهد. در یک برنامه میتوان از رویهها به طور مکرر استفاده کرد.
به عملیات RPC ، «فراخوانی زیر روال» (Subroutine Call) و «فراخوانی تابع» (Function Call) هم گفته میشود. بنابراین، میتوان گفت که مفاهیم Subroutine ،Procedure و Function تقریباً مشابه یکدیگر هستند و به یک مفهوم اشاره دارند یعنی: «قطعه برنامهای که کار خاصی را انجام میدهد». بنابراین، در RPC یک قطعه برنامه که وظیفه مشخصی را انجام میدهد از یک محل راه دور فراخوانی و درخواست میشود.
چه زمانی از RPC استفاده میشود؟
ساز و کار رویههای راه دور RPC زمانی به کار میروند که یک برنامه کامپیوتری موجب اجرای رویه یا زیرروالی در یک فضای آدرس متفاوت شود. انجام این کار به صورت یک فراخوانی رویه معمولی و بدون نیاز به کدنویسی جزئیات برای تعامل راه دور توسط برنامهنویس محقق میشود. همچنین، این فراخوانی رویه، پروتکلهای سطح پایین انتقال از جمله UDP و TCP/IP را نیز مدیریت میکند.
حال در ادامه مقاله «RPC چیست» به شرح اجزای RPC پرداخته شده است.
اجزای RPC چه هستند؟
معماری RPC اساساً از پنج بخش تشکیل شده که شمال کلاینت، Client Stub، زمان اجرای RPC یا RPC Runtime، سرور Stub و خود سرور است. در این بخش از مقاله «RPC چیست» برخی از این اجزا شرح داده شدهاند. ابتدا به شرح RPC Runtime پرداخته شده است.
RPC Runtime چیست ؟
سیستم زمان اجرای RPC یا همان RPC Runtime ، کتابخانههایی از روالها (Routine) و مجموعهای از سرویسها است. این مجموعه روالها، ارتباطات شبکهای را مدیریت میکنند که اساس ساز و کار RPC است.
در طی یک فراخوانی RPC ، سیستمهای زمان اجرای سمت کلاینت و سمت سرور عملیات زیر را مدیریت میکنند:
- انقیاد (اتصال | Binding)
- برقراری ارتباطات از طریق یک پروتکل مناسب
- انتقال دادههای فراخوانی شده میان کلاینت و سرور
- مدیریت خطاهای ارتباطی
در ادامه این بخش از مقاله «RPC چیست» به این سوال پاسخ داده شده است که Stub چیست ؟
Stub چیست ؟
کارکرد Stub، فراهم کردن شفافیت برای کدهای نوشته شده توسط برنامهنویس است. در ادامه معرفی Stub در این بخش از مقاله «RPC چیست» به شرح وظایف Stub سمت کلاینت پرداخته شده است.
وظایف Stub سمت کلاینت
- در سمت کلاینت، Stub واسط میان فراخوانی رویه محلی کلاینت و سیستم زمان اجرا را مدیریت میکند.
- دادهها را بستهبندی یا آنها را میگشاید.
- پروتکل زمان اجرای RPC را فراخوانی میکند.
- در صوت تقاضا، برخی از گامهای اتصال را انجام میدهد.
وظایف Stub سمت سرور
در سمت سرور، Stub به طور مشابه، واسطی میان سیستم زمان اجرا و رویههای مدیریت محلی که توسط سرور اجرا شدهاند فراهم میکند. حال پس از معرفی Stub، در ادامه نوشته «RPC چیست» به این سوال پاسخ داده شده است که Binding در RPC چیست؟
Binding در RPC چیست ؟
کلاینت از کجا بداند باید کدام سرویس را فراخوانی کند و این سرویس کجاست؟ منعطفترین راهکار، استفاده از ارتباط پویا (Dynamic Binding) و یافتن سرور در زمان اجرا است. این کار وقتی انجام میشود که ابتدا درخواست RPC انجام شده باشد. اولین باری که Clinet Stub فراخوانی میشود، Clinet Stub با یک Name Server ارتباط برقرار میکند تا نشانی که سرور در آن قرار دارد را انتقال دهد.
Binding (اتصال | ارتباط) از دو بخش تشکیل شده است:
- نامگذاری: سروری که خدماتی برای ارائه دارد، یک واسط برای آن خدمات صادر میکند. صدور یک واسط، سرویس را در سیستم درج میکند تا کلاینتها بتوانند از آن استفاده کنند.
- تعیین موقعیت: کلاینت باید یک واسط صادر شده را پیش از آنکه ارتباط بتواند شروع شود، وارد کند.
حال پس از معرفی برخی از اجزای اساسی پروتکل Remote Procedure Call ، در ادامه مقاله «RPC چیست» به نحوه عملکرد RPC پرداخته و چگونگی کارکرد آن شرح داده شده است.
RPC چطور کار میکند؟
زمانی که یک فراخوانی رویه از راه دور (RPC) انجام میشود، محیطی که فراخوانی را انجام داده است (کلاینت) به حالت تعلیق در میآید. سپس، پارامترهای آن رویه یا روال از طریق شبکه به محیطی منتقل میشوند که رویه قرار است در آن اجرا شود (سرور).
در مرحله بعد، رویه در آن محیط (سرور) اجرا میشود. پس از اتمام رویه، نتایج (جوابها) به محیطی که فراخوانی را انجام داده بود (کلاینت) باز گرداننده میشوند و با دریافت نتایج، کلاینت درست مثل اینکه آن رویه در خود کلاینت انجام شده باشد به ادامه کار خود ادامه میدهد.
در ادامه این بخش از مقاله «RPC چیست» با جزئیات بیشتری به نحوه عملکرد پروتکل RPC پرداخته و توالی رویدادها در آن بررسی شدهاند.
توالی رویدادها در RPC چگونه است؟
توالی رویدادها در یک فراخوانی رویه از راه دور در ادامه فهرست شده است:
- یک Client Stub (قطعه کدی که تبدیل پارامترهای ارجاع شده میان کلاینت و سرور را انجام میدهد) توسط کلاینت فراخوانی میشود. این فراخوانی یک فراخوانی رویه محلی است با پارامترهایی که به طور معمول در بالای پشته قرار داده شدهاند.
- Client Stub رویه را به صورت یک پیام بستهبندی میکند و یک فراخوانی سیستمی را برای ارسال پیام انجام میدهد. به بستهبندی پارامترهای رویه «Marshalling» گفته میشود.
- سیستم عامل محلی کلاینت پیام را از ماشین کلاینت به ماشین سرور راه دور ارسال میکند.
- پیام توسط سیستم عامل سرور به Server Stub ارجاع داده میشود.
- Server Stub بستهبندی پارامترها را از پیام باز میکند (Umarshalling).
- پس از پایان رویه در سرور، نتایج به Server Stub بازگردانده میشوند و Server Stub مقادیر بازگشتی را در قالب یک پیام بستهبندی میکند. سپس، Server Stub پیام را به لایه انتقال تحویل میدهد.
- لایه انتقال پیام دریافتی را به لایه انتقال کلاینت میفرستد و لایه انتقال کلاینت نیز پیام را به Client Stub تحویل میدهد.
- Client Stub بستهبندی پارامترهای بازگشتی را باز میکند و اجرا به فراخواننده (کلاینت) باز میگردد.
توالی رویدادها در فراخوانی رویه از راه دور در نمودار زیر نشان داده شده است:
در ادامه این بخش از مقاله «RPC چیست» به شرح برخی از خصوصیات RPC پرداخته شده است تا آشنایی بیشتری با نحوه عملکرد پروتکل Remote Procedure Call حاصل شود.
خصوصیتهای RPC چیست؟
در این بخش از مقاله «RPC چیست» خصوصیتهای پروتکل فراخوانی رویه راه دور فهرست شدهاند:
- رویه فراخوانی شده در یک پردازه دیگر قرار دارد که این پردازه احتمالاً در یک ماشین دیگر واقع شده است.
- این پردازه فضای آدرس را به اشتراک نمیگذارد.
- RPC در داخل محیط پردازه سرور اجرا میشود.
- RPC دسترسی به محیط فراخواننده رویه (کلاینت) را فراهم نمیکند.
در ادامه مقال «RPC چیست» به سایر مفاهیم و سوالات مهم پیرامون پروتکل Remote Procedure Call پرداخته شده است. پیش از آن، به معرفی مجموعه دورههای آموزشی دروس علوم و مهندسی کامپیوتر فرادرس با هدف آشنایی علاقهمندان با این دورهها پرداخته شده است.
سرویس RPC در ویندوز چیست؟
سرویس RPC در ویندوز ارتباط میان اپلیکیشنهای ویندوز را پشتیبانی میکند. به طور مشخص این سرویس، پروتکل RPC ، یعنی نوعی ارتباط میان پردازهای را پیادهسازی میکند که در آن یک پردازه کلاینت میتواند درخواستهایی از یک پردازه سرور داشته باشد.
نام این سرویس، «RpcSs» است و در داخل پردازه میزبان سرویسهای اشتراکی یعنی «svchost.exe» اجرا میشود.
در ادامه شرح چیستی سرویس RPC در مقاله «RPC چیست» ، هدف از وجود این سرویس در ویندوز شرح داه شده است.
هدف از RPC مایکروسافت چیست؟
فراخوانی رویه راه دور (RPC) مایکروسافت فناوری قدرتمندی را برای ایجاد برنامههای کلاینت-سروری توزیعیافته فراهم میکند. Stubها و کتابخانههای زمان اجرای RPC اکثر پردازههای مربوط به پروتکلهای شبکه و ارتباطات را مدیریت میکنند. این باعث میشود که توسعهدهندگان به جای تمرکز بر جزئیات شبکه، بر جزئیات اپلیکیشن خود تمرکز داشته باشند.
حال باید به کاربرد RPC در ویندوز پرداخته شود. این کار در ادامه مقاله «RPC چیست» انجام شده است.
کاربرد Remote Procedure Call در ویندوز چیست؟
RPC میتواند در تمام اپلیکیشنهای کلاینت-سرور مبتنی بر سیستم عاملهای ویندوز استفاده شود. همچنین میتوان از RPC در ساخت برنامههای کلاینت-سروری برای محیطهای شبکه ناهمگونی استفاده کرد که سیستم عاملهای یونیکس و اپل نیز در آنها وجود دارد.
مخاطب توسعهدهنده RPC در ویندوز چه کسانی هستند؟
سرویس RPC در ویندوز برای استفاده برنامهنویسان C/C++ طراحی شده است. لازم است برنامهنویسان آشنایی لازم را با زبان تعریف واسط مایکروسافت (MIDL) و کامپایلر MIDL داشته باشند.
آیا میتوان سرویس RPC را در ویندوز سرور غیر فعال کرد؟
سرویس RPC در ویندوز بسیار مهم است و هرگز نباید غیر فعال یا متوقف شود. و در صورتی که سرویسهای وابسته به سرویس RPC برای اجرای روان با اجرای دستور «SC ENUMDEPEND» فهرست شوند، مشخص خواهد شد که بیش از ۱۰۰ سرویس در ویندوز سرور ۲۰۱۹ به سرویس RpcSs نیازمند و وابسته هستند.
در صورتی که سرویس RPC متوقف شود، تمامی ۱۰۳ سرویس وابسته به آن نیز غیر فعال و کل سیستم عامل فلج خواهد شد. در راهنمای غیر فعال کردن سرویسهای ویندوز سرور، مایکروسافت قویاً توصیه کرده است که سرویس RPCSS غیر فعال نشود. اگرچه، در این بیانیه حق مطلب ادا نشده و این سرویس برای اجرای ویندوز کاملاً حیاتی است و به هیچ وجه نباید غیر فعال شود. ادامه مقاله «RPC چیست» به شرح کاربردهای پروتکل Remote Procedure Call اختصاص دارد.
کاربردهای RPC چیست ؟
بسیاری از سرویسهای ویندوز و سایر سرویسها و پروتکلها از RPC استفاده میکنند یا از روش عملکرد RPC در آنها الهام گرفته شده است. در این بخش، برخی از پیادهسازیهای مشابه و مبتنی بر پروتکل RPC فهرست شدهاند:
- فراخوانی روش راه دور جاوا (Java RMI) قابلیتهایی مشابه متدهای استاندارد RPC یونیکس فراهم میکند.
- زبان برنامه نویسی GO بسته RPC را برای پیادهسازی فراخوانی روال از راه دور با پشتیبانی از فراخوانیهای ناهمگون فراهم کرده است.
- روبی توزیعی یا Distributed Ruby به برنامههای نوشته شده به زبان Ruby امکان میدهد تا با یکدیگر در یک ماشین یکسان یا از طریق شبکه ارتباط برقرار کنند.
- سیستم فایل شبکه (NFS) یکی از استفاده کنندگان برجسته پروتکل RPC به شمار میرود.
- JSON-RPC یک پروتکل RPC است که از پیامهای کدگذاری شده با JSON استفاده میکند.
- XML-RPC نیز یک پروتکل RPC است که از XML برای کدگذاری فراخوانیهایش و از HTTP به عنوان یک ساز و کار انتقال بهره میبرد.
- SOAP جایگزینی برای XML-RPC است و به مانند آن از XML برای کدگذاری فراخوانهای مبتنی بر HTTP استفاده میکند.
- WAMP پروتکل RPC و Publish-Subscribe را در قالب یک پروتکل واحد و غیر وابسته به انتقال ادغام میکند.
- جعبه ابزار وب Google یا همان Google Web Toolkit از RPC ناهمگون برای ارتباط با خدمات سرور استفاده میکند.
- Microsoft .NET Remoting امکانات RPC را برای سیستمهای توزیعی پیادهسازی شده روی پلتفرم ویندوز ارائه میدهد. البته، اخیراً Microsoft .NET Remoting با WCF جایگزین شده است.
- DCOM مایکروسافت از MSRPC استفاده میکند که مبتنی بر DCE/RPC است.
- محیط محاسبات توزیعیافته بنیاد نرمافزار باز DCE/RPC که توسط مایکروسافت پیادهسازی شده است نیز از RPC استفاده میکند.
حال در ادامه مقاله «RPC چیست» به شرح ویژگیهای RPC پرداخته شده است.
ویژگیهای RPC چیست ؟
در این بخش از مقاله «RPC چیست» به طور خلاصه به ویژگیهای مهم RPC اشاره شده است. این ویژگیها عبارتند از:
- سینتکس فراخوانی RPC ساده و روان است.
- RPC مفاهیم شناخته شدهای را ارائه میدهد.
- RPC واسطی کاملاً مشخص و تعریف شده ارائه میدهد.
- RPC میتواند میان پردازههای یک ماشین یا چند ماشین ارتباط ایجاد کند.
در ادامه بخش ویژگیهای RPC در مقاله «RPC چیست» به توصیف مفایم فراخوانی در Remote Procedure Call پرداخته شده است.
مفاهیم فراخوانی در RPC چه هستند؟
در RPC انتخابهای فراخوانی در موارد زیر دستهبندی میشوند:
- سعی مجدد ارسال پیام درخواست: تلاش مجدد ارسال یک پیام درخواست زمانی انجام میشود که سرور دچار مشکل شده باشد یا دریافت کننده پیام را دریافت نکرده باشد.
- تصفیه تکراری: برای حذف درخواستهای تکراری سرور استفاده میشود.
- انتقال مجدد نتایج: برای ارسال مجدد پیامها بدون اجرای مجدد عملیات در سمت سرور انجام میشود.

نقش IDL در RPC چیست؟
زبان توصیف واسط (Interface Description Language | IDL) زبان مشخصه مورد استفاده برای توصیف واسط برنامهنویسی اپلیکیشن (API) مربوط به یک قطعه نرمافزاری است که به طور معمول در برنامه فراخوانی رویه از راه دور (RPC) به کار میرود. در این مورد به خصوص، IDL پُلی میان ماشینهای دو سر ارتباط (که ممکن است از سیستم عاملها و زبانهای متفاوتی استفاده کنند) به وجود میآورد.
روال پیام RPC چیست؟
زمانی که گزارههای برنامه که از چارچوب RPC استفاده میکنند به یک برنامه اجرایی کامپایل میشوند، یک Stub در کدهای کامپایل شده وجود دارد که به عنوان نماینده کدهای RPC عمل میکند. Stub قطعه کدی است که تبدیل پارامترهای ارجاع شده میان کلاینت و سرور را انجام میدهد. زمانی که برنامه اجرا و فراخوانی رویه RPC صادر میشود، Stub درخواست را دریافت میکند و آن را به یک برنامه زمان اجرا (Runtime) در کامپیوتر راه دور هدایت میکند.
اولین باری که Client Stub فراخوانی میشود، Client Stub با یک Name Server برای تعیین آدرس انتقال یعنی جایی که سرور قرار دارد، ارتباط برقرار میکند. برنامه زمان اجرای کلاینت از نحوه آدرسدهی به کامپیوتر راه دور و اپلیکیشن سرور آگاهی دارد و پیامی را طریق شبکه ارسال میکند که درخواست رویه راه دور را دارد. به طور مشابه، سرور هم شامل یک برنامه زمان اجرا و یک Stub است که با خود رویه راه دور واسط ایجاد میکنند. پروتکلهای پاسخ-درخواست به همین شکل بازگردانده میشوند.
مدلهای RPC و روشهای جایگزین برای ارتباط کلاینت-سروری
مدلهای RPC و پیادهسازیهای محاسبات توزیعیافته بسیاری وجود دارند. یک مدل و پیادهسازی رایج، محیط محاسبات توزیعیافته (DCE) بنیاد نرمافزار آزاد (OSF) است. موسسه مهندسان برق و الکترونیک (IEEE)، پروتکل RPC را در مشخصههای ISO فراخوانی رویه راه دور خود تعریف کرده است.
RPC در لایه انتقال و لایه اپلیکیشن مدل OSI در شبکههای کامپیوتری عمل میکند. RPC توسعه کاربردی را سادهتر میکند که شامل چند برنامه توزیعیافته در یک شبکه باشد. روشهای جایگزین برای ارتباط کلاینت-سروری شامل صفبندی پیام (Message Queueing) و ارتباط پیشرفته برنامه-به-برنامه (APPC) شرکت IBM است. حال فرصت مناسبی است تا به انواع RPC در ادامه مقاله «RPC چیست» پرداخته شود.
انواع RPC چیست ؟
سه نوع اصلی RPC شامل RPC فراخوانی مجدد (Callback RPC)، RPC داده پراکنی (Broadcast RPC) و RPC حالت مرحلهای یا حالت دستهای (Batch-mode RPC) است. در ادامه هر یک از این انواع RPC به طور خلاصه شرح داده شدهاند.
Callback RPC چیست؟
این نوع از RPC یک الگوی نقطه به نقطه (P2P) را میان پردازههای شرکت کننده امکانپذیر میسازد. RPC فراخوانی مجدد یا همان Callback RPC به یک پردازه کمک میکند تا هم به عنوان خدمات کلاینت و هم به عنوان خدمات سرور استفاده شود. خصوصیات و کاربردهای Callback RPC به شرح زیرند:
- مسائلی با کاربرد کنش و واکنش (تعاملی) که به صورت راه دور پردازش میشوند.
- Callback RPC سرورهایی با کنترل کلاینت ارائه میدهد.
- فراخوانی مجدد (Callback) پردازه کلاینت را وادار به انتظار میکند.
- مدیریت بنبستهای فراخوانی مجدد
- Callback RPC تسهیلات یک الگوی نقطه به نقطه را میان پردازههای شرکت کننده فراهم میکند.

Broadcast RPC چیست؟
Broadcast RPC یک درخواست کاربر است که در شبکه پراکنده (Broadcast) میشود. این درخواست توسط همه سرورهایی پردازش میشود که متد پردازش آن درخواست را در اختیار دارند.
خصوصیات Broadcast RPC به شرح زیرند:
- به کاربر امکان میدهد که تعیین کند پیام درخواست کلاینت باید پراکنده (Broadcast) شود.
- میتوان پورتهای داده پراکنی (Broadcast Port) تعریف کرد.
- Broadcast RPC به کاهش فشار روی شبکه فیزیکی کمک میکند.
Batch-mode RPC چیست؟
Batch-mode RPC کمک میکند تا درخواستهای RPC در یک بافر انتقال در سمت کلاینت به صف و جداسازی شوند. سپس این درخواستها به صورت یک دسته (Batch) به سرور ارسال میشوند.
خصوصیات Batch-mode RPC به شرح زیرند:
- Batch-mode RPC سرباری را که در ارسال یک درخواست وجود دارد به حداقل میرساند. زیرا درخواستها به صورت گروهی به سرور ارسال میشوند.
- این نوع از پروتکل RPC تنها برای کاربردی مناسب است که نیاز به نرخ فراخوانی کمتری داشته باشد.
- Batch-mode RPC به یک پروتکل انتقال پایا (Reliable) نیاز دارد.
در برخی منابع دیگر انواع RPC در پنج دسته به صورت زیر شرح داده شدهاند:
- روش عملیات عادی که در آن کلاینت فراخوانی RPC را انجام میدهد و تا زمان دریافت پاسخ فعالیت خود را متوقف میکند.
- نوعی که در آن کلاینت فراخوانی RPC را انجام و به پردازش خود ادامه میدهد. در این حالت، سرور پاسخی ارسال نمیکند.
- در نوع دیگر RPC، تسهیلاتی برای ارسال چندین فراخوانی بدون انسداد به صورت گروهی فراهم میشود.
- در نوع چهارم RPC، کلاینتهای RPC دارای امکان داده پراکنی (Broadcast) هستند. آنها میتوانند پیامهایی را به سرورهای متعدد ارسال و سپس تمام پاسخهای نتیجه را دریافت کنند.
- در یکی دیگر از انواع RPC ، کلاینت یک فراخوانی بدون انسداد کلاینت-سروری انجام میدهد؛ سرور کامل شدن فراخوانی را به وسیله فراخوانی یک رویه مرتبط با کلاینت اعلام میکند.
حال پس از شرح انواع RPC، در ادامه مقاله «RPC چیست» به بیان مزایای Remote Procedure Call پرداخته شده است.
مزایای RPC چیست؟
برخی از مزایای RPC در این بخش از مقاله «RPC چیست» فهرست شدهاند:
- RPC به کلاینتها برای ارتباط با سرور از طریق استفاده سنتی از RPC در زبانهای سطح بالا کمک میکند.
- از RPC میتوان در یک محیط توزیعیافته و همچنین محیط محلی استفاده کرد.
- RPC از مدلهای مبتنی بر پردازده (Process) و مدلهای مبتنی بر Thread (نخ) پشتیبانی میکند.
- ساز و کار انتقال پیام در RPC از دید کاربر پنهان و نوعی انتزاع فراهم میشود.
- زحمت بازنویسی و توسعه مجدد کدها در فراخوانیهای رویه از راه دور RPC بسیار کم است.
- میتوان از فراخوانیهای رویه از راه دور RPC هم در محیطهای توزیع یافته و هم در محیطهای محلی استفاده کرد.
- بسیاری از لایههای پروتکل برای بهبود عملکرد و کارایی توسط RPC حذف شدهاند.
در ادامه مقاله «RCP چیست» به شرح کاستیها و نقاط ضعف Remote Procedure Call پرداخته شده است.
معایب RPC چیست؟
برخی از معایب و نقاط ضعف RPC در ادامه فهرست شدهاند:
- کلاینت و سرور از محیطهای اجرایی متفاوتی برای روالهای مربوطه استفاده میکنند و همچنین مصرف منابع (مثلاً فایلها) در RPC پیچیدهتر است. در نتیجه، سیستمهای مبتنی بر پروتکل RPC چندان برای انتقال مقادیر حجیم داده مناسب نیستند.
- RPC در برابر خرابی بسیار آسیبپذیر است. زیرا یک سیستم ارتباطی، یک ماشین دیگر و یک پردازه دیگر در RPC دخیل هستند.
- فراخوانی رویه از راه دور RPC مفهومی است که میتوان آن را به روشهای مختلفی پیادهسازی کرد. یعنی RPC یک استاندارد به حساب نمیآید.
- RPC تنها مبتنی بر کنش و واکنش است و به همین دلیل، وقتی بحث معماری سختافزاری به میان میآید، RPC هیچ گونه انعطافپذیری از خود بروز نمیدهد.
- RPC باعث افزایش هزینهها میشود.
حال، با توجه به اهمیت روزافزون امنیت در ارتباطات راه دور (شبکه)، لازم است ادامه مقاله «RPCچیست» به خطرات امنیتی Remote Procedure Call اختصاص داده شود.
درک خطرات امنیتی Remote Procedure Call
امروزه در میان تمامی پروتکلها در اینترنت، هیچ یک به اندازه پروتکل RPC دارای سو پیشینه نیستند. RPC پروتکل محبوبی برای برنامهنویسان به حساب میآید. چرا که، RPC امکانات عملکردی و سهولت استفاده را در سطح بالایی فراهم میکند. اگرچه، در کنار این قابلیتهای قدرتمند، خطرات بالقوهای نیز وجود دارند. RPC مستقیماً مسئول بسیاری از بهرهبرداریهای مخرب در اینترنت از جمله ویروس بدنام Blaster است. سو استفاده از RPC و خطرات امنیتی آن باعث شده که بسیاری از سازمانها ارتباطات RPC را به شدت محدود کنند. اعمال این محدودیتها تاثیر ناخواسته کاهش بهرهوری کاربر نهایی را به دنبال داشته است. بنابراین، لزوم روش بهتر و هوشمندانهتری برای اجازه دسترسی RPC ایمن احساس میشد.
خوشبختانه، قابلیتهای پالایش پیشرفته لایه کاربرد در سرور ISA سال ۲۰۰۴، سازمانها را قادر ساخت تا امکان مدیریت ارتباطات RPC خود را در اختیار داشته باشند. این قابلیتها به سازمانها امکان میدهند تا تبادل RCP را به گونهای محدود کنند که تنها با انواع خاصی مطابقت داشته باشند. این کار باعث میشود سازمانها بتوانند تهدیدهای کلی موجود در خدمات را به میزان زیادی کاهش دهند. این نوع قابلیتها، ISA را به d; محصول Gateway عالی بدل کرده است. چرا که این قابلیتها نه تنها برای مراقبت از شبکهها در برابر ترافیک خارجی استفاده میشوند، بلکه در برابر بهرهبرداریهای RPC داخلی و ویروسها نیز مقاوم هستند.
بررسی عملکرد امنیتی تبادل RPC
به طور خلاصه، RPC از طریق انتشار یک پورت نگاشت نقطه انتهایی (پورت ۱۳۵) روی سرور اجرا کننده سرویسهای RPC کار میکند. پورت ۱۳۵ مسئولیت هدایت کلاینتها را به پورتهایی با محدوده بالا برای سرویسها بر عهده دارد. این پورتهای محدوده بالا به صورت پویا تخصیص داده میشوند. این پورتها میتوانند بسته به یک تخصیص تصادفی توسط سرویس نگاشت نقطه نهایی RPC، هر یک از پورتهای TCP/IP در محدوده ۱۰۲۴ تا ۶۵۵۳۶ باشند. این حقیقت که پورتهای بسیاری باید برای امکان استفاده از RPC باز نگه داشته شوند، یکی از دلایلی است که این پروتکل سابقه خوبی در حوزه زمینه امنیت ندارد.
یکی دیگر از مشکلات امنیتی در خصوص نحوه عملکرد RPC این است که اطلاعات بسیاری را در مورد سرویسهای اجرا شده روی یک سرور خاص افشا میکند. کاوش و تفحص پورت پیشفرض نگاشت نقطه نهایی RPC برای به دست آوردن اطلاعات حساس راجع به واسطهای RPC در دسترس چندان زمان نمیبرد. به این ترتیب، لزوم وجود راهکاری برای فراهم کردن دسترسی امن به RPC وجود داشت که منجر به ایجاد قابلیتهای تصفیه RPC در سرور ISA شد. حال در ادامه مقاله «RPC چیست» به برخی سوالات رایج پیرامون پروتکل Remote Procedure Call پرداخته شده است.
خطای RPC Call Fail چیست ؟
خطای «The remote procedure call failed and did not execute» نشان دهنده بروز مشکل در پروتکل RPC است. RPC مدیریت کننده سرویس سرورهای COM و DCOM است.
RPC عملیاتی نظیر درخواستهای فعالسازی شی، راهکارهای صدور شی و جمعآوری زباله توزیعی را برای سرورهای COM و DCOM انجام میدهد. در صورتی که این سرویس متوقف یا غیر فعال شود، برنامههایی که از COM یا DCOM استفاده میکنند، به درستی کار نخواهند کرد.
به شدت توصیه میشود که سرویس RPC همیشه در حال اجرا باشد. در صورتی که خطای خرابی و عدم اجرای RPC دریافت شود، ممکن است نیاز باشد سرویس Remote Procedure Call غیر فعال و مجدداً فعال شود. یکی دیگر از دلایل بروز این خطا میتواند فایلهای خراب یا آسیبدیده در سیستم باشد. در چنین موردی، نیاز به اجرای «System File Checker» وجود خواهد داشت.
راهکارهای رفع خطای RPC Call Fail چه هستند؟
در این بخش از مقاله «RPC چیست»، راههای رفع خطای RPC Call Fail فهرست و به اختصار شرح داده شدهاند:
- بررسی سرویس Remote Procedure Call: با نوشتن عبارت «Service» در قسمت جستجوی ویندوز میتوان به این صفحه مراجعه و سرویس RPC را در فهرست سرویسهای ویندوز پیدا کرد. با غیرفعال کردن و فعالسازی مجدد آن، ممکن است خطای RPC Call Fail برطرف شود.
- اجرای عیبیاب ویندوز: اجرای برنامه خطایاب ویندوز نیز میتواند به رفع این خطا کمک کند. برای دسترسی به این برنامه نیز میتوان عبارت «Windows Troubleshooter» را در قسمت Search ویندوز جستجو و آن را اجرا کرد.
- بررسی سیستم فایل: System File Checker یا SFC ابزاری در ویندوز است که امکان بررسی مشکل در فایلهای سیستمی ویندوز و بازیابی آنها را فراهم میکند. برای اجرای SFC باید به عنوان Admin وارد خط فرمان ویندوز شد و دستور «sfc /scannow» را وارد کرد.
- ویروسیابی سیسستم: با اجرای یک اسکن کامل سیستم باید بررسی کرد که آیا بدافزاری روی سیستم وجود دارد یا خیر. برای این کار میتوان از آنتی ویروس ویندوز به نام Windows Defender استفاده کرد.
- بهروزرسانی ویندوز: ممکن است با بهروزرسانی ویندوز نیز خطای RPC Call Fail برطرف شود.
XML-RPC چیست ؟
XML-RPC یک پروتکل فراخوانی روال راه دور است که از XML برای کدگذاری فراخوانیها و از HTTP به عنوان یک ساز و کار انتقال استفاده میکند. XML-RPC در سال ۱۳۷۷ خورشیدی (۱۹۹۸ میلادی) توسط Dave Winer از شرکت نرمافزاری UserLand و مایکروسافت ایجاد شده است. در XML-RPC ، کلاینت با ارسال درخواست HTTP به یک سرور پیادهسازی کننده XML-RPC و دریافت پاسخ HTTP، یک عملیات فراخوانی روال راه دور را اجرا میکند. یک فراخوانی میتواند چندین پارامتر و یک نتیجه داشته باشد. در پروتکل XML-RPC تعدادی نوع داده برای پارامترها و نتیجه تعریف شده است. برخی از این انواع داده مختلط تو در تو هستند. برای مثال، میتوان پارامتری داشت که آرایهای از پنج عدد صحیح است.
ساختار پارامترها/نتیجه و مجموعه انواع دادهها قرار است آیینهای برای ساختارهای استفاده شده در زبانهای برنامهنویسی رایج باشد. در مقایسه با پروتکلهای RESTful که بازنماییها یا همان مستندات منبع منتقل میشوند، XML-RPC برای فراخوانی متدها طراحی شده است. تفاوت عملی در این است که XML-RPC بسیار ساختیافتهتر است. یعنی میتوان از کدهای مشترک کتابخانه برای پیادهسازی کلاینتها و سرورها استفاده کرد و کار طراحی و مستندسازی کمتری برای یک پروتکل اپلیکیشن نیاز است. XML-RPC شباهت زیادی به JSON RPC دارد.
JSON RPC چیست ؟
JSON-RPC نوعی پروتکل فراخوانی روال از راه دور است که در قالب JSON کدگذاری میشود. JSON RPC از این بابت مشابه XML-RPC است که از انواع داده و دستورات کمی استفاده میکند. JSON-RPC امکان اعلانها (دادههای ارسالی به سرور که نیازمند پاسخ نیستند) را فراهم میکند.
همچنین امکان ارسال چند فراخوانی به سرور که ممکن است به صورت ناهمگون پاسخ داده شوند نیز وجود دارد. عملکرد JSON-RPC با ارسال یک درخواست به سروری آغاز میشود که این پروتکل را پیادهسازی میکند.
در چنین موردی، کلاینت معمولاً نرمافزاری است که قصد فراخوانی یک متد واحد را از سیستم راه دور دارد. میتوان چند پارامتر ورودی را به عنوان یک آرایه یا شی به متد راه دور منتقل کرد. در حالی که خود متد هم میتواند چند داده خروجی را بازگرداند (البته این به نسخه پیادهسازی شده بستگی دارد). تمام انواع انتقالی اشیاء واحد هستند که با استفاده از JSON مرتبسازی (Serialize) شدهاند. یک درخواست فراخوانی به یک متد مشخص به حساب میآید که توسط یک سیستم راه دور فراهم شده است. یک در خواست در JSON RPC میتواند شامل سه عضو زیر باشد:
- method - یک رشته با نام متدی که فراخوانده میشود. نامهای متدی که با RPC شروع میشوند برای متدهای داخلی RPC رزرو شدهاند.
- params - یک شی یا آرایهای از مقادیر است که به عنوان پارامتر به متد تعریف شده فراخوانی خواهد شد. این عضو ممکن است حذف شود.
- id - یک عدد رشتهای و غیر کسری است که برای تطبیق پاسخ با درخواستی که به آن پاسخ داده میشود. در صورتی که نیازی به بازگرداندن پاسخ وجود نداشته باشد، این عضو نیز حذف میشود و استفاده نخواهد شد.
دریافت کننده درخواست باید با یک بازخورد معتبر به تمام درخواستهای دریافتی پاسخ دهد. یک فراخوانی پاسخ شامل اعضای زیر هستند:
- result - دادهای است که توسط متد فراخوانی شده باز گردانده میشود. این عنصر به عنوان یک شی JSON-stat قالببندی شده است. در صورتی که در حین فراخوانی متد خطایی رخ دهد، احتمالاً این عضو وجود نداشته است.
- error - یک شی خطا است در صورتی که خطایی در فراخوانی متد رخ بدهد. در غیر این صورت، چنین عضوی نباید وجود داشته باشد. این شی باید شامل شمارههای اعضا (عدد صحیح) و پیام (رشته) باشد. یک عضو داده اختیاری میتواند حاوی دادههای خاص سرور دیگری نیز باشد.
- id - شناسه درخواستی که پاسخ به آن انجام میشود.
پلاگین RPC چیست؟
پلاگینهای RPC یا همان افزونههای RPC ، امکان استقرار سرویسهای دلخواه SOAP یا XML-RPC را فراهم میکنند. پلاگین RPC مسئولیت فراهم کردن REST API برای ارسال درخواست RPC از اپلیکیشنهای سمت سرور به دستگاهها و قرار دادن درخواست RPC در دستگاهها از طریق یکی از پروتکلهای در دسترس را بر عهده دارد. به طور پیشفرض، این افزونه در سطح سیستم توسط یک مدیر سیستم پیکربندی میشود.
میتوان نمونه خود از افزونه را در سطح کاربر پیکربندی کرد. کاربران حرفهای یا توسعهدهندگان پلتفرم میتوان کارکردهای پلاگین RPC را شخصیسازی کنند. به این ترتیب، با پاسخ به سوالات رایج پیرامون پروتکل RPC ، پیش از جمعبندی و پایان یافتن این مقاله، برخی فیلمهای آموزشی مرتبط با Remote Procedure Call در سایت فرادرس معرفی شدهاند.
فیلم های آموزش علوم کامپیوتر فرادرس
در این بخش انتهایی از مقاله «RPC چیست» برخی از دورههای آموزش ویدیویی فرادرس که به طور مستقیم یا غیر مستقیم با Remote Procedure Call در ارتباط هستند، معرفی شدهاند. در ادامه، فیلم اموزش شبکههای کامپیوتری معرفی شده است.
فیلم آموزش شبکه های کامپیوتری
بحث RPC معمولاً در درس شبکههای کامپیوتری ۲ مطرح میشود که درس شبکههای کامپیوتری پیشنیازی برای آن به حساب میآید. طول مدت دوره آموزشی شبکه های کامپیوتری ۱ بیش از ۱۹ ساعت و مدرس آن مهندس علیرضا سبحانی است. این دوره آموزشی برای دانشجویان کامپیوتر در مقطع کارشناسی جهت مطالعه و آموزش درس شبکههای کامپیوتری مناسب است. همچنین، این دوره آموزشی میتواند نقطه شروع مناسبی باشد برای کلیه علاقهمندان و افرادی که قصد شروع فعالیت حرفهای در حوزه شبکههای کامپیوتری را دارند. از جمله سرفصلهای این دوره آموزشی میتوان به مقدمات و مباحث کلی مرتبط با شبکههای کامپیوتری، لایههای شبکه و سایر موارد اشاره کرد.
- برای دیدن فیلم آموزش شبکه های کامپیوتری ۱ + اینجا کلیک کنید.
فیلم آموزش سیستم های عامل
RPC در بحث سیستم عامل مطرح میشود و یکی از سرویسهای ویندوز به حساب میآید. بنابراین لازم است آشنایی با حوزه سیستمهای عامل وجود داشته باشد. تمامی سرفصلها و مباحث درس سیستمهای عامل در دوره آموزش سیستمهای عامل از مجموعه دورههای دروس علوم و مهندسی کامپیوتر در سایت فرادرس پوشش داده شده است. طول مدت دوره سیستمهای عامل ۱۱ ساعت و مدرس آن دکتر فرشید شیرافکن است. این دوره آموزشی از هفت درس تشکیل شده است. برخی از سرفصلهای این دوره مفاهیم اولیه سیستم عامل، فرایند–نخ، زمانبندی پردازنده، بنبست، همروندی، مدیریت حافظه، مدیریت دیسک و سایر موارد را شامل میشود.
- برای دیدن فیلم آموزش سیستم های عامل + اینجا کلیک کنید.
فیلم آموزش نرم افزار مجازی سازی VMware Workstation
VMware یکی از برنامههای ماشین مجازی رایج و پراستفاده در ویندوز محسوب میشود که میتوان از آن برای دسترسی راه دور نیز استفاده کرد. بدین سبب، دوره آموزش نرمافزار مجازیسازی VMware Workstation در این بخش از مقاله «RPC چیست» معرفی شده است. طول مدت این دوره پنج ساعت و ۲۲ دقیقه و مدرس آن مهندس سودابه آقابراری است. از جمله سرفصلهای این دوره میتوان به معرفی مجازی سازی و بررسی تاریخچه آن، معرفی محصولات مجازی سازی کمپانی VMware، نصب، پیکربندی و مدیریت VMware Workstation Pro، پیکربندی پیشرفته ماشین های مجازی و سایر موارد اشاره کرد.
- برای دیدن فیلم آموزش نرم افزار مجازی سازی VMware Workstation + اینجا کلیک کنید.
جمعبندی
در این مقاله به این سوال پاسخ داده شده که RPC چیست و بیان شد که Remote Procedure Call یا فراخوانی روال از راه دور قاعدهای است که درخواست کننده سرویس میتواند به واسطه آن با ارائه دهنده خدمت ارتباط برقرار کرده و خدمت لازم را دریافت کند.
با استفاده از RPC برنامهنویس دغدغه توجه به جزئیات شبکه و کدنویسی برای استفاده از خدمات راه دور را نخواهد داشت. در این مقاله علاوه بر شرح چیستی RPC، به کلیه موارد، مفاهیم و سوالات رایج پیرامون RPC پاسخ داده شد.
با سلام. من می ترسم کسی از راه دور سیستم من را هک کند؛ آیا اگر
Remote Procedure Call (RPC) را غیر فعال کنم، مشکلی به وجود نمی آید؟ یک بار می خواستم این کار را انجام بدهم اما دکمه های تأییدی (اوکی و اپلای) غیر فعال بودند.
با سلام
ضمن تشکر، من مترجم هستم و از مقاله شما در ارتباط با RPC استفاده کردم، ممکن است بفرمایید عدد ۲ در این عبارت به چه معنی است:
remote procedure 2 call (RPC) system
جمله اصلی این است:
A remote procedure 2 call (RPC) system called gRPC was created as an open source project by Google
سلام من میخوام از درایو d به داریو c بدم میگه RPCوجود ندارد میشه راهنمایی کنین ممنون