ARP چگونه IP را به MAC Address تبدیل می‌کند؟ از صفر تا حملات ARP Spoofing

نویسنده Leen 18 Jun 2026 · 05:28

فرض کن داخل یه شبکه خانگی ساده هستی و لپ‌تاپت به wifi وصل شده، گوشی هم به همون wifi وصل شده، Raspberry Pi هم گوشه اتاق داره چندین تا سرویس Docker رو اجرا می‌کنه. حالا از لپ‌تاپت می‌خوای به یه دستگاه دیگه داخل همین شبکه ping بزنی:

ping 192.168.1.20

در نگاه اول، همه‌چیز ساده به نظر می‌رسه. تو IP مقصد رو داری. سیستم هم باید بسته رو بفرسته و تمام. اما همیشه توی همین جاهاست که شبکه لبخند می‌زنه و می‌گه: «نه عزیزم، هنوز یه لایه پایین‌تر هم هست.»

سوال اصلی این باید باشه:

وقتی سیستم تو می‌خواد به 192.168.1.20 چیزی بفرسته، کارت شبکه از کجا می‌فهمه که این IP متعلق به کدوم دستگاه فیزیکی داخل شبکه هست؟

IP برای ما آدما و برای لایه شبکه قابل فهم هست. اما کارت شبکه در نهایت با چیزی به اسم MAC Address کار می‌کنه. چیزی که روی Ethernet یا همون شبکه داخلی جابه‌جا می‌شه، فقط یه مفهوم انتزاعی مثل IP نیست؛ اونجا Frame داریم، و هر Frame باید یه MAC Address مقصد داشته باشه.

پس سیستم یه سوال بسیار ساده اما حیاتی داره:

من IP مقصد رو دارم، ولی MAC Address اون رو از کجا پیدا کنم؟

و اینجاست که ARP وارد صحنه می‌شه.

ARP یکی از اوم پروتکل‌هایی هست که معمولاً تا وقتی همه‌چیز کار می‌کنه، کسی اصلا به اون فکر هم نمی‌کنه. اما لحظه‌ای که رفتار شبکه عجیب بشه، ارتباط قطع بشه، Gateway درست جواب نده، یا بحث امنیت و Man-in-the-Middle وسط بیاد، ناگهان همین پروتکل ساده تبدیل می‌شه به یکی از مهم‌ترین قطعات پازل.

قبل از ARP: چرا IP به تنهایی کافی نیست؟

برای فهم ARP باید یه چیز رو از همین اول روشن کنیم: IP و MAC Address برای دو کار متفاوت ساخته شدن. IP Address برای شناسایی منطقی دستگاه‌ها توی شبکه استفاده می‌شه. مثلاً وقتی میگی 192.168.1.20، داری به یه آدرس منطقی اشاره می‌کنی. اما این آدرس می‌تونه تغییر کنه. DHCP ممکنه امروز یه IP بده و فردا یکی دیگه. IP برای Routing مهمه؛ یعنی وقتی پکت باید از یه شبکه به شبکه دیگه بره، Routerها با IP تصمیم می‌گیرن بسته رو به کدوم سمت بفرستن.

اما MAC Address چیز دیگه‌ای هست. MAC Address آدرس سخت‌افزاری یا حداقل آدرس لایه دومی کارت شبکه هست. مثلاً چیزی شبیه این:

a4:bb:6d:12:34:56

توی شبکه محلی، یعنی جایی که دستگاه‌ها روی یه LAN هستن، Ethernet برای رسوندن Frame به مقصد به MAC Address نیاز داره. کارت شبکه نمیگه «این Frame رو بده به IP فلان». کارت شبکه میگه «این Frame رو بده به MAC Address فلان».

پس وقتی تو می‌خواهی به یه IP داخل شبکه محلی پیام بفرستی، سیستم باید قبل از ارسال واقعی دیتا، MAC Address مربوط به اون IP رو پیدا کنه. و این دقیقاً کار ARP هستش.

ARP چیست؟

ARP مخفف Address Resolution Protocol هست؛ یعنی پروتکلی برای تبدیل یا بهتر بگیم Resolve کردن یه آدرس به آدرس دیگه.

توی IPv4، کار اصلی ARP پیدا کردن MAC Address مربوط به یه IP Address داخل شبکه محلی هست.

مثلاً سیستم می‌دونه مقصد اینجاست 192.168.1.20. اما برای ساختن Ethernet Frame به این هم نیاز داره 11:22:33:44:55:66 و ARP این فاصله رو پر می‌کنه.

نکته مهم این هست که ARP فقط داخل شبکه محلی کار می‌کنه. یعنی اگر مقصد داخل همون LAN باشه، سیستم تلاش می‌کنه MAC Address همون مقصد رو پیدا کند. اما اگر مقصد بیرون از شبکه باشد، مثلاً 8.8.8.8، سیستم دنبال MAC Address گوگل نمی‌گرده! توی اون حالت سیستم فقط MAC Address خروجی شبکه، یعنی Default Gateway یا Router رو پیدا می‌کنه و بسته رو به Router میده.

این نکته خیلی مهم هست:

ARP برای پیدا کردن MAC Address مقصد نهایی توی اینترنت نیست؛ ARP برای پیدا کردن MAC Address دستگاه بعدی داخل LAN هست.

حالا گاهی اون دستگاه بعدی خودش مقصد میتونه باشه، و گاهی Router و خروجی شبکه.

ARP در کدام لایه کار می‌کند؟

اگر بخوایم خیلی دقیق و خشک صحبت کنیم، ARP کمی بین Layer 2 و Layer 3 ایستاده. از یه طرف با IP سروکار داره، یعنی آدرس Layer 3ٍ، و از طرف دیگه نتیجه‌اش MAC Address میشه، یعنی آدرس Layer 2.

اما در عمل، ARP رو معمولاً نزدیک به لایه دوم در نظر می‌گیرن، چون پیام‌های ARP داخل Ethernet Frame حمل می‌شن و کارشون آماده کردن ارتباط لایه دوم هست.

یک نگاه ساده:

flowchart TB
    A["🖥️ لایه کاربرد (Application)
مرورگر، SSH، Ping، DNS"] -->
    B["🚚 لایه انتقال (Transport)
TCP / UDP"]

    B -->
    C["🌐 لایه شبکه (Network)
آدرس IP و مسیریابی"]

    C -->
    D["🔍 پروتکل ARP
تبدیل IP به MAC Address<
پرسش: «این IP متعلق به چه MACی است؟»"]

    D -->
    E["📦 لایه پیوند داده (Data Link)
Ethernet Frame + MAC Address"]

    E -->
    F["📡 لایه فیزیکی (Physical)
کابل، وای‌فای، امواج رادیویی"]

ARP نه TCP هست، نه UDP. حتی Port هم نداره. وقتی با ARP کار می‌کنی، دنبال شماره Port نگرد. ARP توی دنیایی پایین‌تر از TCP و UDP کار می‌کنه. این یعنی وقتی میگی «ARP روی چه پورتی کار می‌کنه؟» جواب سادست:

هیچ پورتی.

ARP با Ethernet Type مخصوص خودش شناخته می‌شه. توی Ethernet، مقدار 0x0806 برای ARP استفاده می‌شه. مثلا برای مقایسه، IPv4 معمولاً با 0x0800 مشخص می‌شه.

سناریو ساده: یه کامپیوتر می‌خواد با کامپیوتر دیگه حرف بزند

فرض کنیم دو دستگاه داخل یه شبکه داریم:

PC-A PC-B
IP: 192.168.1.10 IP: 192.168.1.20
MAC: AA:AA:AA:AA:AA:AA MAC: BB:BB:BB:BB:BB:BB

PC-A می‌خواد به PC-B پیام بفرسته.

PC-A اول نگاه می‌کنه که ببینه آیا قبلاً MAC Address مربوط به 192.168.1.20 رو می‌دونه یا نه. این اطلاعات معمولا توی ARP Cache یا Neighbor Table نگه‌داری می‌شه. اگر جواب داخل Cache باشه، خب سیستم مستقیم از اون استفاده می‌کنه. اما اگر نباشه چی؟ خب اون موقع PC-A باید سوال بپرسه.

سوال ARP چیزی شبیه این میشه:

Who has 192.168.1.20?
Tell 192.168.1.10

یعنی:

«هر کسی IP آدرسش 192.168.1.20 هست، لطفاً به 192.168.1.10 بگو MAC Address تو چیه.»

اما PC-A هنوز نمی‌دونه که صاحب این IP کیه. پس این سوال رو برای همه می‌فرسته. و اینجاست که Broadcast وارد می‌شه.

ARP Request: صدا زدن مقصد در شبکه محلی

ARP Request معمولاً به صورت Broadcast ارسال می‌شه. یعنی مقصد Ethernet Frame این هست: ff:ff:ff:ff:ff:ff

این آدرس یعنی: «همه دستگاه‌های این شبکه محلی این پیام رو ببینن.»

پس PC-A یه ARP Request می‌فرسته و Switch اون رو به همه‌ی پورت‌های مربوط به همون LAN پخش می‌کنه.

sequenceDiagram
    participant PCA as PC-A
    Note over PCA: 192.168.1.10
    participant SW as Switch
    participant PCB as PC-B
    Note over PCB: 192.168.1.20
    participant PCC as PC-C
    Note over PCC: 192.168.1.30

    PCA->>SW: ARP Request: Who has 192.168.1.20?
    SW->>PCB: Broadcast ARP Request
    SW->>PCC: Broadcast ARP Request
    PCB-->>SW: ARP Reply: 192.168.1.20 is at BB:BB:BB:BB:BB:BB
    SW-->>PCA: ARP Reply

همه دستگاه‌ها پیام رو دریافت می‌کنن، اما فقط دستگاهی جواب میده که IP مورد نظر رو داره. اگر PC-B صاحب 192.168.1.20 باشه، جواب میده:

192.168.1.20 is at BB:BB:BB:BB:BB:BB

به این جواب میگیم ARP Reply.

ARP Reply: جواب خصوصی‌تر

برخلاف ARP Request که معمولاً Broadcast هست، ARP Reply معمولاً Unicast هست. یعنی فقط به همون دستگاهی فرستاده می‌شه که سوال کرده بود.

حالا PC-A این رو می‌فهمه: 192.168.1.20 -> BB:BB:BB:BB:BB:BB

و بعد این اطلاعات رو داخل ARP Cache ذخیره می‌کنه تا هر بار مجبور نباشه دوباره Broadcast بفرسته.

از این لحظه به بعد، اگر PC-A بخواد به PC-B دیتا بفرسته، Ethernet Frame رو با MAC Address مقصد BB:BB:BB:BB:BB:BB می‌سازه. و اینجاست که تازه ارسال واقعی دیتا شروع می‌شه.

یه نکته جالب: قبل از اینکه اولین Packet واقعی به مقصد برسه، گاهی یه مکالمه کوچک و نامرئی توی شبکه اتفاق می‌افته. ARP رو مثل همون آدمی در نظر بگیر که قبل از شروع جلسه می‌پرسه: «ببخشید، فلانی کجا نشسته؟»

ARP Cache چیست؟

اگر هر بار برای هر بسته مجبور بودیم ARP Request بفرستیم، شبکه پر از Broadcast می‌شد. به همین دلیل سیستم‌ها نتیجه ARP رو برای مدتی ذخیره می‌کنن، و این ذخیره موقت رو بهش ARP Cache می‌گیم.

توی لینوکس می‌تونی با این دستور ARP Cache رو ببینی:

ip neigh

خروجی ممکنه چیزی شبیه این باشه:

192.168.1.1 dev wlan0 lladdr 58:ef:68:12:34:56 REACHABLE
192.168.1.20 dev wlan0 lladdr b8:27:eb:aa:bb:cc STALE

اینجا سیستم میگه آدرس 192.168.1.1 روی اینترفیس wlan0 با MAC Address مشخص و شناخته شده و وضعیتش REACHABLE هست.

وضعیت‌ها ممکن هست فرق بکنن. مثلاً:

REACHABLE
STALE
DELAY
FAILED
INCOMPLETE

لازم نیست برای شروع همه این‌ها رو حفظ کنی. اما مفهوم کلی این میشه که سیستم داره میگه کدوم IP رو با کدوم MAC Address می‌شناسه و وضعیت این شناخت چقدر معتبر هستش.

توی ویندوز هم می‌توانی از این دستور استفاده کنی:

arp -a

یه چیز دیگه اینکه توی لینوکس دستور قدیمی arp -a هم وجود داره، ولی برای سیستم‌های جدیدتر معمولاً ip neigh انتخاب بهتری هست.

اگر مقصد بیرون از LAN باشه چه؟

اینجا یکی از مهم‌ترین سوءتفاهم‌ها درباره ARP اتفاق می‌افته. فرض کن سیستم تو IP آدرس 192.168.1.10/24 رو داره و Default Gateway هم روی 192.168.1.1 هست. و حالا می‌خواهی به این مقصد 8.8.8.8 وصل بشی. آیا سیستم تو ARP می‌فرسته تا MAC Address مربوط به 8.8.8.8 رو پیدا کنه؟

نه.

چون 8.8.8.8 داخل شبکه محلی نیست. سیستم با Subnet Mask می‌فهمه که مقصد بیرون از LAN بوده. پس پکت باید به Router داده بشه. برای دادن پکت به Router، سیستم فقط باید MAC Address روتر خروجی رو بدونه.

پس ARP برای Default Gateway انجام می‌شه:

Who has 192.168.1.1?

نه برای ip مقصد:

Who has 8.8.8.8?

بعد از اینکه MAC Address Router پیدا شد، سیستم بسته IP رو با مقصد 8.8.8.8 می‌سازد، اما Ethernet Frame رو به MAC Address روتر می‌فرستد.

این جمله رو باید خوب توی ذهنمون نگه داریم:

IP مقصد می‌تونه مال اینترنت باشه، اما MAC Address مقصد همیشه مربوط به دستگاه بعدی داخل همون اتصال محلی هستش.

این یکی از اون چیزهایی هست که اگر خوب بفهمی، Routing، NAT، Gateway و حتی بعضی حملات شبکه خیلی شفاف‌تر می‌شن.

flowchart LR
    A["Laptop
192.168.1.10"] R["Router (Default Gateway)
192.168.1.1"] I["Internet Host
8.8.8.8"] A -->|ARP: Find Router's MAC| R R -->|Forward IP Packet| I A -.->|No ARP for Internet Hosts| I

مشاهده ARP با Wireshark و tcpdump

برای اینکه ARP از حالت تئوری خارج بشه، شاید بهتر باشه توی Wireshark فیلتر arp رو بزنی. بعد اگر ARP Cache رو پاک کنی یا به یه دستگاه جدید داخل شبکه ping بزنی، احتمالاً ARP Request و ARP Reply رو می‌بینی.

توی لینوکس با tcpdump هم می‌تونی ARP رو ببینی:

sudo tcpdump -i wlan0 arp

یا اگر اینترفیس تو Ethernet هست:

sudo tcpdump -i eth0 arp

خروجی ممکنه چیزی شبیه این باشه:

ARP, Request who-has 192.168.1.20 tell 192.168.1.10
ARP, Reply 192.168.1.20 is-at b8:27:eb:aa:bb:cc

این دقیقاً همون مکالمه‌ای میشه که تا قبل از این فقط درباره‌اش حرف می‌زدیم.

چرا ARP فقط در شبکه محلی کار می‌کند؟

چون ARP وابسته به Broadcast توی LAN هست. Broadcast قرار نیست از Router عبور کنه. اگر Broadcastها آزادانه از Routerها رد می‌شدن، اینترنت تبدیل می‌شد به یه میدون شلوغ و بی‌پایان از broadcast‌های بی‌ربط.

تصور کن هر دستگاه برای پیدا کردن یه آدرس، توی کل اینترنت broadcast بزنه:

Who has 8.8.8.8?

فاجعه می‌شه.

به همین دلیل Broadcast Domain محدود میشه. ARP داخل همون محدوده شبکه محلی کار می‌کنه. Router مرز این محدوده هست. پشت Router، دنیای دیگه‌ای هست.

این هم دلیل دیگه‌ای هست که چرا وقتی مقصد بیرون از LAN باشه، سیستم فقط MAC Address روتر رو می‌گیره. از اونجا به بعد، Routerها با IP و جدول Routing تصمیم می‌گیرن بسته به کجا بره.

Gratuitous ARP چیست؟

گاهی یه دستگاه بدون اینکه کسی ازش سوال کرده باشه، خودش ARP اعلام می‌کنه. به این میگن Gratuitous ARP.

مثلاً دستگاه میگه:

192.168.1.20 is at BB:BB:BB:BB:BB:BB

حتی اگر کسی نپرسیده باشد.

این کار چند کاربرد داره. یکی اینکه دستگاه می‌تونه اعلام کنه «این IP مال من هست.» گاهی برای تشخیص IP Conflict استفاده می‌شه. یعنی اگر دستگاهی ببینه یه نفر دیگه هم داره از همون IP استفاده می‌کنه، می‌شه فهمید توی شبکه مشکل به وجود اومده.

توی سناریوهای High Availability هم Gratuitous ARP مهم میشه. مثلاً وقتی یه IP مجازی از یه سرور به سرور دیگه منتقل می‌شه، سیستم جدید می‌تونه به شبکه اعلام کنه که از این به بعد اون IP با MAC Address جدیدی در دسترس قرار می‌گیره.

پس Gratuitous ARP همیشه چیز بدی نیست. اما مثل خیلی از ابزارهای شبکه، از همین قابلیت هم می‌تونه توی سناریوهای حمله سوءاستفاده بشه.

Proxy ARP چیست؟

Proxy ARP یعنی یه دستگاه، معمولاً Router، به جای یه دستگاه دیگه به ARP Request جواب بده. فرض کن یه سیستم می‌پرسه:

Who has 192.168.2.50?

و Router جواب میده:

192.168.2.50 is at MAC-of-Router

یعنی Router میگه: «اون مقصد رو بده به من، من می‌رسونم.»

Proxy ARP در بعضی طراحی‌های شبکه استفاده می‌شه، ولی اگر بدون فهم درست فعال بشه، می‌تونه عیب‌یابی شبکه رو سخت‌تر کنه. چون دستگاه‌ها فکر می‌کنن مقصد همون لینک محلی هستش، در حالی که در واقع Router داره نقش واسطه رو بازی می‌کنه.

مشکل امنیتی ARP کجاست؟

تا اینجا ARP خیلی ساده و مفید به نظر می‌رسه. اما مشکل از همون سادگی شروع می‌شه.

ARP به شکل سنتی هیچ احراز هویتی نداره.

وقتی یه دستگاه میگه:

192.168.1.1 is at AA:BB:CC:DD:EE:FF

سیستم دریافت‌کننده معمولاً راه قطعی برای فهمیدن دروغ بودن این ادعا نداره. همین باعث می‌شه حملاتی مثل ARP Spoofing یا ARP Poisoning ممکن بشن. توی ARP Spoofing، مهاجم سعی می‌کنه جدول ARP قربانی رو آلوده کنه. مثلاً به قربانی میگه:

192.168.1.1 is at MAC-of-Attacker

یعنی خودش رو جای Router جا می‌زنه.

از طرف دیگه ممکنه به Router هم بگه:

192.168.1.10 is at MAC-of-Attacker

یعنی خودش رو جای قربانی معرفی کنه.

نتیجه چی میشه؟

ترافیک قربانی به جای اینکه مستقیم به Router بره، اول از سیستم مهاجم عبور می‌کنه. اگر مهاجم Forwarding رو فعال کنه، قربانی شاید حتی متوجه نشه که کسی وسط راه در حال گوش دادن هست. و این یکی از شکل‌های Man-in-the-Middle توی شبکه محلی هست.

flowchart LR
    V["Victim
192.168.1.10"] A["Attacker
Sends Fake ARP Replies"] R["Router (Gateway)
192.168.1.1"] I["Internet"] V -->|"Traffic sent to attacker's MAC"| A A -->|"Relays packets"| R R --> I A -.->|"Tells victim:
'I am the Router'"| V A -.->|"Tells router:
'I am the Victim'"| R

توی این مقاله وارد آموزش اجرای حمله نمی‌شیم، چون هدف اینجا فهم مکانیزم هست، نه تبدیل مقاله به دستورالعمل حمله. اما از نظر دفاعی باید بدونی که ARP Spoofing واقعی هست، مخصوصاً توی شبکه‌های باز، وای‌فای عمومی، لَب‌های آموزشی و محیط‌هایی که کنترل لایه دوم ضعیف هست.

چطور جلوی ARP Spoofing رو می‌گیرند؟

توی شبکه‌های ساده خونگی، معمولاً امکانات زیادی برای دفاع پیشرفته نداریم. اما توی شبکه‌های سازمانی چند روش رایج وجود داره.

یکی از روش‌ها Dynamic ARP Inspection یا DAI هست. این قابلیت معمولاً روی Switchهای مدیریتی استفاده می‌شه. Switch بررسی می‌کنه که آیا ARP Replyها با اطلاعات معتبر، مثلاً جدول DHCP Snooping، هماهنگ هستن یا نه. اگر یه دستگاه بخواد دروغ بگه و خودش رو جای Gateway یا سیستم دیگه‌ای معرفی کنه، Switch می‌تونه اون پیام رو Drop کنه.

روش دیگه استفاده از Static ARP Entry هست. یعنی به سیستم بگی این IP همیشه مربوط به این MAC Address هست. این روش برای چند دستگاه حساس می‌تونه مفید باشه، اما توی شبکه‌های بزرگ مدیریت اون سخت و خسته‌کننده میشه.

استفاده از شبکه‌های جداگانه، VLAN، محدود کردن دسترسی کاربرهای ناشناس، فعال کردن Client Isolation توی WIFI مهمان، و استفاده از رمزنگاری توی لایه‌های بالاتر هم کمک می‌کنه.

نکته مهم این هست که:

پروتکل ARP خودش امن نیست؛ پس نباید امنیت کل ارتباط رو به درست بودن ARP وابسته کنیم.

حتی اگر کسی بتونه ترافیک رو از وسط عبور بده، استفاده درست از HTTPS، SSH، VPN و پروتکل‌های رمزنگاری‌شده باعث می‌شه کسی نتونه به راحتی محتوای ارتباط رو بخونه یا تغییر بده. البته Man-in-the-Middle هنوز می‌تونه خطرناک باشه، ولی رمزنگاری لایه‌های بالاتر شدت آسیب رو کم می‌کنه.

ARP در IPv6 وجود دارد؟

نه، در IPv6 دیگه ARP استفاده نمی‌شود.

IPv6 برای کاری مشابه از Neighbor Discovery Protocol یا NDP استفاده می‌کنه. NDP روی ICMPv6 ساخته شده و وظایفی مثل پیدا کردن آدرس لایه دوم همسایه‌های دستگاه توی شبکه، تشخیص Routerها و بررسی قابل دسترس بودن همسایه‌ها رو انجام میده.

اما ایده اصلی هنوز آشناست:

یه دستگاه باید بفهمه برای رسیدن به یه آدرس IP، توی شبکه محلی باید Frame رو به کدوم آدرس لایه دوم بفرسته. پس توی IPv6 نام و مکانیزم تغییر کرده، اما مسئله فلسفی همون باقی می‌مونه: شبکه باید مثل یه پل بین آدرس منطقی و آدرس قابل ارسال روی لینک بسازه.

چند سوءتفاهم رایج درباره ARP

یکی از سوءتفاهم‌های رایج این هست که ARP آدرس IP رو به MAC Address در کل اینترنت تبدیل می‌کنه. این غلط هست. ARP فقط داخل LAN کار می‌کنه.

سوءتفاهم دوم این هست که ARP فقط وقتی استفاده می‌شه که دو کامپیوتر مستقیم با هم حرف بزنن. این هم ناقص هست. حتی وقتی می‌خوای به اینترنت وصل بشی، سیستم تو برای پیدا کردن MAC Address روتر از ARP استفاده می‌کنه.

سوءتفاهم سوم این هست که MAC Address همیشه توی اینترنت همراه Packet حرکت می‌کنه. این هم غلط هست. MAC Address در هر لینک عوض می‌شه. وقتی بسته از Router عبور می‌کنه، Ethernet Frame قبلی تمام می‌شه و Frame جدیدی برای لینک بعدی ساخته می‌شه. IP مقصد ممکن هست ثابت بمونه، اما MAC Address مقصد در هر قدم مربوط به next hop یا همون ذستگاه بعدی هستش.

سوءتفاهم چهارم این هست که ARP چون ساده به نظر میاد، پس مهم نیست. اما واقعیت برعکس این هست. خیلی وقت‌ها مهم‌ترین چیزهای شبکه همون‌هایی هستن که ساده به نظر میرسن. ARP مثل لولای در می‌مونه؛ تا وقتی کار می‌کنه کسی نمی‌بیندش، اما وقتی خراب بشه، دیگه خود در هم معنایی نداره.

جمع‌بندی

ARP پروتکلی هست که فاصله بین IP Address و MAC Address رو در شبکه‌های IPv4 پر می‌کنه. وقتی یه سیستم می‌خواد داخل شبکه محلی با دستگاهی حرف بزنه، یا حتی وقتی می‌خواد بسته‌ای رو به Router بده، باید بدونه که Frame لایه دوم رو به کدوم MAC Address بفرسته.

اگر این اطلاعات رو در Cache داشته باشه، مستقیم از اون استفاده می‌کنه. اگر نداشته باشد، ARP Request می‌فرسته. این Request معمولاً Broadcast هست و همه دستگاه‌های LAN اون رو می‌بینن. دستگاهی که IP مورد نظر رو داره، با ARP Reply جواب میده. بعد سیستم فرستنده این رابطه IP به MAC رو توی ARP Cache ذخیره می‌کنه.

در ظاهر، ARP فقط یه سوال و جواب ساده هست:

Who has this IP?
This IP is at this MAC.

اما پشت همین سوال ساده، بخش بزرگی از ارتباطات روزمره شبکه محلی ایستاده.

بدون ARP، سیستم تو شاید بدونه مقصد از نظر IP کجاست، اما نمی‌دونه توی شبکه محلی Frame رو باید به کدوم دستگاه تحویل بده. مثل این هست که اسم یه نفر رو بدونی، اما ندونی توی اتاق بین چندین نفر کجا نشسته.

از طرف دیگه، همین سادگی یه ضعف امنیتی هم ایجاد می‌کنه. و چون ARP احراز هویت نداره، حملاتی مثل ARP Spoofing ممکن میشه. مهاجم می‌تونه خودش رو جای Router یا یه دستگاه دیگه معرفی کنه و ترافیک رو از مسیر خودش عبور بده.

پس ARP هم یه ابزار ساده برای اتصال هست، هم یه یادآوری مهم: توی شبکه، هر چیزی که بی‌صدا کار می‌کنه، لزوما بی‌اهمیت نیست.

گاهی عمیق‌ترین قسمت سیستم همون جایی هست که هیچ‌وقت به اون نگاه نکرده بودیم.

دسته‌بندی‌ها

دیدگاه‌ها

اولین نفری باشید که دیدگاه می‌گذارد.

دیدگاه بگذارید