> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/networking/tcp-ip-vs-udp.md).

# TCP/IP vs UDP

কোনো system design করলে Communication Protocol বেছে নেওয়া অনেক গুরুত্বপূর্ণ। বিশেষ করে Distributed system, real-time apps, gaming servers, file transfer service ইত্যাদিতে **TCP/IP** আর **UDP**—এই দুইটা Protocol এর মধ্যে কনফিউশন থাকে।

### &#x20;TCP/IP: Reliable Communication

TCP হলো একধরনের **connection-oriented protocol**, মানে Sender আর Receiver এর মধ্যে **connection establish** হয়, তারপর ডেটা ট্রান্সফার শুরু হয়।

#### TCP-এর গুরুত্বপূর্ণ বৈশিষ্ট্য:

* **Reliable**: Packet হারিয়ে গেলেও TCP নিজে থেকে resend করে।
* **Ordered**: যে অর্ডারে ডেটা পাঠানো হয়, ঠিক সে অর্ডারেই Receiver পায়।
* **Error Checking**: TCP প্রতিটা প্যাকেটের integrity চেক করে।
* **Flow Control**: Receiver যতটুকু নিতে পারে, Sender ততটুকুই পাঠায়।
* **Congestion Control**: নেটওয়ার্কে চাপ থাকলে TCP ডেটা স্লো করে দেয়।

#### Example Use Case:

* Web Browsing (HTTP/HTTPS)
* File Transfer (FTP, SFTP)
* Email (SMTP, IMAP)

**System Design Impact:**

যখন reliability বেশি দরকার — যেমন অর্ধেক ফাইল নামিয়ে কাজ হবে না — তখন TCP best choice।

***

### UDP: Speed Over Reliability

UDP হলো **connectionless protocol**। মানে Sender আর Receiver-এর মধ্যে কোনো handshake হয় না, সরাসরি প্যাকেট পাঠায়।

#### UDP-এর বৈশিষ্ট্য:

* **Unreliable**: Packet হারিয়ে গেলে UDP তার খোঁজ করে না।
* **No Ordering**: কোন প্যাকেট আগে যাবে তার কোনো গ্যারান্টি নেই।
* **Fast**: TCP-এর মতো overhead নেই, super lightweight।
* **No Congestion Control**: যতো খুশি ততো data পাঠানো যায়।

#### Example Use Case:

* Online Gaming (low latency দরকার)
* Video Streaming (buffer করেই চালানো যায়)
* VoIP (voice over IP যেমন WhatsApp call)
* Real-time stock updates

**System Design Impact:**

যখন speed critical — এবং কিছু data loss acceptable — তখন UDP আদর্শ। যেমন live match stream এ ১-২ সেকেন্ডের loss চলেই যায়, কিন্তু delay চলবে না।

***

### System Design এ কোনটা ব্যবহার করবেন?

* যদি system-এ **data loss unacceptable** হয় (banking app, document sharing system), তাহলে **TCP**।
* যদি system-এ **speed বেশি important**, আর কিছু packet loss acceptable হয় (live chat, sports update app), তাহলে **UDP**।

***

### মনে রাখার টিপস:

> **TCP** = Think of it like **Phone Call** — আগে connect করতে হয়, তারপর কথা হয়, কেউ শুনছে না বুঝলে বারবার বলা যায়।\
> **UDP** = Think of it like **Radio Broadcast** — সরাসরি সম্প্রচার, কেউ শুনছে কিনা সেটা জানা যায় না, কিন্তু অনেক দ্রুত।

***

TCP/IP আর UDP দুইটাই শক্তিশালী tool, কিন্তু কাজ ভেদে ব্যবহার আলাদা। System Design এ Communication Protocol ঠিকভাবে বেছে নিতে পারলে performance, scalability আর reliability অনেকটাই improve হয়।

আপনি যদি real-time system বানাতে চান, তাহলে UDP ভাবুন। আর security-critical বা data-consistency-heavy system হলে TCP-ই আপনার বন্ধু।
