ქსელის პაკეტის ბროკერის TCP კავშირების საკვანძო საიდუმლოებები: დემიტიფიკაციას უწევს სამმაგი ხელების საჭიროებას

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

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

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

 TCP სამმხრივი ხელით

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

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

 სინგ პაკეტი

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

SYN+ACK პაკეტი

როდესაც სერვერი იღებს SYN პაკეტს კლიენტისგან, იგი შემთხვევით ახდენს საკუთარი სერიული ნომრის (Server_ISN) ინიცირებას და შემდეგ ამ ნომერს აყენებს TCP სათაურის "სერიულ ნომერს" ველს. შემდეგი, სერვერი შედის Client_ISN + 1-ში "ცნობის ნომრის" ველში და ადგენს როგორც SYN და ACK ბიტებს 1-ზე. დაბოლოს, სერვერი აგზავნის პაკეტს კლიენტს, რომელიც არ შეიცავს პროგრამის ფენის მონაცემებს (და არ არის მონაცემები, რომ სერვერი გაგზავნოს). ამ დროს, სერვერი Syn-RCVD მდგომარეობაშია.

ACK პაკეტი

მას შემდეგ, რაც კლიენტი მიიღებს პაკეტს სერვერისგან, მას უნდა შეასრულოს შემდეგი ოპტიმიზაცია, რომ უპასუხოს საბოლოო პასუხის პაკეტს: პირველი, კლიენტი ადგენს ACK BIT- ს TCP სათაურის საპასუხო პაკეტის 1 -ზე; მეორე, კლიენტი შედის ღირებულების Server_ISN + 1 "დაადასტურა პასუხის ნომერი" ველში; დაბოლოს, კლიენტი აგზავნის პაკეტს სერვერზე. ამ პაკეტს შეუძლია მონაცემების გადატანა კლიენტიდან სერვერზე. ამ ოპერაციების დასრულების შემდეგ, კლიენტი შევა დადგენილ სახელმწიფოში.

მას შემდეგ, რაც სერვერი მიიღებს პასუხის პაკეტს კლიენტისგან, ის ასევე გადადის დადგენილი მდგომარეობაში.

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

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

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

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

სამმხრივი ხელით თავიდან აიცილებს ისტორიულ დუბლიკატებს

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

1- ძველი SYN პაკეტები ჩამოდის სერვერზე უახლესი SYN პაკეტების წინ.
2- სერვერი უპასუხებს SYN + ACK პაკეტს კლიენტს ძველი SYN პაკეტის მიღების შემდეგ.
3- როდესაც კლიენტი იღებს SYN + ACK პაკეტს, იგი განსაზღვრავს, რომ კავშირი არის ისტორიული კავშირი (თანმიმდევრული ნომერი ამოიწურა ან ვადა) საკუთარი კონტექსტის შესაბამისად, შემდეგ კი სერვერზე აგზავნის პირველ პაკეტს სერვერზე.

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

1- თუ ეს არის ისტორიული კავშირი (თანმიმდევრობის ნომერი ამოიწურა ან ვადა), მესამე ხელით გაგზავნილი პაკეტი არის პირველი პაკეტი ისტორიული კავშირის შესაჩერებლად.
2- თუ ეს არ არის ისტორიული კავშირი, მესამედ გაგზავნილი პაკეტი არის ACK პაკეტი, ხოლო ორი კომუნიკაციური მხარე წარმატებით ადგენს კავშირს.

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

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

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

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

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

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

ორივე მხარის საწყისი სერიული ნომრების სინქრონიზაცია

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

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

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

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

თავიდან აიცილოთ რესურსების დაკარგვა

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

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

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


პოსტის დრო: იან -08-2025