04. Telegram TL va MTProto Qanday Ishlaydi?
gRPC & High-Performance System Design
04. Telegram TL va MTProto Qanday Ishlaydi?
Telegram dunyodagi eng tezkor, xavfsiz va tejamkor messenjer hisoblanadi. U hatto 2G/EDGE internet tarmog'ida ham xabarlarni lahzalarda yetkazadi.
Nega Telegram Google'ning Protobuf'ini yoki standart HTTP/JSON'ni ishlatmagan? Chunki Nikolay Durov (Pavel Durovning akasi, jahon darajasidagi matematik) va uning jamoasi undan-da samaraliroq bo'lgan TL (Type Language) va MTProto protokolini yaratishgan.
1. Type Language (TL) Nima?
Type Language — bu Telegram tomonidan ma'lumotlar turlari va RPC chaqiruvlarini tavsiflash uchun yaratilgan til.
Qarang, TL sxemasi qanchalik qisqa va aniq:
// TL Sxemasidan namuna
userEmpty#20e0c028 id:long = User;
user#833147fc flags:# self:flags.10?true contact:flags.11?true id:long first_name:flags.0?string last_name:flags.1?string = User;
---functions---
messages.sendMessage#520c3870 flags:# no_webpage:flags.1?true peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long = Updates;
TL ning Sehrli Jihatlari:
- CRC32 Constructor ID: Har bir tur yoki funksiya oxirida
#833147fcyoki#520c3870kabi 32-bitlik (4 bayt) hesh bor. Bu butun deklaratsiyaning CRC32 heshi! - Nol Ortiqcha Bayt: Serverga so'rov yuborilganda funksiya nomi (
"messages.sendMessage") matn sifatida yuborilmaydi — faqat uning 4 baytlik identifikatori (0x520c3870) yuboriladi! - Bitmask Flags: Agar foydalanuvchining familiyasi (
last_name) bo'lmasa,flagsbitmaskidagi 1-bit0bo'ladi va xotiradan 1 bayt ham bo'sh joy ketmaydi.
2. MTProto 2.0 Transport Qatlami
MTProto — bu mobil tarmoqlarda paketlar yo'qolishiga va xakerlik hujumlariga qarshi chidamli kriptografik transport protokoli.
+-----------------------------------------------------------------------+
| MTProto 2.0 Paketi |
+---------------+------------------+-----------------+------------------+
| Auth Key ID | Message Key | Encrypted Data | Padding |
| (8 bayt) | (16 bayt SHA256) | (AES-256 IGE) | (12-1024 bayt) |
+---------------+------------------+-----------------+------------------+
MTProto ning Asosiy Xususiyatlari:
- AES-256 IGE (Infinite Garble Extension): Xabarning bitta biti o'zgarsa ham, butun shifrlangan blok butunlay buziladi va xaker xabarni o'zgartira olmaydi.
- Diffie-Hellman Key Exchange: Mobil ilova server bilan ulanishi bilan, o'rtada 2048-bitlik maxfiy Auth Key hosil qilinadi. Bu kalit hech qachon tarmoq orqali o'tmaydi.
- Message ID: Har bir xabar vaqt millisekundlariga bog'langan noyob ID ga ega. Bu bir xil xabarning tarmoq takrorlanishi (Replay Attack) orqali ikki marta yuborilishining oldini oladi.
3. Telegram Serverlari: In-Memory Engine va KPHP
Telegram serverlari qanday kodda yozilgan?
- C++ va KPHP: Telegram o'zining PHP kodlarini to'g'ridan-to'g'ri C++ ga kompilyatsiya qiluvchi KPHP dvigatelini yaratgan.
- In-Memory Engines: Telegram MySQL yoki an'anaviy diskdagi ma'lumotlar bazalariga suyanmaydi. Ular xotirada (RAM) ishlovchi yuzlab maxsus binar dvigatellarga ega. Har bir server terabaytlab operativ xotirada xabarlar indeksini saqlaydi.
- TL-to-C++ Codegen: TL sxemasi maxsus
tl-compilerorqali to'g'ridan-to'g'ri C++ strukturalari va xotira manzillariga aylanadi.
4. O'z Loyihangizda Bu Bilimlarni Qanday Ishlatish Mumkin?
Agar siz Telegram kabi o'ta yengil va tezkor tizim qurmoqchi bo'lsangiz:
- Protobuf v3 — bu sanoat standarti bo'lib, Telegramning TL g'oyalariga eng yaqin va barcha tillar (Go, Swift, Kotlin, Rust) tomonidan to'liq qo'llab-quvvatlanadigan yechimdir.
- Har bir so'rovga String URL yuborish o'rniga, kichik binar Action ID lardan foydalaning.
- Katta JSON payloadlar o'rniga Bitmask Flags texnikasini qo'llang.
Keyingi darsda biz mobil tarmoqlarda ulanish uzilishlariga barham beruvchi HTTP/3 va QUIC inqilobini o'rganamiz!