Navbat hanshakeni tahlil qilishga. Bunda bizga wireshark kerak bo'ladi (TCP paketlarini va muloqotini eshitish uchun albatta). Xo'sha keling serverni ishga tushiramiz nimalar sodir bo'lishini wireshark dasturi paneli orqali kuzatamiz.
Qizil to'rtburchakni chap tomonidagi tugmani bossangiz paketlarni eshitishni boshlaydi. Dasturga kirganingizda esa siz qayerdan kelayotgan va ketayotgan aloqani eshitishni istashingizni so'raydi, u yerga Loopback yozuvli narsani olsangiz bo'ladi:
Hech narsa bo'lmadi endi client tomonini ishga tushiramiz:
Wow, progress! Demak ikki taraflama aloqa o'rnatildi va ma'lumotlar almashildi.
Ilk SYN
Server ishlab turganida hech nima sodir bo'lmadi ammo client ishga tushishi bilan u serverga birinchi bo'lib SYN paketini jo'natdi.
Pastki chap tomondagi panelni qarasangiz Acknowledment Number, Flags, Sequence Number, Window size va boshqalarga ko'zingiz tushadi.
- Acknowledment Number - ma'lumotlar paketlarining muvaffaqiyatli qabul qilinishini tasdiqlash uchun qabul qiluvchi qurilma tomonidan yuborilgan unique identifikator.
- Flags - Yuborilgan TCP paketining turini aniqlash uchun foydalaniladi.
- Sequence Number - yuborilgan paketlar tartibini kuzatish orqali ma'lumotlar o'tkazib yuborilmasligini ta'minlaydi.
- Window size - Serverni tasdiqlashini kutmasdan Clientga uzatishi mumkin bo'lgan ma'lumotlar miqdorini cheklaydi. (Odatda u 65,535 byte ga teng ya'ni bir uzatishda undan oshiq ma'lumot uzata olmaysiz degani.)
Bularning barchasi siz foydalanayotgan framework yoki library tomonidan boshqariladi, shuning uchun siz bu haqida o'ylashingiz, siqilishingiz shart emas. Shunday qilib, client tomonidan serverga yuborilgan ushbu ilk SYN paketi "tanishtiruv yoki tanishuv" paketi deyilsa ham bo'ladi.
Serverdan javob
Ushbu SYNga server SYN, ACK paketi bilan javob qaytaradi. Yuqoridagi rasmga e'tibor bersangiz 2chi paketni Info qismida SYN, ACK (ikkisi yuqorida keltirilgan flaglarga misol) yozuvini ko'rishingiz mumkin.
Clientdan ACK javobi
Bu handshake (qoʻl siqish)ning oxirgi qismi boʻlib, aynan shu qismda client o'zini hozirgi ketma-ketlik raqami (sequence number)ni serverga ma'lum qiladi. Bu esa oldingi ketma-ketlik raqamdan 1taga ko'p bo'ladi (ya'ni 0dan keyin 1 kelgani kabi). Bundan tashqari, u serverdan kutilgan ketma-ketlik raqamini o'z ichiga oladi, bu tasdiqlash raqami (acknowledgement number bo'ladi).
Xulosa
Ko'rib turibsizki agar client-serverni yana ishga tushursangiz u yana xuddi shunday 10ga yaqin paketlarni almashadi. Database connection, TCP connection, Websocket va boshqa connectionlarni ha deb ochish nima uchun yomonligini umid qilaman ushbu post tushuntirib bera oldi.
O'rganayotgan til, framework yoki texnologiyalaringizni yaxshilab o'rganing. Shunda qaysi method, function yoki class qachon connection ochishiyu, qachon yopishini aniq tushunib olasiz.
Postni ulashishingiz mumkin,
Kofe ham olib berishingiz mumkin (kanal profilida ko'plab ma'lumotlar bor)