TCP- ის საიდუმლო იარაღი: ქსელის ნაკადის კონტროლი და ქსელის შეშუპების კონტროლი

TCP საიმედოობის ტრანსპორტი
ჩვენ ყველანი კარგად ვიცნობთ TCP პროტოკოლს, როგორც საიმედო სატრანსპორტო ოქმს, მაგრამ როგორ უზრუნველყოფს ტრანსპორტირების საიმედოობას?

საიმედო გადაცემის მისაღწევად საჭიროა მრავალი ფაქტორი, მაგალითად, მონაცემთა კორუფცია, დაკარგვა, დუბლირება და წესრიგის გარეთ. თუ ამ პრობლემების მოგვარება შეუძლებელია, საიმედო გადაცემის მიღწევა შეუძლებელია.

ამრიგად, TCP იყენებს მექანიზმებს, როგორიცაა რიგითობის ნომერი, ცნობის პასუხი, კონტროლის გადახდა, კავშირის მენეჯმენტი და ფანჯრის კონტროლი საიმედო გადაცემის მისაღწევად.

ამ ნაშრომში ჩვენ ყურადღებას გავამახვილებთ TCP- ის მოცურების ფანჯარაში, ნაკადის კონტროლსა და შეშუპების კონტროლზე. გადაკეთების მექანიზმი დაფარულია ცალკე შემდეგ ნაწილში.

ქსელის ნაკადის კონტროლი
ქსელის ნაკადის კონტროლი ან იცის, როგორც ქსელის მოძრაობის კონტროლი, ფაქტობრივად, მწარმოებლებსა და მომხმარებლებს შორის დახვეწილი ურთიერთობის გამოვლინებაა. თქვენ ალბათ შეხვდებით ამ სცენარს სამსახურში ან ინტერვიუებში. თუ მწარმოებლის წარმოების შესაძლებლობები მნიშვნელოვნად აღემატება მომხმარებელთა მოხმარების შესაძლებლობებს, ეს გამოიწვევს რიგს განუსაზღვრელი ვადით. უფრო სერიოზულ შემთხვევაში, თქვენ შეიძლება იცოდეთ, რომ როდესაც RabbitMQ შეტყობინებები ძალიან ბევრს იწევს, ამან შეიძლება გამოიწვიოს მთელი MQ სერვერის შესრულების დეგრადაცია. იგივე ეხება TCP- ს; თუ არ არის გადამოწმებული, ქსელში ძალიან ბევრი შეტყობინება იქნება ჩასმული და მომხმარებლები გადააჭარბებენ თავიანთ შესაძლებლობებს, ხოლო მწარმოებლები გააგრძელებენ დუბლიკატების გაგზავნას, რაც დიდ გავლენას მოახდენს ქსელის მუშაობაზე.

ამ ფენომენის მოსაგვარებლად, TCP უზრუნველყოფს გამგზავნისთვის მექანიზმს, რომ გააკონტროლოს გაგზავნილი მონაცემების რაოდენობა მიმღების ფაქტობრივი მიღების საფუძველზე, რომელიც ცნობილია როგორც ნაკადის კონტროლი. მიმღები ინარჩუნებს მიმღების ფანჯარას, ხოლო გამგზავნი ინახავს გაგზავნის ფანჯარას. უნდა აღინიშნოს, რომ ეს ფანჯრები მხოლოდ ერთი TCP კავშირისთვისაა და ყველა კავშირი არ იზიარებს ფანჯარას.

TCP უზრუნველყოფს ნაკადის კონტროლს მიღების ფანჯრის ცვლადის გამოყენებით. მიმღების ფანჯარა აძლევს გამგზავნს იმის მითითებით, თუ რამდენად ხელმისაწვდომია ქეშის სივრცე. გამგზავნი აკონტროლებს მიმღების ფაქტობრივი მიღების შესაძლებლობების შესაბამისად გაგზავნილი მონაცემების რაოდენობას.

მიმღების მასპინძელი აცნობებს გამგზავნს იმ მონაცემების ზომის შესახებ, რომელსაც შეუძლია მიიღოს, ხოლო გამგზავნი ამ ზღვარს უგზავნის. ეს ზღვარი არის ფანჯრის ზომა, გახსოვთ TCP სათაური? არსებობს მიღების ფანჯრის ველი, რომელიც გამოიყენება ბაიტების რაოდენობის დასადგენად, რომელსაც მიმღები შეუძლია ან მიიღოს.

გამგზავნის მასპინძელი პერიოდულად გაუგზავნის ფანჯრის ზონდის პაკეტს, რომელიც გამოიყენება იმის დასადგენად, შეუძლია თუ არა მიმღების მასპინძელს მონაცემების მიღება. როდესაც მიმღების ბუფერს გადაჭარბების საფრთხე ემუქრება, ფანჯრის ზომა უფრო მცირე მნიშვნელობამდეა მითითებული, რომ გამგზავნს დაავალოს გააკონტროლოს გაგზავნილი მონაცემების რაოდენობა.

აქ მოცემულია ქსელის ნაკადის კონტროლის დიაგრამა:

მოძრაობის კონტროლი

ქსელის შეშუპების კონტროლი
შეშუპების კონტროლის შემოღებამდე უნდა გვესმოდეს, რომ გარდა ამისა, მიღების ფანჯარისა და გაგზავნის ფანჯრის გარდა, ასევე არის შეშუპების ფანჯარა, რომელიც ძირითადად გამოიყენება პრობლემის გადასაჭრელად, თუ რა კურსით იწყებს გამგზავნი მონაცემების გაგზავნას მიღების ფანჯარაში. ამრიგად, შეშუპების ფანჯარა ასევე ინარჩუნებს TCP გამგზავნს. ჩვენ გვჭირდება ალგორითმი, რომ გადავწყვიტოთ რამდენი მონაცემის გაგზავნაა შესაფერისი, რადგან ძალიან მცირე ან ძალიან ბევრი მონაცემის გაგზავნა არ არის იდეალური, შესაბამისად, შეშუპების ფანჯრის კონცეფცია.

წინა ქსელის ნაკადის კონტროლში, რაც ჩვენ თავიდან ავიცილეთ, იყო გამგზავნი, რომელიც ავსებს მიმღების ქეშს მონაცემებით, მაგრამ ჩვენ არ ვიცოდით რა ხდებოდა ქსელში. როგორც წესი, კომპიუტერული ქსელები საერთო გარემოშია. შედეგად, შეიძლება არსებობდეს ქსელის შეშუპება სხვა მასპინძლებს შორის კომუნიკაციის გამო.

როდესაც ქსელი გადატვირთულია, თუ დიდი რაოდენობით პაკეტი გაგრძელდება, ამან შეიძლება გამოიწვიოს ისეთი პრობლემები, როგორიცაა შეფერხება და პაკეტების დაკარგვა. ამ ეტაპზე, TCP გადააკეთებს მონაცემებს, მაგრამ გადაბრუნება გაზრდის ტვირთს ქსელში, რის შედეგადაც უფრო დიდი შეფერხებები და პაკეტის მეტი ზარალი მიიღებს. ეს შეიძლება მოხვდეს მანკიერ ციკლში და გააგრძელოს უფრო დიდი.

ამრიგად, TCP არ შეუძლია უგულებელყო ის, რაც ხდება ქსელში. როდესაც ქსელი გადატვირთულია, TCP თავს სწირავს თავის მიერ გაგზავნილ მონაცემთა რაოდენობის შემცირებით.

აქედან გამომდინარე, შემოთავაზებულია შეშუპების კონტროლი, რომლის მიზანია თავიდან აიცილოს მთელი ქსელის შევსება გამგზავნის მონაცემებით. მონაცემების ოდენობის რეგულირებისთვის, რომელსაც უნდა გაგზავნოს გამგზავნი, TCP განსაზღვრავს კონცეფციას, რომელსაც ეწოდება შეშუპების ფანჯარა. შეშუპების საკონტროლო ალგორითმი შეცვალებს შეშუპების ფანჯრის ზომას ქსელის შეშუპების ხარისხის შესაბამისად, რათა გააკონტროლოს გამგზავნის მიერ გაგზავნილი მონაცემების რაოდენობა.

რა არის შეშუპების ფანჯარა? რა კავშირი აქვს გაგზავნის ფანჯარასთან?

შეშუპების ფანჯარა არის გამგზავნის მიერ შენარჩუნებული სახელმწიფო ცვლადი, რომელიც განსაზღვრავს მონაცემების რაოდენობას, რომელსაც შეუძლია გაგზავნის გამგზავნს. შეშუპების ფანჯარა დინამიურად იცვლება ქსელის შეშუპების დონის მიხედვით.

გაგზავნის ფანჯარა არის შეთანხმებული ფანჯრის ზომა გამგზავნსა და მიმღებს შორის, რაც მიუთითებს მონაცემების ოდენობაზე, რომელსაც შეუძლია მიმღები. შეშუპების ფანჯარა და გაგზავნის ფანჯარა უკავშირდება; გაგზავნის ფანჯარა, როგორც წესი, ტოლია შეშუპების მინიმუმამდე და ფანჯრების მიმღებ, ანუ swnd = min (cwnd, rwnd).

შეშუპების ფანჯარა cwnd იცვლება შემდეგნაირად:

თუ ქსელში არ არსებობს შეშუპება, ანუ, გადაცემის ვადა არ ხდება, შეშუპების ფანჯარა იზრდება.

თუ ქსელში არის შეშუპება, შეშუპების ფანჯარა მცირდება.

გამგზავნი განსაზღვრავს, არის თუ არა ქსელი გადატვირთული, თუ რამდენად მიიღება ACK- ის დამადასტურებელი პაკეტი მითითებულ ვადაში. თუ გამგზავნი არ იღებს ACK- ს ცნობის პაკეტს მითითებულ ვადაში, ითვლება, რომ ქსელი გადატვირთულია.

შეშუპების ფანჯრის გარდა, დროა განვიხილოთ TCP შეშუპების კონტროლის ალგორითმი. TCP შეშუპების კონტროლის ალგორითმი შედგება სამი ძირითადი ნაწილისაგან:

ნელი დაწყება:თავდაპირველად, CWND შეშუპების ფანჯარა შედარებით მცირეა, ხოლო გამგზავნი ზრდის შეშუპების ფანჯარას ექსპონენტურად, რომ სწრაფად მოერგოს ქსელის შესაძლებლობებს.
შეშუპების თავიდან აცილება:მას შემდეგ, რაც შეშუპების ფანჯარა აღემატება გარკვეულ ზღვარს, გამგზავნი ზრდის შეშუპების ფანჯარას ხაზოვანი გზით, რათა შეანელოს შეშუპების ფანჯრის ზრდის ტემპი და თავიდან აიცილოს ქსელის გადატვირთვა.
სწრაფი აღდგენა:თუ შეშუპება ხდება, გამგზავნი შეაჩერებს შეშუპების ფანჯარას და შედის სწრაფი აღდგენის მდგომარეობაში, რათა დადგინდეს ქსელის აღდგენის ადგილმდებარეობა მიღებული დუბლიკატების ACK– ით, შემდეგ კი აგრძელებს შეშუპების ფანჯრის გაზრდას.

ნელი დაწყება
როდესაც TCP კავშირი ჩამოყალიბებულია, შეშუპების ფანჯარა CWND თავდაპირველად მითითებულია მინიმალური MSS (მაქსიმალური სეგმენტის ზომა) მნიშვნელობით. ამ გზით, საწყისი გაგზავნის მაჩვენებელი ეხება MSS/RTT ბაიტებს/წამს. ფაქტობრივი გამტარობა, როგორც წესი, ბევრად აღემატება MSS/RTT- ს, ამიტომ TCP- ს სურს იპოვოს ოპტიმალური გაგზავნის სიჩქარე, რომლის მიღწევა შესაძლებელია ნელი დაწყების გზით.

ნელი დაწყების პროცესში, შეშუპების ფანჯრის CWND- ის ღირებულება ინიცირდება 1 mss, და ყოველ ჯერზე გადაცემული პაკეტის სეგმენტის აღიარებით, CWND- ის ღირებულება გაიზრდება ერთი MSS- ით, ანუ CWND- ის ღირებულება გახდება 2 MSS. ამის შემდეგ, CWND- ის ღირებულება გაორმაგებულია პაკეტის სეგმენტის თითოეული წარმატებული გადაცემისთვის და ა.შ. ზრდის სპეციფიკური პროცესი ნაჩვენებია შემდეგ ფიგურაში.

 ქსელის შეშუპების კონტროლი

ამასთან, გაგზავნის განაკვეთი ყოველთვის ვერ იზრდება; ზრდა უნდა დასრულდეს. მაშ, როდის იზრდება გაგზავნის განაკვეთი? ნელი დაწყება, როგორც წესი, მთავრდება გაგზავნის კურსის ზრდას რამდენიმე გზით:

პირველი გზა არის პაკეტის დაკარგვის შემთხვევა ნელი დაწყების გაგზავნის პროცესში. როდესაც პაკეტის დაკარგვა ხდება, TCP ადგენს გამგზავნის შეშუპების ფანჯარას cwnd 1-ზე და განაახლებს ნელი დაწყების პროცესს. ამ ეტაპზე დაინერგა ნელი დაწყების ბარიერი SSThresh- ის კონცეფცია, რომლის საწყისი მნიშვნელობა CWND- ის მნიშვნელობის ნახევარია, რომელიც წარმოქმნის პაკეტის დაკარგვას. ანუ, როდესაც შეშუპება გამოვლენილია, SSThresh- ის ღირებულება ფანჯრის მნიშვნელობის ნახევარია.

მეორე გზა არის უშუალოდ დააკავშიროთ ნელი დაწყებული ბარიერი SSThresh. ვინაიდან SSThresh- ის ღირებულება ფანჯრის მნიშვნელობის ნახევარია, როდესაც შეშუპება გამოვლენილია, პაკეტის დაკარგვა შეიძლება მოხდეს თითოეული გაორმაგებით, როდესაც CWND უფრო დიდია, ვიდრე SSThresh. აქედან გამომდინარე, უმჯობესია CWND SSThresh– ზე დააყენოთ, რაც გამოიწვევს TCP– ს გადასვლას შეშუპების კონტროლის რეჟიმში და დასრულდება ნელი.

ნელი დაწყების ბოლო გზა არის ის, თუ სამი ზედმეტი ACK გამოვლენილია, TCP ასრულებს სწრაფ გადაცემას და შედის აღდგენის მდგომარეობაში. (თუ უცნობია, რატომ არის ACK სამი პაკეტი, იგი აიხსნება ცალკე გადაცემის მექანიზმში.)

შეშუპების თავიდან აცილება
როდესაც TCP შედის შეშუპების კონტროლის მდგომარეობაში, CWND დაყენებულია შეშუპების ბარიერის ნახევარი SSThresh. ეს ნიშნავს, რომ CWND- ის ღირებულება შეუძლებელია გაორმაგდეს ყოველ ჯერზე, როდესაც პაკეტის სეგმენტი მიიღება. ამის ნაცვლად, მიღებულია შედარებით კონსერვატიული მიდგომა, რომლის დროსაც CWND– ის ღირებულება იზრდება მხოლოდ ერთი MSS– ით (მაქსიმალური პაკეტის სეგმენტის სიგრძე) ყოველი გადაცემის დასრულების შემდეგ. მაგალითად, მაშინაც კი, თუ 10 პაკეტის სეგმენტი აღიარებულია, CWND– ის ღირებულება მხოლოდ ერთი MSS– ით გაიზრდება. ეს არის ხაზოვანი ზრდის მოდელი და მას ასევე აქვს ზედა ზღვარი ზრდის შესახებ. როდესაც პაკეტის დაკარგვა ხდება, CWND– ის მნიშვნელობა შეიცვალა MSS– ში, ხოლო SSThresh– ის მნიშვნელობა დაყენებულია CWND– ის ნახევარზე. ან ის ასევე შეაჩერებს MSS- ის ზრდას, როდესაც მიიღება 3 ზედმეტი ACK პასუხი. თუ CWND– ის მნიშვნელობის შემცირების შემდეგ, სამი ზედმეტი ACK მიიღება, SSThresh– ის ღირებულება აღირიცხება, როგორც CWND– ის ღირებულების ნახევარი და შედის სწრაფი აღდგენის მდგომარეობა.

სწრაფი აღდგენა
სწრაფი აღდგენის მდგომარეობაში, შეშუპების ფანჯრის CWND- ის ღირებულება იზრდება ერთი MSS- ით თითოეული მიღებული ზედმეტი ACK, ანუ ACK, რომელიც არ მოდის თანმიმდევრობით. ეს არის ის პაკეტის სეგმენტების გამოყენება, რომლებიც წარმატებით იქნა გადაცემული ქსელში, მაქსიმალურად გაუმჯობესდეს გადაცემის ეფექტურობა.

როდესაც დაკარგული პაკეტის სეგმენტის ACK ჩამოდის, TCP ამცირებს CWND- ის მნიშვნელობას და შემდეგ შედის შეშუპების თავიდან აცილების მდგომარეობაში. ეს არის შეშუპების ფანჯრის ზომების კონტროლი და ქსელის შეშუპების კიდევ უფრო გაზრდის თავიდან ასაცილებლად.

თუ დროთა განმავლობაში ხდება შეშუპების კონტროლის მდგომარეობის შემდეგ, ქსელის მდგომარეობა უფრო სერიოზული ხდება და TCP მიგრირდება შეშუპების თავიდან აცილების მდგომარეობიდან ნელი დაწყების მდგომარეობაში. ამ შემთხვევაში, შეშუპების ფანჯრის CWND- ის მნიშვნელობა დაყენებულია 1 mss, მაქსიმალური პაკეტის სეგმენტის სიგრძე, ხოლო ნელი დაწყებული ბარიერის SSThresh- ის მნიშვნელობა CWND- ის ნახევარზეა მითითებული. ამის მიზანია გადაბრუნების ფანჯრის ზომების ხელახლა გაზრდა მას შემდეგ, რაც ქსელი აღდგება გადაცემის სიჩქარის დაბალანსებისა და ქსელის შეშუპების ხარისხის დასაბალანსებლად.

მოკლე შინაარსი
როგორც საიმედო სატრანსპორტო პროტოკოლი, TCP ახორციელებს საიმედო ტრანსპორტს თანმიმდევრობის ნომრის, მადლობის, გადაცემის კონტროლის, კავშირების მართვისა და ფანჯრის კონტროლის მიხედვით. მათ შორის, ნაკადის კონტროლის მექანიზმი აკონტროლებს გამგზავნის მიერ გაგზავნილ მონაცემთა რაოდენობას მიმღების ფაქტობრივი მიმღები შესაძლებლობების შესაბამისად, რაც თავიდან აიცილებს ქსელის შეშუპებისა და შესრულების დეგრადაციის პრობლემებს. შეშუპების კონტროლის მექანიზმი თავიდან აიცილებს ქსელის შეშუპების წარმოქმნას გამგზავნის მიერ გაგზავნილი მონაცემების ოდენობის რეგულირებით. შეშუპების ფანჯრისა და გაგზავნის ფანჯრის ცნებები ერთმანეთთან არის დაკავშირებული, ხოლო გამგზავნის მონაცემების რაოდენობა კონტროლდება შეშუპების ფანჯრის ზომის დინამიურად რეგულირებით. ნელი დაწყება, შეშუპების თავიდან აცილება და სწრაფი აღდგენა არის TCP შეშუპების საკონტროლო ალგორითმის სამი ძირითადი ნაწილი, რომელიც რეგულირების ფანჯრის ზომას სხვადასხვა სტრატეგიით ასწორებს ქსელის შესაძლებლობებსა და შეშუპების ხარისხს.

შემდეგ ნაწილში, ჩვენ დეტალურად განვიხილავთ TCP- ს გადაცემის მექანიზმს. გადაცემის მექანიზმი არის TCP– ის მნიშვნელოვანი ნაწილი საიმედო გადაცემის მისაღწევად. იგი უზრუნველყოფს მონაცემების საიმედო გადაცემას დაკარგული, კორუმპირებული ან დაგვიანებული მონაცემების გადაცემით. განხორციელების პრინციპი და გადაცემის მექანიზმის სტრატეგია დაინერგა და გაანალიზდება დეტალურად შემდეგ ნაწილში. იყავით თვალყური!


პოსტის დრო: თებერვალი -24-2025