Rostini aytganda, bu hazil edi (faqat biroz intellektual). "😁" emoji bosganlarning hammasi hazilni tushungan deb umid qilaman. JR
aytganidek, endi postlarimga bunisi hazil, bunisi rost deb qo'shib ketaman.
***
Endi postning o'zi haqida.
Nagle's algorithm, TCP delayed ACK, bir-biridan vahimali nomlar juda murakkab tuyulayaptimi? Keling odam tushunadigan tilda gaplashamiz.
Tasavvur qiling 25 ta kursdosh Samarqandga taksida bormoqchisizlar. 6 ta taksiga 4 kishidan 24 kishi yo'lga chiqib ketdi, lekin yana bir kishi qoldi. U o'zi bitta taksiga chiqdi, lekin taksist hali haydamaydi. Nega? Sababi, u hali "to'lmadi". Yana 3 ta odam olsa, keyin yuradi. Faqat 1 kishi bilan haydash o'ziga qimmatga tushadi (metan qimmat). Oddiy mantiq. Xuddi shu narsaning network engineeringdagi nomi Nagle's algorithm deyiladi. Taksi bu TCP segment, talabalar - yuborilayotgan ma'lumot. Oxirgi, to'lmay qolgan segmentga yana data kelmagunicha yoki oldinroq yuborilgan segmentlar uchun ACK kelmagunicha (sheriklari biz Samarqandga yetib keldik demagunicha).
Foydali tomoni - resurslar tejaladi. Zararli tomoni - "kimdir" kech qoladi.
Delayed ACK esa xuddi shu voqeaning davomi, faqat Samarqandda.
Studentlar yetib borganidan keyin yetib keldim deb qolganlarga xabar berishi kerak, lekin xabar berish juda qimmat turadi, studentlar esa tejamkor.
Shunda bittasining aqli ishlab qoladi: hamma alohida-alohida telefon qilmaydi, bir kishi telefon qilib hamma kelganlarni aytib chiqadi (Karl, bizning studentlar tejash uchun nimalarni o'ylab topmagan). Lekin u qachon telefon qiladi? Endi telefonni o'chirganida yana bir kishi yetib kelsa u uchun yana alohida telefon qilish kerakku? Oddiy, yana yarim soat (bu bir misol uchun) kutamiz, hech kim kelmasa telefon qilamiz. Xuddi shu narsa networkingda TCP delayed ACK deyiladi. Studentlar segmentda yetib kelgan ma'lumot, telefon esa server tomonidan segment yetib kelgani haqida yuboriladigan ACK signali.
Foydali tomoni - resurslarni tejaydi. Zararli tomoni - "narigi taraf" segment yetib kelganini kechroq biladi.
Xo'sh, endi qiziq joyi: agar tepadagi ikkita holat bir vaqtda bo'lsa nima bo'ladi.
1 ta student haliyam taksida kutib o'tiribdi. Ketish uchun yo taksi to'lishi kerak, yo yetib borgan sheriklari telefon qilishi kerak. Aksiga olib, boshqa ketadigan odam yo'q, endi sheriklarni kutish kerak. Lekin sheriklar nega telefon qilmayapti? Qizig'i, Samarqandda sheriklari telefon qilmay, hozir sherigimiz kelsa hammamiz bittada telefon qilamiz deb buni kutib o'tiribdi. Bu taksida qolganlarni kutib o'tiribdi, qolganlar Samarqandda buni kutib o'tiribdi, bu nimanidir eslatmayaptimi? DEAD LOCK! Faqat farqi, Samarqanddagilar oxiri sabri tugab, "shuncha kutdik, kelmasang ayb bizdamas" deb telefon qiladi. Taksida o'tirgan talaba buni ko'rib, "4 kishiga to'layman, haydang" deb bir o'zi bitta taksida ketadi. Muammo hal bo'ldi, lekin juda ko'p vaqt bekorchi o'tib ketdi.
Xuddi shu narsa network engineeringda ham bo'lib turadi. Bu tarafda sender segment to'lishini kutadi, narigi tarafda reciever ACK yubormasdan qolgan segment kelishini kutadi, natijada connection UZOQ VAQT "qotib" qoladi.
P.S. Tepadagi postning ma'nosini tushungan bo'lsangiz, endi kulavering ))