ঠিক কী আরপিসিবাইন্ড করে?


39

ডকুমেন্টেশন অনুযায়ী:

Rpcbind [3] ইউটিলিটি আরপিসি পরিষেবাদিগুলি যে পোর্টগুলিতে তারা শুনে থাকে তাতে মানচিত্র করে। আরপিসি প্রক্রিয়াগুলি আরপিসিবাইন্ডকে সূচনা করে যখন তারা শুরু করবে, পোর্টগুলি যেগুলি তারা শুনছে এবং নিবন্ধভুক্ত RPC প্রোগ্রাম নম্বরগুলি রেজিস্টার করে যা তারা পরিবেশন করার প্রত্যাশা করে। ক্লায়েন্ট সিস্টেমটি তখন সার্ভারে একটি নির্দিষ্ট আরপিসি প্রোগ্রাম নম্বর দিয়ে আরপিসিবাইন্ডের সাথে যোগাযোগ করে। আরপিসিবাইন্ড পরিষেবা ক্লায়েন্টকে যথাযথ পোর্ট নম্বরটিতে পুনঃনির্দেশ করে যাতে এটি অনুরোধ করা পরিষেবার সাথে যোগাযোগ করতে পারে

এটি পরীক্ষা করার জন্য, আমি একটি এনএফএস সার্ভার এবং ক্লায়েন্ট সেট আপ করেছি এবং তাদের মধ্যে ট্র্যাফিক নিরীক্ষণ করেছি। আমি যা দেখেছি তা থেকে ক্লায়েন্টটি ইতিমধ্যে জানত যে সার্ভারে থাকা এনএফএস পরিষেবা 2049 পোর্টে শুনছে।

তো আরসিপিবাইন্ড কখন খেলায় আসে? আমি যখন 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 বা সত্যই, যে কোনও ডিএনএস সার্ভারের একটি নিকটতম এনালগ। যদি আমি সঠিকভাবে স্মরণ করি, আপনি আরপিসি ইন্টারফেসের ঘোষণাটি সার্ভার এবং ক্লায়েন্ট স্টাব কোড দিয়ে সংকলন করার সময় আপনি একটি প্রোটোকল নম্বর চয়ন করেন বা দেওয়া হয় rpcgen

যখন কোনও ক্লায়েন্ট একটি নির্দিষ্ট হোস্টে প্রদত্ত ইন্টারফেসের জন্য, সাধারণত একটি clnt_create()কল দিয়ে সাইন আপ করে , তখন স্টাব কোড সেই হোস্টটিতে rpcbindএকটি প্রশ্ন জিজ্ঞাসা করে, "ইউডিপি বা টিসিপি পোর্ট প্রোটোকল নম্বর X কী শুনছে?" rpcbindঅন্যান্য বেশিরভাগ ওএনসি পরিষেবাদির বিপরীতে, টিসিপি এবং ইউডিপি পোর্ট 111 শুনে, তাই হোস্টের নাম বা আইপি ঠিকানা দেওয়া হলে কোনও প্রোগ্রাম কেবল rpcbindসেই হোস্ট বা আইপি ঠিকানায় জানতে চাইতে পারে । rpcbindযদি কোনও সার্ভার সেই হোস্টটিতে এটি নিবন্ধভুক্ত করে থাকে তবে উপযুক্ত পোর্ট নম্বর সহ প্রতিক্রিয়া জানায়। এই রেজিস্ট্রেশনটি কল করার সময় সার্ভার প্রক্রিয়া দ্বারা সম্পন্ন হয় svc_create()

আপনার উদাহরণ হিসাবে, 100003 হ'ল এনএফএসের প্রোটোকল নম্বর। কিছু প্রসেস (এস) rpcbindতাদের প্রোটোকল নম্বর (100003) দিয়ে এবং তারা যে টিসিপি বা ইউডিপি বন্দরটি কিনেছে তা দিয়ে নিবন্ধভুক্ত করেছে। এটা তোলে আপ rpcbindসঠিকভাবে আউট যে পোর্ট নম্বর, 2049 আপনার ক্ষেত্রে, এটি উপর কোনো কলে "কি বন্দর আমি প্রোটোকল সংখ্যা 100003 জন্য ব্যবহার করা উচিত" জন্য দেব।

এখন আমরা অযৌক্তিক অঞ্চলে .ুকছি। "0.0.0.0.8.1" আউটপুটটির "ঠিকানা" কলামে রয়েছে rpcinfo। যেহেতু এটি এনএফএস সার্ভার প্রক্রিয়ার "সার্বজনীন ঠিকানা", তাই আমি "0.0.0.0" উপসর্গটি হ'ল এই আইপি ঠিকানাটি (এই ক্ষেত্রে INADDR_ANY) যা bind()কোনও পোর্ট নম্বর পাওয়ার সময় সার্ভার সিস্টেম কলে ব্যবহৃত হত । "8.1" প্রত্যয়টি কী তা আমি নিশ্চিত নই, তবে rpcinfoআউটপুটটির দিকে তাকালে এটির মূলত একটি কার্নেল থ্রেড হওয়া এনএফএস সার্ভারের সাথে কিছু করার দরকার আছে।


আমার ক্ষেত্রে সবচেয়ে বড় সমস্যাটি হ'ল আমি যখন নেটওয়ার্ক ট্র্যাফিকটি নিরীক্ষণ করছিলাম তখন ক্লায়েন্টের দ্বারা সার্ভারে আরসিপিবাইন্ডের কোনও জিজ্ঞাসা II দেখেনি। আপনি কি জানেন যে বন্দর নম্বরটির এই কোয়েরিটি কখন ঘটে?
শিভাডোটরেন্ডার

@ সিভাডোটরেন্ডার - আমি 100% নির্দিষ্ট নই, তবে আমি বিশ্বাস করি যখন ক্লায়েন্ট কোড ক্লন্ট_ক্রিয়েট () প্রোটোকল এবং হোস্টের জন্য একটি হ্যান্ডেল পেতে কল করে। আপনি টিসিপি ব্যবহারের জন্য পুরো জিনিসটি সেট আপ না করে এটি সম্ভবত ইউডিপি এর মাধ্যমে সম্পন্ন করা হবে।
ব্রুস এডিগার

29
"8.1" হ'ল বন্দর সংখ্যাটির দুটি বাইট। 2049 = (8 * 256) + 1.
কেনটস্টার

দয়া করে "প্রোগ্রাম নাম" শব্দটি আটকে দিন। ম্যান পেজ যেমন করে
薯条
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.