System Design শেখো
শেখো / ট্রেড-অফ

TCP vs UDP

9 মিনিট Module 2 · Trade-offs
এক নজরে
  • TCP connection-ভিত্তিক ও নির্ভরযোগ্য: data ঠিকভাবে, সঠিক ক্রমে পৌঁছানো নিশ্চিত করে।
  • UDP connectionless ও দ্রুত: কোনো নিশ্চয়তা ছাড়াই packet ছুঁড়ে দেয়, কিছু হারালেও থামে না।
  • নির্ভুলতা যেখানে জরুরি (web, email, file) সেখানে TCP; গতি যেখানে আগে (live video, gaming, DNS) সেখানে UDP।

সমস্যাটা কী?

Internet-এ এক computer থেকে আরেক computer-এ data যায় ছোট ছোট টুকরোয় — প্রতিটা টুকরোকে বলে Packet। কিন্তু network নিখুঁত নয়: কিছু packet হারিয়ে যায়, কিছু দেরিতে পৌঁছায়, কিছু এলোমেলো ক্রমে আসে।

এখন প্রশ্ন: এই অনিশ্চয়তা কীভাবে সামলাবে?

  1. সব packet ঠিকঠাক, সঠিক ক্রমে পৌঁছেছে কিনা — নিশ্চিত করো। নির্ভরযোগ্য কিন্তু একটু ধীর। এটাই TCP
  2. নিশ্চয়তার ঝামেলায় না গিয়ে দ্রুত ছুঁড়ে দাও; কিছু হারালে হারাক। দ্রুত কিন্তু অনিশ্চিত। এটাই UDP

দুটোই internet-এর মূল transport protocol। কোনটা কখন, সেটাই আসল।

প্রথমটা: TCP

TCP (Transmission Control Protocol) একটা connection-ভিত্তিক ও নির্ভরযোগ্য protocol। data পাঠানোর আগে দুই পক্ষ একটা connection স্থাপন করে, তারপর data যায়।

এই connection স্থাপনের নিয়মকে বলে Three-way Handshake — তিন ধাপ:

  1. Client → Server: "SYN" (কথা বলতে চাই)
  2. Server → Client: "SYN-ACK" (ঠিক আছে, আমিও রাজি)
  3. Client → Server: "ACK" (চমৎকার, শুরু করি)

এরপর data যেতে থাকে, আর TCP নিশ্চিত করে:

  • হারানো packet আবার পাঠানো হয় (retransmission)।
  • সব packet সঠিক ক্রমে জোড়া লাগে।
  • receiver-এর সামলানোর সাধ্য বুঝে গতি নিয়ন্ত্রণ (flow control)।

সুবিধা: নির্ভরযোগ্য, কিছুই হারায় না, ক্রম ঠিক থাকে।

অসুবিধা: handshake ও নিশ্চয়তার কাজে বাড়তি সময় (latency)। একটা packet হারালে পরেরগুলো এসেও অপেক্ষা করে যতক্ষণ হারানোটা না আসে — তাই কখনও থমকে যেতে পারে।

দ্বিতীয়টা: UDP

UDP (User Datagram Protocol) একটা Connectionless protocol — কোনো handshake নেই, কোনো connection স্থাপন নেই। শুধু packet ছুঁড়ে দেয়, ব্যস।

UDP প্রতিশ্রুতি দেয় না যে packet পৌঁছাবে, বা ক্রম ঠিক থাকবে। কিছু হারালে সে আবার পাঠায় না, খেয়ালও রাখে না। বদলে পায় গতি ও কম latency

সুবিধা: অত্যন্ত দ্রুত, কম overhead, কোনো handshake-এর দেরি নেই। হারানো packit-এর জন্য থেমে থাকে না — তাই real-time-এ মসৃণ।

অসুবিধা: packet হারাতে পারে, এলোমেলো ক্রমে আসতে পারে — নির্ভরযোগ্যতা নেই। দরকার হলে নির্ভরযোগ্যতার অংশটুকু application-কে নিজে সামলাতে হয়।

সহজ উদাহরণ: রেজিস্টার্ড চিঠি বনাম মাইকিং

TCP হলো রেজিস্টার্ড ডাক — প্রতিটা চিঠির প্রাপ্তি-রসিদ আসে, না পৌঁছালে আবার পাঠানো হয়, সব চিঠি ঠিক ক্রমে যায়। নিশ্চিত, কিন্তু সময়সাপেক্ষ।

UDP হলো এলাকায় মাইকিং করা — ঘোষণা একবারই হয়। যে শুনল শুনল, কেউ একটা শব্দ মিস করলে আবার বলা হয় না। দ্রুত ও সবার কাছে তাৎক্ষণিক — কিন্তু কিছু কথা হারাতে পারে। Live ঘোষণায় এক শব্দ হারানো বড় ব্যাপার নয়, কিন্তু থেমে গিয়ে আবার বলা বিরক্তিকর।

পাশাপাশি তুলনা

বিষয়TCPUDP
Connectionআছে (handshake)নেই (connectionless)
নির্ভরযোগ্যতাহ্যাঁ, হারালে আবার পাঠায়না
ক্রম (ordering)নিশ্চিতনিশ্চিত নয়
গতি/latencyতুলনামূলক ধীরখুব দ্রুত
Overheadবেশিকম
উপযুক্তweb, email, filelive video, gaming, DNS

কখন কোনটা বেছে নেবে

  • TCP বেছে নাও যখন প্রতিটা byte নির্ভুলভাবে ও সঠিক ক্রমে পৌঁছানো জরুরি — web page (HTTP/HTTPS), email, file download, ব্যাঙ্কিং। এক byte হারালে চলবে না।
  • UDP বেছে নাও যখন গতিই সব, আর দু-একটা packet হারালেও বড় ক্ষতি নেই — live video/voice call, online gaming, live streaming, DNS query। এখানে পুরোনো হারানো data-র জন্য থেমে থাকার চেয়ে নতুন data দ্রুত আসা ভালো।
সাবধান

সবচেয়ে সাধারণ ভুল: "UDP তো দ্রুত, তাই সবকিছুতে UDP দিলেই কাজ চটপট হবে" — এমন ভাবা। UDP-তে data হারানো বা এলোমেলো হওয়া স্বাভাবিক; file download বা payment-এ একটা packet হারালে পুরো data নষ্ট। গতি তখনই মূল্যবান যখন হারানো packet আসলেই উপেক্ষা করা যায়। নির্ভুলতা জরুরি হলে TCP-ই ঠিক।

বাস্তব উদাহরণ

  • Web (HTTP/HTTPS), email (SMTP), file transfer (FTP) — সবই TCP-র ওপর, কারণ এক byte-ও হারানো চলবে না।
  • Zoom, WhatsApp call, online গেম (PUBG/Valorant) — মূলত UDP, কারণ একটু পুরোনো frame হারিয়ে নতুন frame দ্রুত দেখানোই ভালো; থেমে যাওয়া অসহনীয়।
  • DNS (domain → IP খোঁজা) সাধারণত UDP — ছোট, দ্রুত query; উত্তর না এলে আবার চাইলেই হলো।
  • QUIC / HTTP/3 আধুনিক চাল: UDP-র গতির ওপর নিজে নির্ভরযোগ্যতা যোগ করে নেয় — দুই জগতের সেরাটা নিতে।
টিপস

Interview-তে protocol বাছাই জিজ্ঞেস করলে এক বাক্যে trade-off বলো: "নির্ভুলতা বনাম গতি। File বা payment-এ TCP, কারণ data হারানো চলবে না; live video বা gaming-এ UDP, কারণ low latency সবচেয়ে জরুরি আর দু-একটা packet হারানো গ্রহণযোগ্য।" — এই এক লাইনেই তুমি পুরো ধারণাটা ধরে ফেললে।

মূল শব্দ (Key Terms)

মিনি কুইজ

1. TCP-র মূল প্রতিশ্রুতি কোনটি?

2. UDP কেন live video call বা online gaming-এ পছন্দ করা হয়?

3. Three-way handshake কোনটিতে হয়?