پرش به مطلب اصلی

googling

آها فهمیدم، می‌خوای سبک دوستانه و عامیانه باشه، مثل اینکه یه دوستت داره توضیح می‌ده ولی همون وقت دقیق هم باشه. من نوت‌ها رو بازنویسی می‌کنم با همین لحن:


چه اتفاقی میفته وقتی چیزی رو توی گوگل سرچ می‌کنیم

  1. اول باید بفهمه IP سرور گوگل چیه

    • مرورگر اول فایل hosts و کش DNS محلی سیستم و مرورگر رو چک می‌کنه، شاید قبلاً جواب رو داشته باشه.

    • اگه نداشت → میره سراغ DNS. معمولاً UDP می‌فرسته چون سبک‌تره و ping-pong TCP نداره.

    • البته اگه جواب خیلی بزرگ باشه یا نتونه جا بشه → DNS جواب می‌ده Truncate و مرورگر دوباره TCP می‌زنه.

    • اینجوری سلسله مراتب DNS طی می‌شه: کش محلی → ISP → recursive DNS → سرور اصلی تا جواب پیدا بشه.

  2. بعدش اتصال واقعی به سرور شروع می‌شه

    • مرورگر یه TCP handshake (SYN → SYN-ACK → ACK) انجام می‌ده یا اگه QUIC باشه روی UDP.

    • بعدش TLS handshake انجام می‌شه تا همه داده‌ها رمز بشه و هیچ کس وسط نتونه بخونه یا تغییر بده.

  3. TLS handshake و Diffie–Hellman (داستان کلید مخفی)

    • هدفش اینه که مرورگر (آلیس) و سرور (گوگل/باب) یه کلید مشترک بسازن بدون اینکه کسی وسط بتونه بفهمه.

    • مثال رنگی:

      1. یه رنگ عمومی انتخاب می‌کنن (مثلاً سفید) که همه می‌بینن.

      2. هرکدوم یه رنگ مخفی خودش انتخاب می‌کنه (آلیس آبی، باب زرد).

      3. هر کدوم رنگ مخفی خودش رو با سفید مخلوط می‌کنه و برای دیگری می‌فرسته. شنودگر فقط ترکیب‌ها رو می‌بینه و نمی‌فهمه رنگ مخفی واقعی چی بوده.

      4. بعد هر کدوم ترکیب دریافتی رو دوباره با رنگ مخفی خودش مخلوط می‌کنه → هر دو به همون رنگ سبز نهایی می‌رسن.

    • این سبز نهایی = کلید session. بعدش هر چی می‌فرستن رمز شده است.

  4. از اینجا همه داده‌ها رمز می‌شه

    • یعنی متن سرچ، نتایج گوگل، عکس‌ها و هر چیزی که بین مرورگر و سرور رد و بدل می‌شه، رمز شده است.

    • پروتکل‌ها: HTTPS = HTTP + TLS + TCP/QUIC

  5. SNI (Server Name Indication)

    • وقتی TLS شروع می‌شه، مرورگر باید بگه کدوم سایت روی این سرور چند سایتیه می‌خواد باز کنه.

    • این اسم دامنه توی ClientHello فرستاده می‌شه = SNI.

    • بدون ECH، شنودگر می‌تونه ببینه تو کدوم سایت هستی، حتی اگه محتوا رمز شده باشه.

  6. ECH (Encrypted Client Hello)

    • استاندارد جدید TLS که SNI و بعضی metadata ها رو رمز می‌کنه.

    • فقط سرور اصلی می‌تونه بازش کنه و handshake ادامه پیدا کنه.

    • نتیجه: شنودگر فقط IP سرور رو می‌بینه و اسم سایت و handshake مخفی می‌مونه.


نکات اضافه که خوبه بدونی

  • DNS قدیمی محدودیت ۵۱۲ بایت داشت، ولی EDNS0 این مشکل رو کم کرده.

  • Diffie–Hellman فقط برای ساخت کلید sessionه، خود TLS چیزای دیگه مثل certificate، MAC، الگوریتم رمز و غیره هم داره.

  • حتی اگه DNS سنتی باشه، محتوای اصلی پیام‌ها کاملاً امنه.

  • QUIC TLS رو روی UDP اجرا می‌کنه، پس لزوماً TCP نیست که رمزنگاری رو تضمین کنه.

  • فایل hosts و کش سیستم قبل از پرسش به resolver چک می‌شه.