ইন্টারনেটের টুকিটাকি: লেয়ার ও প্রটোকল
আপনি যে বাড়িতে থাকেন সেটা কি দিয়ে তৈরী সেটাই যদি না জানেন তাহলে লজ্জার ব্যাপার না? এটা ঠিক যে সেই বাড়িতে বাস করতে হলে আপনার বাড়ির বিল্ডিং ম্যাটেরিয়াল নিয়ে মাথা না ঘামালেও চলে। এখন আপনি এই আর্টিকেল পড়ছেন মানে আপনি অন্তত টুকটাক হলেও কিছুটা প্রোগ্রামিং করেন। ওয়েব, মোবাইল ইত্যাদি ইত্যাদি যে স্ট্যাকেই কাজ করুন না কেন, ইন্টারনেট ছাড়া সবই অচল। তাই ইন্টারনেট কিভাবে কাজ করে সে ব্যাপারে অন্তত বেসিক জিনিসগুলো না জানাটা মেনে নেয়া যায় না। তাই ইন্টারনেট নিয়ে গত কিছুদিন ঘাটাঘাটি করে যা জানলাম আর আগে যা জানতাম তা মিলিয়ে একটা আর্টিকেল লেখার এই প্রয়াস। (আসলে মুলত সকেট প্রোগ্রামিং শিখতে গেসিলাম। আরো অনেক কিছু এসে গেল।)
এটা অবশ্যই আমি নিজে যা জানি বা বুঝি শেয়ার করার প্রচেষ্টা। ভুল থাকলে ধরিয়ে দেয়ার অনুরোধ রইল।
ইন্টারনেট
ইন্টারনেটে আমার যাই করি না কেন, মূলত যা করি তা হল ডেটা ট্রান্সফার। এই ডেটাগুলো ট্রান্সফার করার আগে ক্ষুদ্র ক্ষুদ্র প্যাকেটে পরিণত করা হয়। প্রতিটি প্যাকেটে থাকে ডেটা আর কিছু হেডার। একেকটা প্যাকেটকে খামবন্ধ চিঠির সাথে তুলনা করা যায়। যেখানে খামের ভেতরে চিঠি হল ডেটা আর খামের ঠিকানা, ডাকটিকেট ইত্যাদি হল হেডার। সহজ করে দেখলে ইন্টারনেট হল সংযোগ (communication link) ও প্যাকেট সুইচের মাধ্যমে যুক্ত অসংখ্য কম্পিউটার (বা এন্ড সিস্টেম, বা হোস্ট)। প্যাকেট সুইচের কাজ হল তার কাছে যেসব প্যাকেট আসে সেগুলোর হেডার দেখে পরবর্তী কোন প্যাকেট সুইচ বা এন্ড সিস্টেমের কাছে পাঠাতে হবে সিদ্ধান্ত নিয়ে পাঠানো।
প্যাকেট সুইচ বিভিন্ন ধরণের হতে পারে। ইন্টারনেটে বহুল ব্যবহৃত দুটি প্যাকেট সুইচ হল রাউটার এবং লিংক লেয়ার সুইচ।
প্রটোকল
কোন অপরিচিত মানুষের সাথে কোথাও দেখা হলে আমরা কি করি? প্রথমে হয়ত সালাম দেই। তারপর নাম জিজ্ঞেস করি। তারপর জানতে চাই আপনি কোন এলাকার ইত্যাদি। তারপরে অন্য কথায় যাই। এগুলো মোটামুটি নিয়মের মত। এই নিয়মগুলো জানে না এমন কারো সাথে কিন্তু আলাপ জমাতে খুবই কষ্ট হবে। যেমন আপনি নাম জিজ্ঞেস করলেন আর সে বলল আমার বাড়ি কুমিল্লা তাহলে কিন্তু হবে না। এই নিয়মগুলোকে একটা প্রটোকল বলা যায়।
প্রটোকল হচ্ছে কিছু নিয়মের সমষ্টি। দুটি ডিভাইস বা সিস্টেম যখন ডেটা আদানপ্রদান করে তখন তাদের এই নিয়্ম মানতে হয়। যেমন HTTP প্রটোকলের নিয়ম হল ব্রাউজার প্রথমে সার্ভারে একটা TCP কনেকশনের জন্য রিকোয়েস্ট করবে। সার্ভার একটা উত্তরের মাধ্যমে সেই রিকোয়েস্ট এক্সেপ্ট করবে। তারপর ব্রাউজার URL ব্যবহার করে একটা নির্দিষ্ট ডকুমেন্টের জন্য রিকোয়েস্ট করবে। সার্ভার উত্তর হিসেবে সেই ডকুমেন্ট পাঠাবে। এখানে প্রত্যেকটা রিকোয়েস্ট আর উত্তরের ফরম্যাটও প্রটোকলের মাধ্যমে নির্দিষ্ট করে করে দেয়া থাকে। যেমন এখানে শেষ উত্তরটির প্রথমে থাকবে হেডার। হেডারে ডকুমেন্টের সাইজ, ফরম্যাট ইত্যাদি উল্লেখ করা থাকবে যাতে ব্রাউজার ঠিকমত ব্যবহার করতে বা দেখাতে পারে। হেডারের পরে একটা ব্ল্যাঙ্ক লাইন থাকবে। তারপরে থাকবে কন্টেন্ট।
তাহলে দেখতেই পাচ্ছেন প্রটোকল ছাড়া যোগাযোগ সম্ভবই না।
লেয়ার
ইন্টারনেটে একটি এন্ড সিস্টেম থেকে অন্য এন্ড সিস্টেমে ডেটা ট্রান্সফার বিভিন্ন লেয়ারে সম্পন্ন হয়। লেয়ারগুলোর কাজ বুঝার জন্য একটা উদাহরণ আনা যাক। মনে করুন এক লোকের একটা জায়গা আছে আর টাকাও আছে। সে এখানে একটা বড় বিল্ডিং বানাতে চায়। সে একটা প্রতিষ্ঠানকে দায়িত্ব দিল। ঐ প্রতিষ্ঠান রিসার্চ করে দেখল এখানে কি ধরণের বিল্ডিং বানানো যায়। তারপরে বিল্ডিংয়ের নকশাও করল। কিন্তু নকশা বাস্তবায়ন করার জন্য ঐ প্রতিষ্ঠান আবার অন্য একটি প্রতিষ্ঠানকে দায়িত্ব দিয়ে দিল। ঐ প্রতিষ্ঠান আবার বিল্ডিংয়ের বিভিন্ন অংশের কাজের জন্য (যেমন পাইলিং) বিভিন্ন প্রতিষ্ঠানকে দায়িত্ব দিল। এভাবে চলতেই থাকল। শেষ পর্যন্ত কাজ আসবে লেবারদের হাতে। এখন যে লোক বিল্ডিং বানাতে চেয়েছিল সে কি নিজে লেবার, ইন্জিনিয়ার, টেকনিসিয়ান ভাড়া করে নিজেই বিল্ডিংটা বানাতে পারত না? হয়ত পারত। কিন্তু এতে করে কাজটা বেশ জটিল হত।
এই বিল্ডিং বানানোর সাথে ইন্টারনেটের লেয়ারগুলোর সরাসরি তুলনা করতে যাবেন না। শুধু লেয়ার বাই লেয়ার কাজ সম্পন্ন করা দেখানোর জন্য এই উদাহরণ দেয়া।
প্রত্যেক লেয়ারে ডেটা ট্রান্সফার ঐ লেয়ারের কিছু প্রটোকলের মাধ্যমে সম্পন্ন হয়। বর্তমানে ইন্টারনেটে মোট পাঁচটি লেয়ার আছে। এগুলো হল:
- অ্যাপ্লিকেশন লেয়ার
- ট্রান্সপোর্ট লেয়ার
- নেটওয়ার্ক লেয়ার
- লিংক লেয়ার
- ফিজিক্যাল লেয়ার
এখন সবগুলো লেয়ার সম্পর্কে সামান্য ধারণা দিতে চেষ্টা করব।
অ্যাপ্লিকেশন লেয়ার
সবার উপরের লেয়ার হল অ্যাপ্লিকেশন লেয়ার। আমরা ইন্টারনেটের যা যা ব্যবহার করি ব্রাউজার, মেইল ক্লায়েন্ট, বিট টরেন্ট ক্লায়েন্ট ইত্যাদি সবই এই লেয়ারে থাকে। এই লেয়ারে ইম্প্লিমেন্ট করার প্রটোকলগুলোর মধ্যে আছে HTTP, WS, SMTP, FTP, DNS ইত্যাদি। এগুলোর কোনটা কি কাজ করে আমরা সবাই জানি।
এই লেয়ারের প্রটোকলগুলো ইম্প্লিমেন্ট করা হয় অ্যাপ্লিকেশন সফটওয়্যার পর্যায়ে। যেমন ক্রোম, অ্যাপাচি। আমরা ম্যাঙ্গো প্রোগ্রামারেরা এই প্রটোকলগুলো ব্যবহার করে আমাদের ইন্টারনেট সংযুক্ত অ্যাপ্লিকেশন তৈরী করি। লেয়ার আর প্রটোকলের অন্যতম সুবিধা হল আমরা শুধু হাই লেভেল প্রটোকলগুলো জানলেই বিভিন্ন অ্যাপ্লিকেশন বানাতে পারি। পুরো ইন্টারনেট কিভাবে কাজ করে জানতে হয় না। আমারা এই প্রটোকলগুলো ব্যবহার না করে কিভাবে সরাসরি পরবর্তী লেয়ারের প্রটোলগুলো ব্যবহার করে অ্যাপ্লিকেশন বনাতে পারি সেটা নিয়ে পরবর্তী পোস্টে লিখব।
অ্যাপ্লিকেশন লেয়ার ডেটা ট্রান্সফারের জন্য পরবর্তী লেয়ার ট্রান্সপোর্ট লেয়ারের ওপর নির্ভর করে। HTTP র কথা ধরা যাক। অ্যাপ্লিকেশন লেয়ারের অ্যাপ্লিকেশনগুলো HTTP প্রটোকল মেনে মেসেজ তৈরী করে ( প্রয়োজনীয় হেডার, কন্টেন্ট সংযুক্ত করে) তারপর সেই মেসেজ পরিবহন করে অন্য এন্ড সিস্টেমের অ্যাপ্লিকেশনে নিয়ে যাওয়ার দায়িত্ব পরবর্তী লেয়ারের উপর ছেড়ে দেয়।
ট্রান্সপোর্ট লেয়ার
ট্রন্সপোর্ট লেয়ারের দায়িত্ব হল মেসেজ বা ডেটা এক এন্ড সিস্টেমে চলা কোন প্রসেস থেকে অন্য এন্ড সিস্টেমে চলা প্রসেসে পৌছে দেয়া। এই লেয়ারের প্রটোকলগুলো অপারেটিং সিস্টেম পর্যায়ে ইম্প্লিমেন্ট করা হয়। এই লেয়ারের দুটি প্রটোকল হল TCP (Transport Control Protocol) আর UDP (User Datagram Protocol)। এই দুটি প্রটোকলের ডেটা ট্রান্সফার কৌশল আলাদা।
এই প্রটোকলগুলো অ্যাপ্লিকেশন লেয়ারে থেকে পাওয়া মেসেজগুলো প্রয়োজনমত প্যাকেটে ভাগ করে নিয়ে প্রত্যেক প্যাকেটে কিছু হেডার যুক্ত করে দেয়। এই হেডারের মধ্যে আছে পোর্ট নাম্বার, চেকসাম, ডেটার সাইজ ইত্যাদি। ডেসটিনেশন হোস্টে অনেকগুলো প্রসেস নেটওয়ার্কের সাথে কানেক্টেড থেকে রানিং থাকতে পারে। সেক্ষেত্রে কোনো ম্যাসেজ আসলে সেটা কোন প্রসেসের কাছে যাবে সেটা বোঝার জন্য 'পোর্ট' লাগে। একেকটা প্রসেস মূলত একেকটা পোর্টে রান করে। পোর্ট মূলত কিছুই না, কিছু এভেইলেবল নাম্বার বা আইডি, যেটা কিনা একেকটা প্রসেসকে এসাইন করা হয়, এবং কোনো একটা প্রসেস একটা পোর্টে এসাইন হয়ে গেলে ওই প্রসেসের কাজ শেষ না হওয়া পর্যন্ত অন্য কোনো প্রসেস সেই পোর্টে এসাইন হতে পারবে না। তাই একটা নির্দিষ্ট ম্যাসেজ কোন পোর্টে যাবে এটা বলে দেয়া মানেই হলো সেটা কোন প্রসেস পাবে সেটা নির্দিষ্ট করে দেয়া। আর ডেটা ট্রান্সফারের সময় ড্যামেজড হয়ে গেল কিনা সেটা বুঝার জন্য চেকসাম প্রয়োজন হয়।
টিসিপির বৈশিষ্ট হল এটি ডেটা ট্রান্সফার শুরুর আগে একটি কনেকশন খুলে নেয়। টিসিপির প্রতিটি প্যাকেটের হেডারে একটি সিকোয়েন্স নাম্বার থাকে। এতে করে ডেটা ট্রান্সফারের সময় প্যাকেটগুলোর ক্রম উল্টাপাল্টা হয়ে গেলেও প্রাপক তা আবার ঠিক করে নিতে পারে। প্রাপক প্রতিটি প্যাকেট রিসিভ করে একটি ছোট্ট মেসেজের মাধ্যমে প্রাপককে জানিয়ে দেয় যে সে প্যকেটটি পেয়েছে। প্রেরক যদি কোন প্যাকেটের জন্য এই acknowledgement না পায় তাহলে সেই প্যাকেটটি আবার পাঠায়। এতে করে নিশ্চিত হয় যে ট্রান্সমিশনের সময় কোন প্যাকেট হারিয়ে বা নষ্ট হয়ে গেলেও পুরো মেসেজটি পৌছানোর নিশ্চয়তা থাকে। তারপর ডেটা ট্রান্সফার শেষ হলে কানেকশন ক্লোজ হয়। তাহলে দেখা যাচ্ছে টিসিপিতে ডেটা ট্রান্সফারের আর ডেটার ক্রমের নিশ্চয়তা থাকে।
অন্যদিকে UDP অনেক সিম্পল আর লাইটওয়েট। এসব ঝামেলায় না গিয়ে সরাসরি ডেস্টিনেশনের উদ্দেশ্যে প্যাকেট ট্রান্সফার করে দেয়। কোন প্রাপ্তি স্বীকারের জন্যও অপেক্ষা করে না। আবার হেডারে কোন সিকোয়েন্স নাম্বারও দেয় না। এতে করে অনেক সময় বাঁচে আর পুরো ব্যাপারটা অনেক সিম্পল হয়।
মনে করুন আপনার বন্ধুর কাছে ঢিল দিয়ে কিছু দেবেন। যদি টিসিপি প্রটোকলে দেন তাহলে প্রথমে তাকে ডাক দিয়ে বলবেন ‘এই দিতেসি, ধরিস।’ তারপরে সে যদি বলে ‘আচ্ছা দে’ তাহলেই কেবল আপনি ঢিল দেবেন। আর UDP প্রটোকলে দিলে কোন কথা বার্তা না বলে ঢিল মারতে হবে। সে ধরতে পারল কি পারল না সেটা আপনার ব্যাপার না।
অল্প কিছু প্যাকেট ট্রান্সফারের সময় হারিয়ে গেলেও সমস্যা হবে না এমন সব ক্ষেত্রে UDP ব্যবহার করা যেতে পারে। যেমন স্ট্রিমিং, ভিডিও চ্যাট ইত্যাদি। এক্ষেত্রে কিছু প্যাকেট হারিয়ে গেলে হয়ত ভিডিও বা অডিওতে হলকা গ্লিচ তৈরী হবে যা তেমন কোন বড় সমস্যা না। DNS প্রটোকল UDP ব্যবহার করে। HTTP, SMTP প্রটোকলগুলো TCP ব্যবহার করে।
নেটওয়ার্ক লেয়ার
নেটওয়ার্ক লেয়ারের দায়িত্ব হল প্যাকেটগুলো এক হোস্ট থেকে অন্য হোস্টে বেশ কিছু রাউটার হয়ে পৌছে দেয়া। নেটওয়ার্ক লেয়ারের প্রটোকলের নাম আমরা সবাই জানি, IP বা ইন্টারনেট প্রটোকল।
নেটওয়ার্ক লেয়ারের মূলত দুইটি কাজ করতে হয়। আইপি এড্রেস অনুসারে ঠিক করতে হয় কার কাছে পৌছাতে হবে আর ঠিক কোন ‘রুটে’ (route) পৌছাতে হবে। এজন্য আইপির পাশাপাশি বেশ কিছু রাউটিং প্রটোকল ব্যবহার করা হয়।
একটা কথা শুনে থাকতে পারেন যে ইন্টারনেট হচ্ছে একটা TCP/IP নেটওয়ার্ক। আসলে ইন্টারনেটে ব্যবহৃত মুল দুটি প্রটোকল TCP আর IP হওয়াতে এটা বলা হয়ে থাকে।
লিংক লেয়ার
এই লেয়ারের দায়িত্ব হল প্যাকেটগুলো এক ইন্টারনেটের এক নোড (হোস্ট কিংবা রাউটার) হতে অন্য নোডে পৌছে দেয়া। এই লেয়ারটি সাধারণত ডিভাইসের নেটওয়ার্ক ইন্টারফেস কার্ডে ইম্প্লিমেন্ট করা হয়। নেটওয়ার্ক কার্ডে থাকা MAC (Media Access Control) এড্রেস এখানে ভুমিকা পালন করে। এই লেয়ারের প্রটোকলগুলোর মধ্যে আছে Ethernet, WiFi ইত্যাদি।
ফিজিক্যাল লেয়ার
এই লেয়ার হচ্ছে ইন্টারনেটের লেবার। এই লেয়ারেও কিছু প্রটোকল আছে। এই লেয়ারের ব্যবহৃত প্রটোকলগুলো দুটি নোডের সংযোগের প্রকৃতির উপরে নির্ভর করে। যেমন ইথারনেট প্রটোকল কো-এক্সিয়াল ক্যাবলের জন্য একটা প্রটোকল ব্যবহার করে, আবার অপটিক ফাইবার ক্যাবলের জন্য অন্য একটা প্রটোকল ব্যবহার করে।
আজকের মত এখানেই। বলে রাখা ভাল যে এই লেখায় ইন্টারনেট সিকিউরিটি একেবারেই বাদ পড়েছে। প্রাথমিক অবস্থায় ইন্টারনেটের মডেল ছিল “a group of mutually trusting
users attached to a transparent network”। এটা যে আজকের ইন্টানেট না সেটা অবশ্যই বলে দিতে হবে না।
আরো ক্লিয়ার হতে ক্রাস কোর্সের এই তিনটি ভিডিও দেখতে পারেন। তদের অন্য সব ভিডিওর মত এইগুলোও চমৎকার। আমি এখানে উপরের লেয়ার থেকে বর্ণনা শুরু করে নিচের দিকে এসেছি। এই ভিডিওগুলোতে নিচের থেকে শুরু করে উপরের দিকে যায়।