लोकलहोस्ट या वास्तविक होस्टनाम (वास्तविक आईपी)


2

मान लीजिए कि मुझे एक ही होस्ट पर एक सेवाओं से दूसरे में डेटा भेजने की आवश्यकता है। इसके लिए मैं लोकलहोस्ट का उपयोग कर सकता हूं : पोर्ट या real.domain.name:port (लगता है कि यह कैश किया गया है या स्थानीय डीएनएस द्वारा हल किया जा सकता है)। मुझे यकीन है कि इंटरफ़ेस पर कम देरी के कारण लोकलहोस्ट: पोर्ट का उपयोग करना बेहतर है lo। क्या यह सही है ?


यदि मैं व्यक्तिगत रूप से उपयोग करता हूं ::1क्योंकि यह लिखना कम है।
kasperd

जवाबों:


3

आम तौर पर, नहीं। लिनक्स में यह तभी सही हो सकता है जब विशिष्ट सॉफ्टवेयर इस स्थिति का पता लगाता है और यूनिक्स सॉकेट (जैसे mysql do, afaik) पर स्विच करता है।

अन्यथा, ये पैकेट बिल्कुल उसी रास्ते से गुजरेंगे। लो एड्रेस (127.0.0.1) और अन्य स्थानीय पते 'लोकल' राउटिंग टेबल में जोड़े जाते हैं (आप इसे 'आईपी रूट व्यू टेबल लोकल' के साथ देख सकते हैं)। इस संबंध में वे सभी समान हैं।

मेरे शब्दों को समझने के लिए, आइए सरल प्रोग्राम का प्रयास करें (tcl में, जो tcp सर्वर लिखने के लिए सबसे सरल भाषा है)। (अपने आप से प्रयास करने के लिए, उन्हें फ़ाइलों में सहेजें और 'tclsh filename.tcl' के साथ चलाएँ)

सर्वर:

proc accept {chan addr port} {           ;# Make a proc to accept connections
    #puts "$addr:$port says [gets $chan]" ;# Receive a string
    puts $chan goodbye                   ;# Send a string
    close $chan                          ;# Close the socket (automatically flushes)
}                                        ;#
socket -server accept 12345              ;# Create a server socket
vwait forever

ग्राहक:

set start [clock seconds]
puts $start
for {set i 0} {$i < 1000000} {incr i} {
    set chan [socket 192.168.7.121 12345]         ;# Open the connection
    puts $chan hello                         ;# Send a string
    flush $chan                              ;# Flush the output buffer
    #puts "127.0.0.1:12345 says [gets $chan]"  ;# Receive a string
    close $chan                              ;# Close the socket
}
set ends [clock seconds]
puts $ends
puts [expr $ends-$start]

बेंचमार्क: जब मैं 127.0.0.1 के साथ दौड़ता हूं, तो 1000000 चक्रों को 35 सेकंड लगते हैं।

जब मैं 192.168.7.121 (मेरे लैपटॉप वलान इंटरफेस का पता, मैं इसे 'सॉकेट एड्रेस पोर्ट' क्लॉज में निर्दिष्ट करता हूं) के साथ चलाता हूं: 37 सेकंड का समय लगा। यह अंतर वास्तव में एक मार्जिन से ज्यादा कुछ नहीं है।

तो, नहीं, आप fqdn और अन्य आईपी पते का उपयोग करने की तुलना में लोकलहोस्ट को टीसीपी का उपयोग करने पर कुछ भी हासिल नहीं करेंगे। स्थानीयता से वास्तव में लाभ उठाने के लिए आपको यूनिक्स डोमेन सॉकेट (AF_UNIX परिवार) का उपयोग करना होगा, यह वास्तव में बहुत तेज है कि tcp।

एक ऐसा मामला है जब आपको स्थानीय पते का उपयोग करना है, न कि लोकलहोस्ट का। वह मामला तब है जब आप केर्बरोस को कॉन्फ़िगर करते हैं। यह वास्तव में गति के बारे में नहीं है, मैंने केवल यह एक उदाहरण देने के लिए कहा था जहां आप लोकलहोस्ट का उपयोग नहीं कर सकते।


2

यदि आपका प्रश्न 127.0.0.1 बनाम, 192.168.0.5 (या कुछ अन्य स्थानीय आईपी पते जो आपके सर्वर को होस्ट करता है) का प्रदर्शन है, तो प्रदर्शन काफी हद तक समान होगा क्योंकि नेटवर्क स्टैक इसकी एआरपी तालिका की जांच करेगा कि कहां से पता करें पैकेट भेजें, ध्यान दें कि यह एक स्थानीय पता है और इसे स्थानीय रूप से वितरित करें। यह एनआईसी कार्ड ड्राइवर पर कभी नहीं आएगा और एनआईसी कार्ड ड्राइवर द्वारा उपयोग किए जाने वाले किसी भी सीपीयू चक्र का कारण होगा। सभी पर एकमात्र प्रदर्शन प्रभाव किसी भी iptables नियम होंगे जो केवल अन्य स्थानीय पते पर लागू होते हैं और 127.0.0.1 पर नहीं।

यदि आप वास्तव में real.domain.name का उपयोग करना चाहते हैं और इसे 127.0.0.1 पर इंगित करते हैं, तो अपने लोकलहोस्ट के / etc / होस्ट फ़ाइल को संशोधित करें:

127.0.0.1 localhost localhost.localdomain real.domain.name

फिर कोई DNS लुकअप शामिल नहीं है (जाँच / आदि / होस्ट बहुत तेज़ है)। यह भी अनुमति देता है, अगर real.domain.name किसी अन्य होस्ट पर ले जाता है, इसे / etc / मेजबान से हटाने के लिए और किसी भी तरह से आपके एप्लिकेशन के कॉन्फ़िगरेशन को बदलने के बिना (अब रिमोट) होस्ट का उपयोग करें।


0

यदि आप एक ही होस्ट पर एक स्थानीय सेवा से कनेक्ट कर रहे हैं, तो हमेशा एक लोकलहोस्ट एड्रेस का उपयोग करें न कि आईपी एड्रेस, होस्टनाम या एफक्यूडीएन। ये तीनों आपके वातावरण में बदल सकते हैं और हमेशा यह गारंटी नहीं देते हैं कि आप सेवा से जुड़ सकते हैं, और अतिरिक्त नेटवर्क निर्भरता जैसे और DNS रिज़ॉल्यूशन भी हैं।


मैं लाभ के बारे में समझता हूं। लेकिन मैं उत्सुक हूं कि अधिक उत्पादक क्या है।
ipeacocks 20

@ipeacocks - यह तब और अधिक उत्पादक के माप पर निर्भर करता है। यदि आप सिस्टम की अधिक स्थिरता की तलाश कर रहे हैं, तो लोकलहोस्ट डोमेन नाम का उपयोग करने से बेहतर है। यदि आप अधिक प्रदर्शन की तलाश में हैं, तो निकिता का उत्तर यूनिक्स सॉकेट्स का उपयोग करने का तरीका है जो टीसीपी स्टैक को भी नहीं छूता है।
वृंदपार्क

0

मान लें कि आपके पास स्थानीय DNS कैश है, तो मैं डोमेन नाम का उपयोग करूंगा, न कि लोकलहोस्ट।

इस तरह यदि आप अपनी सेवा को किसी अन्य होस्ट पर ले जाते हैं, तो भी यह काम करेगा, जबकि लोकलहोस्ट हमेशा आपके स्थानीय मशीन पर अटका रहेगा।

इस प्रविष्टि के लिए लंबे समय से DNS ttl का होना आपको DNS अंतराल से दूर रखेगा (जो आपके पर्यावरण के आधार पर महत्वपूर्ण नहीं हो सकता है)।

स्थानीय आईपी का उपयोग करना तेज होगा, चाहे वह लो इंटरफेस पर स्थित हो या न हो।

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