Sobes.tech
Junior

როგორ მუშაობს TCP პროტოკოლი?

sobes.tech AI

პასუხი AI-სგან

TCP (Transmission Control Protocol) — ტრანსპორტის ფენის პროტოკოლია, რომელიც უზრუნველყოფს საიმედო, კავშირზე დაფუძნებულ მონაცემთა მიწოდებას.

ძირითადი ასპექტები მუშაობის:

  1. სამგზის ხელმოწერა (Three-way Handshake):

    • კლიენტი აგზავნის SYN (Synchronize) პაკეტს საწყის სერიული ნომრით (ISN).
    • სერვერი იღებს SYN-ს, აგზავნის SYN-ACK (Synchronize-Acknowledge), რომელიც შეიცავს თავის ISN-ს და დადასტურებას (ACK) კლიენტის ISN-ს (acknowledgement number = client ISN + 1).
    • კლიენტი იღებს SYN-ACK-ს, აგზავნის ACK-ს, რომელიც ადასტურებს სერვერის ISN-ს (acknowledgement number = server ISN + 1).
    • კავშირი დამყარებულია, მონაცემების გადაცემა შესაძლებელია.
  2. ტალღოვანი მონაცემთა გადაცემა: მონაცემები გადაეცემა უწყვეტი ბაიტების ნაკადად, არა როგორც ცალკეული პაკეტები. TCP იყოფა სეგმენტებად მონაცემთა ნაკადს.

  3. სერიული ნომრების (Sequence Numbers) მინიჭება: თითოეულ ბაიტს აქვს უნიკალური ნომერი. სეგმენტებში შედის პირველი ბაიტის ნომერი (sequence number) და დადასტურების ნომერი (acknowledgement number), რომელიც მიუთითებს შემდეგი ელოდებადი ბაიტის შესახებ.

  4. დადასტურებები (Acknowledgements - ACK): მიმღები აგზავნის ACK-ს, რათა აცნობოს გამგზავნს, რომ მონაცემები წარმატებით მიღებულია. თუ გამგზავნი ვერ იღებს ACK-ს გარკვეული დროის განმავლობაში (timeout), ის ხელახლა აგზავნის სეგმენტს.

  5. შეცდომების კონტროლი (Error Control): გამოიყენება შემოწმების ჯამები (checksums) მონაცემების მთლიანობის დასადასტურებლად. თუ სეგმენტი დაზიანებულია, ის უარყოფილია, და გამგზავნი ელოდება timeout-ს ან დუბლიკატ ACK-ს, რათა ხელახლა გადმოსცეს.

  6. მოწევის კონტროლი (Flow Control): მექანიზმი, რომელიც თავიდან აცილებს მიმღების ბუფერის გადატვირთვას. მიმღები აცნობებს გამგზავნს თავის მიღების ფანჯარის ზომას (receive window) ACK-ებში. გამგზავნი მხოლოდ იმდენ მონაცემს შეუძლია გადმოსცეს, რამდენიც მითითებულია ფანჯარაში.

  7. გატვირთვის კონტროლი (Congestion Control): მექანიზმი, რომელიც განსაზღვრავს ქსელის ხელმისაწვდომ სიჩქარეს და დინამიურად რეგულირებს მონაცემთა გადაცემის სიჩქარეს, რათა თავიდან აიცილოს ქსელის გადატვირთვა. მოიცავს ალგორითმებს, როგორიცაა ნელი დასაწყისი (slow start), გადატვირთვის თავიდან აცილება (congestion avoidance), სწრაფი გადატანა (fast retransmit) და სწრაფი აღდგენა (fast recovery).

  8. კავშირი დახურვა: ჩვეულებრივ, იყენებს ოთხკუთხა ხელმოწერას:

    • ერთი მხარე აგზავნის FIN (Finish) პაკეტს.
    • მეორე მხარე აგზავნის ACK-ს FIN-ისთვის.
    • მეორე მხარე აგზავნის თავის FIN-ს (დასრულების შემდეგ მონაცემების გადაცემა).
    • პირველი მხარე აგზავნის ACK-ს ამ FIN-ისთვის.
    • კავშირი დახურულია.

TCP სეგმენტის სტრუქტურა:

ველი ზომა (ბაიტი) აღწერა
წყაროს პორტი 2 გამგზავნის პორტი
დანიშნულების პორტი 2 მიმღების პორტი
სერიული ნომერი 4 პირველი ბაიტის ნომერი სეგმენტში
დადასტურების ნომერი 4 შემდეგი ელოდებადი ბაიტის ნომერი
მონაცემთა გადახედვის სიგრძე (Data Offset/Header Length) 4 ბიტი TCP სათაურის სიგრძე
შენახვა (Reserved) 6 ბიტი შენახვა (შესაძლებელია, რომ იყოს ცარიელი)
ფლაგები (Control Bits) 6 ბიტი URG, ACK, PSH, RST, SYN, FIN
ფანჯრის ზომა 2 მიმღების ფანჯრის ზომა
შემოწმების ჯამი 2 სათაურისა და მონაცემების შემოწმების ჯამი
სასწრაფო პუნქტი 2 სასწრაფო მონაცემებზე მითითება (თუ URG არის)
ვარიანტები ცვალებადი დამატებითი ვარიანტები
შევსება (Padding) ცვალებადი სათაურის სწორი განლაგებისთვის
მონაცემები ცვალებადი გადმოცემული მონაცემები
// ფლაგები (Control Bits):
// URG: სასწრაფო პუნქტის მნიშვნელობა
// ACK: დადასტურების მნიშვნელობა
// PSH: გადმოცემის ფუნქცია
// RST: კავშირის აღდგენა
// SYN: სერიული ნომრების სინქრონიზაცია
// FIN: მეტი მონაცემი გამგზავნიდან