क्रोमियम DNS को एक मिनट से अधिक समय तक कैश क्यों नहीं करता है?


27

मैं क्रोमियम का उपयोग करता हूं और मुझे उस समय के लिए कैश नहीं होने की समस्या है, जिसकी मुझे उम्मीद है। Example.com डोमेन लें। DNS सेटिंग्स के अनुसार, इस डोमेन को 26151 सेकंड के लिए कैश किया जाना चाहिए:

$ dig example.com

;; ANSWER SECTION:
example.com.        26151   IN  A   93.184.216.34

हालाँकि, जब मैं Chromium में example.com खोलता हूँ और मैं क्रोम खोलता हूँ: // net-internals / # dns तब IP एक मिनट के भीतर भूल जाता है!

यहाँ छवि विवरण दर्ज करें

क्रोमियम डोमेन की DNS सेटिंग के TTL का पालन क्यों नहीं करता है? जब तक वे समाप्त नहीं होते तब तक मैं इसे DNS डेटा को कैश करने के लिए कैसे मजबूर कर सकता हूं?


4
"... इस डोमेन को अन्य 26151 सेकंड के लिए कैश किया जाना चाहिए ..." - नहीं, डोमेन को 26151 सेकंड के लिए कैश किया जा सकता है। डीएनएस कैशिंग अनिवार्य नहीं है।
मार्सेलम mar

जवाबों:


33

क्रोमियम / क्रोम वास्तव में DNS अनुरोधों को एक मिनट से अधिक कैश नहीं करता है।

दिलचस्प है कि कीड़े-क्रोमियम से - अंक 164026 - DNS टीटीएल को अप्रैल 21 2011 से सम्मानित नहीं किया गया

सिस्टम में एकमात्र DNS कैश क्रोम में है और यह TTL का सम्मान नहीं करता है। हमें या तो क्रोम को ठीक करने और / या एक मध्यवर्ती कैश जोड़ने की आवश्यकता है जो TTL को सही ढंग से संभालती है।

4 दिसंबर 2012 के टिकट में जवाब:

HostCache वर्तमान में सभी सकारात्मक परिणामों के लिए TTL = 60s मानता है। एसिंक्रोनस डीएनएस रिसॉल्वर के साथ, हम टीटीएल = अधिकतम (60s, server_reported_ttl) का उपयोग करने की योजना बनाते हैं, अर्थात कम से कम 60s। तर्क कैश प्रदर्शन में सुधार करने के लिए है। (जब एक सीडीएन एनएस टीटीएल = 10-20 प्रदान करता है, और सभी उप-सूत्रों को लाने के लिए 30s + लेता है, तो हमें अक्सर एक पेज लोड के दौरान एक ही होस्टनाम के लिए फिर से क्वेरी करना पड़ता है।)

10 अक्टूबर 2013 को टिकट बंद

CrOS पर क्रोम अतुल्यकालिक DNS रिज़ॉल्वर का उपयोग करता है जो TTL = max (60s,> server_reported_ttl) का सम्मान करता है

मैं इसे WontFix (अप्रचलित / काम करता है) के रूप में बंद कर रहा हूं।

यह वर्षों से एक ज्ञात मुद्दा रहा है; उनका आंतरिक DNS रिज़ॉल्वर DNS रिकॉर्ड के TTL को अनदेखा करता है, और केवल 1 मिनट के लिए DNS अनुरोधों को कैश करता है।

उपयोगकर्ता वर्षों से अनुरोध कर रहे हैं, उस डिफ़ॉल्ट व्यवहार को बदलने के लिए एक सुविधा और Google ने कभी भी एक नहीं बनाया।

अतीत में, आप आंतरिक DNS रिसॉल्वर को निष्क्रिय कर सकते थे chrome://flags, आजकल जो कार्यात्मक रूप से उजागर नहीं होता है।

तो इसे संक्षिप्त करें, यह एक विशेषता है, उदाहरण के लिए यह डिजाइन द्वारा ऐसा करता है।

(मैंने शुरू में लिखा था कि इसे कभी नहीं बदला जा सकता है, जो स्पष्ट रूप से सच नहीं है। वास्तव में निर्धारित व्यक्ति क्रोमियम को पुनः प्राप्त कर सकता है या क्रोम बायनेरी को हैक कर सकता है।)।

इसलिए, एक एडेंडा के रूप में: बहुत सारे प्रलेखित साक्ष्य हैं Google इंजीनियर Chrome / ium में प्राप्त DNS उत्तरों में डिफ़ॉल्ट TTL का सम्मान करने का इरादा नहीं रखते हैं।

से डीएनएस क्वेरी की नकारात्मक कैशिंग (डीएनएस NCACHE)

एक सकारात्मक प्रतिक्रिया कैशिंग के साथ के रूप में एक रिज़ॉल्वर के लिए यह समझदार है कि यह नकारात्मक प्रतिक्रिया को कितनी देर तक कैश करेगा ...

हालांकि यह निहित है कि रिज़ॉल्वर DNS उत्तर की कैशिंग पर अधिकतम सीमा लगा सकता है / होनी चाहिए, Google Chrome पर 1-मिनट की सीमा बहुत कम हो सकती है।

पुनश्च मैंने वास्तव में इस प्रश्न का उत्तर देने के लिए क्रोम आँकड़े प्राप्त करते समय कुछ वर्षों के लिए मुझे बग़ल में रखने का उत्तर खोज लिया है: Chrome: यादृच्छिक DNS नामों के साथ DNS अनुरोध: मैलवेयर?

PPS कोड बोले से, यह स्पष्ट है कि नकारात्मक उत्तर कैश्ड नहीं हैं (TTL = 0)।

से https://chromium.googlesource.com/chromium/src/net/dns/host_resolver_impl.cc

  99 // Default TTL for successful resolutions with ProcTask.
 100 const unsigned kCacheEntryTTLSeconds = 60;
 101 
 102 // Default TTL for unsuccessful resolutions with ProcTask.
 103 const unsigned kNegativeCacheEntryTTLSeconds = 0;
 104 
 105 // Minimum TTL for successful resolutions with DnsTask.
 106 const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;

1518   // Called by ProcTask when it completes.
1519   void OnProcTaskComplete(base::TimeTicks start_time,
1520                           int net_error,
1521                           const AddressList& addr_list) {
1522     DCHECK(is_proc_running());
1523 
1524     if (dns_task_error_ != OK) {
1525       base::TimeDelta duration = base::TimeTicks::Now() - start_time;
1526       if (net_error == OK) {
1527         UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackSuccess", duration);
1528         if ((dns_task_error_ == ERR_NAME_NOT_RESOLVED) &&
1529             ResemblesNetBIOSName(key_.hostname)) {
1530           UmaAsyncDnsResolveStatus(RESOLVE_STATUS_SUSPECT_NETBIOS);
1531         } else {
1532           UmaAsyncDnsResolveStatus(RESOLVE_STATUS_PROC_SUCCESS);
1533         }
1534         base::UmaHistogramSparse("Net.DNS.DnsTask.Errors",
1535                                  std::abs(dns_task_error_));
1536         resolver_->OnDnsTaskResolve(dns_task_error_);
1537       } else {
1538         UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackFail", duration);
1539         UmaAsyncDnsResolveStatus(RESOLVE_STATUS_FAIL);
1540       }
1541     }
1542 
1543     if (ContainsIcannNameCollisionIp(addr_list))
1544       net_error = ERR_ICANN_NAME_COLLISION;
1545 
1546     base::TimeDelta ttl =
                                              # always  0 seconds
1547         base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds);
1548     if (net_error == OK)
                                              # always 60 seconds 
1549       ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds);  
1550 
1551     // Source unknown because the system resolver could have gotten it from a
1552     // hosts file, its own cache, a DNS lookup or somewhere else.
1553     // Don't store the |ttl| in cache since it's not obtained from the server.
1554     CompleteRequests(
1555         MakeCacheEntry(net_error, addr_list, HostCache::Entry::SOURCE_UNKNOWN),
1556         ttl);
1557   }

4
मेरे लिए दिलचस्प है, क्रोम कुछ डोमेन के लिए TTL पर आधारित DNS लुकअप को कैशिंग कर रहा है, उदाहरण के लिए यह डोमेन dougblack.ioइसलिए शायद पूर्ण नियम थोड़े अधिक जटिल हैं। लेकिन सौ में से 99 डोमेन आपके द्वारा वर्णित के अनुसार व्यवहार करते हैं।
the_velour_fog

2
Chrome यादृच्छिक-दिखने वाले DNS अनुरोधों को यह निर्धारित करने के लिए बनाता है कि क्या यह एक नेटवर्क पर है जो सभी DNS अनुरोधों को हाईजैक करता है (जैसे कुछ भुगतान किए गए वायरलेस एक्सेस पॉइंट्स)। इसके अलावा, मुझे लगता है कि कॉन्फ़िगरेशन में आप जिस "टाइमआउट" मूल्य को देख रहे हैं, वह DNS सर्वर के लिए 1 मिनट का टीटीएल नहीं, बल्कि प्रतिक्रिया के लिए 1 सेकंड का टाइमआउट है।
शाम

5
यह दुख की बात है कि क्रोमियम कैश को पूरी तरह खत्म कर देता है। जब भी मैं अपने एनएस पर त्वरित परिवर्तन करता हूं और डीएनएस कैश को फ्लश करता हूं, तो मुझे हमेशा ध्यान रखना होगा कि क्रोम इसे स्वयं भी करता है।
ओले के

1
@ ओकेके: हाँ, मुझे नहीं पता था कि क्रोम का अपना DNS कैश भी है। इस पृष्ठ को इंगित करने के लिए इस पृष्ठ का धन्यवाद ...
मेहरदाद

2
@ ओएलके - मैं थोड़े सहमत हूं, लेकिन साथ ही मैं यह देख सकता हूं कि कहां कमी है ... कहते हैं, 60 सेकंड या तो :), कैश एक अच्छा विचार है (थोड़ा नेटवर्क ट्रैफ़िक बचाने के लिए) और फिर भी राउंड रॉबिन जैसी चीजों की अनुमति देता है dns, आदि को काम करने के लिए
ivanivan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.