DNS प्रोटोकॉल UDP से TCP में कैसे स्विच होता है?


31

इससे पहले कि कोई पूछे: मैंने देखा है जब DNS प्रश्न यूडीपी के बजाय टीसीपी का उपयोग करते हैं? और यह मेरे सवाल का जवाब नहीं है।

मैं सुनता रहता हूं " यदि उत्तर बहुत लंबा है, तो DNS टीसीपी का उपयोग करेगा "। यह स्पष्ट नहीं करता है कि यह कैसे होता है।

तो यहां की स्थिति है: DNS क्लाइंट यूडीपी का उपयोग करके रिकॉर्ड का समाधान करने के लिए कहता है। यूडीपी के लिए यह रिकॉर्ड बहुत लंबा है:

  1. विशिष्ट ऑपकोड के साथ सर्वर जवाब, क्लाइंट स्विच करने के लिए टीसीपी
  2. सर्वर बिल्कुल भी जवाब नहीं देता है, और क्लाइंट टीसीपी पर फिर से कोशिश करता है
  3. सर्वर क्लाइंट के लिए टीसीपी कनेक्शन खोलता है (बेवकूफ, यदि आप एनएटी की गणना करते हैं, लेकिन कौन जानता है?)
  4. ग्राहक किसी भी तरह (?) 'जानता है' कि दी गई क्वेरी को टीसीपी पर चलाया जाना चाहिए ताकि यह पहली जगह में यूडीपी के साथ परेशान न हो
  5. DNS Pixies जादुई रूप से जरूरत पड़ने पर UDP को TCP में बदल देते हैं

मैं उत्तर के लिए पूरे इंटरनेट पर देख रहा हूं, लेकिन बहुत शोर है (ऊपर देखें), और मैं उसके लिए उचित Google क्वेरी नहीं लिख सकता (न ही मैं आरएफसी में जानकारी पा सकता हूं, उस मामले के लिए) ।


1
RFC5966 में मुझे मिल सकता है: "एक रिवाल्वर की दुकान पहले एक यूडीपी क्वेरी भेजती है, लेकिन इसके बजाय एक टीसीपी क्वेरी भेजने के लिए चुनाव करें अगर यह यूडीपी के साथ भेजे गए या नहीं (ईडीएनएस0 के बिना) तो प्रतिक्रिया की उम्मीद करने के लिए अच्छा कारण होगा। ) या अन्य परिचालन कारणों के लिए, विशेष रूप से, अगर यह पहले से ही सर्वर के लिए एक खुला टीसीपी कनेक्शन है। " जब रिसॉल्वर को "उम्मीद" करनी चाहिए कि प्रतिक्रिया को काट दिया जाएगा?
स्टेनटैस्टिक

6
एक स्पष्ट उदाहरण होगा यदि एक ही रिकॉर्ड के लिए पिछले अनुरोध UDP डेटाग्राम में फिट होने के लिए बहुत लंबा था।
डेविड श्वार्ट्ज

1
तो वहाँ एक opcode है जो कहता है कि 'छोटा' है, है ना? और यह तब स्विच करता है - मूल रूप से मैंने जो सोचा था, वह सबसे स्पष्ट समाधान है।
स्टेनटैस्टिक

1
मामला (डी) एक बुद्धिमान विकल्प हो सकता है यदि क्वेरी में कई "प्रश्न" (समाधान करने के लिए पते) हों। यदि आपको 100 पते हल करने की आवश्यकता है, तो आप एक एकल यूडीपी पैकेट में प्रतिक्रिया को फिट करने में सक्षम नहीं होंगे।
मसलक

1
1.और 4.दोनों मोटे तौर पर सही हैं (दोनों में से कौन परिस्थितियों पर निर्भर करता है)।
कैस्परल्ड

जवाबों:


45

क्लाइंट को पहले से पता नहीं है कि प्रतिक्रिया बहुत बड़ी होगी, इसलिए यह यूडीपी के माध्यम से सर्वर को क्वेरी करेगा।
सर्वर यूडीपी के माध्यम से जवाब देगा और जितना संभव हो उतना शामिल होगा और छंटनी की गई हेडर बिट ("टीसी" http://www.networksorcery.com/enp/protocol/dns.htm ) सेट करेगा ।
ग्राहक टीसीपी के माध्यम से अनुरोध को फिर से भेज सकता है और पूर्ण प्रतिक्रिया प्राप्त कर सकता है।

इसे भी देखें: https://tools.ietf.org/html/rfc5966

EDNS0 (DNS 0 के लिए एक्सटेंशन मैकेनिज्म) (नीचे देखें) की अनुपस्थिति में, किसी भी DNS सर्वर के सामान्य व्यवहार को यूडीपी प्रतिक्रिया भेजने की आवश्यकता होती है जो 512-बाइट सीमा से अधिक होगी सर्वर के लिए प्रतिक्रिया को छोटा करना होगा ताकि वह फिट हो जाए उस सीमा के भीतर और फिर प्रतिक्रिया शीर्षलेख में TC ध्वज सेट करें। जब क्लाइंट को इस तरह की प्रतिक्रिया मिलती है, तो यह टीसी ध्वज को एक संकेत के रूप में लेता है कि इसे टीसीपी पर बदले में पुन: प्रयास करना चाहिए।

और: https://www.ietf.org/rfc/rfc2181.txt

और जैसा कि टिप्पणियों में उल्लेख किया गया है, निश्चित रूप से DNS ज़ोन स्थानांतरण हमेशा टीसीपी का उपयोग कर रहे हैं।


2
RFC 5966 यह भी नोट करता है कि टीसीपी का उपयोग हमेशा ज़ोन ट्रांसफ़र के लिए किया जाता है।
मैट नॉर्डहॉफ

@MattNordhoff राइट, यह उल्लेख करने के लिए सही और अच्छा है। यह 'यूडीपी से टीसीपी काम करने के लिए स्विच कैसे करता है?' कोण। लेकिन मैं इसे जवाब में जोड़ दूंगा।
फकर

हालाँकि अगर पहले से ही एक टीसीपी कनेक्शन है तो वह केवल टीसीपी
जिम बी

ओह दिलचस्प है। तो यह यूडीपी में वापस कब आता है?
स्टेनटैस्टिक

@JimB क्या आप इसके बारे में निश्चित हैं? मुझे नहीं लगता कि यह लगातार टीसीपी कनेक्शन खुला रखता है।
बमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.