TCP/IP হল একটি প্রোটোকল স্ট্যাক যা ইন্টারনেট এবং অধিকাংশ কম্পিউটার নেটওয়ার্কের ভিত্তি। এটি TCP প্রোটোকল, যা নির্ভরযোগ্য ডেটা বিতরণের জন্য দায়ী, এবং IP, যা নোডগুলির মধ্যে প্যাকেট রাউটিং নিশ্চিত করে, একত্রিত করে। IETF RFC 1180 (2024) অনুসারে, TCP/IP স্ট্যাক মোবাইল এবং ওয়েব অ্যাপ্লিকেশন সহ বিশ্বব্যাপী নেটওয়ার্ক ট্রাফিকের 80% এর বেশি পরিচালনা করে। প্রোটোকল স্ট্যাক নির্ধারণ করে কিভাবে ডেটা প্যাকেজ, ঠিকানা এবং নেটওয়ার্কের ডিভাইসগুলির মধ্যে প্রেরণ করা হয়।
মূল পয়েন্ট
TCP/IP (Transmission Control Protocol / Internet Protocol) হল একটি প্রোটোকল স্ট্যাক যা 1970-এর দশকে ARPANET-এর জন্য开发 করা হয়েছিল এবং বিশ্বব্যাপী ইন্টারনেটের জন্য ডি ফ্যাক্টো স্ট্যান্ডার্ড হয়ে উঠেছে। এটি নির্ধারণ করে কিভাবে ডেটা প্যাকেটে বিভক্ত, ঠিকানা, প্রেরণ এবং গ্রহীতার পাশে পুনরায় একত্রিত করা হয়।
TCP/IP আর্কিটেকচার বহু-স্তরীয় নীতির উপর নির্মিত, যেখানে প্রতিটি স্তর নির্দিষ্ট ফাংশনকে বিমূর্ত করে। অ্যাপ্লিকেশন স্তর অ্যাপ্লিকেশন ডেটা নিয়ে কাজ করে, ট্রান্সপোর্ট স্তর নির্ভরযোগ্যতা নিশ্চিত করে, নেটওয়ার্ক স্তর রাউটিং পরিচালনা করে এবং লিংক স্তর ভৌত ট্রান্সমিশন পরিচালনা করে। মডুলারিটি প্রতিবেশী স্তরগুলিকে প্রভাবিত না করে একটি স্তরের মধ্যে প্রোটোকল প্রতিস্থাপনের অনুমতি দেয়।
মোবাইল ডেভেলপমেন্টে, TCP/IP প্রতিটি অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় যা নেটওয়ার্ক অনুরোধ করে। URLSession, OkHttp, AFNetworking এবং Alamofire-এর মতো লাইব্রেরিগুলি এই স্ট্যাকের উপরে কাজ করে, ডেভেলপার থেকে প্যাকেট প্যাকেজিং এবং রাউটিংয়ের বিবরণ লুকিয়ে রাখে। তবে, কর্মক্ষমতা অপ্টিমাইজেশনের জন্য TCP/IP বোঝা প্রয়োজন: URLSessionConfiguration-এর মাধ্যমে TCP প্যারামিটার কনফিগার করা টাইমআউট পরিচালনা, HTTP Persistent Connections বজায় রাখা এবং এন্টারপ্রাইজ পরিবেশের জন্য প্রক্সি সেট আপ করার অনুমতি দেয়।
নেটওয়ার্ক সমস্যা নির্ণয়ের জন্য TCP/IP বোঝা অপরিহার্য: যদি কোনো অ্যাপ্লিকেশন সার্ভারের সাথে সংযোগ করতে না পারে, তাহলে সমস্যাটি স্ট্যাকের যেকোনো স্তরে হতে পারে — ভৌত চ্যানেল থেকে অ্যাপ্লিকেশন প্রোটোকল পর্যন্ত। tcpdump, Wireshark এবং Charles Proxy-এর মতো টুলস প্রতিটি স্তরে ট্রাফিক বিশ্লেষণ এবং বাধা খুঁজে পেতে অনুমতি দেয়। মোবাইল ডেভেলপারদের জন্য, Xcode Network Debug Dashboard প্রদান করে এবং Android Studio রিয়েল টাইমে TCP সংযোগ বিশ্লেষণের জন্য Network Inspector প্রদান করে।
TCP/IP মডেলে চারটি স্তর অন্তর্ভুক্ত, প্রতিটি ডেটা ট্রান্সমিশনের সময় কঠোরভাবে সংজ্ঞায়িত ফাংশন সম্পাদন করে। এই শ্রেণিবিন্যাস বোঝা নেটওয়ার্ক সমস্যা নির্ণয় এবং অ্যাপ্লিকেশন অপ্টিমাইজ করার জন্য প্রয়োজনীয়।
অ্যাপ্লিকেশন স্তরে প্রোটোকলগুলি কাজ করে যার সাথে অ্যাপ্লিকেশনগুলি সরাসরি যোগাযোগ করে: HTTP, HTTPS, FTP, SMTP, DNS, WebSocket। এই স্তরটি ডেটাকে এমনভাবে ফর্ম্যাট করে যা অ্যাপ্লিকেশন বুঝতে পারে এবং এটি ট্রান্সপোর্ট স্তরে প্রেরণ করে। মোবাইল অ্যাপ্লিকেশন ডেভেলপাররা নেটওয়ার্কিং লাইব্রেরির মাধ্যমে এই স্তরে কাজ করে।
ট্রান্সপোর্ট স্তর বিভিন্ন ডিভাইসে অ্যাপ্লিকেশনের মধ্যে ডেটা ট্রান্সমিশন নিশ্চিত করে। প্রধান প্রোটোকলগুলি হল TCP (নিশ্চিতকরণ সহ নির্ভরযোগ্য ট্রান্সমিশন) এবং UDP (গ্যারান্টি ছাড়া দ্রুত ট্রান্সমিশন)। TCP ডেটাতে প্রেরক এবং গ্রহীতা পোর্ট যোগ করে, প্যাকেট ক্রম পরিচালনা করে এবং নেটওয়ার্ক কনজেশন নিয়ন্ত্রণ করে।
নেটওয়ার্ক স্তর IP প্রোটোকল দ্বারা বাস্তবায়িত হয়, যা অ্যাড্রেসিং (IPv4, IPv6) এবং প্যাকেট রাউটিং নির্ধারণ করে। প্রতিটি প্যাকেটে প্রেরক এবং গ্রহীতার IP ঠিকানা থাকে এবং পথ বরাবর রাউটারগুলি রাউটিং টেবিলের ভিত্তিতে পরবর্তী নোড সম্পর্কে সিদ্ধান্ত নেয়। IPv4 32-বিট ঠিকানা (প্রায় 4.3 বিলিয়ন) ব্যবহার করে, যখন IPv6 128-বিট ঠিকানা ব্যবহার করে, যা ঠিকানা শেষ হওয়ার সমস্যা সমাধান করে।
লিংক স্তর ভৌত ট্রান্সমিশন মিডিয়ামের সাথে কাজ করে: Ethernet, Wi-Fi, Bluetooth। এই স্তর প্যাকেটগুলিকে সিগন্যালে এবং পিছনে রূপান্তর করে, MAC ঠিকানার মাধ্যমে ট্রান্সমিশন মিডিয়ামে অ্যাক্সেস পরিচালনা করে এবং ফ্রেম চেক সিকোয়েন্স (FCS) ব্যবহার করে ভৌত স্তরের ত্রুটি সনাক্ত করে।
লিংক স্তরে ARP (Address Resolution Protocol)-এর মতো প্রোটোকল কাজ করে, যা স্থানীয় নেটওয়ার্কে ডিভাইসের IP ঠিকানাগুলিকে MAC ঠিকানায় রূপান্তর করে, এবং PPP (Point-to-Point Protocol), যা VPN সংযোগ এবং মোবাইল ডেটা নেটওয়ার্কে ব্যবহৃত হয়।
| স্তর | প্রোটোকল | কার্য |
|---|---|---|
| অ্যাপ্লিকেশন | HTTP, HTTPS, DNS, FTP, WebSocket | অ্যাপ্লিকেশন ডেটা ফর্ম্যাটিং |
| ট্রান্সপোর্ট | TCP, UDP | অ্যাপ্লিকেশনের মধ্যে ট্রান্সমিশন, ত্রুটি নিয়ন্ত্রণ |
| নেটওয়ার্ক | IP, ICMP, ARP | প্যাকেট রাউটিং এবং অ্যাড্রেসিং |
| লিংক | Ethernet, Wi-Fi, PPP | ভৌত মিডিয়াম ট্রান্সমিশন |
TCP (Transmission Control Protocol) ট্রান্সপোর্ট স্তরের প্রধান প্রোটোকলগুলির মধ্যে একটি। এটি অ্যাপ্লিকেশনের মধ্যে বাইট স্ট্রিমের নির্ভরযোগ্য, ক্রমিক এবং ত্রুটি-পরীক্ষিত বিতরণ নিশ্চিত করে। ডেটা প্রেরণের আগে, TCP তিন-পদক্ষেপ হ্যান্ডশেকের মাধ্যমে একটি সংযোগ স্থাপন করে।
তিন-পদক্ষেপ হ্যান্ডশেক (three-way handshake) ক্লায়েন্টের SYN প্যাকেট পাঠানোর মাধ্যমে শুরু হয়। সার্ভার SYN-ACK প্যাকেট দিয়ে উত্তর দেয়, গ্রহণ নিশ্চিত করে। ক্লায়েন্ট ACK প্যাকেট দিয়ে হ্যান্ডশেক সম্পূর্ণ করে, যার পরে ডেটা ট্রান্সমিশন শুরু হয়। এই প্রক্রিয়া নিশ্চিত করে যে উভয় পক্ষ বিনিময়ের জন্য প্রস্তুত এবং সিকোয়েন্স নম্বরে সিঙ্ক্রোনাইজড।
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
sock.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
response = sock.recv(4096)
print(response.decode())
sock.close()
উদাহরণে, SOCK_STREAM টাইপের একটি TCP সকেট তৈরি করা হয়, যা connect কল করলে স্বয়ংক্রিয়ভাবে তিন-পদক্ষেপ হ্যান্ডশেক সম্পাদন করে। send মেথড HTTP অনুরোধ পাঠায় এবং recv প্রতিক্রিয়া গ্রহণ করে। সম্পূর্ণ হওয়ার পর, close সংযোগ সঠিকভাবে বন্ধ করতে FIN প্যাকেট পাঠায়।
আসুন Python-এ একটি TCP সার্ভারের উদাহরণ দেখি যা থ্রেডের মাধ্যমে একাধিক ক্লায়েন্ট গ্রহণ করে। প্রতিটি সংযোগ একটি পৃথক থ্রেডে পরিচালিত হয়, যা মূল লুপকে ব্লক না করে একসাথে একাধিক ক্লায়েন্টকে সেবা দেওয়ার অনুমতি দেয়।
import socket
import threading
def handle_client(conn, addr):
print(f'ক্লায়েন্ট সংযুক্ত: {addr}')
with conn:
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
print(f'ক্লায়েন্ট {addr} সংযোগ বিচ্ছিন্ন')
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('TCP সার্ভার পোর্ট 9090-এ শুরু হয়েছে')
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
TCP সার্ভার প্রতিটি সংযোগকে একটি পৃথক থ্রেডে পরিচালনা করে, অসীম লুপে accept কল করে। handle_client ফাংশন ডেটা গ্রহণ করে, এটি বড় হাতের অক্ষরে রূপান্তর করে এবং sendall-এর মাধ্যমে ফেরত পাঠায়। যখন recv লুপ শেষ হয় (যখন ক্লায়েন্ট সংযোগ বন্ধ করে), থ্রেড শেষ হয় এবং সকেট স্বয়ংক্রিয়ভাবে বন্ধ হয়। মোবাইল অ্যাপ্লিকেশনে, এই ধরনের নিম্ন-স্তরের সকেট কাজ সরাসরি ব্যবহৃত হয় না — মোবাইল HTTP লাইব্রেরিগুলি থ্রেড পুলের মাধ্যমে সংযোগ পরিচালনা করে এবং স্বয়ংক্রিয়ভাবে TCP সংযোগ পুনরায় ব্যবহার করে।
TCP এবং UDP-র মধ্যে নির্বাচন নেটওয়ার্ক যোগাযোগ ডিজাইন করার সময় মূল সিদ্ধান্তগুলির মধ্যে একটি। অতিরিক্ত বিলম্বের মূল্যে TCP বিতরণ, ক্রম এবং ডেটা অখণ্ডতা নিশ্চিত করে। UDP ন্যূনতম বিলম্ব এবং কম চ্যানেল লোডের জন্য নির্ভরযোগ্যতা ত্যাগ করে।
| বৈশিষ্ট্য | TCP | UDP |
|---|---|---|
| সংযোগ | স্থাপন করে (হ্যান্ডশেক) | স্থাপন করে না |
| নির্ভরযোগ্যতা | বিতরণের গ্যারান্টি দেয় | গ্যারান্টি দেয় না |
| প্যাকেট ক্রম | ক্রমবদ্ধ করে | ক্রমবদ্ধ করে না |
| গতি | কম | অধিক |
| ব্যবহার | ওয়েব, ইমেল, ফাইল | স্ট্রিমিং, গেমস, DNS |
মোবাইল অ্যাপ্লিকেশনের জন্য, প্রোটোকল নির্বাচন পরিস্থিতির উপর নির্ভর করে: REST API এবং ডেটা লোডিংয়ের জন্য TCP প্রয়োজন, যখন ভিডিও কল এবং অনলাইন গেমগুলি UDP-র গতি থেকে উপকৃত হয়। কিছু অ্যাপ্লিকেশন উভয় প্রোটোকল একত্রিত করে — নিয়ন্ত্রণের জন্য TCP এবং মিডিয়া স্ট্রিমিংয়ের জন্য UDP। আধুনিক QUIC প্রোটোকল, যা UDP-র উপরে চলে এবং HTTP/3-তে ব্যবহৃত হয়, উভয় পদ্ধতির সুবিধা একত্রিত করে এবং ইতিমধ্যে iOS এবং Android-এ URLSession-এর মাধ্যমে স্বয়ংক্রিয়ভাবে সমর্থিত।
আসুন ত্রুটি হ্যান্ডলিং এবং টাইমআউট সহ Python-এ TCP ক্লায়েন্টের একটি উদাহরণ দেখি। এই পদ্ধতিটি মোবাইল অ্যাপ্লিকেশনে নির্ভরযোগ্য সার্ভার সংযোগের জন্য ব্যবহৃত হয়।
import socket
import sys
def tcp_client(host, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((host, port))
print(f'{host}:{port} এর সাথে সংযুক্ত')
return sock
except socket.error as err:
print(f'সংযোগ ত্রুটি: {err}')
sys.exit(1)
sock = tcp_client('api.example.com', 443)
sock.close()
tcp_client ফাংশন একটি হোস্ট এবং পোর্ট নেয়, 10 সেকেন্ডের টাইমআউট সহ একটি সকেট তৈরি করে এবং সংযোগের চেষ্টা করে। সংযোগ ত্রুটিতে — উদাহরণস্বরূপ, সার্ভার অনুপলব্ধতা বা ফায়ারওয়াল ব্লকিং — সমস্যার বর্ণনা সহ একটি ব্যতিক্রম নিক্ষেপ করা হয়। মোবাইল অ্যাপ্লিকেশনে, সংযোগ টাইমআউট গুরুত্বপূর্ণ: খুব ছোট ধীর নেটওয়ার্কে ভুল ত্রুটির দিকে নিয়ে যায়, খুব বড় ইন্টারফেস জমে যাওয়ার দিকে নিয়ে যায়। মোবাইল নেটওয়ার্কের জন্য প্রস্তাবিত মান হল URLSession কনফিগারেশনে timeoutIntervalForRequest-এর জন্য 10–15 সেকেন্ড এবং timeoutIntervalForResource-এর জন্য 30–60 সেকেন্ড।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
IP রাউটিংয়ের জন্য দায়ী — মধ্যবর্তী নোডের মাধ্যমে প্রেরক থেকে গ্রহীতার কাছে প্যাকেট বিতরণ। TCP নির্ভরযোগ্য ডেটা সমাবেশ নিশ্চিত করে: ক্রম নিয়ন্ত্রণ করে, অখণ্ডতা পরীক্ষা করে এবং হারিয়ে যাওয়া প্যাকেটের পুনঃপ্রেরণের অনুরোধ করে। একসাথে তারা TCP/IP স্ট্যাক গঠন করে।
TCP/IP একটি নির্দিষ্ট পোর্ট ব্যবহার করে না — পোর্ট অ্যাপ্লিকেশন দ্বারা নির্ধারিত হয়। স্ট্যান্ডার্ড পোর্ট: 80 (HTTP), 443 (HTTPS), 22 (SSH), 25 (SMTP)। পোর্ট 443 মোবাইল অ্যাপ্লিকেশনে সুরক্ষিত ওয়েব ট্রাফিকের জন্য প্রধান।
TCP সংযোগ হল দুটি অ্যাপ্লিকেশনের মধ্যে একটি লজিক্যাল চ্যানেল, যা তিন-পদক্ষেপ হ্যান্ডশেক (SYN, SYN-ACK, ACK) এর মাধ্যমে স্থাপিত হয়। সংযোগটি প্রেরক এবং গ্রহীতার জোড়া (IP ঠিকানা, পোর্ট) দ্বারা চিহ্নিত করা হয়। হ্যান্ডশেক নিশ্চিত করে যে উভয় পক্ষ ডেটা বিনিময়ের জন্য প্রস্তুত।
হ্যাঁ, TCP/IP ইন্টারনেট অ্যাক্সেস ছাড়াই স্থানীয় নেটওয়ার্কে (LAN) কাজ করে। ডিভাইসগুলি Wi-Fi Direct, Bluetooth PAN বা Ethernet-এর মাধ্যমে সংযুক্ত হয় এবং স্থানীয় IP ঠিকানা ব্যবহার করে ডেটা বিনিময় করে। স্থানীয় TCP/IP IoT ডিভাইস এবং পিয়ার-টু-পিয়ার অ্যাপ্লিকেশনে ব্যবহৃত হয়।
অতিরিক্ত প্রক্রিয়ার কারণে TCP ধীর: ট্রান্সমিশনের আগে তিন-পদক্ষেপ হ্যান্ডশেক, প্রতিটি প্যাকেটের নিশ্চিতকরণ, হারিয়ে যাওয়া সেগমেন্টের পুনঃপ্রেরণ এবং কনজেশন নিয়ন্ত্রণ। UDP এই পরীক্ষাগুলি ছাড়াই ডেটাগ্রাম পাঠায়, সম্ভাব্য ক্ষতির মূল্যে বিলম্ব হ্রাস করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন