ขั้นตอนการ Resolve DNS

ปรุงล่าสุด: 2017-08-01 10:40:42

คำนำ

คุณเคยสงสัยมั้ยว่า เวลาที่คุณพิมพ์ชื่อโดเมนในโปรแกรม Web browser แล้วเว็บบราวเซอร์รู้ได้อย่างไร ว่าจะต้องไปดาวน์โหลดข้อมูลหน้าเว็บไซต์จากเซิร์ฟเวอร์ที่ไหน. ในบทความนี้เราจะอธิบายขั้นตอนการทำงานของระบบโดเมนเนม ว่าเริ่มต้นจากชื่อโดเมนแล้วมันถูกแปลงเป็น IP address ได้อย่างไร. ขั้นตอนทั้งหมดนี้เรียกว่าการ Resolve DNS.

#1 เริ่มจากผู้ใช้ (Client-side)

เมื่อผู้ใช้พิมพ์ชื่อโดเมนลงโปรแกรม Web browser แล้ว (สมมติผู้ใช้พิมพ์ชื่อ nanadomain.com) ตัว Web browser จะไปถาม OS (ระบบปฏิบัติการ) ว่าโดเมนเนม nanadomain.com ที่ใส่มาชี้ไปที่ IP address อะไร ?

#2 OS (ระบบปฏิบัติการ)

OS ในที่นี้หมายถึง OS ในเครื่องที่ผู้ใช้กำลังใช้งาน อาจจะเป็น Windows, OSX, Linux, หรือ OS อื่นๆ. เจ้าตัว OS จะมีข้อมูลสำหรับออก Internet ที่ได้มาจากอุปกรณ์ Router ที่เป็นตัวจ่าย IP address มาให้กับมัน ซึ่งหนึ่งในข้อมูลที่ได้รับมานั้น ก็คือ "DNS Server". ตัว DNS Server ที่ว่านี้ มันทำหน้าที่เป็น "Recursive resolver" ซึ่งหน้าที่ของมัน คือ ไปถามข้อมูลที่แท้จริงมาจากที่อื่นอีกที เพราะว่ามันไม่มีข้อมูลของทุกโดเมนบนโลกนี้.

#3 DNS Server (Recursive resolver)

โดยปกติ DNS Server (Recursive resolver) จะเป็นบริการพื้นฐานของผู้ให้บริการ Internet แต่ละเจ้า (ของใครของมัน) เวลาที่อุปกรณ์ Router เชื่อมต่อ Internet ฝั่งผู้ให้บริการอินเทอร์เน็ต ก็จะบอกอุปกรณ์ Router ว่า IP address ของ DNS Server (Recursive resolver) ของผู้ให้บริการอินเทอร์เน็ตคืออะไร. หากผู้ใช้ไม่ได้ตั้งค่าอะไรพิเศษที่อุปกรณ์ Router หรือไม่ได้ตั้งค่าเพิ่มเติมใน OS เอง DNS Server (Recursive resolver) ที่ผู้ใช้จะได้ใช้ ก็คือของผู้ให้บริการอินเทอร์เน็ตนั่นเอง.

DNS Server (Recursive resolver) จะดูจากชื่อโดเมน โดยดูที่ Top level domain (หรือที่คนไทยเรียกว่า ดอท หรือนามสกุลโดเมน) เพื่อที่จะ request ไปถาม Registry ที่เป็นองค์กรดูแลโดเมนนามสกุลนั้นๆ ซึ่งค่าที่จะได้กลับมาในขั้นตอนนี้ คือ "Domain's name servers".

#4 IP ของ Domain's name servers 

(เวลาที่คุณตั้งค่า Name Servers โดเมนเนมของคุณ ก็คือตั้งค่าตัวนี้นั่นเอง) --- หน้าตาของ Name Servers ก็เป็นรูปแบบชื่อโดเมนเหมือนกัน อย่าง nanadomain.com ก็จะชี้ไปที่ Name Servers ของ CloudFlare ลักษณะนี้

  • sid.ns.cloudflare.com
  • zara.ns.cloudflare.com

Name Servers ทุกตัว ก่อนจะนำมาใช้ จะต้องระบุ IP address ของ Name Servers ไว้กับทาง Registry ด้วย (ขั้นตอนนี้เรียกว่า Register name server ในอนาคตเราจะเขียนบทความอธิบายวิธีการสร้าง Name Servers ด้วยชื่อโดเมนของคุณเอง).

ที่ร่ายยาวมาในย่อหน้านี้ จุดประสงค์คือเพียงแค่จะให้คุณรู้ว่า จาก "Domain's name servers" ที่อยู่ในรูปแบบชื่อโดเมน ที่ได้มาจากขั้นตอนที่ #3 แล้ว Recursive resolver มันแปลงเป็น IP address ได้อย่างไร. อย่าเพิ่งใจร้อนไป IP address ที่ได้ในขั้นนี้ ไม่ใช่ IP address ของโดเมนที่ User พิมพ์ในตอนแรกนะ แต่เป็น IP address ของ "Domain's name servers" ต่างหาก เพราะว่า Recursive resolver จะต้องไปติดต่อ Domain's name servers เพื่อถามว่า สรุปแล้ว nanadomain.com ชี้ไปที่ IP ไหน

#5 IP ของโดเมนเนมที่ User เรียกใช้งาน

Domain's name servers คือเซิร์ฟเวอร์ที่เก็บข้อมูล DNS records ทั้งหมด (หรือเรียกว่า Zone File) ของชื่อโดเมนที่ชี้มาที่มัน.

มาถึงขั้นนี้ Recursive resolver ก็จะถามกับ Domain's name servers (sid.ns.cloudflare.com
& zara.ns.cloudflare.com) ว่า "ช่วยบอกทีว่า nanadomain.com ชี้ไปที่ IP address อะไร ?". Domain's name servers ก็จะตอบ IP address ของ nanadomain.com กลับไป (ในที่สุด! ก็ได้รู้ IP address ของโดเมนที่ถามซะที)

#6 การเก็บ cache

ถึงแม้ขั้นตอนทั้งกระบวนการนี้จะใช้เวลาไม่ถึงวินาที แต่ในการใช้งานในโลกความจริง ผู้ใช้งานอินเทอร์เน็ตมีจำนวนมากมายมหาศาล ดังนั้นถ้าจะให้ Recursive resolver ทำทั้งกระบวนการ Resolve DNS ใหม่แต่ต้นทุกครั้ง ก็จะเป็นต้นทุนมหาศาล ทั้งฝั่ง Recursive resolver เอง และก็ฝั่งอื่นๆ ด้วย (Registry และ Domain's name servers).

ดังนั้นในระบบ Resolve DNS จึงมีกลไกลที่ให้ Recursive resolver จดจำคำตอบไว้ชั่วคราว (เก็บ Cache คำตอบ) เพื่อที่ว่าเวลามีคำถามซ้ำเข้ามา ก็จะสามารถตอบกลับไปได้ในทันที.

การเก็บ cache คำตอบนั้น ระยะเวลาของ cache จะถูกกำหนดโดยค่า TTL (Time to live) ที่ DNS records หน่วยเป็นวินาที. ดังนั้นเวลาที่คุณ configure DNS ของโดเมน คุณควรเลือกระบุ TTL อย่างเหมาะสม เช่น ถ้าในการใช้งาน คุณไม่ได้มีการเปลี่ยนแปลง DNS record value บ่อยๆ คุณก็ควรตั้ง TTL เป็นค่าสูงๆ เพื่อลดจำนวนครั้งที่จะต้อง Resolve DNS.  แต่ถ้าระบบของคุณจำเป็นต้องเปลี่ยน IP address ตลอดเวลา คุณอาจจะตั้ง TTL เป็น 300 ซึ่งเท่ากับว่าบอกให้ Recursive resolver อย่า cache คำตอบของโดเมนคุณนานเกิน 5 นาที นั่นเอง.