#linux_time
🤝 دو تا سیستم چطور توافق میکنن که ترتیب packetها رو گم نکنن؟
تا حالا شده فکر کنی وقتی یه browser میخواد به یه سرور وصل شه، چطور اول با هم یه توافق میکنن تا دیتای رد و بدل شده قاطی نشه؟ این فرآیند شروع ارتباط توی TCP رو بهش میگن three-way handshake که یه جورایی مثل یه handshake رسمی بین دو تا سیستم برای شروع یه مکالمهست.
داستان از اینجا شروع میشه که کلاینت یه packet با SYN flag میفرسته که توش یه عدد تصادفی به اسم ISN هست؛ این عدد در واقع نقطه شروع شمارهگذاری بایتهای ارسالیه. سرور در جواب یه SYN-ACK میفرسته که هم عدد کلاینت رو تایید میکنه و هم ISN تصادفی خودش رو میفرسته تا هر دو طرف بدونن بایتهای بعدی از کجا شروع میشه. نکته مهم اینجاست که kernel این اعداد رو تصادفی انتخاب میکنه تا هم جلوی حملات sequence prediction گرفته بشه و هم اگه packetهای قدیمی از یه connection قبلی توی شبکه سرگردون بودن، با شمارههای جدید قاطی نشن. در نهایت کلاینت با یه ACK آخرین تاییدیه رو میفرسته و هر دو طرف وارد حالت established میشن.
اگه این فرآیند درست انجام نشه یا مثلاً یه مهاجم کلی SYN بفرسته و جواب SYN-ACK رو نده، سرور توی حالت syn received میمونه و منابعش اشغال میشه که بهش میگن SYN flood. برای همین توی kernelهای مدرن مکانیزمهایی مثل SYN cookies وجود داره تا بدون رزرو کردن حافظه، این handshake رو مدیریت کنن.
❓ نظرتون راجب این پست چیه ؟ برامون تو کامنتا بنویسین :)
@things_to_know_channel
Post #448
374
- 🔥 6
- ❤ 1