4.3.20 · Coding › Computer Networks
Intuition 30-second picture
Internet (IP) ek lossy, reordering, duplicating postman hai. TCP ka kaam hai us
unreliable byte-carrier ko ek reliable, in-order byte stream mein badalna. Yeh teen ideas se hota hai:
Har byte ko number karo taaki dono sides agree karein ki kya kya hai (sequence numbers ).
Jo aaya usse acknowledge karo taaki sender ko pata chale kya through gaya (ACK numbers ).
Jo time pe acknowledge nahi hua usse dobara bhejo (retransmission ).
Clever trick yeh hai ki ACKs cumulative hote hain: "Mujhe byte N tak sab kuch mil gaya" — ek chota
sa number poore received prefix ko summarize kar leta hai.
Definition Woh problem jo TCP solve karta hai
IP packets deliver karta hai jo lost , reordered , delayed , ya duplicated ho sakte hain.
Application ko ek reliable, ordered stream of bytes chahiye. TCP woh layer hai jo
sequence/ack numbers + timers + retransmission use karke yeh gap bridge karta hai.
"Reliability" yahan precisely kya hai? Do guarantees:
No loss : app jo bhi byte likhti hai woh eventually doosri app tak pahunch jaati hai (ya connection toot jaata hai).
In order : bytes receiving app ko exactly usi order mein deliver hote hain jis order mein bheje gaye the.
Bytes ko kyun number karein, packets ko kyun nahi?
Agar aap packets ko number karte, toh alag size se retransmit karna ambiguous ho jaata. Byte ko
byte stream se number karke, har byte ki ek permanent identity hoti hai. Ek segment bas yeh kehta hai "main
bytes [seq, seq+len) carry kar raha hoon". Resends, splits, aur merges sab consistent rehte hain.
Definition Sequence number (SEQ)
Ek segment ka SEQ field = uske pehle data byte ka stream position.
L bytes carry karne wala segment jo SEQ se shuru hota hai, byte positions
[ SEQ , SEQ + L )
cover karta hai.
Agle segment ko order mein SEQ + L se shuru hona chahiye.
Definition Initial Sequence Number (ISN)
Numbering 0 se shuru nahi hoti . Handshake ke dauran har side ek random ISN pick karti hai.
Random kyun? Isliye ki kisi purane, delayed segment ko (same IP/port pair wali pichli connection ka)
nayi valid data na samjha jaye — aur sequence guessing/injection attacks mushkil ho jayein.
SYN aur FIN flags bhi har ek ek sequence number consume karte hain (unhe 1 phantom byte treat kiya jaata hai),
isliye ISN x wale SYN ke ACK ki value x + 1 hoti hai.
Intuition Ek number = "isse pehle sab safe hai"
Har received byte list karne ki jagah, receiver next expected byte bhejta hai.
Agar woh N ACK karta hai, toh implicitly keh raha hai "Mujhe saare bytes < N , contiguously, mil gaye hain."
Yeh brilliant hai kyunki ek ACK kaafi saare segments cover kar sakta hai , aur ek lost ACK automatically
next ACK se repair ho jaata hai (jo aur bada number carry karta hai).
Definition Cumulative ACK
ACK = ( highest contiguous byte received ) + 1
Yeh next expected byte ka sequence number hai. Yeh cumulatively acknowledge karta hai — yaani
isse neeche ka poora prefix. Yeh kisi gap ke baad mile bytes ke baare mein kuch nahi kehta.
Worked example Numbers ke saath walk-through (Har step kyun?)
Sender 3 segments bhejta hai, har ek 100 bytes ka, SEQ = 1000 se shuru hoke.
Segment
SEQ
bytes covered
Order mein aane ke baad receiver ACK karta hai
A
1000
[1000,1100)
1100 — Kyun? last contiguous byte 1099 hai, next expected = 1100
B
1100
[1100,1200)
1200 — Kyun? ab contiguous 1199 tak hai
C
1200
[1200,1300)
1300 — Kyun? contiguous 1299 tak hai
Ab tod ke dekho: maan lo B lost ho gaya , lekin A aur C aa gaye.
A aata hai → ACK 1100 (Kyun? contiguous 1099 tak hai).
C aata hai lekin gap hai (1100–1199 missing). Receiver C ko buffer karta hai lekin aage nahi badh sakta .
Woh dobara ACK 1100 bhejta hai (ek duplicate ACK ) — Kyun? Highest contiguous byte
abhi bhi 1099 hai, toh next expected byte abhi bhi 1100 hai, chahe C buffer mein ho.
Do complementary mechanisms hain.
Intuition "Agar time pe kisi ne acknowledge nahi kiya, toh maan lo woh gaya."
Sender data bhejte waqt ek timer start karta hai. Agar us data ko cover karne wala ACK
Retransmission Timeout (RTO) expire hone se pehle nahi aata, toh sender oldest unacknowledged segment dobara bhejta hai.
Definition RTO estimate karna (Jacobson/Karels — derived idea)
Hume round-trip time (RTT) guess karni hai aur safety margin add karni hai.
Har naye sample R ke saath exponentially-weighted moving averages use karke:
SRTT ← ( 1 − α ) SRTT + α R
RTTVAR ← ( 1 − β ) RTTVAR + β ∣ SRTT − R ∣
RTO = SRTT + 4 ⋅ RTTVAR
typical values: α = 1/8 , β = 1/4 .
Moving average kyun? Network RTT vary karta hai; ek akela sample noisy hota hai. SRTT usse smooth karta hai.
4·RTTVAR kyun add karte hain? Agar RTT jittery hai, toh hum loss declare karne se pehle zyada wait karte hain, taaki
false retransmissions na hon. Har timeout pe RTO double ho jaata hai (exponential backoff) taaki
congested network pe zyada load na pade.
Intuition (Slow) timer ka hamesha wait mat karo.
Duplicate ACKs ek hint hain ki ek baad wala segment aa gaya hai lekin ek pehle wala missing hai.
3 duplicate ACKs (yaani total 4 identical ACKs) strongly suggest karte hain ki loss hua hai — sirf reordering nahi —
toh sender RTO ka wait kiye bina turant resend karta hai.
Definition Fast retransmit
Value N ke 3rd duplicate ACK milne par, sender turant woh segment retransmit karta hai jo
sequence number N se shuru hota hai (wahi jo receiver wait kar raha hai).
Intuition Ek sentence mein strength aur weakness
Cumulative ACKs robust hain (ek lost ACK next se heal ho jaata hai) aur compact hain (ek number),
lekin woh imprecise hain: woh yeh nahi keh sakte "mujhe C aur D mil gaye lekin B nahi." Woh single missing segment
resending force kar sakta hai ya progress stall kar sakta hai — exactly isliye Selective ACK (SACK) ko
received-but-non-contiguous ranges report karne ke liye option ke taur par add kiya gaya.
Recall Feynman: ek 12-saal ke bachche ko samjhao
Socho tum ek lambi chitthi ek numbered page at a time mail kar rahe ho. Tumhara dost email nahi karta
"page 5 mila, page 7 mila." Woh kehta hai "Mujhe page 4 tak sab kuch hai, ab page 5 bhejo."
Agar koi page mail mein kho jaata hai, woh kehta rehta hai "ab bhi page 5 chahiye!" Kuch baar yeh sunne ke baad,
tum bas page 5 dobara mail karte ho — aur jab woh land karta hai, tumhare dost ke paas suddenly pages 5, 6, AUR 7
hote hain (woh extra pages apni desk pe rakh raha tha), toh woh kehta hai "ab mujhe page 7 tak sab hai!"
Woh "page X tak sab kuch" wala message cumulative ACK hai, aur lost page ko dobara mail karna
retransmission hai.
"SEQ kehta hai main KAHAN se SHURU hoon, ACK kehta hai mujhe AAGE KYA CHAHIYE."
Aur: C umulative ACK = C ontiguous prefix count karo, C oming byte report karo.
Common mistake "ACK number last received byte ke barabar hota hai."
Kyun sahi lagta hai: "acknowledge" ka matlab lagta hai "jo last cheez mili usse confirm karo."
Fix: ACK next expected byte hai = last contiguous byte + 1 . Agar aap +1 ki jagah
last received byte ACK karo, toh sender us byte ko hamesha resend karta rahega. Hamesha +1
yaad rakho (aur SYN/FIN ka +1 bhi).
Common mistake "Duplicate ACK ka matlab receiver ka data lose hua."
Kyun sahi lagta hai: repeated identical messages problem report jaisi lagte hain.
Fix: Dup ACK actually matlab hai data out of order aaya (toh receiver gap se aage badh gaya aur dobara announce kar raha hai ki use kya chahiye). Yeh ek gap signal karta hai, aur jo data dup ACK cause kara woh successfully receive aur buffer ho gaya tha.
Common mistake "Cumulative ACK 1400 ka matlab hai segments B, C, D sab ko apna alag ACK mila."
Kyun sahi lagta hai: TCP request/response jaisa lagta hai.
Fix: Ek ACK (1400) ek saath 1400 se neeche ke saare bytes cumulatively cover karta hai. TCP delay/
coalesce bhi karta hai ACKs ko deliberately. ACKs count karna ≠ segments count karna.
Common mistake "3 dup ACKs pe resend karne ke liye timeout ka wait karna padta hai."
Kyun sahi lagta hai: textbooks mein RTO "the" retransmission mechanism hai.
Fix: Yahi toh fast retransmit ka poora point hai — 3rd dup ACK pe turant resend karo,
RTO fire hone se bahut pehle, roughly ek RTT ya zyada bachate hue.
TCP ka sequence number kya represent karta hai? Segment ke pehle data byte ka stream position; yeh [ SEQ , SEQ + L ) cover karta hai.
Cumulative ACK number kaise compute hota hai? ACK = (highest contiguous byte received) + 1 = next expected byte.
TCP packets ki jagah bytes ko kyun number karta hai? Taaki har byte ki permanent identity ho; resends/splits/merges sab unambiguous rahein chahe segment sizes change ho jayein.
Initial Sequence Number random kyun hota hai, 0 kyun nahi? Purani delayed segments (pichli connection ki) se confusion se bachne ke liye, aur sequence-injection attacks resist karne ke liye.
Duplicate ACK kya indicate karta hai? Ek baad wala segment out of order aaya jabki ek pehle wala abhi missing hai — yaani gap hai; jo named segment hai woh buffer hua hai, lost nahi.
Kitne duplicate ACKs ke baad fast retransmit trigger hota hai, aur kya resend hota hai? 3 duplicate ACKs ke baad; sender woh segment resend karta hai jo ACK number se shuru hota hai (jo missing hai).
RTO formula aur uske terms batao. RTO = SRTT + 4·RTTVAR, jahan SRTT smoothed RTT hai aur RTTVAR RTT variation (mean deviation) hai.
Cumulative ACK ek lost ACK ko self-healing kyun banata hai? Baad wala ACK ek bada number carry karta hai jo already sab kuch cover kar leta hai jo lost ACK karta, toh lost ACK irrelevant ho jaata hai.
Ek ACK kabhi kabhi kaafi saare bytes forward kyun jump karta hai? Ek single hole fill karne se jo bhi out-of-order data buffer mein tha woh sab connect ho jaata hai, toh contiguous prefix (aur isliye ACK) aage leap karta hai.
Cumulative ACK ki kya limitation hai jo SACK fix karta hai? Cumulative ACK received-but-non-contiguous ranges report nahi kar sakta; SACK receiver ko exactly batane deta hai ki uske paas kaun se extra blocks hain.
Repeated timeouts pe RTO ka kya hota hai? Har baar double ho jaata hai (exponential backoff) taaki congested network overload na ho.
Kya SYN aur FIN flags sequence numbers consume karte hain? Haan, har ek ek sequence number consume karta hai, isliye ISN x wale SYN ka ACK x+1 hota hai.
TCP three-way handshake — jahan ISNs exchange hote hain aur SYN ek seq number consume karta hai.
Sliding window flow control — window bound karta hai ki kitne unacked bytes outstanding ho sakte hain.
TCP congestion control — fast retransmit fast recovery ke saath pair karta hai; dup ACKs cwnd logic drive karte hain.
Selective ACK (SACK) — cumulative ACK ki inability fix karta hai gaps precisely report karne ki.
Go-Back-N vs Selective Repeat — TCP ek hybrid hai jo SACK ke saath selective repeat ki taraf lean karta hai.
IP unreliable datagram service — woh lossy substrate jiske liye TCP compensate karta hai.
RTT estimation / Jacobson's algorithm — RTO timer ke peeche ka math.
equals highest contiguous plus 1
Reliable in-order byte stream