আসুন দ্রুত ডিভাইস ফাইলগুলি পর্যালোচনা করুন: লিনাক্সে, অ্যাপ্লিকেশন প্রোগ্রামগুলি রেড যোগাযোগ করে এবং ফাইল বর্ণনাকারীর মাধ্যমে কার্নেলে অপারেশন লেখেন । এটি ফাইলগুলির পক্ষে দুর্দান্ত কাজ করে এবং দেখা গেল যে একই চরিত্রের ডিভাইসগুলি যা অক্ষরের স্ট্রিম উত্পাদন করে এবং গ্রাহ্য করে, এবং এলোমেলো অ্যাক্সেস ঠিকানায় স্থির আকারের ব্লকগুলি পড়তে এবং লেখার জন্য ডিভাইসগুলি ব্লক করে, কেবল এই ভান করে ফাইল হয়।
তবে সেই ডিভাইসগুলি কনফিগার করার জন্য একটি উপায় প্রয়োজন ছিল (বাড রেট সেট করুন) এবং তার জন্য, আইওএসটিএল কলটি আবিষ্কার করা হয়েছিল। এটি কেবল একটি ডেটা স্ট্রাকচার পাস যা ডিভাইসের সাথে সুনির্দিষ্ট এবং কার্নেলের সাথে ব্যবহৃত আই / ও নিয়ন্ত্রণের ধরণের ক্ষেত্রে পাস করে এবং একই ডেটা কাঠামোতে ফলাফলগুলি ফিরে পায়, সুতরাং এটি একটি খুব জেনেরিক এক্সটেনসিবল এপিআই এবং প্রচুর জিনিসের জন্য ব্যবহার করা যেতে পারে ।
এখন, নেটওয়ার্ক অপারেশনগুলি কীভাবে মাপসই হয়? সাধারণত নেটওয়ার্ক সার্ভারের আবেদন করতে চায় বাঁধে কিছু নেটওয়ার্ক ঠিকানায়, শুনতে (যেমন HTTP এর জন্য 80, বা 22 জন্য SSH) একটি নির্দিষ্ট পোর্টে, এবং যদি একটি ক্লায়েন্ট সংযোগ স্থাপন করে , এটা করতে চায় পাঠাতে ডেটা এবং গ্রহণ এই ক্লায়েন্ট থেকে তথ্য। এবং ক্লায়েন্ট জন্য দ্বৈত অপারেশন।
ফাইল অপারেশনগুলির সাথে এটি কীভাবে ফিট করা যায় তা স্পষ্ট নয় (যদিও এটি করা যায়, প্ল্যান 9 দেখুন ), ইউনিক্স ডিজাইনাররা একটি নতুন এপিআই আবিষ্কার করেছেন: সকেট । আপনি এর জন্য অধ্যায় 2 man পৃষ্ঠা ইন বিশদ জানতে পারেন socket
, bind
, listen
, connect
, send
এবং recv
। নোট করুন যে এটি আই / ও এপিআই ফাইল থেকে পৃথক হওয়ার socket
পরেও কলটি একটি ফাইল বর্ণনাকারীও ফিরিয়ে দেয়। ওয়েবে সকেট কীভাবে ব্যবহার করতে হয় সে সম্পর্কে অসংখ্য টিউটোরিয়াল রয়েছে, গুগল।
এখন পর্যন্ত এটি সমস্ত খাঁটি ইউএনআইএক্স, সকেট উদ্ভাবনের সময় কেউই নেটওয়ার্ক ইন্টারফেসের বিষয়ে কথা বলছিল না। এবং এই এপিআইটি সত্যই পুরানো হওয়ায় এটি ইন্টারনেট প্রোটোকলের বাইরে ধরণের বিভিন্ন নেটওয়ার্ক প্রোটোকলের জন্য সংজ্ঞায়িত হয়েছে ( AF_*
ধ্রুবকগুলি দেখুন), যদিও এর মধ্যে কয়েকটি লিনাক্সেই সমর্থিত।
কম্পিউটারগুলি একাধিক নেটওয়ার্ক কার্ড পেতে শুরু করার সাথে সাথে এর জন্য কিছু বিমূর্ততা প্রয়োজন। লিনাক্স-এ, এটি হল নেটওয়ার্ক ইন্টারফেস (এনআই)। এটি কেবলমাত্র এক টুকরো হার্ডওয়ারের জন্যই নয়, বিভিন্ন টানেলের ক্ষেত্রেও ব্যবহারকারীর অ্যাপ্লিকেশনটি সেই সার্ভারটিকে ওপেনভিপিএন ইত্যাদির মতো টানেল হিসাবে চিহ্নিত করে explained একই পদ্ধতিতে, নেটওয়ার্ক ইন্টারফেসগুলি ফাইল সিস্টেমে প্রদর্শিত হয় না। যাইহোক, এনআইগুলি ফাইল সিস্টেম /proc
এবং /sys
সেইসাথে অন্যান্য নেটওয়ার্কিং টিউনেবলগুলির মধ্যে উপলব্ধ করা হয় ।
একটি এনআই হ'ল নেটওয়ার্ক প্যাকেটগুলি প্রবেশ করিয়ে কার্নেলটি ছেড়ে যায় এমন একটি এন্ডপয়েন্টের কর্নেল বিমূর্ততা সাধারণ। অন্যদিকে সকেটগুলি অ্যাপ্লিকেশনগুলির সাথে প্যাকেটগুলি যোগাযোগ করতে ব্যবহৃত হয়। কোনও পকেটের প্রক্রিয়াজাতকরণের সাথে কোনও সকেট জড়িত হওয়ার দরকার নেই। উদাহরণস্বরূপ, যখন ফরওয়ার্ডিং সক্ষম থাকে, তখন একটি প্যাকেট একটি এনআইতে প্রবেশ করতে পারে এবং অন্যটিতে চলে যেতে পারে। সেই দিক থেকে, সকেট এবং নেটওয়ার্ক ইন্টারফেস সম্পূর্ণ স্বাধীন।
তবে এনআই কনফিগার করার একটি উপায় ছিল, যেমন আপনার ব্লক এবং চরিত্রের ডিভাইসগুলি কনফিগার করার জন্য একটি উপায় প্রয়োজন। এবং যেহেতু সকেটগুলি ইতিমধ্যে একটি ফাইল বর্ণনাকারী ফিরিয়ে দিয়েছে, কেবলমাত্র ioctl
সেই ফাইলের বিবরণীতে কোনওটিকে অনুমতি দেওয়া কিছুটা যৌক্তিক ছিল । এটি আপনার যোগসূত্রযুক্ত নেটদেবাইজ ইন্টারফেস।
একইভাবে সিস্টেম কলগুলির বেশ কয়েকটি অন্যান্য আপত্তি রয়েছে, উদাহরণস্বরূপ প্যাকেট ফিল্টারিং, প্যাকেট ক্যাপচার ইত্যাদি
এই সমস্ত কিছু টুকরো টুকরো হওয়ার পরে বেড়েছে এবং অনেক জায়গায় এটি বিশেষভাবে যৌক্তিক নয়। যদি এটি একবারে ডিজাইন করা হয়ে থাকে তবে একজন সম্ভবত একটি আরও অर्थোগোনাল এপিআই তৈরি করতে পারত।