TCP найдвартай тээвэрлэлт
Бид бүгд TCP протоколыг найдвартай тээвэрлэлтийн протокол гэдгийг мэддэг, гэхдээ энэ нь тээврийн найдвартай байдлыг хэрхэн хангадаг вэ?
Найдвартай дамжуулалтад хүрэхийн тулд өгөгдлийн эвдрэл, алдагдал, давхардал, эмх цэгцгүй хэлтэрхий зэрэг олон хүчин зүйлийг харгалзан үзэх шаардлагатай. Хэрэв эдгээр асуудлыг шийдэж чадахгүй бол найдвартай дамжуулалт хийх боломжгүй болно.
Тиймээс TCP нь найдвартай дамжуулалтыг бий болгохын тулд дарааллын дугаар, хүлээн зөвшөөрөх хариу, дахин илгээх хяналт, холболтын удирдлага, цонхны хяналт зэрэг механизмуудыг ашигладаг.
Энэ нийтлэлд бид TCP-ийн гулсах цонх, урсгалын хяналт, түгжрэлийн хяналтад анхаарлаа хандуулах болно. Дахин дамжуулах механизмыг дараагийн хэсэгт тусад нь авч үзнэ.
Сүлжээний урсгалын хяналт
Сүлжээний урсгалын хяналт буюу Сүлжээний урсгалын хяналт нь үнэндээ үйлдвэрлэгч болон хэрэглэгчдийн хоорондын нарийн харилцааны илрэл юм. Та ажил дээрээ юм уу ярилцлагандаа энэ хувилбартай олон таарч байсан байх. Хэрэв үйлдвэрлэгчийн үйлдвэрлэх хүчин чадал нь хэрэглэгчийн хэрэглээний хүчин чадлаас хэт давсан тохиолдолд дараалал нь хязгааргүй өсөхөд хүргэдэг. Илүү ноцтой тохиолдолд, RabbitMQ мессежүүд хэт их хуримтлагдвал MQ серверийн гүйцэтгэлийг бүхэлд нь доройтуулж болзошгүйг та мэдэж болно. TCP-ийн хувьд ч мөн адил; Хэрэв хяналтгүй орхивол сүлжээнд хэт олон мессеж орж, хэрэглэгчид хүчин чадлаа хэтрүүлсэн байх ба үйлдвэрлэгчид давхардсан мессеж илгээсээр байх бөгөөд энэ нь сүлжээний гүйцэтгэлд ихээхэн нөлөөлнө.
Энэ үзэгдлийг арилгахын тулд TCP нь дамжуулагчийн хүлээн авагчийн бодит хүлээн авах хүчин чадал дээр үндэслэн илгээсэн өгөгдлийн хэмжээг хянах механизмыг өгдөг бөгөөд үүнийг урсгалын удирдлага гэж нэрлэдэг. Хүлээн авагч нь хүлээн авах цонхыг ажиллуулдаг бол илгээгч нь илгээх цонхыг хадгалдаг. Эдгээр Windows нь зөвхөн нэг TCP холболтод зориулагдсан бөгөөд бүх холболтууд цонхыг хуваалцдаггүй гэдгийг тэмдэглэх нь зүйтэй.
TCP нь хүлээн авах цонхонд хувьсагч ашиглан урсгалын хяналтыг хангадаг. Хүлээн авах цонх нь илгээгчид хэр хэмжээний кэш зай байгаа талаар зааж өгдөг. Илгээгч нь хүлээн авагчийн бодит хүлээн авах чадварын дагуу илгээсэн өгөгдлийн хэмжээг хянадаг.
Хүлээн авагч нь хүлээн авах боломжтой өгөгдлийн хэмжээг илгээгчид мэдэгдэх бөгөөд илгээгч нь энэ хязгаар хүртэл илгээдэг. Энэ хязгаар нь цонхны хэмжээ, TCP толгойг санаж байна уу? Хүлээн авах цонхны талбар байдаг бөгөөд энэ нь хүлээн авагчийн хүлээн авах боломжтой эсвэл хүлээн авах хүсэлтэй байтуудын тоог зааж өгдөг.
Илгээгч хост нь хүлээн авагчийн өгөгдөл хүлээн авах боломжтой эсэхийг илрүүлэхэд ашигладаг цонхны шалгах багцыг үе үе илгээдэг. Хүлээн авагчийн буфер дүүрэх аюултай үед цонхны хэмжээг бага утгаар тохируулж илгээгчид илгээсэн өгөгдлийн хэмжээг хянах зааварчилгааг өгдөг.
Сүлжээний урсгалын хяналтын диаграмм энд байна.
Сүлжээний түгжрэлийг хянах
Түгжрэлийн хяналтыг нэвтрүүлэхээс өмнө хүлээн авах цонх, илгээх цонхноос гадна түгжрэлийн цонх байдаг гэдгийг ойлгох хэрэгтэй бөгөөд энэ нь ихэвчлэн илгээгч хүлээн авах цонх руу өгөгдөл илгээж эхэлдэг асуудлыг шийдвэрлэхэд ашиглагддаг. Тиймээс түгжрэлийн цонхыг мөн TCP илгээгчээр хангадаг. Хэт бага эсвэл хэт их өгөгдөл илгээх нь тийм ч тохиромжтой биш тул түгжрэлийн цонх гэсэн ойлголттой тул бидэнд хэр их өгөгдөл илгээх нь тохиромжтой вэ гэдгийг шийдэх алгоритм хэрэгтэй.
Өмнөх сүлжээний урсгалын удирдлагад бидний зайлсхийсэн зүйл бол илгээгч нь хүлээн авагчийн кэшийг мэдээллээр дүүргэх явдал байсан ч сүлжээнд юу болж байгааг бид мэдэхгүй байсан. Ерөнхийдөө компьютерийн сүлжээнүүд нь дундын орчинд байдаг. Үүний үр дүнд бусад хостуудын хоорондын харилцаанаас болж сүлжээний ачаалал үүсч болзошгүй.
Сүлжээний ачаалал ихтэй үед олон тооны пакетуудыг үргэлжлүүлэн илгээвэл багц саатах, алдагдах зэрэг асуудал үүсч болзошгүй. Энэ үед TCP нь өгөгдлийг дахин дамжуулах боловч дахин дамжуулалт нь сүлжээн дэх ачааллыг нэмэгдүүлж, илүү их саатал, илүү их пакетийн алдагдалд хүргэх болно. Энэ нь харгис мөчлөгт орж, улам бүр томрох болно.
Тиймээс TCP нь сүлжээнд юу болж байгааг үл тоомсорлож чадахгүй. Сүлжээний ачаалал ихтэй үед TCP илгээх өгөгдлийн хэмжээг бууруулж өөрийгөө золиослодог.
Тиймээс түгжрэлийн хяналтыг санал болгож байгаа бөгөөд энэ нь бүх сүлжээг илгээгчийн мэдээллээр дүүргэхээс зайлсхийх зорилготой юм. Илгээгчийн илгээх өгөгдлийн хэмжээг зохицуулахын тулд TCP нь түгжрэлийн цонх гэж нэрлэгддэг ойлголтыг тодорхойлдог. Түгжрэлийг хянах алгоритм нь илгээгчийн илгээсэн өгөгдлийн хэмжээг хянахын тулд сүлжээний түгжрэлийн зэрэгт тохируулан түгжрэлийн цонхны хэмжээг тохируулна.
Түгжрэлийн цонх гэж юу вэ? Энэ нь илгээх цонхтой ямар холбоотой вэ?
Түгжрэлийн цонх нь илгээгчийн илгээж болох өгөгдлийн хэмжээг тодорхойлдог төлөвийн хувьсагч юм. Түгжрэлийн цонх нь сүлжээний түгжрэлийн түвшингээс хамааран динамикаар өөрчлөгддөг.
Илгээх цонх нь илгээгч болон хүлээн авагчийн хооронд тохиролцсон цонхны хэмжээ бөгөөд хүлээн авагчийн хүлээн авах боломжтой мэдээллийн хэмжээг илэрхийлдэг. Түгжрэлийн цонх болон илгээх цонх нь хоорондоо холбоотой; илгээх цонх нь ихэвчлэн түгжрэл болон хүлээн авах Windows-ийн хамгийн бага хэмжээтэй тэнцүү байдаг, өөрөөр хэлбэл swnd = min(cwnd, rwnd).
Түгжрэлийн цонх cwnd дараах байдлаар өөрчлөгдөнө.
Сүлжээнд түгжрэл байхгүй, өөрөөр хэлбэл дахин дамжуулах хугацаа байхгүй бол түгжрэлийн цонх нэмэгддэг.
Сүлжээнд түгжрэл үүссэн тохиолдолд түгжрэлийн цонх багасдаг.
Илгээгч нь заасан хугацаанд ACK хүлээн авах пакет хүлээн авсан эсэхийг ажигласнаар сүлжээ түгжсэн эсэхийг тодорхойлно. Илгээгч нь заасан хугацаанд ACK-г хүлээн зөвшөөрөх багцыг хүлээн аваагүй бол сүлжээ түгжрэлд орсон гэж үзнэ.
Түгжрэлийн цонхноос гадна TCP түгжрэлийг хянах алгоритмыг хэлэлцэх цаг болжээ. TCP түгжрэлийг хянах алгоритм нь гурван үндсэн хэсгээс бүрдэнэ.
Удаан эхлэх:Эхний үед cwnd түгжрэлийн цонх харьцангуй бага бөгөөд илгээгч нь сүлжээний хүчин чадалд хурдан дасан зохицохын тулд түгжрэлийн цонхыг экспоненциалаар нэмэгдүүлдэг.
Түгжрэлээс сэргийлэх:Түгжрэлийн цонх нь тодорхой босгыг давсны дараа илгээгч нь түгжрэлийн цонхны өсөлтийн хурдыг удаашруулж, сүлжээг хэт ачааллаас сэргийлэхийн тулд шугаман хэлбэрээр түгжрэлийн цонхыг нэмэгдүүлнэ.
Хурдан сэргээх:Хэрэв түгжрэл үүсвэл илгээгч нь түгжрэлийн цонхыг хоёр дахин багасгаж, хүлээн авсан давхардлаар дамжуулан сүлжээний сэргээх байршлыг тодорхойлохын тулд хурдан сэргээх төлөвт орж, дараа нь түгжрэлийн цонхыг үргэлжлүүлэн нэмэгдүүлнэ.
Удаан эхлүүлэх
TCP холболт үүссэн үед түгжрэлийн цонх cwnd нь хамгийн бага MSS (хамгийн их сегментийн хэмжээ) утгад тохируулагдана. Ийм байдлаар анхны илгээлтийн хурд нь MSS/RTT байт/секунд орчим байна. Бодит боломжтой зурвасын өргөн нь ихэвчлэн MSS/RTT-ээс хамаагүй том байдаг тул TCP нь удаан эхлүүлэх замаар хүрч болох оновчтой илгээлтийн хурдыг олохыг хүсдэг.
Удаан эхлэх процесст түгжрэлийн цонхны cwnd-ийн утгыг 1 MSS болгож эхлүүлэх ба дамжуулагдсан пакетийн сегментийг хүлээн зөвшөөрөх бүрт cwnd-ийн утга нэг MSS-ээр нэмэгдэнэ, өөрөөр хэлбэл cwnd-ийн утга 2 MSS болно. Үүний дараа пакет сегментийг амжилттай дамжуулах бүрт cwnd-ийн утга хоёр дахин нэмэгддэг гэх мэт. Өсөлтийн тодорхой үйл явцыг дараах зурагт үзүүлэв.
Гэсэн хэдий ч илгээлтийн хувь хэмжээ үргэлж өсөх боломжгүй; өсөлт хэзээ нэгэн цагт дуусах ёстой. Тэгэхээр илгээлтийн ханшийн өсөлт хэзээ дуусах вэ? Удаан эхлүүлэх нь ихэвчлэн хэд хэдэн аргын аль нэгээр илгээлтийн хурдны өсөлтийг дуусгадаг:
Эхний арга бол илгээх явцад пакет алдагдах явдал юм. Пакет алдагдах үед TCP нь илгээгчийн түгжрэлийн цонхыг cwnd 1 болгож, удаашруулах процессыг дахин эхлүүлнэ. Энэ үед анхны утга нь пакет алдагдлыг үүсгэдэг cwnd утгын тал нь болох удаан эхлэх босго гэсэн ойлголтыг нэвтрүүлсэн. Өөрөөр хэлбэл, түгжрэл илэрсэн үед ssthresh-ийн утга нь цонхны утгын тал юм.
Хоёрдахь арга бол удаан эхлэх босго ssthresh-ийн утгатай шууд хамааралтай байх явдал юм. Түгжрэл илэрсэн үед ssthresh-ийн утга нь цонхны утгын тэн хагас нь байдаг тул cwnd ssthresh-ээс их байх үед хоёр дахин нэмэгдэх бүрт пакет алдагдах магадлалтай. Тиймээс cwnd-г ssthresh болгож тохируулах нь хамгийн сайн арга бөгөөд энэ нь TCP-ийг түгжрэлийг хянах горимд шилжүүлж, удаан эхлүүлэхийг дуусгахад хүргэдэг.
Удаан эхлэх хамгийн сүүлийн арга бол хэрэв гурван нэмэлт үйлдэл илэрсэн бол TCP хурдан дахин дамжуулж, сэргээх төлөвт орно. (Хэрэв яагаад гурван ACK пакет байгаа нь тодорхойгүй бол үүнийг дахин дамжуулах механизмд тусад нь тайлбарлах болно.)
Түгжрэлээс сэргийлэх
TCP нь түгжрэлийн хяналтын төлөвт орох үед cwnd нь түгжрэлийн босгоны ssthresh-ийн хагаст тохируулагдана. Энэ нь пакет сегментийг хүлээн авах бүрт cwnd-ийн утгыг хоёр дахин нэмэгдүүлэх боломжгүй гэсэн үг юм. Үүний оронд дамжуулалт бүрийг дуусгасны дараа cwnd-ийн утгыг зөвхөн нэг MSS (пакет сегментийн хамгийн их урт)-аар нэмэгдүүлэх харьцангуй консерватив аргыг ашигладаг. Жишээлбэл, 10 пакет сегментийг хүлээн зөвшөөрсөн ч cwnd-ийн утга зөвхөн нэг MSS-ээр нэмэгдэх болно. Энэ нь өсөлтийн шугаман загвар бөгөөд өсөлтийн дээд хязгаартай. Пакет алдагдах үед cwnd-ийн утгыг MSS болгон өөрчилдөг ба ssthresh-ийн утгыг cwnd-ийн тал болгож тохируулна. Эсвэл энэ нь ACK-ийн 3 илүү хариултыг хүлээн авах үед MSS-ийн өсөлтийг зогсооно. Хэрэв cwnd-ийн утгыг хоёр дахин бууруулсны дараа гурван илүүдэл акк хүлээн авсаар байвал ssthresh-ийн утгыг cwnd-ийн хагасын утгаар бүртгэж, хурдан сэргээх төлөвийг оруулна.
Хурдан сэргээх
Хурдан сэргээх төлөвт түгжрэлийн цонхны утгыг cwnd хүлээн авсан илүүдэл ACK, өөрөөр хэлбэл дараалсан ирдэггүй ACK бүрт нэг MSS-ээр нэмэгдүүлнэ. Энэ нь дамжуулалтын үр ашгийг аль болох сайжруулахын тулд сүлжээнд амжилттай дамжуулагдсан пакет сегментүүдийг ашиглах явдал юм.
Алдагдсан пакет сегментийн ACK ирэх үед TCP нь cwnd-ийн утгыг бууруулж, дараа нь түгжрэлээс зайлсхийх төлөвт ордог. Энэ нь түгжрэлийн цонхны хэмжээг хянаж, сүлжээний түгжрэлийг цаашид нэмэгдүүлэхгүй байх зорилготой юм.
Хэрэв түгжрэлийг хянах төлөвийн дараа завсарлага гарвал сүлжээний байдал улам ноцтой болж, TCP нь түгжрэлээс зайлсхийх төлөвөөс удаан эхлэх төлөв рүү шилжинэ. Энэ тохиолдолд түгжрэлийн цонхны cwnd-ийн утгыг 1 MSS, пакетийн сегментийн хамгийн их урт, удаан эхлэх босго ssthresh-ийн утгыг cwnd-ийн хагасаар тохируулна. Үүний зорилго нь сүлжээ сэргэсний дараа түгжрэлийн цонхны хэмжээг дахин аажмаар нэмэгдүүлж, дамжуулах хурд болон сүлжээний түгжрэлийн зэргийг тэнцвэржүүлэх явдал юм.
Дүгнэлт
Найдвартай тээврийн протоколын хувьд TCP нь дарааллын дугаар, хүлээн зөвшөөрөх, дахин дамжуулах хяналт, холболтын удирдлага, цонхны хяналт зэргээр найдвартай тээвэрлэлтийг хэрэгжүүлдэг. Тэдгээрийн дотроос урсгалын хяналтын механизм нь хүлээн авагчийн бодит хүлээн авах хүчин чадлын дагуу илгээгчээс илгээсэн өгөгдлийн хэмжээг хянадаг бөгөөд энэ нь сүлжээний түгжрэл, гүйцэтгэлийн бууралтаас зайлсхийх болно. Түгжрэлийг хянах механизм нь илгээгчийн илгээсэн мэдээллийн хэмжээг тохируулах замаар сүлжээний түгжрэл үүсэхээс сэргийлдэг. Түгжрэлийн цонх, илгээх цонх гэсэн ойлголтууд хоорондоо уялдаатай бөгөөд түгжрэлийн цонхны хэмжээг динамикаар тохируулах замаар илгээгч дэх өгөгдлийн хэмжээг хянадаг. Удаан эхлүүлэх, түгжрэлээс зайлсхийх, хурдан сэргээх нь TCP түгжрэлийг хянах алгоритмын гурван үндсэн хэсэг бөгөөд сүлжээний хүчин чадал, түгжрэлийн зэрэгт тохируулан өөр өөр стратеги ашиглан түгжрэлийн цонхны хэмжээг тохируулдаг.
Дараагийн хэсэгт бид TCP-ийн дахин дамжуулах механизмыг нарийвчлан судлах болно. Дахин дамжуулах механизм нь найдвартай дамжуулалтыг бий болгох TCP-ийн чухал хэсэг юм. Энэ нь алдагдсан, эвдэрсэн, саатсан өгөгдлийг дахин дамжуулах замаар мэдээллийн найдвартай дамжуулалтыг баталгаажуулдаг. Дахин дамжуулах механизмын хэрэгжүүлэх зарчим, стратегийг дараагийн хэсэгт дэлгэрэнгүй танилцуулж, дүн шинжилгээ хийх болно. Хамтдаа байгаарай!
Шуудангийн цаг: 2025 оны 2-р сарын 24-ний хооронд