वास्तव में rpcbind क्या करता है?


39

प्रलेखन के अनुसार:

आरपीसीबीइंड [3] यूटिलिटी मैप्स पर आरपीसी सेवाओं को मैप करती है, जिस पर वे सुनते हैं। RPC प्रक्रिया आरपीसीबीइंड को सूचित करती है जब वे शुरू करते हैं, उन बंदरगाहों को पंजीकृत करते हैं जो वे सुन रहे हैं और आरपीसी प्रोग्राम नंबर जो वे सेवा करने की उम्मीद करते हैं। क्लाइंट सिस्टम तब एक विशेष RPC प्रोग्राम नंबर के साथ सर्वर पर rpcbind से संपर्क करता है। Rpcbind सेवा क्लाइंट को उचित पोर्ट नंबर पर पुनर्निर्देशित करती है ताकि वह अनुरोधित सेवा से संवाद कर सके

इसका परीक्षण करने के लिए, मैंने एक एनएफएस सर्वर और क्लाइंट की स्थापना की और उनके बीच यातायात की निगरानी की। मैंने जो देखा उससे क्लाइंट को पहले से ही पता था कि सर्वर पर NFS सेवा 2049 पोर्ट पर सुन रही थी।

तो जब rcpbind खेल में आता है? जब मैं rpcinfoसर्वर पर करता हूं, तो मुझे निम्नलिखित मिलते हैं:

100003    2    udp       0.0.0.0.8.1            nfs        superuser
100003    3    udp       0.0.0.0.8.1            nfs        superuser
100003    2    udp6      ::.8.1                 nfs        superuser
100003    3    udp6      ::.8.1                 nfs        superuser
100003    2    tcp       0.0.0.0.8.1            nfs        superuser
100003    3    tcp       0.0.0.0.8.1            nfs        superuser
100003    2    tcp6      ::.8.1                 nfs        superuser
100003    3    tcp6      ::.8.1                 nfs        superuser

0.0.0.0.8.1इस मामले में क्या मतलब है? और यह 2049 को कैसे पोर्ट करता है?

जवाबों:


23

rpcbindBIND का करीबी एनालॉग है, या वास्तव में, कोई DNS सर्वर है। यदि मैं सही ढंग से याद करता हूं, तो आप आरपीसी इंटरफ़ेस के घोषणा को सर्वर और क्लाइंट स्टब कोड के साथ संकलित करने पर चुनते हैं या आपको एक प्रोटोकॉल नंबर दिया जाता है rpcgen

जब कोई क्लाइंट किसी विशेष होस्ट पर दिए गए इंटरफ़ेस के लिए साइन अप करता है, तो आमतौर पर एक clnt_create()कॉल के साथ , स्टब कोड rpcbindउस होस्ट पर एक प्रश्न पूछता है, "यूडीपी या टीसीपी पोर्ट पर प्रोटोकॉल नंबर एक्स सुन रहा है?" rpcbindअधिकांश अन्य ONC सेवाओं के विपरीत, TCP और UDP पोर्ट 111 पर सुनता है, इसलिए एक होस्ट नाम या आईपी एड्रेस दिया जाता है, एक प्रोग्राम सिर्फ rpcbindउस होस्ट या आईपी पते पर पूछ सकता है । rpcbindउचित पोर्ट नंबर के साथ प्रतिक्रिया करता है, अगर एक सर्वर ने उस होस्ट पर इसके साथ पंजीकरण किया है। यह पंजीकरण सर्वर प्रक्रिया द्वारा किया जाता है जब यह कॉल करता है svc_create()

आपके उदाहरण में, NFS के लिए 100003 प्रोटोकॉल नंबर है। कुछ प्रक्रिया (तों) ने rpcbindअपना प्रोटोकॉल नंबर (100003) और जो भी टीसीपी या यूडीपी पोर्ट अर्जित किया है, के साथ पंजीकृत किया है। यह rpcbindसही रूप से उस पोर्ट नंबर, 2049 को आपके मामले में सही ढंग से देने के लिए है, "प्रोटोकॉल नंबर 100003 के लिए मुझे किस पोर्ट का उपयोग करना चाहिए"।

अब हम अजीब क्षेत्र में आ रहे हैं। "0.0.0.0.8.1" rpcinfoआउटपुट के "पता" कॉलम में है। चूंकि यह एनएफएस सर्वर प्रक्रिया का "सार्वभौमिक पता" है, इसलिए मैं शर्त लगाता हूं कि "0.0.0.0" उपसर्ग आईपी पता है (इस मामले में INADDR_ANY) कि bind()पोर्ट नंबर मिलने पर सिस्टम कॉल में उपयोग किया जाने वाला सर्वर । मुझे यकीन नहीं है कि "8.1" प्रत्यय क्या है, लेकिन rpcinfoआउटपुट को देखते हुए, यह एनएफएस सर्वर के साथ मूल रूप से कर्नेल थ्रेड होने के साथ कुछ करना है।


मेरे मामले में सबसे बड़ा मुद्दा यह था कि जब मैं नेटवर्क ट्रैफ़िक की निगरानी कर रहा था तब क्लाइंट द्वारा सर्वर पर rcpbind करने के लिए एक क्वेरी नहीं देखी गई थी। क्या आप जानते हैं कि पोर्ट नंबर के लिए यह क्वेरी कब होती है?
शिवडॉटरेन्डर

@SivaDotRender - मैं 100% निश्चित नहीं हूं, लेकिन मेरा मानना ​​है कि जब क्लाइंट कोड प्रोटोकॉल और होस्ट के लिए हैंडल पाने के लिए clnt_create () कहता है। यह संभवतः यूडीपी के माध्यम से किया जाएगा, जब तक कि आप टीसीपी का उपयोग करने के लिए पूरी चीज सेट नहीं करते हैं।
ब्रूस एडगर

29
"8.1" पोर्ट नंबर की दो बाइट्स है। 2049 = (8 * 256) + 1.
केनस्टर

कृपया "कार्यक्रम संख्या" शब्द से चिपके रहें। जैसा कि मैन पेज करता है
炸鱼 德里克 page
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.