راهنمای مطالعه
سیستم نام دامنه (Domain Name System) یا DNS درواقع دفتر تلفن اینترنت است. افراد میتوانند از طریق نام دامنهی سایتها مانند Hostiran.net به یک سری اطلاعات آنلاین دسترسی داشته باشند. مرورگرهای وب از طریق آدرسهای پروتکل اینترنت (IP) با یکدیگر در تعاملاند. DNS نام دامنه را به آدرس IP تبدیل میکند، تا مرورگرها بتوانند منابع موجود در اینترنت را بارگذاری کنند. چرا که مرورگر قادر به خواندن نام دامنه نیست و تنها میتواند اعداد را آنالیز کند. نام دامنه از طریق DNS به اعداد مشخصی تبدیل شده که مرورگر از این پس قادر به خواندن آن خواهد بود.
هر دستگاه متصل به اینترنت یک آدرس آی پی منحصربهفرد دارد که برای پیدا کردن دستگاه از آن استفاده میشود. با تبدیل آدرس IP از اعداد به حروف، دیگر نیازی به حفظ کردن یک سری اعداد برای رسیدن به وبسایت مورد نظر نخواهد بود. اگر این اتفاق نمیافتاد باید بجای حروف و نام دامنه، اعداد را حفظ میکردیم. حتی ممکن است با اعدادی پیچیدهتر و یا ترکیب اعداد با حروف مواجه شویم. بهعنوانمثال ۲۴۰۰:cb00:2048:1::c629:d7a2 یکی از پیچیدهترین آیپیهاست که بههیچعنوان قابل حفظ کردن نیست!
DNS چگونه کار میکند؟
فرایند تفکیک DNS شامل ترجمهی نام هاست (مثل www.example.com) به یک آدرس IP سازگار با کامپیوتر (مثل ۱۹۲.۱۶۸.۱.۱) است. یک آدرس IP به هر دستگاه در اینترنت داده میشود که این آدرس برای یافتن دستگاه مناسب اینترنت ضروری است، مثل یک آدرس خیابان که برای یافتن یک خانه بخصوص استفاده میشود. برای لود شدن صفحهای از وب باید آدرسی که توسط کاربر در مرورگر وارد میشود (مثل Hostiran.net) به آدرس سازگار و قابل درکی برای سیستم ترجمه شود.
مقاله مرتبط: ٧ وب سایت قدرتمند برای بررسی وضعیت DNS
بهمنظور درک فرآیند تفکیک DNS، آشنایی با مؤلفههای مختلف سختافزاری که یک کوئری (query) یا پرسوجوی DNS باید از آنها گذر کند، لازم هست. برای مرورگر وب، جستجوی DNS «پشتصحنه» رخ میدهد و به تعامل با کامپیوتر کاربر جدای از درخواست اولیه نیازی ندارد.
چهار سرور DNS برای بارگذاری یک صفحه وب درگیر هستند:
- DNS recursor: این سرور را میتوان بهعنوان کتابدار در نظر گرفت که از او خواسته میشود یک کتاب خاص را در یک کتابخانه پیدا کند. DNS recursor سروری طراحیشده برای دریافت پرسوجو (query) از سیستم کاربر از طریق برنامههایی مانند مرورگرهای وب است. معمولاً recursor مسئول ایجاد درخواستهای اضافی برای پاسخ به کوئری DNS کاربر هست.
- Root nameserver: سرور root اولین گام در ترجمهی نام میزبان (Host name) به آدرس IP هست. این امر مصداق فهرستی در یک کتابخانه هست که نام کتابهای چندین قفسه را شامل میشود. سرور مورد نظر بهطور معمول بهعنوان مرجعی برای آدرسهای خاص متعددی عمل میکند.
- TLD nameserver: نام دامنه سطح بالا (TLD) میتواند بهعنوان یک قفسه خاص از کتابها در یک کتابخانه تلقی شود. این نام سرور، مرحله بعدی در جستجوی یک آدرس IP خاص هست و آخرین بخش، نام هاست را میزبانی میکند. بهعنوانمثال «com» در «com»، سرور TLD هست.
- Authoritative nameserver: آخرین نام سرور را میتوان بهعنوان یک فرهنگ لغت در یک قفسه کتاب در نظر گرفت که در آن یک نام خاص میتواند به معنی خود ترجمه شود. نام سرور معتبر آخرین توقفگاه در کوئری نام سرور است. اگر نام سرور معتبر به رکورد درخواست شده دسترسی داشته باشد، آدرس IP برای نام هاست درخواست شده را به DNS Recursor (کتابداری) که درخواست اولیه را کرده است، باز میگرداند.
تفاوت بین سرور authoritative DNS و تحلیلگر recursive DNS چیست؟
هر دو مفهوم به سرورهایی (گروههایی از سرورها) اشاره دارند که بخشی از زیرساخت DNS هستند، اما هرکدام نقش متفاوتی را ایفا میکنند و در موقعیتهای مختلف درون کانال ارتباطی یک کوئری DNS وجود دارند. تنها تفاوتشان این است که «recursive resolver» در ابتدای کوئری DNS و «authoritative nameserver» در انتهای آن قرار دارد.
Recursive DNS resolver چیست؟
Recursive resolver کامپیوتری است که به درخواست بازگشتی از سمت کاربر پاسخ داده و زمانی را برای بررسی رکورد DNS اختصاص میدهد. این کار را با ایجاد یک سری درخواستها انجام میدهد تا زمانی که به DNS nameserverمعتبری برای رکورد درخواست شده برسد، زمان پایان یابد و یا اینکه هیچ رکوردی را پیدا نکرده و پیام خطایی را بجای آن ارسال کند. خوشبختانه، تحلیلگرهای recursive DNS برای ردیابی رکوردهای موردنیاز برای پاسخ به درخواست کاربر، نیازی به ایجاد درخواستهای متعدد ندارند؛ کَش کردن (Cashing) فرآیندی است برای باثبات کردن اطلاعات که برای پاسخ به برخی درخواستهای ضروری، میانبری ایجاد کرده و از نتایج درخواستهای قبلی ایجاد شده برای بررسی DNS و رکورد منابع استفاده میکند. ازاینرو کاربر خیلی سریعتر میتواند نتیجهی درخواست خود را ببیند.
Authoritative DNS server چیست؟
درواقع authoritative DNS server، سروری است که وظیفهی نگهداری از منابع رکورد DNS را بر عهده دارد. این سرور در انتهای زنجیره جستجوی DNS قرار دارد که با استفاده از کوئری رکورد منبع عمل کرده و در نهایت به مرورگر برای ارسال درخواست آدرس IP موردنیاز بهمنظور دسترسی به وبسایت یا دیگر منابع وب اجازه میدهد. یک authoritative nameserver قادر است که بدون نیاز به کوئری گرفتن از منابع دیگر با استفاده از دادههای خود به کوئریها پاسخ دهد، چرا که این آخرین منبع حقیقی برای رکورد DNSهای مشخص است.
در مواردی که کوئریها برای زیردامنهای مانند design.hostiran.net تعریف شدهاند، نام سروری دیگر بعد از مرحلهی authoritative nameserver اضافه خواهد شد که نقش ذخیره رکورد CNAME زیردامنه (subdomain) را بر عهده دارد.
بین سرویسهای DNS و Cloudflare یک تفاوت اساسی وجود دارد. تحلیلگرهایDNS recursive مختلف مانند Google DNS، OpenDNS و سرویس دهندههایی مانند Comcast، دیتاسنترهایی را برای تحلیلگرهایDNS recursive برقرار کردهاند. این تحلیلگرها امکان جستجوی سریع و آسان را از طریق خوشههای بهینهشدهی DNS برای سیستمها فراهم میکنند که البته تفاوتی اساسی با نام سرورهایی میزبانیشده توسط Cloudflare دارند.
Cloudflare نام سرور (Namesever) های زیرساختی را برقرار کرده که برای عملکرد اینترنت نیز ضروری هستند. مثال مهم این نمونه، شبکه سرویسدهنده F-root هست که Cloudflare تا حدی میزبانی آن را برعهدهگرفته است.
F-root یکی از اجزای زیرساخت نام سرور سیستم DNS سطح روت هست که مسئولیت میلیاردها درخواست اینترنتی در هر روز را بر عهده دارد.
مراحل بررسی DNS
اکثر اوقات، DNS با نام دامنهای که به آی پی مناسبی ترجمه شده باشد متصل هست. با دنبال کردن مسیر بررسی DNS از مرورگر وب طی این فرآیند و بازگشت آن به محل اول، میتوان با چگونگی عملکرد مراحل بررسی DNS آشنا شد. نگاهی به مراحل این فرآیند میاندازیم:
نکته: اغلب اطلاعات بررسی DNS بهصورت محلی در کامپیوتر جستجوگر یا بهصورت remote در زیرساخت DNS ذخیره (کَش) خواهند شد. بهطور معمول بررسی DNS در ۸ مرحله صورت میگیرد. پس از کَش شدن اطلاعات دی ان اس، برخی از مراحل فرآیند بررسی DNS بهصورت خودکار Skip میشوند که این موضوع باعث پیشرفت سریعتر فرآیند کلی خواهد شد. مثال زیر خلاصهی تمام ۸ مرحله پیش از ذخیرهی اطلاعات هست:
هشت مرحلهی بررسی DNS:
- پس از تایپ آدرس «com» در مرورگر توسط کاربر، کوئری آن از طریق اینترنت منتقل شده و توسط یک تحلیلگرDNS recursive دریافت میشود.
- تحلیلگر (resolver)، نام روت سرور DNS را پرسوجو میکند.
- سپس سرورِ روت توسط آدرس یک سرور DNS دامنه سطح بالا (Top Level Domain) به تحلیلگر پاسخ میدهد (مثل .com یا .net) که اطلاعات مربوط به دامنههایش را ذخیره میکند. زمانی که برای com سرچ میکنیم، درخواست ما دامنه سطح بالای .com را هدف قرار میدهد.
- تحلیلگر یک درخواست برای دامنه سطح بالا com. میفرستد.
- سرور دامنه سطح بالا (TLD) با آدرس IP نام سرور دامنه پاسخ میدهد؛ com.
- در انتها، تحلیلگر recursive یک درخواست به نام سرور دامنه میفرستد.
- آدرس IP برای com از نام سرور به تحلیلگر بازمیگردد.
- تحلیلگر DNS به مرورگر وب با آدرس IP دامنهی درخواستیِ اولیه پاسخ میدهد.
هنگامیکه ۸ مرحله جستجوی DNS، آدرس IP را برای example.com بازگرداند، آنگاه مرورگر قادر به ایجاد درخواست برای صفحه وب خواهد بود:
- مرورگر یک درخواست HTTP برای آدرس IP میسازد.
- سرور با IP مورد نظر، صفحه وب را باز میگرداند تا در مرورگر نمایش داده شود.
تحلیلگر DNS چیست
تحلیلگر DNS اولین توقفگاه در جستجوی DNS و مسئول تعامل با کاربری است که درخواست اولیه را ایجاد کرده است. تحلیلگر مراحل کوئری را آغاز میکند و در نهایت به یک URL میرسد که باید به آدرس IP ضروری ترجمه شود.
نکته: یک جستجوی DNS معمولی کَش نشده، شامل کوئریهای recursive و iterative خواهد بود.
امر مهمی است که بین یک کوئری بازگشتی DNS و یک تحلیلگر DNS بازگشتی تمایز قائل شویم. این کوئری به درخواست ارسالشده به سیستم DNS اشاره میکند که نیاز به تفکیک کوئری دارد. یک تحلیلگر بازگشتی DNS، رایانهای است که کوئری بازگشتی را میپذیرد و پاسخ را با ایجاد درخواستهای ضروری پردازش میکند.
انواع کوئری های DNS
در یک جستجوی معمولی DNS سه نوع کوئری رخ میدهد. با استفاده از ترکیبی از این کوئریها، یک فرآیند بهینه برای تفکیک DNS میتواند منجر به کاهش مسافت انتقال شود. در یک موقعیت ایدهآل، دادههای ذخیره (کَش) شده در دسترس قرار خواهند گرفت که اجازه میدهد نام سرور DNS، یک جستجوی غیر بازگشتی را برگرداند.
انواع کوئری DNS:
- کوئری بازگشتی (Recursive query): در یک کوئری بازگشتی، یک سرویسگیرندهی DNS نیاز دارد که یک سرور DNS (معمولاً یک تحلیلگر بازگشتی DNS) با یک رکورد منبع درخواستشده و یا با یک پیغام خطا (اگر تحلیلگر نتواند رکورد را پیدا کند) به وی پاسخ دهد.
- کوئری تکراری (Iterative query): در این وضعیت، سرویسگیرندهی DNS به سرور DNS اجازه میدهد تا بهترین پاسخ ممکن را بازگرداند. اگر سرور DNS پرسوجو شده با نام پرسوجو تطابق نداشته باشد، ارجاعی به DNS server authoritative برای یک سطح پایینتر از فضای نام دامنه (Domain Namespace) باز میگرداند. سپس سرویسگیرندهی DNS یک پرسوجو برای آدرس مرجوعی میفرستد. این فرآیند با سرورهای DNS اضافی در پایین زنجیره کوئری ادامه مییابد تا زمانی که یک خطا یا تایم اوت رخ دهد.
- کوئری غیر بازگشتی (Non-recursive query): این کوئری معمولاً زمانی رخ میدهد که یک سرویسگیرندهی تحلیلگر DNS از سرور DNS برای ثبت رکوردی، کوئری میگیرد که به هر دو دسترسی دارد، چرا که هم برای رکورد معتبر است و هم برای رکوردی که داخل cache آن وجود دارد. بهطور معمول، یک سرور DNS، رکوردهای DNS را برای جلوگیری از مصرف بیشازحد پهنای باند و بارگذاری بر روی سرورهای آپ استریم (Upstream server)، کَش خواهد کرد.
DNS Caching یا کش کردن دی ان اس چیست و کجا رخ میدهد؟
هدف از caching این است که بهطور موقت دادهها در مکانی ذخیره شوند که منجر به بهبود عملکرد و اعتبار برای درخواستهای اطلاعات میشود. DNS caching شامل ذخیرهسازی داده، در محلی نزدیکتر به کاربر مورد نظر است، بدین ترتیب پرسوجوی DNS سریعتر تفکیک خواهند شد و نیز از پرسوجوهای بیشتر در امتداد زنجیره جستجوی DNS اجتناب کرد و درنتیجه زمان بارگذاری را بهبود بخشید و مصرف پهنای باند/ CPU را کاهش داد. دادههای DNS را میتوان در مکانهای مختلفی ذخیره کرد، هرکدام از آنها رکوردهایDNS را برای مدتزمانی تعیینشده توسط یک TTL (Time-to-Live) ذخیره خواهند کرد.
DNS caching مرورگر:
مرورگرهای وب جدید طوری طراحی شدهاند که رکوردهای DNS برای مدت زمان معینی بهطور پیشفرض در آنها ذخیره میشوند. هدف این موضوع واضح است؛ هرچه DNS caching در نزدیکی مرورگر وب اتفاق بیفتد، مراحل پردازش کمتری باید بهمنظور بررسی cache و ایجاد درخواستهای صحیح برای یک آدرس IP به کار گرفته شوند. هنگامیکه یک درخواست برای یک رکورد DNS ساخته میشود، cache مرورگر اولین مکانی است که برای رکورد درخواست شده چک میشود.
شما نیز در کروم میتوانید وضعیت حافظه DNS خود را با رفتن به آدرس chrome://net-internals/#dns مشاهده کنید.
DNS caching سطح سیستمعامل (OS)
تحلیلگر DNS سطح سیستمعامل، دومین و آخرین توقفگاه محل، قبل از آن است که پرسوجوی DNS، دستگاه شما را ترک میکند. فرآیند درون سیستمعامل شما که برای تنظیم این کوئری طراحی شده است معمولاً «stub resolver» یا سرویسگیرندهی DNS نامیده میشود. وقتی یک stub resolver درخواستی را از یک برنامه دریافت میکند، ابتدا cache خود را برای یافتن رکورد مورد نظر بررسی میکند. اگر جستجوی آن نتیجهای نداشت، آنگاه یک کوئری DNS (با یک recursive flag set)، خارج از شبکه محلی به یک تحلیلگر بازگشتی DNS در سرویسدهنده خدمات اینترنتی (ISP) میفرستد.
DNS caching تحلیلگر بازگشتی
هنگامی که تحلیلگر بازگشتی در ISP، یک پرسوجوی DNS را مانند تمامی مراحل قبلی دریافت میکند، بررسی خواهد کرد که ترجمه آدرسِ هاست به IP در حال حاضر در لایه تداوم محلی خود ذخیره شده باشد.
تحلیلگر بازگشتی نیز بسته به انواع رکورد موجود در cache آن قابلیت بیشتری دارد:
- اگر تحلیلگر دارای رکورد A نباشد، اما دارای رکوردهای NS برای نام سرورهای معتبر (authoritative nameserver) باشد، تحلیلگر نام سرورها را مستقیماً با عبور از چندین گام در کوئری DNS، پرسوجو میکند. این میانبر مانع از جستجوی روت و نام سرورهای .com میشود (بهعنوانمثال در جستجوی com) و به تفکیک سریعتر پرسوجوی DNS کمک میکند.
- اگر تحلیلگر دارای رکوردهای NS نباشد، یک کوئری را با Skip سرور root، برای سرورهای TLD ارسال خواهد کرد (مثل .com).
- در یک رویداد غیرمحتمل که تحلیلگر هیچ رکوردی را ندارد که به سرورهای TLD اشاره کند، در این زمان سرورهای روت را پرسوجو خواهد کرد. این اتفاق معمولاً پس از اینکه یک DNS cache پاک میشود روی میدهد.