Sobes.tech
Junior

Kaip veikia TCP protokolas?

sobes.tech AI

Atsakymas iš AI

TCP (Transmission Control Protocol) yra transporto sluoksnio protokolas, užtikrinantis patikimą, ryšiu pagrįstą duomenų pristatymą.

Pagrindiniai darbo aspektai:

  1. Trejopo rankos paspaudimas (Three-way Handshake):

    • Klientas siunčia SYN (Synchronize) paketą su pradiniu sekos numeriu (ISN).
    • Serveris gauna SYN, siunčia SYN-ACK (Synchronize-Acknowledge), kuriame yra savo ISN ir patvirtinimas (ACK) kliento ISN (acknowledgement number = client ISN + 1).
    • Klientas gauna SYN-ACK, siunčia ACK, patvirtinantį serverio ISN (acknowledgement number = server ISN + 1).
    • Ryšys nustatytas, galima perduoti duomenis.
  2. Srautinė duomenų perdavimas: Duomenys perduodami kaip nenutrūkstamas baitų srautas, o ne kaip atskiri paketai. TCP segmentuoja duomenų srautą į segmentus.

  3. Sekos numeriai (Sequence Numbers): Kiekvienas baitas sraute turi unikalų numerį. Segmentai turi pirmojo baito numerį (sekos numerį) ir patvirtinimo numerį (acknowledgement number), nurodantį kitą laukiamą baitą.

  4. Patvirtinimai (Acknowledgements - ACK): Gavėjas siunčia ACK, pranešdamas siuntėjui, kurie duomenys sėkmingai gauti. Jei siuntėjas negauna ACK tam tikru laiku (laiko limitas), jis pakartoja segmentą.

  5. Klaidų kontrolė (Error Control): Naudojamos kontrolinės sumos (checksums) duomenų vientisumui patikrinti. Jei segmentas sugadintas, jis atmestas, o siuntėjas laukia laiko limito arba dubliuoto ACK, kad pakartotinai išsiųstų.

  6. Duomenų srauto valdymas (Flow Control): Mechanizmas, kuris užkerta kelią gavėjo buferio perpildymui. Gavėjas praneša siuntėjui savo priėmimo lango dydį (receive window) ACK-ais. Siuntėjas gali siųsti tik tiek duomenų, kiek nurodyta lange.

  7. Tvoros kontrolė (Congestion Control): Mechanizmas, nustatantis tinklo pralaidumą ir dinamiškai reguliuojantis duomenų perdavimo greitį, siekiant išvengti tinklo perkrovos. Apima algoritmus kaip lėtas pradžia (slow start), perkrovos prevencija (congestion avoidance), greitas perdavimas (fast retransmit) ir greitas atsigavimas (fast recovery).

  8. Ryšio užbaigimas: Paprastai naudojama keturių žingsnių rankos paspaudimas:

    • Viena šalis siunčia FIN (Finish) paketą.
    • Kita šalis siunčia ACK į FIN.
    • Kita šalis siunčia savo FIN (po duomenų perdavimo pabaigos).
    • Pirmoji šalis siunčia ACK į šį FIN.
    • Ryšys uždaromas.

TCP segmento struktūra:

Laukas Dydis (baitai) Aprašymas
Šaltinio prtas 2 Siuntėjo prtas
Tikslo prtas 2 Gavėjo prtas
Sekos numeris 4 Pirmojo baito numeris segmentuose
Patvirtinimo numeris 4 Sekančio laukiamo baito numeris
Duomenų nuoroda/Antraštės ilgis 4 bitai TCP antraštės ilgis
Rezervuotas 6 bitai Rezervuotas
Kontrolės bitai (Flags) 6 bitai URG, ACK, PSH, RST, SYN, FIN
Langas (Window) 2 Gavėjo lango dydis
Patikrinimo sumos 2 Antraštės ir duomenų patikrinimo suma
Skubusis rodyklė 2 Nurodo skubius duomenis (jei URG nustatyta)
Parinktys kintama Papildomos parinktys
Užpildymas (Padding) kintama Antraštės lygiavimui
Duomenys kintama Perduodami duomenys
// Kontrolės bitai (Flags):
// URG: Skubaus rodyklės reikšmė
// ACK: Patvirtinimo reikšmė
// PSH: Push funkcija
// RST: Pertraukti ryšį
// SYN: Sinchronizacijos sekų numeriai
// FIN: Daugiau duomenų siuntėjo