برنامه‌نویسی

DNS چیست و چگونه کار می‌کند؟

dns چیست؟

DNS چیست؟

DNS (Domain Name System) را می‌توان، دفترچه تلفن اینترنت دانست. به کمک آن، افراد مختلف می‌توانند به اطلاعات آنلاین موجود در اینترنت از طریق نام‌هایی مانند: espn.com یا nytimes.com، دست پیدا کنند. مرورگرهای وب از طریق آدرس‌های پروتکل اینترنت (IP) با شبکه اینترنت در تعامل هستند. در این میان DNS‌ها، نام دامنه را به آدرس IP ترجمه می‌کنند و سپس مرورگر شما اطلاعات را از شبکه اینترنت دریافت می‌کند.

هر دستگاه‌ متصل به اینترنت، آدرس IP مخصوص به خود را داراست و دیگر دستگاه‌ها می‌توانند از طریق آن آدرس، همدیگر را در اینترنت شناسایی کنند. سرور‌های DNS این امکان را برای انسان‌ها ایجاد کرده‌اند که دیگر نیازی به حفظ کردن آدرس‌های IP مانند: 192.168.1.1 (in IPv4) نداشته باشند یا درموارد پیچیده‌تر، انسان‌ها در نسخه 6 آدرس‌های IP، با حروف و اعداد روبرو هستند، مانند: 2400:cb00:2048:1::c629:d7a2 (IPv6)

DNS چگونه کار می‌کند؟

بخواهیم واضح‌تر بگوییم، فرایند کار DNS، تبدیل نام دامنه، مانند: www.example.com به آدرس IP مانند: 192.168.1.1 است. در اینترنت به هر دستگاه، یک آدرس IP خاص تعلق می‌گیرد که برای یافتن یک وسیله اینترنتی در اینترنت، به آن آدرس IP نیاز است. اگر بخواهیم این مورد را در دنیای واقعی مثال بزنیم – آدرس IP مانند آدرس خیابان برای پیدا کردن یک خانه خاص است.

در زمانی که یک کاربر در شبکه اینترنت، می‌خواهد وبسایتی را بارگیری کند، باید ترجمه‌ای بین آنچه کاربر در مرورگر وب خود وارد می‌کند (مانند: www.example.com) به آدرس IP، که برای یافتن محل دستگاه است، صورت بگیرد.

برای درک کامل‌تر این فرایند، لازم است که درباره اجزای سخت‌افزاری DNS و اتفاقاتی که لازم است یک درخواست طی کند را یادبگیرید. مثلا در مرورگرهای وب، جستجوی DNS در پشت صحنه اتفاق می‌افتد و نیاز به انجام کار خاصی توسط کاربر نیست.

در بارگیری یک صفحه وب، 4 نوع سرور DNS وجود دارد:

DNS recursor: در واقع recursor را می‌توان به عنوان یک کتاب‌دار فرض کرد، که از او خواسته می‌شود یک کتاب خاص را در کتاب‌خانه پیدا کند. DNS recursor، سروری است که به منظور دریافت درخواست‌های کاربر (client)، از طریق برنامه‌هایی مانند: مرورگر وب، طراحی شده است و آن را می‌توان مسئول دریافت درخواست‌های DNS کاربر دانست.

Root nameserver: این سرور را می‌توان اولین قدم ترجمه نام دامنه به آدرس IP دانست و به عبارت دیگر آن را مانند: فهرست کتاب‌های یک کتاب‌خانه که به قفسه‌های مختلف کتاب اشاره دارد، فرض کرد. به طور معمول به عنوان مرجعی برای مکان‌های خاص دیگر عمل می‌کند.

Top-Level-Domain nameserver: در قدم سوم، این سرور را می‌توان به عنوان یک قفسه خاص کتاب در یک کتاب‌خانه تصور کرد. nameserver دامنه را می‌توان، سرنخ بعدی برای پیدا کردن آدرس IP دانست که با آن اطلاعات سرور را پیدا می‌کنند (به‌طور مثال در example.com، شناسه TLD را می‌توان “com” دانست).

Authoritative nameserver: و در آخر این سرور که آخرین توقف در جستجوی یک آدرس اینترنتی است را می‌توان به‌عنوان یک فرهنگ لغت در قفسه کتاب تصور نمود که به کمک آن می‌توان نام خاصی را از تعریف‌های پیشین، ترجمه کرد. اگر این سرور به رکورد درخواست دسترسی داشته باشد، آدرس IP را به درخواست recursor (همان کتاب‌دار) باز می‌فرستد.

چه تفاوتی میان سرور authoritative و recursive وجود دارد؟

هر دو برای زیرساخت‌‌های DNS جدانشدنی و مورد نیاز هستند. اما هر کدام نقش مختلفی را بر عهده دارد و قسمتی از روند درخواست DNS را تکمیل می‌کنند. یکی ازتفاوت‌هایی که به ذهن می‌رسد، سرور‌های recursive را می‌توان ابتدای درخواست DNS، و سرور authoritative را انتهای آن دانست.

Recursive DNS resolver

recursive resolver، رایانه‌ای است که به درخواست کاربر (client)، پاسخ می‌دهد و عملا برای پیدا کردن پاسخ درخواست، وقت می‌گذارد. این کار را با ایجاد یک سری درخواست، انجام می‌دهد تا اینکه به authoritative DNS nameserver برای رکورد درخواست شده، برسد (یا در صورت عدم یافتن رکورد، پاسخ Time out یا خطایی را برمی‌گرداند).

خوشبختانه DNS recursive resolversها، همیشه برای پاسخ به کاربر، نیازی به ایجاد درخواست‌های متعدد ندارند. در اینجا سیستم ذخیره‌سازی حافظه پنهان (caching) که فرایند ماندگاری اطلاعات بر عهده‌اش است، به میان می‌آید و توسط رکوردهای ذخیره‌ شده قبلی که از منابع درخواست شده آمده‌اند، پاسخ سریع‌تری به DNS Lookup داده می‌شود.

درخواست سابقه dns

Authoritative DNS server

به عبارت ساده، authoritative DNS server، سروری برای نگهداری و پاسخگویی به DNS resource records است. این سرور را می‌توان زیرین‌ترین قسمت زنجیره DNS lookup دانست که بر اساس resource records که قبلا جستجو شده، پاسخ می‌دهد. در نهایت این سرور به مرورگر اجازه می‌دهد تا به آدرس IP که برای دسترسی به وبسایت یا منابع دیگر نیاز دارد، دسترسی پیدا کند.

یک Authoritative nameserver به‌تنهایی می‌تواند درخواست‌ها را با استفاده از داده‌های خودش بدون نیاز به درخواست از دیگر منابع برآورده کند و برای بررسی DNS رکورد‌ها، منبع اصلی محسوب می‌شود.

درخواست سابقه dns

همچنین باید گفت، درمواردی که جستجوی ساب‌دامنه‌ (subdomain) مانند: blog.cloudflare.com رخ می‌دهد، یک nameserver دیگر به توالی اصلی که در تصویر بالا می‌بینید، اضاف می‌شود که مسئول دسته‌بندی CNAME record ساب‌دامنه‌ها است.

توالی درخواست سابقه dns

این را می‌توان نقطه تمایز بین Cloudflare و سایر ارائه دهندگان سرویس DNS دانست.

DNS recursive resolverهای دیگر مانند: Google DNS, OpenDNS و ارائه دهندگانی مانند Comcast همگی نیازهای دیتاسنترها را رفع می‌کنند. این resolverها به شما قابلیت جستجوی سریع و آسان از طریق cluster را که توسط سیستم‌های کامپیوتری بهینه شده است، می‌دهد. اما این سرویس‌ها اساسا با سرویس‌های cloudflate متفاوت هستند.

Cloudflare از سرورهایی در سطوح زیرساختی، برخوردار است که برای عملکرد اینترنت ضروریست. یک مثال کلیدی شبکه سرور f-root است که Cloudflare، تا اندازه‌ای پاسخگوی میزبانی‌ها است. F-root یکی از مؤلفه‌های زیرساخت در سطوح ریشه DNS nameserver است که مسئول پاسخگویی به میلیاردها درخواست اینترنت، در روز است.

شبکه Anycast، شرکت اینترنتی Cloudflare را در موقعیتی منحصر به فرد قرار می‌دهد تا بتواند حجم زیادی از ترافیک DNS را، بدون وقفه در خدمات دهی، کنترل کند.

مراحل DNS lookup به‌چه شکل است؟

در اکثر شرایط، DNS به یک نام‌دامنه در اینترنت متصل است که آدرس IP مخصوص به خود را داراست. برای یادگیری نحوه عملکرد این فرایند، دنبال کردن مراحل DNS lookup که از یک مرورگر شروع شده است، به شما کمک می‌کند.مسیر DNS lookup را دنبال کنید و دوباره به آن برگردید. بیایید نگاهی به مراحل بیاندازیم.

8 مرحله در DNS lookup:

  1. یک کاربر ‘example.com’ را در مرورگر خود تایپ می‌کند و یک درخواست وارد شبکه اینترنت می‌شود و توسط DNS recursive resolvers دریافت می‌شود.
  2. در مرحله بعد درخواست به DNS root nameserver ارسال می‌شود.
  3. در این مرحله root server یک پاسخ که در خود آدرس TLD را به همراه دارد (مانند: .com, .net)، به DNS Resolver بازمی‌گرداند که اطلاعات را برای دامنه‌های خود ذخیره می‌کند.
  4. سپس DNS Resolver، درخواستی را به TLD server که در این مثال com است، ارسال می‌کند.
  5. در پنجمین مرحله TLD server پاسخ را که همان آدرس آی‌پی domain nameserver است، به DNS Resolver برمی‌گرداند.
  6. درنهایت، DNS Resolver recursive یک درخواست به domain nameserver ارسال می‌کند.
  7. آدرس IP، وبسایت مورد نظر که ما آن را example.com درنظر گرفته‌ایم، از طرف domain nameserver به DNS Resolver برگشت داده می‌شود.
  8. در آخر DNS resolver آدرس IP دامنه درخواستی را به مرورگروب بازمی‌گرداند.

هنگامی که 8 مرحله از جستجوی DNS آدرس IP سایت مورد نظر، مثلا example.com را برگرداند، مرورگر می‌تواند درخواست برای دریافت صفحه وب را ایجاد کند:

  1. مرورگر یک درخواست HTTP به آدرس IP می‌فرستد.
  2. سروری که از آن آدرس استفاده می‌کند، یک صفحه‌وب را که توسط مرورگر قابل پردازش باشد، برمی‌گرداند.
نمودارد کامل جستجوی DNS

DNS resolver چیست؟

DNS resolver اولین توقف در جستجوی DNS و مسئول رسیدگی به درخواست ایجاد شده توسط کاربران است. resolver را می‌توان شروع کننده توالی درخواست‌هایی که یک آدرس URL را به یک آدرس IP تبدیل می‌کنند، دانست.

یک DNS Lookup از نوع uncached، درخواست‌های recursive و iterative را در بر خواهد گرفت.

این موضوع که شما، بین recursive DNS و recursive DNS resolver، تفاوت قائل شوید، خیلی مهم است. هر کوئری (query) که توسط درخواست کاربر ایجاد شده به DNS resolver ارسال می‌شود که برای ترجمه کوئری مورد نیاز است.

DNS recursive resolver، کامپیوتری است که recursive query را می‌پذیرد و پاسخ‌ها را با ایجاد درخواست‌های لازم پردازش می‌کند.

کوئری DNS بازگشتی

انواع کوئری‌های DNS چیستند؟

در یک جستجوی معمولی DNS، سه نوع کوئری رخ می‌دهد. با استفاده از ترکیب این کوئری‌ها، یک فرایند بهینه برای تبدیل نام دامنه به آدرس IP می‌تواند باعث کاهش مسافت طی شده، شود. در یک وضعیت ایده‌آل، داده‌های ذخیره شده حافظه پنهان در دسترس هستند که به DNS name server اجازه می‌دهند، یک کوئری non-recursive را برگرداند.

3 نوع از کوئری‌های DNS:

  1. Recursive query: در این نوع کوئری، کاربر DNS نیاز دارد که یک DNS server (به طور معمول یک DNS recursive resolver) پاسخی را به کاربر ارسال کند که قبلا در resource record ذخیره شده، یا یک پیغام خطا را برگرداند.
  2. Iterative query: در این مورد کاربر DNS به DNS server اجازه می‌دهد، بهترین پاسخی را که می‌تواند، برگرداند. اگر query name با کوئری‌های درون DNS server مطابقت نداشته باشد، یک DNS server authoritative برگشت داده می‌شود تا با سطح پایین‌تری از domain namespace بررسی شود. سپس کاربر DNS، کوئری را به DNS server authoritative ارسال می‌کند. این روند تا زمانی که یک خطا یا Time out رخ بدهد ادامه پیدا می‌کند.
  3. Non-recursive query: به طور معمول این حالت زمانی اتفاق می‌افتد که یک کاربر DNS، یک DNS server را ثبت کند که به آن دسترسی داشته باشد، زیرا از این نظر برای این رکورد معتبر است یا اینکه رکوردی در حافظه نهان وجود دارد، درخواست می‌کند.

ذخیره‌سازی حافظه نهان (caching) DNS چیست؟ ذخیره‌سازی حافظه نهان DNS در کجا رخ می‌دهد؟

هدف این‌کار ذخیره‌سازی اطلاعات به طور موقت برای افزایش عملکرد و ثبات درخواست‌ها است. ذخیره‌‌سازی DNS شامل ذخیره داده‌ها، نزدیک به درخواست کننده می‌شود. به طوری که می‌توان کوئری‌های DNS را زودتر پاسخ داد و از کوئری اضافی در زنجیره جستجوی DNS جلوگیری کرد. بدین ترتیب سرعت پاسخ‌دهی بهبود می‌بخشد و باعث کاهش مصرف پهنای باند / CPU می‌شود.

داده‌های DNS را می‌توان در مکان‌های مختلف ذخیره کرد، هرکدام از آنها رکورد DNS را برای مدت مشخصی که از پیش تعیین شده با TTL (Time-To-Live) ذخیره می‌کنند.

حافظه پنهان DNS در مرورگر

مرورگر‌های مدرن امروزی به گونه‌ای طراحی شده‌اند که سوابق DNS را به‌طور پیشفرض برای مدت زمان مشخصی، در حافظه ذخیره کنند، هدف این‌کار بسیار واضح است. هرچه ذخیره‌سازی داده‌ها در حافظه نهان به کاربر نزدیک‌تر باشد، برای بررسی حافظه نهان و ایجاد درخواست‌های صحیح به یه آدرس IP، مراحل پردازش کمتری انجام می‌شود. هنگامی که یک درخواست برای ثبت رکورد DNS انجام می‌شود، حافظه‌نهان مرورگر اولین جایی است که بررسی می‌شود.

سطح سیستم‌عامل (OS) حافظه پنهان DNS

سطح سیستم‌عامل DNS resolver دومین و آخرین توقف محلی قبل از ترک یک کوئری DNS از دستگاه شما است. این فرایند در سیستم‌عامل شما، برای رسیدگی به کوئری به نام “stub resolver” یا DNS client طراحی شده است.

stub resolver، درخواست را از یک برنامه دریافت می‌کند و درابتدا موجود بودن سابقه (record) را در حافظه پنهان خود بررسی میکند. اگر وجود نداشت سپس یک کوئری DNS ارسال می‌کند (با سوییچ recursive). در خارج از شبکه محلی، DNS resolver recursive در یک ارائه دهنده خدمات اینترنتی وجود دارد.

ذخیره‌سازی Recursive resolver DNS

هنگامی که resolver recursive در ارائه دهنده اینترنت (ISP)، DNS کوئری را دریافت می‌کند، مانند تمام مراحل قبلی، بررسی خواهد کرد که ترجمه host به آدرس IP در لایه ماندگار محلی (local persistence layer) خود ذخیره کرده‌اید یا خیر؟

resolver recursive نیز بسته به نوع رکورد‌هایی که در حافظه‌پنهان خود دارد از قابلیت‌های دیگری نیز برخوردارد است:

  1. اگر resolver، رکورد نوع A نداشته باشه اما رکورد نوع NS را برای authoritative nameservers دارا باشد، کوئری به‌طور مستقیم به name serverها ارسال می‌شود، بدون نیاز به مراحل دیگر در DNS کوئری. این میانبرها باعث می‌شود جستجوی DNS سریع‌تر رخ‌ دهد.
  2. اگر resolver، رکورد‌هایی از نوع NS نداشت، کوئری به سرور‌های TLD ارسال می‌کند، و از مرحله سرورهای ریشه صرف نظر می‌شود.
  3. و در صورتی که هیچ نوع رکوردی وجود نداشته باشد، کوئری به سرورهای ریشه ارسال می‌شود، این اتفاق زمانی رخ می‌دهد که حافظه پنهان DNS، پاکسازی شده باشد.

منبع: https://www.cloudflare.com/learning/dns/what-is-dns