מבט כולל על RPC
**הפעלת פרוצדורות מרוחקות** (באנגלית: **Remote Procedure Call** או **RPC**) היא טכנולוגיה לתקשורת בין יישומים המאפשרת לתוכנית מחשב להפעיל פרוצדורה במרחב כתובות אחר (בדרך כלל במחשב אחר) באופן שקוף, כלומר ללא צורך ביישום פרטני של פרוטוקול התקשורת. באמצעות **RPC** מפתח התוכנה יכול לכתוב את אותו הקוד בין אם הוא רץ מקומית על המחשב המריץ אותו או על מחשב מרוחק ברשת.

באמצעות RPC ניתן לממש תקשורת שרת לקוח, כך שהלקוח מפעיל על השרת את הפונקציה הרצויה תוך העברת הפרמטרים הנדרשים וממתין ממנו לקבלת התשובה, שבמרבית הפעמים עד לקבלתה הלקוח לא יכול להמשיך בפעולתו. 

הבדל משמעותי בין הרצת הפונקציה מקומית לבין הרצתה באופן מרוחק הוא היכולת להבין את תוצאת פעולתה במידה של תקלה ברשת. אם הפונקציה נכשלה בהרצתה מרחוק, המחשב המקומי לא יכול לדעת האם היא בוצעה או לא. אם הפונקציה אידמפוטנטית (כלומר שהרצתה יותר מפעם אחת לא משנה דבר במערכת) אזי הבעיה פתורה שכן ניתן להריצה שוב ושוב עד להצלחה ודאית. אולם אם הפונקציה אינה כזו, יש להתייחס למשמעות הכישלון בהרצתה ולהגיב בהתאם, במיוחד אם מדובר במערכות עדינות.

היסטוריה ומקורות
----------------

פרק זה לוקה בחסר. אנא תרמו לוויקיפדיה והשלימו אותו. התייחסות ל-.NET ולמימושים מאוחרים יותר.
הרעיון שעומד בבסיס RPC הוזכר כבר בשנת 1976 ב-RFC מס' 707.

בשנת 1981 חברת זירוקס פארק הייתה הראשונה שמימשה את הרעיון תחת השם "Courier". המימוש הנפוץ הראשון של הרעיון במסגרת מערכת ההפעלה Unix היה בשנת 1984 על ידי חברת סאן מיקרוסיסטמס תחת השם "ONC RPC", ושימש כתשתית ל-Network File System, ה-NFS, פרוטוקול המאפשר שיתוף קבצים ברשת. הפרוטוקול נמצא עד היום בשימוש נרחב במערכות הפעלה מבוססות Unix.

מימוש נוסף ל-RPC על גבי Unix היה של אפולו מחשבים, שמימשה באמצעותו את ה-"Network Computing System", ששימש בהמשך כיסוד למערכת RPC נוספת של ה-OSF שנקראה DCE/RPC. כעשור לאחר מכן, במהלך שנות ה-90, חברת מיקרוסופט הרחיבה את DCE/RPC ויצרה מימוש עצמאי נוסף למנגנון RPC, שנקרא MSRPC (קיצור של Microsoft RPC). מעל ה-MSRPC מומש DCOM שבמשך שנים היה ה-API שמערכת ההפעלה חלונות סיפקה לתקשורת בין תהליכים.

באותה התקופה הציגו גם חברת זירוקס פארק את ILU, ו-Object Management Group את CORBA – מימושים נוספים ל-RPC המאפשרים ירושה.

שימושים נוספים וסטנדרטיזציה
---------------------------

הפרוטוקלים DCOM של חלונות, פרוטוקול RMI של JAVA, gRPC של גוגל ופרוטוקול SOAP באינטרנט-WWW הם דוגמאות לשימושים כאלו. כדי לאפשר לשרת אחד לשרת לקוחות המשתמשים בפרוטוקולים שונים, הוצעו מספר מערכות סטנדרטיות היודעות לבצע זאת, רובן משתמש בקובץ IDL (קיצור של interface description language) כדי לאפשר למערכות השונות לפנות ל-RPC בפורמט הנכון. קובץ ה-IDL משולב בקוד של הלקוח והשרת באמצעות כלים מיוחדים המבצעים זאת, הנפוץ מביניהם הוא RPCGEN.

אבטחת מידע
----------

פרוטוקול ה RPC מהווה אתגר לאבטחת מידע מכיוון שיש צורך לבצע פעולות בין מערכות המוגנות על ידי מערכת סינון כגון Firewall. האתגר נובע מכך ש RPC מבצע Session ראשוני בפורט 135 אך המשך העבודה מתבצע בפורט גבוה (1024-65535) הנקבע דינמית בין השרת ללקוח ולכן נדרשת פתיחה של כל טווח הפורטים הקבועים דבר שכמובן הופך את סינון הפרוטוקלים ללא אפקטיבי.

ראו גם
------

* SOAP
* JRES – Java Remote Execution Service is a RPC protocol that uses SSL style encode mechanism to encode its calls and pure HTTP as a transport mechanism.

הערות שוליים
------------

1. ↑  RFC 707

| סיווג פרוטוקולים על פי מודל ה־OSI |
| --- |
| שכבת היישום | HTTP • SMTP • FTP • RTP • IRC • SNMP • SIP • DNS • DHCP |
| שכבת הייצוג | MIME • ASCII • Unicode • TLS |
| שכבת השיחה | ASP • PPTP • SSH • NFS • RPC • SOCKS |
| שכבת התעבורה | TCP • UDP • SCTP • DCCP |
| שכבת הרשת | IP (IPv4 • IPv6) • ICMP • IPX • ניתוב |
| שכבת הקו | אתרנט • Token ring • FDDI |
| השכבה הפיזית | E1 • 10Base-T • RS-232 • DSL • SONET |

| פרוטוקולים במודל TCP/IP |
| --- |
| שכבת יישום | HTTP • SMTP • FTP • DNS • DHCP • SSH • RTP • RTSP • IRC • SNMP • SIP • IMAP4 • MIME • Telnet • RPC • SOAP • LDAP |
| שכבת תעבורה | TCP • UDP • SCTP • DCCP |
| שכבת רשת | IP • IPv4 • IPv6 • ICMP • IPX • IGMP |
| שכבת קשר | אתרנט • 10BASE-T • 802.11 WiFi • Token ring • FDDI • ARP |