4.3.18 · Coding › Computer Networks
Intuition 30-second mental model
TCP ek registered courier hai — delivery confirm karta hai, retry karta hai, order maintain karta hai, aur agar road crowded ho toh slow ho jaata hai. UDP postcard mailbox mein daalna jaisa hai: address likhो, daalo, aur chale jao. Koi handshake nahi, koi acknowledgement nahi, koi retry nahi. Fast aur cheap hai, lekin agar postcard kho gaya, toh tumhe kabhi pata nahi chalega.
UDP exist kyun karta hai? Kyunki kuch data ke liye, reliability ka overhead data ki value se zyada costly hota hai . Ek late video frame useless hai — uska intezaar karne se behtar hai skip kar do. Toh UDP tumhe IP ke upar ek patla, almost-transparent wrapper deta hai aur raste se hat jaata hai.
UDP (User Datagram Protocol) ek connectionless , unreliable , message-oriented Transport-layer protocol hai. Yeh IP mein sirf port numbers aur ek optional checksum add karta hai. Yeh reliability, ordering, flow control, ya congestion control provide nahi karta.
Connectionless → koi handshake nahi; pehla packet seedha data carry karta hai.
Unreliable → koi ACK nahi, koi retransmission nahi. Lost = gone.
Message-oriented (datagram) → ek send() = ek datagram = ek recv(). (TCP ek byte-stream hai; UDP message boundaries preserve karta hai.)
Header kaise figure out karein? Memorize mat karo — reconstruct karo yeh puchh ke "Transport ko IP mein kya add karna padega?"
IP ek machine tak deliver karta hai, lekin ek machine mein bahut saare programs chalte hain. Hume identify karna hoga ki kaun sa program → source port + destination port (16 bits each, toh 65535 tak).
Receiver ko pata hona chahiye datagram kahan khatam hota hai → ek length field.
Hum chahenge kuch error detection (IP sirf apna header checksum karta hai, data nahi) → ek checksum .
Bas. Char fields, har ek 16 bits = kul 8 bytes .
Compare karo: UDP header = 8 bytes , TCP header = 20 bytes (minimum). Woh 12-byte ki bachat + koi handshake nahi — yahi toh pura point hai.
Intuition Checksum kyun hota hai?
Bits transit mein flip ho jaate hain (noise, faulty routers). Hum chahte hain ek sasta tarika jo corruption detect kare. Idea: saara data sum karo; sum saath mein bhejo; receiver phir se sum kare aur compare kare. Agar koi bit flip hua, toh sums match nahi karenge.
Yeh kaise build hota hai (16-bit words par 1's complement sum):
Data ko 16-bit integers ki sequence ki tarah treat karo.
Unhe add karo. Jab bhi sum 16 bits overflow kare, carry ko wapas wrap around karke low 16 bits mein add karo (yahi one's-complement addition hai).
Final sum ka one's complement lo (har bit flip karo) → wahi checksum hai jo tum transmit karte ho.
One's complement + carry-wrap kyun?
Carry-wrap result ko 16 bits ke andar rakhta hai bina information khoye (overflow carry discard nahi hoti, recycle hoti hai).
Complement bhejna matlab receiver sirf sab kuch including checksum add kar sakta hai aur all-ones (0 xFFFF ) expect kar sakta hai: kyunki x + x = all 1s .
Worked example Checksum compute karo (3 words)
Words: w 1 = 0x4500 , w 2 = 0xF6CB , w 3 = 0x0000 .
Step 1 — w 1 + w 2 add karo: 0x4500 + 0xF6CB = 0x13BCB .
Yeh step kyun? Plain binary addition; 16 bits se overflow ho gaya (leading 1).
Step 2 — carry wrap karo: 1 (bit 16) drop karo, wapas add karo: 0x3BCB + 0x1 = 0x3BCC .
Kyun? One's-complement addition overflow recycle karta hai taaki koi information na khoye.
Step 3 — w 3 add karo: 0x3BCC + 0x0000 = 0x3BCC . Koi carry nahi.
Step 4 — complement lo: 0x3BCC = 0xC433 . Checksum = 0xC433.
Kyun? Bits flip karne se receiver all-ones sum se check kar sakta hai.
Receiver check: 0x3BCC + 0xC433 = 0xFFFF ✓ → all ones → accept.
Worked example "Pseudo-header" ka twist
UDP ka checksum actually ek pseudo-header (source IP, dest IP, protocol number = 17, UDP length) ko bhi cover karta hai, saath mein real UDP header + data ke.
Kyun? Taaki receiver detect kar sake ki datagram galat machine par misdeliver hua tha — destination IP checksum mein fold ho jaata hai, toh galat IP se checksum fail ho jaata hai. Yeh ek layering "violation" hai (Transport Network addresses dekh raha hai) jo safety ke liye accept kiya gaya hai.
Worked example Checksum = 0x0000 matlab "disabled"
IPv4 mein, checksum field optional hai. Agar sender compute nahi karta, toh 0x0000 bhejta hai.
Agar computed checksum genuinely 0 aaye toh? 0xFFFF bhejte hain instead (one's complement mein dono equal hain: dono zero represent karte hain). Yeh literal 0x0000 ko "no checksum" ke liye reserve karta hai. IPv6 mein checksum mandatory hai.
Intuition Jab loss/latency tradeoff UDP favor kare
UDP tab use karo jab timeliness > completeness ho, ya jab tum apni khud ki reliability upar build karoge, ya tiny request/response ke liye jahan handshake dominate karega.
Use case
UDP kyun jeet ta hai
DNS query
Ek chhota request, ek chhota reply. TCP handshake (3 packets) lookup se zyada costly hoga.
Video/voice (VoIP, streaming, games)
Ek retransmitted purana frame itna late aata hai ki useless hota hai — drop karo, aage badho.
DHCP, ARP-like bootstrapping
Client ka koi IP/connection nahi; datagram broadcast karo.
SNMP, NTP
Tiny, frequent, loss-tolerant management/time packets.
QUIC / HTTP/3
TCP ki rigidity se bachne ke liye userspace mein custom reliability + encryption UDP ke upar build karta hai.
Common mistake "UDP kuch guarantee nahi karta, toh yeh kabhi errors detect nahi karta."
Kyun sahi lagta hai: humein bataya jaata hai UDP "unreliable" hai. Fix: unreliable ≠ blind. Checksum corruption detect karta hai — bas fix nahi karta. Corrupt datagrams drop ho jaate hain; app unhe kabhi nahi dekhta. "Unreliable" matlab no recovery , na ki no detection .
Common mistake "UDP TCP jaisa ek stream hai, bas faster."
Kyun sahi lagta hai: dono Transport par hain. Fix: UDP message-oriented hai — har datagram poora aur alag deliver hota hai; boundaries preserve hoti hain. TCP ek byte stream hai jisme koi message boundaries nahi hain. Ek UDP send = ek recv.
Common mistake "Agar checksum correct hai, toh data definitely theek hai."
Kyun sahi lagta hai: math check out ho gaya. Fix: checksum sirf 16 bits ka hai — do errors cancel ho sakti hain (jaise ek word + 1 , doosra − 1 ) aur pass ho jaayein. Yeh zyattar single-bit errors pakadta hai lekin strong integrity guarantee nahi hai. Uske liye TLS/crypto hashes use karo.
Common mistake "Length field IP ke saath redundant hai, toh useless hai."
Kyun sahi lagta hai: IP mein already total length hai. Fix: yeh receiver ko IP arithmetic par trust kiye bina header/data split karne deta hai, aur pseudo-header checksum mein fold hota hai. Defensive hai, wasteful nahi.
Recall Feynman: ek 12-saal ke bachche ko explain karo
Socho tum apne dost ko ek quick note bhej rahe ho unke door ke neeche se. Tum knock nahi karte, "mil gaya!" ka intezaar nahi karte — bas neeche se daal dete ho aur chale jaate ho. Agar hawa usse uda le jaaye, toh tumhe kabhi pata nahi chalega. Woh hai UDP : super fast, koi waiting nahi, lekin koi promise nahi ki pahunch jaayega. Kam se kam ek phata hua note pakadne ke liye, tum neechey ek chhota sa number likhte ho jo saare words ke letter-counts ka sum hota hai (woh hai checksum ); tumhara dost dobara add karta hai aur agar number galat hai, toh woh jaanata hai note smudge ho gaya aur bas usse phenk deta hai. "Game ball position X par hai" 60 baar per second bhejna ke liye perfect — agar ek note kho bhi jaaye, agla note waise bhi fix kar dega.
"SP-DP-LC" → S ource P ort, D est P ort, L ength, C hecksum (4 fields, 8 bytes).
Nature: "CUM-D" → C onnectionless, U nreliable, M essage-oriented, D atagram.
UDP header kitne bytes ka hota hai aur usmein kitne fields hote hain? 8 bytes, 4 fields (har ek 16 bits): Source Port, Destination Port, Length, Checksum.
UDP Length field kya count karta hai? Header + data = 8 + payload bytes; minimum value 8 hai (empty payload).
UDP ko "unreliable" kyun kaha jaata hai agar usmein checksum hai? Yeh corruption detect karta hai (checksum) lekin recover nahi karta — koi ACKs ya retransmission nahi. Corrupt datagrams silently drop ho jaate hain.
UDP checksum kaise compute hota hai? Saare 16-bit words ka one's-complement sum (carry wrap-around ke saath), phir result ka one's complement lo.
Receiver ko saare words plus checksum sum karne par kya milna chahiye? All ones, 0xFFFF (one's-complement arithmetic mein) → datagram accepted.
One's-complement addition mein carry wrap kyun kiya jaata hai? Result ko 16 bits ke andar rakhne ke liye bina overflow information khoye.
UDP (IPv4) mein 0x0000 checksum field ka kya matlab hai? Checksum disabled/not computed. Ek genuine zero result 0xFFFF ke roop mein bheja jaata hai instead.
Pseudo-header kya hota hai aur checksum mein include kyun kiya jaata hai? Src IP, Dst IP, protocol=17, UDP length. Dest IP fold karne se receiver galat machine par misdeliver hue datagrams detect kar sakta hai.
TCP vs UDP: stream ya message? TCP = byte stream (koi boundaries nahi). UDP = message/datagram-oriented (ek send = ek recv, boundaries preserve hoti hain).
Teen classic UDP use cases aur unka reason batao. DNS (tiny request/reply, handshake too costly), VoIP/video/games (late retransmit useless hai), DHCP/SNMP/NTP (small loss-tolerant control packets).
HTTP/3 (QUIC) UDP ke upar kyun chalta hai? Userspace mein custom reliability + encryption build karne ke liye, TCP ki rigidity aur head-of-line blocking se bachne ke liye.
Kya correct checksum ke saath bhi corrupted data pass ho sakta hai? Haan — do compensating errors (jaise alag words mein +1 aur −1) cancel ho jaate hain; 16-bit checksum weak detection hai, cryptographic integrity nahi.
TCP header min size vs UDP header size? TCP = 20 bytes minimum; UDP = 8 bytes.
TCP — header, three-way handshake, reliability (reliable counterpart)
IP — datagrams and addressing (UDP IP ke upar ek patli layer hai)
DNS resolution (primary UDP user)
QUIC and HTTP-3 (reliability rebuilt over UDP)
One's complement arithmetic (checksum ka math)
Transport layer — ports and multiplexing (port fields exist kyun karte hain)