توی مصاحبههای اخیرم، یکی از موضوعاتی که چندین بار باهاش روبهرو شدم، پروتکل ARP بود. چیزی که برام جالب بود این بود که چرا یه پروتکل به ظاهر ساده، انقدر توی مصاحبههای شبکه و امنیت مورد توجه قرار میگیره؟ مگه ARP قراره چه کار خاصی انجام بده که شناخت درستش تا این حد اهمیت داره؟
همین موضوع باعث شد بیشتر در موردش کنجکاو بشم. اینکه ARP دقیقاً چطور کار میکنه، توی کدوم لایه از شبکه قرار میگیره و اصلاً ارتباط بین IP و MAC چطور از طریق این پروتکل برقرار میشه؟ از طرف دیگه، وقتی صحبت از امنیت شبکه میشه، پای حملاتی مثل ARP Spoofing و ARP Poisoning هم وسط میاد. اما چطور یه پروتکل که وظیفه اصلیش برقراری ارتباط بین دستگاههای شبکهست، میتونه به ابزاری برای حمله تبدیل بشه؟
این سؤالها باعث شدن تصمیم بگیرم عمیقتر سراغ ARP برم و فقط به تعریف و نحوه عملکردش بسنده نکنم؛ بلکه جنبههای امنیتی، روشهای سوءاستفاده از اون و راههای مقابله با این حملات رو هم بررسی کنم. توی این مقاله میخوام چیزهایی رو که در این مسیر یاد میگیرم، با شما به اشتراک بذارم؛ شاید برای شما هم مفید باشه و نکاتی رو پیدا کنین که هم توی کار عملی شبکه و هم توی مصاحبههای فنی به دردتون بخوره.
پروتکل ARP چیست؟
پروتکل ARP مخفف Address Resolution Protocol (پروتکل تفکیک آدرس) هست و وظیفه اصلی اون پیدا کردن آدرس MAC متناظر با یک آدرس IPv4 در شبکه محلی (Local Network) هست.
برای درک بهتر، فرض کن یه سیستم میخواد اطلاعاتی رو برای سیستم دیگهای ارسال کنه. این سیستم آدرس IP مقصد رو میدونه، اما برای ارسال اطلاعات در شبکه اترنت (Ethernet)، به آدرس MAC مقصد هم نیاز داره. اینجاست که ARP وارد عمل میشه و آدرس MAC موردنظر رو پیدا میکنه.
به زبان ساده، آدرس IP مشخص میکنه که بسته اطلاعاتی باید به کدوم مقصد برسه، اما آدرس MAC برای تحویل فریم (Frame) در شبکه محلی استفاده میشه. پروتکل ARP این دو نوع آدرس رو به هم مرتبط میکنه تا ارسال اطلاعات در شبکه امکانپذیر بشه.
البته یه نکته مهم وجود داره: ARP همیشه آدرس MAC سیستم نهایی رو پیدا نمیکنه. اگر مقصد خارج از شبکه محلی (Local Subnet) باشه، سیستم بهجای جستوجوی MAC مقصد نهایی، آدرس MAC دروازه پیشفرض (Default Gateway) رو پیدا میکنه تا اطلاعات به روتر (Router) تحویل داده بشه و از اونجا به سمت مقصد مسیریابی بشه. در نتیجه، ARP یکی از اجزای مهم ارتباطات مبتنی بر IPv4 در شبکههای محلیه؛ چون بدون مشخص شدن آدرس MAC گام بعدی، سیستم نمیتونه فریم اترنت رو به شکل معمول به مقصد موردنظر تحویل بده.
چرا به پروتکل ARP نیاز داریم؟
برای درک نیاز به ARP، اول باید تفاوت بین آدرس IP و آدرس MAC رو بدونیم.
آدرس IP در لایه شبکه (Network Layer) برای شناسایی مقصد و مسیریابی (Routing) بستههای اطلاعاتی استفاده میشه. در مقابل، آدرس MAC در شبکه محلی برای شناسایی رابط شبکه و تحویل فریم (Frame Delivery) به کار میره.
حالا فرض کن سیستم A میخواد اطلاعاتی رو برای سیستم B ارسال کنه. سیستم A آدرس IP مقصد رو میدونه، اما برای ارسال اطلاعات در شبکه اترنت (Ethernet)، باید آدرس MAC مربوط به گام بعدی (Next Hop) رو هم داشته باشه.
اینجاست که پروتکل ARP وارد عمل میشه. سیستم بررسی میکنه که آیا آدرس MAC موردنظر در جدول ARP (ARP Cache) ذخیره شده یا نه. اگر اطلاعات موردنیاز موجود نباشه، با ارسال یک پیام ARP Request، آدرس MAC متناظر با IP موردنظر رو درخواست میکنه.
وقتی پاسخ دریافت شد، سیستم میتونه فریم اترنت رو با آدرس MAC مقصد ارسال کنه. به این ترتیب، ARP کمک میکنه اطلاعاتی که بر اساس آدرس IP مقصدشون مشخص شدن، در شبکه محلی به رابط شبکه درست تحویل داده بشن.
پروتکل ARP در کدام لایه کار میکند؟
برای مشخص کردن جایگاه ARP، بهتره به مدل OSI (Open Systems Interconnection) نگاه کنیم. این مدل، فرایند ارتباط در شبکه رو به هفت لایه تقسیم میکنه که هرکدوم وظیفه مشخصی دارن.
پروتکل ARP از این نظر جالبه که بین لایه شبکه (Network Layer) و لایه پیوند داده (Data Link Layer) قرار میگیره. دلیلش هم اینه که ARP از آدرس IPv4 برای پیدا کردن آدرس MAC استفاده میکنه؛ یعنی اطلاعات مربوط به لایه شبکه رو به آدرس موردنیاز برای ارسال فریم در لایه پیوند داده مرتبط میکنه.
برای مثال، وقتی یک سیستم میخواد بستهای رو از طریق اترنت ارسال کنه، ابتدا باید آدرس MAC گام بعدی رو مشخص کنه. اگر این آدرس در جدول ARP (ARP Cache) موجود نباشه، سیستم از ARP برای پیدا کردنش استفاده میکنه.
فرایند کاری ARP چگونه است؟
برای درک بهتر عملکرد ARP، فرض کن یک سیستم میخواد برای اولین بار اطلاعاتی رو به یک سیستم دیگه در شبکه محلی ارسال کنه. آدرس IP مقصد رو میدونه، اما آدرس MAC مقصد هنوز مشخص نیست. در این شرایط، فرایند ARP شروع میشه.
۱. بررسی جدول ARP (ARP Cache)
قبل از ارسال درخواست جدید، سیستم جدول ARP خودش رو بررسی میکنه تا ببینه آیا آدرس MAC متناظر با IP موردنظر قبلاً ذخیره شده یا نه.
اگر این اطلاعات موجود و معتبر باشه، سیستم میتونه از همون استفاده کنه و نیازی به ارسال درخواست جدید نیست. در غیر این صورت، باید آدرس MAC رو از طریق ARP پیدا کنه.
۲. ارسال درخواست ARP (ARP Request)
سیستم یک پیام ARP Request میسازه و از طریق شبکه محلی ارسال میکنه. این پیام معمولاً بهصورت Broadcast (ارسال همگانی) فرستاده میشه؛ یعنی همه دستگاههای حاضر در همان Broadcast Domain اون رو دریافت میکنن.
در این درخواست، سیستم مشخص میکنه که آدرس MAC متناظر با یک IPv4 مشخص رو میخواد.
۳. دریافت درخواست توسط دستگاهها
دستگاههای موجود در شبکه محلی درخواست رو دریافت و بررسی میکنن. سیستمی که آدرس IPv4 اعلامشده در درخواست متعلق به اون باشه، متوجه میشه که درخواست برای پیدا کردن آدرس MAC خودش ارسال شده.
سایر دستگاهها معمولاً پاسخی ارسال نمیکنن.
۴. ارسال پاسخ ARP (ARP Reply)
دستگاه مقصد، یک پیام ARP Reply (پاسخ ARP) ارسال میکنه و آدرس MAC خودش رو اعلام میکنه. در حالت معمول، این پاسخ بهصورت Unicast (ارسال مستقیم به یک دستگاه) برای سیستمی فرستاده میشه که درخواست رو ارسال کرده.
۵. ذخیره اطلاعات در جدول ARP
سیستم درخواستکننده، اطلاعات دریافتی رو در جدول ARP (ARP Cache) ذخیره میکنه. این جدول معمولاً شامل آدرس IPv4، آدرس MAC متناظر و اطلاعات مربوط به مدت اعتبار ورودی هست.
حالا سیستم میتونه از آدرس MAC بهدستاومده برای ارسال فریم اترنت (Ethernet Frame) استفاده کنه. این اطلاعات تا زمانی که ورودی جدول معتبر باشه، میتونه برای ارتباطهای بعدی هم استفاده بشه.
سخن پایانی پروتکل ARP شاید در نگاه اول پروتکل سادهای به نظر برسه، اما نقش مهمی در برقراری ارتباط بین دستگاهها در شبکههای مبتنی بر IPv4 داره. در این مقاله دیدیم که ARP چطور آدرس IP رو به آدرس MAC مرتبط میکنه، چطور با استفاده از پیامهای ARP Request و ARP Reply آدرس موردنیاز رو پیدا میکنه و چطور اطلاعات بهدستاومده رو در ARP Cache ذخیره میکنه.
درک درست عملکرد ARP فقط به شناخت یک پروتکل محدود نمیشه؛ بلکه کمک میکنه فرایند ارسال اطلاعات در شبکه رو بهتر بفهمیم و هنگام عیبیابی شبکه (Network Troubleshooting)، دقیقتر عمل کنیم.