প্রতিদিন আমরা ইন্টারনেট ব্যবহার করি, কিন্তু নেটওয়ার্কিংয়ের গভীরে ডিভাইসগুলো কীভাবে একে অপরের সাথে ডেটা আদান-প্রদান করে, তা বুঝতে হলে IP Address এবং Port-এর ধারণা থাকা বাধ্যতামূলক। মূলত এই দুটি জিনিসের ওপর ভিত্তি করেই পুরো ইন্টারনেটের কমিউনিকেশন ব্যবস্থা দাঁড়িয়ে আছে।
IP Address (ইন্টারনেট প্রোটোকল অ্যাড্রেস) কী?
IP Address হলো ইন্টারনেটে বা লোকাল নেটওয়ার্কে সংযুক্ত তোমার কম্পিউটার, মোবাইল বা সার্ভারের একটি ইউনিক বা অদ্বিতীয় পরিচিতি (Unique Address)। এটি ব্যবহার করেই একটি ডিভাইস নেটওয়ার্কের অন্য একটি ডিভাইসকে ঠিকমতো খুঁজে বের করে ডেটা পাঠায়।
সহজ উদাহরণ: ধরো, ইন্টারনেট হলো একটি বিশাল শহর। এই শহরে তোমার বাড়িটি খুঁজে পাওয়ার জন্য যে নির্দিষ্ট ঠিকানার প্রয়োজন, সেটিই হলো IP Address। কেউ যদি তোমার কাছে কোনো চিঠি বা ডেটা প্যাকেট পাঠাতে চায়, তবে তাকে প্রথমেই তোমার বাড়ির ঠিকানাটি (IP) জানতে হবে।
ডিপ ডাইভ (অতিরিক্ত তথ্য): বর্তমানে দুই ধরনের IP Address সবচেয়ে বেশি ব্যবহৃত হয়: ১. IPv4: এটি ৩২-বিটের অ্যাড্রেস (যেমন: 192.168.1.10 বা 172.16.0.5)। ২. IPv6: পৃথিবীতে ডিভাইসের সংখ্যা এত বেড়ে গেছে যে IPv4 ফুরিয়ে যাচ্ছে। তাই ১২৮-বিটের IPv6 (যেমন: 2001:0db8:85a3:0000:0000:8a2e:0370:7334) তৈরি করা হয়েছে, যা দিয়ে ট্রিলিয়ন ট্রিলিয়ন ডিভাইসকে ইউনিক অ্যাড্রেস দেওয়া সম্ভব।
Port (পোর্ট) কী?
Port হলো তোমার কম্পিউটারের বা সার্ভারের ভেতরের একটি লজিক্যাল চ্যানেল বা দরজা, যা দিয়ে নির্দিষ্ট ধরনের ডেটা ভেতরে প্রবেশ করে (Enter) বা বাইরে যায় (Exit)।
সহজ উদাহরণ: তোমার বাড়ির ঠিকানা হলো IP। কিন্তু বাড়িতে তো অনেকগুলো দরজা বা কক্ষ থাকতে পারে! যেমন:
রান্নাঘরের দরজা: খাবার পরিবেশনের জন্য।
অফিসের দরজা: অফিসের কাজের জন্য।
অতিথিকক্ষের দরজা: মেহমানদের জন্য।
যদি কেউ তোমার বাড়িতে খাবার পৌঁছে দিতে চায়, সে ঠিকানা (IP) ব্যবহার করে তোমার বাড়ি পর্যন্ত আসবে ঠিকই, কিন্তু খাবারটি তাকে অবশ্যই রান্নাঘরের দরজা (Specific Port) দিয়েই দিতে হবে।
ডিপ ডাইভ (অতিরিক্ত তথ্য): কম্পিউটারে মোট ৬৫,৫৩৬টি (0 থেকে 65535) পোর্ট থাকে। এগুলোকে মূলত তিন ভাগে ভাগ করা যায়:
১. Well-known Ports (0 - 1023): এগুলো সিস্টেম বা বিখ্যাত সার্ভিসগুলোর জন্য রিজার্ভ করা থাকে। যেমন: ওয়েব সার্ভার HTTP (80), সিকিউর ওয়েব সার্ভার HTTPS (443), ইমেইল সার্ভার SMTP (25), এবং SSH (22)।
২. Registered Ports (1024 - 49151): বিভিন্ন ইউজার অ্যাপ্লিকেশন, ডাটাবেস বা গেমসের জন্য (যেমন: PostgreSQL -> 5432, MySQL -> 3306)।
৩. Ephemeral/Dynamic Ports (49152 - 65535): তুমি যখন ক্লায়েন্ট হিসেবে ব্রাউজার থেকে কোনো সার্ভারে রিকোয়েস্ট পাঠাও, তখন তোমার অপারেটিং সিস্টেম সাময়িকভাবে এই পোর্টগুলো থেকে একটি তোমার ব্রাউজারকে অ্যাসাইন করে।
IP এবং Port একসাথে কীভাবে কাজ করে (Socket)?
নেটওয়ার্কিংয়ের পরিভাষায় একটি IP এবং একটি Port-এর কম্বিনেশনকে বলা হয় Socket (যেমন: 192.168.1.10:8080)। একটি ডিভাইসের শুধু IP ঠিকানা জানলেই ডেটা পাঠানো যায় না, কারণ তোমার সার্ভার একই সাথে একাধিক প্রোগ্রাম চালাতে পারে (যেমন একটি সার্ভারে ওয়েবসাইটের পাশাপাশি ইমেইল সার্ভিসও চলতে পারে)।
যদি তুমি ব্রাউজারে টাইপ করো: [http://192.168.1.10:8080](http://192.168.1.10:8080) এখানে 192.168.1.10 হলো সার্ভারের IP, যা দিয়ে রিকোয়েস্টটি সার্ভার পর্যন্ত পৌঁছাবে। আর 8080 হলো সেই দরজা, যার পেছনে তোমার ওয়েব অ্যাপ্লিকেশনটি ডেটা রিসিভ করার জন্য কান পেতে (Listen) বসে আছে। যদি তুমি কোনো পোর্টের কথা উল্লেখ না করো, তবে ব্রাউজার প্রোটোকল অনুযায়ী ডিফল্ট পোর্ট (HTTP-এর জন্য 80, HTTPS-এর জন্য 443) নিজে থেকেই বসিয়ে নেয়।
Example: IP এবং Port বাইন্ড (Bind) করা
নিচে পাইথনের (Python) socket লাইব্রেরি ব্যবহার করে দেখানো হলো কীভাবে একটি ওয়েব সার্ভার নির্দিষ্ট IP এবং Port-এর সাথে নিজেকে যুক্ত (Bind) করে এবং ক্লায়েন্টের রিকোয়েস্টের জন্য অপেক্ষা করে।
import socket
# Defining the IP and Port (The Socket)
SERVER_IP = '127.0.0.1' # Localhost (The House Address)
SERVER_PORT = 3000 # Specific Door (The specific room/service)
# Creating a TCP Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Binding the socket to the IP and Port
# This tells the OS: "Route all traffic coming to 127.0.0.1 on port 3000 to this program"
server_socket.bind((SERVER_IP, SERVER_PORT))
# Listening for incoming connections
server_socket.listen(1)
print(f"Server is actively listening on {SERVER_IP}:{SERVER_PORT}")
# Waiting for a friend's browser or client to knock on Port 3000
while True:
client_connection, client_address = server_socket.accept()
print(f"Knock Knock! Connection established from client: {client_address}")
# Sending a basic HTTP response back to the client
response = b"HTTP/1.1 200 OK\n\nWelcome to Port 3000! You have successfully reached the destination."
client_connection.sendall(response)
# Closing the connection after serving the request
client_connection.close()বাস্তব জীবনের দৃশ্যপট:
ধরো, তুমি তোমার ল্যাপটপে পাইথনের বা স্প্রিং বুটের (Spring Boot) একটি প্রজেক্ট রান করেছ পোর্ট 3000-এ। এখন তোমার বন্ধু যদি তার ল্যাপটপ থেকে তোমার তৈরি করা ওয়েবপেজটি দেখতে চায়, তবে তাকে প্রথমেই তোমার ল্যাপটপের লোকাল IP (যেমন: 192.168.1.50) জানতে হবে। এরপর সে তার ব্রাউজারে গিয়ে [http://192.168.1.50:3000](http://192.168.1.50:3000) লিখে হিট করবে।
এখানে IP ঠিকানাটি বন্ধুকে তোমার ল্যাপটপ পর্যন্ত নিয়ে আসবে, আর 3000 পোর্টটি তাকে ঠিক তোমার প্রোজেক্টের প্রসেসটির কাছে পৌঁছে দেবে। এভাবেই IP এবং Port একসাথে ঠিকানার মতো এবং দরজার মতো কাজ করে পুরো ডিস্ট্রিবিউটেড সিস্টেম এবং ইন্টারনেট ব্যবস্থাকে সচল রাখে!