Address Resolution Protocol

Address Resolution Protocol (בראשי תיבות: ARP; בתרגום חופשי: פרוטוקול תרגום כתובות) הוא פרוטוקול תקשורת המשמש ברשת מחשבים לאיתור כתובת ה־MAC של תחנה ברשת על פי כתובת ה־IP שלה.  ה-ARP שייך לשכבת הקשר. הפרוטוקול מופעל בעת שליבת מערכת הפעלה נקראת לייצר מסגרת (frame) להעברה בין חוליות ברשת המחוברים דרך קו פיזי ואין בזיכרון המטמון שלה (ARP cache) רשומה לכתובת ה־IP המבוקשת, במצב כזה פעילות הפרוטוקול נקראת ומבוצעת על ידי התקני כרטיס הרשת שבמחשב.

אף על פי שהשימוש ב־ARP שמור כיום כמעט בבלעדיות לאחזור של כתובות MAC על פי כתובות IP הוא יכול לשמש גם לאחזור כתובת MAC על פי כתובות אחרות מהשכבה השנייה והשלישית של מודל ה־OSI.

== אופן הפעולה ==
איתור הכתובת מתבצע על ידי שידור של broadcast frame (חבילת מידע בשכבת הקשר עם כתובת ה-MAC}} FF:FF:FF:FF:FF:FF בשדה היעד בכותרת) המכילה את כתובת ה־IP של התחנה המבוקשת אל כל התחנות באותו מתחם שידור. התחנה שתזהה את כתובת ה-IP שלה בתוכן המסגרת, תשלח בחזרה מסגרת עם כתובת ה-MAC שלה אל תחנת המקור ב-unicast. כמו כן, ברוב היישומים של הפרוטוקול התחנה תנהל טבלה בזיכרון מטמון (cache) שתאפשר לה לאתר במהירות כתובות אותן מצאה בעבר ללא צורך בהמתנה לתשובה מתחנת היעד.

באופן דומה ניתן להשתמש בפרוטוקול Reverse Address Resolution Protocol כדי לקבל את כתובת ה-IP של תחנה על פי כתובת ה-MAC שלה. כל תחנה ברשת המקומית תחזיק טבלה המתאימה בין כתובות MAC ו־IP של התחנות האחרות ברשת ותעדכן אותה בהתאם לחבילות שהיא מקבלת. ניתן להסתכל או לשנות טבלה זו על ידי שימוש בפקודת arp, ברוב מערכות ההפעלה.

== מבנה חבילת ARP ==
2 הבתים הראשונים: מספר המייצג את סוג כתובת החומרה (כדוגמת כתובת MAC).

2 הבתים הבאים: מספר המייצג את סוג כתובת שכבת הרשת (כדוגמת כתובת IPv4).

הבית הבא: אורך כתובת החומרה (בבתים).

הבית הבא: אורך כתובת שכבת הרשת (בבתים).

2 הבתים הבאים: מספר הפקודה (opcode) המייצג התפקיד של החבילה. לדוגמה: אם הערך יכיל את המספר 1 (ARP_REQUEST) נדע כי זו בקשה לתרגום כתובת שכבת רשת לכתובת חומרה. 

לאחר מכן, יופיעו הכתובות בסדר הזה: 

כתובת החומרה של השולח.

כתובת שכבת הרשת של השולח.

כתובת החומרה של היעד (במידה ולא ידוע יש למלא ערך זה בF-ים).

כתובת שכבת הרשת של היעד (במידה ולא ידוע יש למלא ערך זה בF-ים).

חשוב לציין כי לפני חבילת ה-ARP המצוינת פה תהיה גם תחילית של פרוטוקול שכבת הקשר המשומשת ברשת כדוגמת Ethernet.

== הדגמה ==
במקרה ונרצה לשלוח בקשה לאיתור כתובת MAC של המחשב שכתובת ה-IPv4 שלו היא 10.0.0.10, אנו נשלח חבילת ARP עם הערכים הבאים:

כתובת חומרה: כתובת MAC.

כתובת הרשת: IPv4.

אורך כתובת החומרה: 6.

אורך כתובת הרשת: 4.

מספר הפקודה: 1 (ARP_REQUEST).

כתובת החומרה של השולח: AB:CD:EF:AB:CD:EF (לצורך ההדגמה בלבד).

כתובת שכבת הרשת של השולח: 10.0.0.9 (לצורך ההדגמה בלבד).

כתובת שכבת החומרה של היעד: אנו לא יודעים, זה בדיוק מה שאנחנו מחפשים. לכן נשלח הודעה זו לכולם: FF:FF:FF:FF:FF:FF.

כתובת שכבת הרשת של היעד: 10.0.0.10.

כשהמחשב שכתובתו היא 10.0.0.10 יקבל את החבילה שלנו הוא יחזיר חבילת ARP המיועדת אלינו בלבד המכילה בין השאר בשדה כתובת החומרה של השולח את כתובת החומרה שלו. 

== שימוש לרעה ==

עקב אופיו של פרוטוקול ה־ARP הוא חשוף לניצול לצורך "גנבת זהות". משתמש זדוני יכול להמתין לבקשת ARP, ובעת הגעתה לספק כתובת MAC פיקטיבית או את כתובת המשתמש כתשובה. באופן זה המידע לא יגיע ליעדו. פעולה כזו נקראת ARP spoofing.

== קישורים חיצוניים ==

* [http://www.ietf.org/rfc/rfc826.txt RFC 826] - הגדרת התקינה של ARP

קטגוריה:תקנים בתקשורת מחשבים