ใครบ้างที่“ recurses” ในการค้นหา DNS แบบเรียกซ้ำ


16

ฉันพยายามเข้าใจความแตกต่างระหว่างการค้นหา DNS แบบวนซ้ำและแบบเรียกซ้ำ โดยพื้นฐานแล้วฉันคิดว่าการวนซ้ำเหมือนการเรียกห้างสรรพสินค้ากำลังมองหาผลิตภัณฑ์และเมื่อพวกเขาไม่มีมันพวกเขาจะให้หมายเลขสาขาที่คุณต้องการโทรจากนั้นคุณก็โทรหาสาขาอื่นด้วยตัวเอง เมื่อเทียบกับ recursive ซึ่งเหมือนกับการเรียกห้างสรรพสินค้าและเมื่อพวกเขาไม่มีสิ่งที่คุณต้องการพวกเขาจะโทรหาสาขาอื่นในนามของคุณเพื่อค้นหาผลิตภัณฑ์ สิ่งที่ฉันได้รับมุมมองที่ขัดแย้งกันเกี่ยวกับเรื่องนี้เมื่อมันมาถึง DNS เมื่อฉันคิดถึง recursive ฉันคิดถึงสิ่งที่มีลักษณะเช่นนี้: ข้อความแสดงแทน

แต่ในขณะที่อ่านบทความบนเว็บและแม้แต่การค้นหารูปภาพ Google สำหรับDNS แบบเรียกซ้ำฉันเห็นตัวอย่างเพิ่มเติมที่มีลักษณะเช่นนี้: ข้อความแสดงแทน

สำหรับฉันตัวอย่างที่สองนี้มีลักษณะซ้ำมากกว่าที่ทำซ้ำเนื่องจาก "เซิร์ฟเวอร์ DNS อื่น ๆ " แต่ละเครื่องบอก "เซิร์ฟเวอร์ DNS ที่ต้องการ" ที่อยู่ของเครื่องถัดไปเพื่อค้นหาแทนที่จะค้นหาในนามของเครื่องที่ต้องการ เซิร์ฟเวอร์ DNS องค์ประกอบแบบเรียกซ้ำที่ฉันเห็นคือเซิร์ฟเวอร์ DNS ที่ต้องการทำการค้นหาในนามของไคลเอนต์ DNS แต่จากที่นี่เป็นต้นไป

ดังนั้นฉันเดาว่าคำถามของฉันคือการค้นหา DNS แบบ "เรียกซ้ำ" จริงๆแล้วหมายถึงการเรียกซ้ำในแง่ของเซิร์ฟเวอร์ DNS ที่ต้องการทำบางอย่างในนามของลูกค้า แต่ทำซ้ำได้จริงหรือไม่? ผลลัพธ์ส่วนใหญ่ที่ฉันเห็นในการค้นหารูปภาพของ Googleทำให้ฉันเชื่อว่าสิ่งนี้ซึ่งทำให้เกิดคำถามคำถามนั้นคือภาพแรกในโพสต์นี้ผิดปกติหรือเปล่า?


ลองดูพอดคาสต์ถาม Mr DNS ความบันเทิงให้ข้อมูลและพวกเขาจัดการ DNS ตั้งแต่ปี 1989 เขียนหรือร่วมเขียนหนังสือทุกเล่มของO'Reily DNS เป็นต้นAsk-mrdns.comเรียนรู้มากกว่าที่คุณอยากรู้
Ronald Pottol

คำตอบ:


16

ย่อหน้าสุดท้ายของคุณถูกต้อง

"Recursion Desired" (RD) ค่าสถานะที่ส่งโดยลูกค้าในส่วนหัวคำขอ DNS (ดู RFC 1035) ถามเซิร์ฟเวอร์ "โปรดให้คำตอบที่สมบูรณ์กับคำถามนี้"

เซิร์ฟเวอร์นั้นถามซ้ำ ๆถึง chain ของเนมเซิร์ฟเวอร์สำหรับคำตอบที่ถูกต้อง ข้อความค้นหาเหล่านั้นไม่ควรตั้งค่าบิตของ RD

ในที่สุดการตอบสนองของเซิร์ฟเวอร์ซ้ำจะมีการตั้งค่าสถานะ "Recursion Available" (RA) เพื่อระบุว่าคำตอบนั้นได้รับคำตอบอย่างแท้จริง ตรงกันข้ามเผด็จการเซิร์ฟเวอร์จะไม่ได้ตั้งธง RA

IMHO เป็นทางเลือกที่ดีของคำศัพท์

สำหรับสิ่งที่คุ้มค่าแผนภาพแรกที่คุณพบนั้นไม่ถูกต้อง เซิร์ฟเวอร์รูทไม่ได้ทำการสืบค้นไปยังเซิร์ฟเวอร์อื่นพวกเขาจะออกการอ้างอิงไปยังเซิร์ฟเวอร์อื่นเท่านั้น


4

เท่าที่ฉันเข้าใจ "การค้นหาแบบเรียกซ้ำ" นั้นมาจากมุมมองของผู้เริ่มต้นเท่านั้น ดังนั้นหากมันถามเซิร์ฟเวอร์ DNS และได้รับคำตอบที่ถูกต้องแล้วก็เป็น "แบบสอบถามแบบเรียกซ้ำ" หากเซิร์ฟเวอร์นั้นกลับมาซ้ำหรือการค้นหาซ้ำแล้วซ้ำอีกก็ไม่ใช่สิ่งที่ผู้สนใจดั้งเดิมต้องใส่ใจ


1

แผนภาพแรกในสองคำถามของคุณไม่ถูกต้อง เซิร์ฟเวอร์หลักจะไม่ส่งข้อความค้นหาไปยังเซิร์ฟเวอร์อื่น หากเซิร์ฟเวอร์รูทได้ทำการส่งต่อข้อความค้นหาตามที่แสดงในแผนภาพระบบ DNS จะมีความเสี่ยงต่อการโจมตี DoS มากกว่าที่เป็นจริง

ไดอะแกรมที่สองนั้นส่วนใหญ่ถูกต้อง แต่ง่ายเกินไปที่จะแสดงให้คุณเห็นถึงลักษณะซ้ำ ๆ ของการค้นหา แผนภาพยังมีรายละเอียดเพียงพอแม้ว่าเราสามารถชี้ให้เห็นว่าการเรียกซ้ำเกิดขึ้นที่ไหน

เซิร์ฟเวอร์ DNS ที่อยู่ถัดจากหมายเลข12ที่ระบุPreferred DNS serverจะเป็นที่ที่เกิดการสอบถามซ้ำ คำว่าเซิร์ฟเวอร์ DNS ที่ต้องการไม่ใช่คำศัพท์มาตรฐาน เซิร์ฟเวอร์นั้นมักจะถูกเรียกว่าแคช DNS recursorหรือตัวย่อของมัน

เมื่อดูที่การรับส่งข้อมูลเครือข่ายมันจะซ้ำซ้อนแน่นอน การเรียกซ้ำนั้นอยู่ภายในตัวเรียกคืน DNS ทั้งหมด หากคุณดูการใช้งานตัวเรียกคืน DNS คุณจะพบโครงสร้างแบบเรียกซ้ำบางส่วนในวิธีการจัดการคำขอ

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

เหตุผลที่จำเป็นต้องมีการสอบถามซ้ำเกิดจากวิธีการอ้างอิงระหว่างเซิร์ฟเวอร์ DNS ที่เชื่อถือได้ถูกนำไปใช้ นี่คือตัวอย่างที่ดีที่สุด ในแผนภาพที่คุณเห็นเซิร์ฟเวอร์ DNS ที่มีสิทธิ์สำหรับการmicrosoft.comชี้ไปที่เซิร์ฟเวอร์ DNS example.microsoft.comที่มีสิทธิ์สำหรับ สิ่งนี้ทำโดยใช้NSบันทึกที่ชี้ไปที่ชื่อโฮสต์ ดังนั้นสำหรับตัวอย่างเช่นเซิร์ฟเวอร์สิทธิ์สำหรับmicrosoft.comสามารถบอก recursor DNS ที่มีสิทธิ์สำหรับms.example.netexample.microsoft.com

ณ จุดนั้นผู้เรียกคืน DNS จะต้องแก้ไขms.example.netก่อนที่จะสามารถดำเนินการแก้ไขปัญหาexample.microsoft.comต่อไปได้

เพื่อแก้ไขชื่อโฮสต์หนึ่งชื่อก่อนอื่นต้องแก้ไขชื่อโฮสต์อื่น นั่นคือการสอบถามซ้ำ เพื่อให้สิ่งนี้ไม่นำไปสู่การเรียกซ้ำแบบไม่สิ้นสุด DNS มีเรคคอร์ดกาวซึ่งส่งไปพร้อมกับNSเรคคอร์ดในบางกรณี


มีข้อผิดพลาดมากมายในเรื่องนี้ การใช้คำว่า "การเรียกซ้ำ" นั้นไม่เกี่ยวข้องกับการใช้ "การเรียกใช้ฟังก์ชันแบบเรียกซ้ำ" - คำตอบของ Vatine นั้นใกล้กว่า - การเรียกซ้ำนั้นเป็นเพียงชื่อ (เลือกไม่ดี) เมื่อลูกค้าถามเซิร์ฟเวอร์เพื่อรับคำตอบที่ถูกแก้ไขทั้งหมด กลไกที่ใช้โดยเรียกว่า "เซิร์ฟเวอร์ recursive" เรียกว่าจริงซ้ำ นอกจากนี้บันทึกกาวและไม่ได้เพื่อป้องกันไม่ให้ "recursion อนันต์" - พวกเขาจะมีการป้องกันไม่ให้ "ไก่และไข่" ปัญหาของวิธีการที่คุณหาที่อยู่ของเซิร์ฟเวอร์ถ้าเซิร์ฟเวอร์เหล่านั้นภายในพื้นที่โดเมนที่ได้รับมอบของ
Alnitak

@Alnitak การแก้ไข DNS จะเรียกซ้ำโดยเนื้อแท้ อัลกอริทึมแบบเรียกซ้ำใด ๆ สามารถเปลี่ยนเป็นสิ่งที่ซ้ำได้โดยเปลี่ยนกองการดำเนินการให้เป็นโครงสร้างข้อมูลที่แตกต่างกัน ความเป็นไปได้นั้นได้ถูกกล่าวถึงแล้วในคำตอบของฉัน และปัญหาการพึ่งพารอบที่คุณพูดถึงนั้นไม่แตกต่างจากการเรียกซ้ำแบบไม่สิ้นสุด ทั้งสองเป็นสิ่งเดียวกัน หากคุณต้องใช้อัลกอริธึมการเรียกซ้ำแบบไร้เดียงสาโดยไม่สังเกตว่างานต้นแบบนั้นได้รับความเดือดร้อนจากการพึ่งพาแบบวนซ้ำผลลัพธ์จะเป็นการเรียกซ้ำแบบไม่สิ้นสุด
kasperd

@Alnitak คุณไม่สามารถกำจัดการเรียกซ้ำและดำเนินการแก้ไข DNS ซ้ำ ๆ เพื่อติดตามชื่อ DNS จำนวนคงที่ในแต่ละครั้ง คุณสามารถแสดงสแต็กการเรียกซ้ำด้วยโครงสร้างข้อมูลที่ดูแตกต่างกัน แต่มันยังคงเรียกซ้ำโดยเนื้อแท้ เป็นไปได้ที่จะกำหนดค่าชื่อโดเมนในแบบที่จะทำให้ความลึกของการเรียกซ้ำเป็นหนึ่งเดียว แต่ไม่ใช่ว่าทุกชื่อโดเมนจะได้รับการกำหนดค่าด้วยวิธีนี้
kasperd

ฉันอ้างอิง RFC 1034 - "" วิธีการทั่วไปสองวิธีในการจัดการกับปัญหานี้คือ "เรียกซ้ำ" ซึ่งเซิร์ฟเวอร์แรกทำการสืบค้นแบบสอบถามสำหรับไคลเอนต์ที่เซิร์ฟเวอร์อื่นและ "ซ้ำ" ซึ่งเซิร์ฟเวอร์อ้างอิงลูกค้าไปยังอีก เซิร์ฟเวอร์และอนุญาตให้ไคลเอนต์ทำการสืบค้นได้ "" ไม่มีส่วนเกี่ยวข้องกับ "สแต็ก" หรือ "โครงสร้างข้อมูล"
Alnitak

@Alnitak ย่อหน้านั้นอ้างถึงการเรียกซ้ำแบบอื่นที่ไม่ใช่คำตอบของฉัน การสอบถามซ้ำที่กล่าวถึงในคำตอบของฉันคือ (ตามที่ระบุไว้อย่างชัดเจนในคำตอบของฉัน) ภายในเซิร์ฟเวอร์ DNS หนึ่งที่เฉพาะเจาะจง หากคุณพยายามใช้การเรียกซ้ำ DNS ในแบบวนซ้ำโดยสิ้นเชิงมันจะไม่ทำงาน ทันทีที่คุณได้รับการตอบกลับด้วยระเบียน NS ที่ไม่มีกาวที่เกี่ยวข้องคุณจะต้องค้นหาที่อยู่ IP ของชื่อโฮสต์ที่ชี้ไปที่ระเบียน NS นั้นก่อนที่คุณจะสามารถดำเนินการแก้ไขต่อไปได้
kasperd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.