Yeh page har woh word, number, aur symbol build karta hai jis par parent note rely karta hai — "byte kya hota hai" se shuru hokar "yahan 214 ka kya matlab hai" tak. Agar parent note ne kuch bina explain kiye keh diya, toh hum yahan explain karte hain.
Kisi bhi protocol se pehle, woh sabse chhoti cheez hai jo computer store karta hai: ek bit — ek single switch jo ya toh 0 hai ya 1. Ek line mein aath bits mila ke ek byte banta hai.
Yeh topic ko kyun chahiye: parent note mein har "frame header is 9 bytes", har "24-bit Length", har "one byte for a whole header" literally inhi bulbs ko count kar raha hai. Agar bulbs nahi dikh rahe, toh woh numbers meaningless hain.
Figure s01 — kya dikhata hai: aath bulbs mila ke ek byte banta hai. Pattern 0110 1010 ko lit bulbs = 1 se draw kiya gaya hai; har column ko uska place-value 27,26,…,20 label kiya gaya hai. Lit place-values add karne par (64+32+8+2=106) dikhta hai ki bulbs ki ek row kaise ek number ban jaati hai. Aage badhne se pehle caption ko bulb-by-bulb padho.
27=128, toh 7 bits 0 se 127 tak hold karte hain.
28=256, toh 8 bits 0 se 255 tak hold karte hain (yeh 256patterns hain, lekin sabse bada single number 255 hai).
214=16384 — parent ka "default max frame size" yahi hai (possible values ki count; sabse bada 16383 hai).
224=16,777,216 ek 24-bit Length field ke patterns ki sankhya hai, toh yeh 0 se 224−1=16,777,215 tak values name karta hai — sabse bada single Length 16,777,215 hai, 16,777,216 nahi.
2N−1 kyun hai, 2N kyun nahi?
Kyunki 0 ko bhi ek valid pattern mante hain ::: N bits ke saath 2N patterns milte hain jinka number 0,1,…,2N−1 hai, toh sabse bada single number 2N−1 hai.
HTTP/1.1 ek text protocol hai: yeh literally G, E, T letters, ek space, phir path bhejta hai — print karne par human-readable hota hai. HTTP/2 ek binary protocol hai: yeh fixed slots mein raw numbers bhejta hai, spelled-out words nahi.
Yahan hex kyun: wire bytes hai, aur ek byte = do hex digits, yeh aath bits se kaafi clean padha jaata hai. Har "0x40" niche sirf ek byte hai is shorthand mein likha hua.
Yeh topic ko kyun chahiye: parent ki puri "Text → binary framing" line isi distinction par tiki hui hai. Binary HTTP/2 ko allow karta hai puri header line ko ek byte mein pack karne ke liye (parent ka Section 4) — spelled-out text ke saath impossible. Aur bina ek fixed byte order ke, do machines same Length ya Stream ID ko do alag numbers ki tarah padhte, isliye har field diagram niche big-endian, most-significant-byte-first assume karta hai.
Parent ke HPACK section mein teen math notations use hain jinhe define nahi kiya gaya. Yeh rahi unki definitions.
Yeh topic ko kyun chahiye: parent ke prefix-integer trick mein (I' mod 128) + 128 emit hota hai aur I' ← floor(I'/128) update hota hai. Yeh exactly "leftover eggs ek 7-bit carton mein, phir full cartons count karo" hai, tab tak repeat karo jab tak kuch na bache. Hum niche parent ka example verify karte hain.
Figure s02 — kya dikhata hai:1337 ke liye teen output bytes coloured boxes ke roop mein, left se right: prefix 31 (blue, "full, I overflowed"), phir 154 (orange, 26 + 128, continuation flag on), phir 10 (green, last byte). Arrows working value I′ ko box se box carry karte hain, aur bottom line arithmetic 1306=10×128+26 reproduce karta hai. Arrows trace karo aur I′ ko shrink hote dekho.
Ek Stream ID sirf ek whole number hai jo frame header ke 31 bits mein likha jaata hai. Yeh woh label hai jo kehta hai "yeh chunk conversation number 3 ka hai."
Yeh topic ko kyun chahiye: multiplexing (parent §3) interleaved chunks ko is label se reassemble karta hai. Server push (parent §5) ek even ID reserve karta hai taaki ek pushed resource client request se clash na kare. Aur parent ka SETTINGS frame kahi toh rehna chahiye — yeh stream 0 pe rehta hai, connection-wide channel. 31-bit size 231 possible labels deta hai — kaafi zyada.
Ab hum parent ka frame formula symbol-by-symbol padh sakte hain. Ek frame ek fixed 9-byte header hota hai jiske baad payload aata hai.
Figure s03 — kya dikhata hai: 9-byte header ek single left-to-right strip ke roop mein draw kiya gaya hai, har field ek coloured box jiska width bit-count ke proportional hai (Length sabse wide 24 pe, phir Stream ID 31 pe, R ek sliver 1 pe). Har box ke neeche labels bit-count dete hain; call-out arrows Length pe "default mein 214 se zyada nahi" aur Stream ID pe "odd = client, even = server push, 0 = connection" mark karte hain. Strip wahi byte layout hai jo wire pe dikh ta.
Yeh topic ko kyun chahiye: har bada idea inhi frames ka stream hai. Ek message (request ya response) = ek HEADERS frame + zero ya zyada DATA frames jo ek Stream ID share karte hain. Multiplexing = alag Stream IDs ke frames ko ek connection pe interleave karna.
HTTP/2 wire ko directly touch nahi karta; yeh do lower layers ke upar ride karta hai jinke baare mein parent assume karta hai ki tum jaante ho.
Yeh topic ko kyun chahiye:
Parent ka "one handshake vs six" TCP+TLS RTTs ke baare mein claim hai: T2≈1×(TCP RTT+TLS RTTs) vs T1.1≈6× that.
Famous "TCP-level head-of-line blocking abhi bhi exist karta hai" mistake isliye hai kyunki TCP in-order bytes par insist karta hai — ek lost packet har stream ko stall kar deta hai. Isliye HTTP-3-and-QUIC transport switch karta hai.
Recall Multiplexing application HOL blocking kyun remove kar sakta hai lekin transport HOL blocking kyun nahi?
Streams HTTP layer pe independent hain, lekin sab ek TCP byte-stream share karte hain ::: TCP bytes ko strictly in order deliver karta hai, isliye ek lost packet sabhi streams ko retransmission ka intezaar karne par majboor karta hai — ek transport-level stall jise HTTP/2 dodge nahi kar sakta.
HPACK (parent §4) teen ideas ko stitchkar jodta hai jinke apne vault notes hain. Inhe HTTP/2 ke liye koi nayi machinery nahi banaayi gayi — HPACK inhe sirf combine karta hai, isliye abhi inse milna parent ke §4 ko magic ki jagah assembly ki tarah readable banata hai.
Figure s04 — kya dikhata hai: ek header field HPACK mein enter karta hai aur do forks mein se ek leta hai. Fork A (green, "already known") → ek varint index number → tiny output. Fork B (orange, "new literal") → Huffman-coded characters → small output. Ek red guard box labelled "fixed table, no adaptive mixing" dono forks ke aage baitha hai caption ke saath "CRIME length-leak blocks karta hai." Jo bhi fork applicable ho use follow karo aur dekho kaunsa tool shrinking karta hai.
Yeh topic ko kyun chahiye: bina Huffman ke "literal header encoded in fewer bits" explain nahi kar sakte; bina varint ke index bytes nahi padh sakte; bina CRIME idea ke parent ka "HPACK sirf gzip nahi hai" explain nahi kar sakte.
Neeche ka map top-to-bottom padha jaata hai: ek arrow X→Y ka matlab "Y samajhne se pehle X chahiye." Bottom node "HTTP 2 topic" parent note hai; har doosra node is page pe build ek foundation hai. Koi bhi path neeche follow karo aur tum in ideas ko sikhane ke order mein retrace karoge.
Left branch (blue foundations): bit/byte → powers of two → Stream ID aur frame header → multiplexing.
Transport branch: TCP in-order bytes dono multiplexing aur TCP HOL blocking caveat ko feed karta hai.
Right branch (compression): Huffman, varint prefix int, aur CRIME idea teeno HPACK ko feed karte hain.
Push branch: even Stream IDserver push ko feed karta hai.