กุญแจที่ฉันสังเกตเห็นอยู่ในบิตเดียวว่าต้องการเรียกซ้ำ ตามhttp://www.ietf.org/rfc/rfc1035.txtและ RFC 1035 ที่หน้า 25:
Recursion Desired - this bit may be set in a query and is copied into the response.
If RD is set, it directs the name server to pursue the query recursively.
Recursive query support is optional."
ในตอนแรกฉันไม่คิดว่าบิตนี้เป็นสาเหตุของปัญหาเนื่องจากบางครั้งฉันได้รับการตอบสนองที่ถูกต้องโดยไม่มีชุดบิต (เช่นมี 0 สำหรับการสอบถามซ้ำ) คำอธิบายคือถ้าตัวแก้ไขมีผลแคชมันจะส่งคืนแม้ว่า 0 สำหรับการสอบถามซ้ำ
หลังจากเล่นไปรอบ ๆ ที่บรรทัดคำสั่งฉันจำลองพฤติกรรมของฉันกับ Dig โดยผ่านการตั้งค่าสถานะ "+ norecurse":
$ dig mx google.com @8.8.8.8 +norecurse
; <<>> DiG 9.8.3-P1 <<>> mx google.com @8.8.8.8 +norecurse
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62530
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN MX
;; Query time: 50 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 24 19:52:23 2012
;; MSG SIZE rcvd: 28
ฉันลบ + norecurse และทุกอย่างทำงานได้ดี!
บทเรียน: หากคุณไม่เห็นส่วนคำตอบใด ๆ ต่อคำขอ DNS ของคุณให้ตรวจสอบว่าคุณใช้แบบสอบถามแบบเรียกซ้ำหรือไม่ โอกาสที่คุณจะไม่ได้และไม่มีผลแคชกับตัวแก้ไขของคุณที่คุณกำลังสอบถามดังนั้นคุณจะไม่ได้รับอะไรเลย