احتمالا شما هم جزو کسانی هستید که از دی ان اس (DNS) برای کارهای مختلف استفاده میکنید، اما دقیقا نمیدانید که چیست.
به گزارش تکراتو و به نقل از cloudflare، دی ان اس یا سامانه نام دامنه، شبیه دفترچه تلفن اینترنت است. انسانها برای دسترسی به اطلاعات در فضای آنلاین از نام دامنههایی مثل nytimes.com یا espn.com استفاده میکنند، اما مرورگرها برای ارتباط با سرورها از آدرسهای IP بهره میبرند.
دی ان اس چیست؟
دی ان اس این نامهای دامنه را به آدرس IP تبدیل میکند تا مرورگرها بتوانند منابع اینترنتی را بارگذاری کنند. هر دستگاه متصل به اینترنت، یک آدرس IP منحصربهفرد دارد که سایر دستگاهها برای شناسایی آن از همین آدرس استفاده میکنند.
با وجود DNS دیگر نیازی نیست افراد آدرسهایی مثل 192.168.1.1 در نسخه IPv4 یا آدرسهای پیچیدهتر در نسخه IPv6 را حفظ کنند.
فرآیند کار دی ان اس
فرآیند تبدیل یک نام دامنه (مثل www.example.com) به یک آدرس IP قابل فهم برای کامپیوتر، DNS resolution نام دارد. همانطور که برای پیدا کردن یک خانه به آدرس خیابان نیاز داریم، برای دسترسی به یک دستگاه خاص در اینترنت هم باید آدرس IP آن را بدانیم.
وقتی کاربر میخواهد یک صفحه وب را باز کند، نیاز به ترجمهای میان چیزی که کاربر در مرورگر وارد کرده و آدرس واقعی آن در شبکه وجود دارد.
برای درک بهتر نحوه عملکرد دی ان اس، ابتدا باید با سختافزارهای مختلفی که در این فرآیند نقش دارند آشنا شویم. از دید مرورگر، این فرآیند پشت صحنه انجام میشود و کاربر تنها با وارد کردن نام سایت، درخواست خود را آغاز میکند.
چهار نوع اصلی از سرورهای DNS در بارگذاری یک صفحه وب نقش دارند:
DNS recursor: مانند کتابداری است که وظیفه دارد کتاب مورد نظر را از کتابخانه پیدا کند. این سرور، درخواستهای DNS را از برنامههایی مثل مرورگرها دریافت میکند و در صورت نیاز، برای پاسخ به این درخواست، از دیگر سرورها کمک میگیرد.
Root nameserver: اولین گام برای تبدیل نام دامنه به آدرس IP است. این سرور مانند فهرست اولیهای عمل میکند که به قفسههای خاصی از کتابها (در اینجا سرورهای خاص) اشاره دارد.
TLD nameserver: این سرور که به نام دامنههای سطح بالا (مانند com یا net) مربوط میشود، مانند قفسه خاصی از کتابخانه است که شامل کتابهایی با موضوع خاص هستند. اگر بخواهیم example.com را پیدا کنیم، این سرور مربوط به com است.
Authoritative nameserver: این سرور مانند یک فرهنگ لغت است که معنای دقیق یک کلمه را ارائه میدهد. اگر اطلاعات مربوط به دامنه درخواستشده را داشته باشد، آدرس IP مورد نظر را به DNS recursor برمیگرداند.
تفاوت DNS recursive resolver و authoritative DNS server
هر دوی اینها بخشهای مهمی از ساختار دی ان اس هستند، اما نقش متفاوتی دارند. Recursive resolver در آغاز زنجیره پرسوجو و authoritative server در پایان آن قرار دارند.
Recursive DNS resolver: این سرور درخواست کاربر را دریافت میکند و خود وظیفه دارد که پاسخ نهایی را بیابد. این کار با ارسال زنجیرهای از درخواستها تا رسیدن به سرور نهایی انجام میشود. البته گاهی با استفاده از کش (ذخیرهسازی موقت اطلاعات) میتوان از برخی مراحل صرف نظر کرد.
Authoritative DNS server: این سرور، اطلاعات اصلی و معتبر مربوط به دامنهها را نگهداری میکند و قادر است بدون پرسوجوی بیشتر، پاسخ نهایی را ارائه دهد. اگر درخواست برای زیردامنهای مثل blog.cloudflare.com باشد، ممکن است یک سرور اضافی برای ارائه اطلاعات آن زیردامنه درگیر شود.
تفاوت بین دی ان اسهای رایج و خدمات Cloudflare
بیشتر DNSهای عمومی مثل Google DNS، OpenDNS یا DNS شرکتهایی مثل Comcast، سرورهای resolver دارند که در مراکز داده نصب شدهاند و عملکرد سریعتری دارند.
اما Cloudflare علاوه بر اینها، زیرساختهای اصلی DNS از جمله شبکه سرورهای f-root را نیز پشتیبانی میکند. این سرورها نقش کلیدی در پاسخگویی به میلیاردها درخواست روزانه اینترنت دارند و ساختار anycast آنها باعث پایداری بیشتر در برابر ترافیک بالا میشود.
مراحل یک DNS lookup
برای بیشتر کاربران، دی ان اس تنها یک نام دامنه را به آدرس IP مناسب تبدیل میکند. برای درک بهتر، بیایید مسیر یک درخواست DNS را دنبال کنیم:
توجه: اگر اطلاعات DNS از قبل کش شده باشند، بعضی از این مراحل حذف میشوند و سرعت پاسخگویی بیشتر میشود. اما در اینجا حالت کامل ۸ مرحلهای را بررسی میکنیم:
کاربر example.com را در مرورگر وارد میکند. این درخواست به DNS resolver ارسال میشود.
resolver با سرور root تماس میگیرد.
root سرور، آدرس یک TLD سرور مثل com. را به resolver میدهد.
resolver درخواست را به سرور com. ارسال میکند.
TLD سرور آدرس nameserver اصلی example.com را برمیگرداند.
resolver با nameserver دامنه تماس میگیرد.
آدرس IP example.com از طرف nameserver به resolver داده میشود.
این آدرس IP به مرورگر برمیگردد.
در نهایت، مرورگر با استفاده از این IP به سرور سایت وصل میشود و محتوای صفحه را دریافت و نمایش میدهد.
DNS resolver چیست؟
اولین ایستگاه در مسیر DNS، DNS resolver است. این سیستم مسئول پاسخگویی به کلاینت (کاربر) اولیه است و زنجیرهای از پرسوجوها را برای رسیدن به آدرس IP آغاز میکند.
توجه داشته باشید که بین DNS recursive query (درخواست) و DNS recursive resolver (سرور پردازشکننده) تفاوت وجود دارد. اولی نوعی از درخواست است و دومی سیستمی است که آن درخواست را دریافت و پردازش میکند.
انواع درخواستهای DNS
در فرآیند جستجوی دی ان اس، سه نوع درخواست مختلف داریم. ترکیب این سه نوع میتواند باعث بهینهتر شدن مسیر جستجو شود.
Recursive query: در این حالت، DNS client انتظار دارد که سرور DNS یا پاسخ کامل را بدهد یا خطا اعلام کند. resolver تا یافتن پاسخ، زنجیرهای از درخواستها را ارسال میکند.
Iterative query: این نوع درخواست به سرور اجازه میدهد که بهترین پاسخ ممکن را بدهد، حتی اگر کامل نباشد. در صورت نداشتن پاسخ، سرور آدرس سرور دیگری را ارائه میدهد و کلاینت خودش به آن مراجعه میکند.
Non-recursive query: در این حالت، DNS client از سروری درخواست میفرستد که قبلاً پاسخ را در کش خود دارد یا خودش مسئول آن رکورد است. این روش سریعتر است و منابع کمتری مصرف میکند.
DNS caching چیست و کجا اتفاق میافتد؟
هدف از کش کردن، ذخیره موقت دادهها در مکانی نزدیک به کاربر است تا عملکرد و سرعت بهبود یابد. وقتی DNS در کش ذخیره میشود، نیازی به طیکردن کامل زنجیره پرسوجو نیست.
کش مرورگر: مرورگرها معمولاً اطلاعات DNS را برای مدتی در خود نگه میدارند تا سرعت دسترسی به سایتها افزایش یابد. در مرورگر Chrome میتوان وضعیت کش را با آدرس chrome://net-internals/#dns بررسی کرد.
کش سیستمعامل: سیستمعامل کامپیوتر نیز درخواست DNS را ابتدا با استفاده از کش داخلی بررسی میکند. اگر پاسخ در کش نباشد، درخواست به سمت سرورهای DNS خارجی (مثلاً در ISP) فرستاده میشود. این بخش به عنوان DNS client یا stub resolver شناخته میشود.
کش سرور recursive: وقتی DNS resolver (مثلاً در ISP) درخواستی را دریافت میکند، ابتدا کش داخلی خود را بررسی میکند. اگر رکورد کامل را نداشته باشد، اما آدرس nameserver را بداند، مستقیماً به آن درخواست میدهد و مراحل میانی را حذف میکند. این روش باعث کاهش بار روی root و TLD سرورها میشود. فقط وقتی کش کاملاً پاک شده باشد، سرور مجبور است از root آغاز کند.