Ինչպես է աշխատում TCP պրոտոկոլը?
sobes.tech AI
Պատասխան AI-ից
TCP (Transmission Control Protocol) - դա տրանսպորտային շերտի պրոտոկոլ է, որը ապահովում է հուսալի, կապի վրա հիմնված տվյալների առաքում:
Աշխատանքի հիմնական կողմերը:
-
Երեքակերտ ձեռնամարտ (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): - Կապը հաստատված է, տվյալներ փոխանցելու համար:
-
Տարածքային փոխանցում: Տվյալները փոխանցվում են որպես անընդհատ բայթերի հոսք, ոչ թե առանձին փաթեթներ: TCP-ն բաժանում է տվյալների հոսքը սեգմենտների:
-
Հաջորդականության համարանիշներ (Sequence Numbers): Յուրաքանչյուր բայթ հոսքում ունի յուրահատուկ համար: Սեգմենտները պարունակում են առաջին բայթի համար, որը գտնվում է նրանց մեջ (հաջորդականության համարանիշ), և հաստատման համարանիշը (acknowledgement number), որը ցույց է տալիս հաջորդ սպասվող բայթը:
-
Հաստատումներ (Acknowledgements - ACK): Ստացողը ուղարկում է ACK՝ տեղեկացնելու համար, թե որ տվյալները հաջողությամբ ստացվել են: Եթե ուղարկողը չի ստանում ACK որոշ ժամանակում (timeout), նա կրկին ուղարկում է սեգմենտը:
-
Խախտումների վերահսկում (Error Control): Օգտագործվում են ստուգման գումարներ (checksums) տվյալների ամբողջականությունը ստուգելու համար: Եթե սեգմենտը վնասված է, այն մերժվում է, և ուղարկողը սպասում է timeout կամ կրկնակի ACK՝ կրկնակի փոխանցման:
-
Հոսքի վերահսկում (Flow Control): Մեխանիզմ, որը կանխում է ստացող բանկայի գերբեռնվածությունը: Ստացողը հայտնում է իր ընդունման պատուհանի չափը (receive window) ACK-ներում: Ուղարկողը կարող է ուղարկել միայն այնքան տվյալներ, որքան նշված է պատուհանում:
-
Ցավալի վերահսկում (Congestion Control): Մեխանիզմ՝ որոշելու համար ցանցի հասանելի հոսքը և դինամիկ կարգավորելու փոխանցման արագությունը՝ կանխելու ցանցի ծանրաբեռնվածությունը: Ներառում է ալգորիթմներ, ինչպիսիք են դանդաղ սկիզբը (slow start), ծանրաբեռնվածության կանխարգելումը (congestion avoidance), արագ վերականգնումը (fast retransmit) և արագ վերականգնումը (fast recovery):
-
Կապի փակումը: Սովորաբար օգտագործում է չորսակերտ ձեռնամարտ:
- Մի կողմը ուղարկում է FIN (Finish) փաթեթ:
- Մյուս կողմը ուղարկում է ACK՝ FIN-ի համար:
- Մյուս կողմը ուղարկում է իր FIN (նաև ավարտելով իր տվյալների փոխանցումը):
- Առաջին կողմը ուղարկում է ACK՝ այս FIN-ի համար:
- Կապը փակված է:
TCP սեգմենտի կառուցվածքը:
| դաշտ | չափը (բայթ) | նկարագրությունը |
|---|---|---|
| Աղբյուրի պորտ | 2 | Ուղարկողի պորտ |
| Հասցեի պորտ | 2 | Ստացողի պորտ |
| Հաջորդականության համարանիշ | 4 | Առաջին բայթի համար, որը գտնվում է սեգմենտում |
| Հաստատման համարանիշ | 4 | Հաջորդ սպասվող բայթի համարանիշ |
| Դատա Օֆսեթ/Հետագծի երկարություն | 4 բիտ | TCP սեգմենտի երկարությունը |
| Պատկերավոր (Reserved) | 6 բիտ | Պատկերավոր (զրոյացված) |
| Կառավարիչ նշաններ (Flags) | 6 բիտ | URG, ACK, PSH, RST, SYN, FIN |
| Վահանակի չափը | 2 | Ստացողի վահանակի չափը |
| Կոնտրոլային գումար (Checksum) | 2 | Հետագծի և տվյալների վերահսկում |
| Արձագանքի ցուցիչ (Urgent Pointer) | 2 | Ցույց է տալիս շտապ տվյալների մասին (եթե URG նշված է) |
| Ընտրանքներ | փոփոխական | Ավելացուցիչ ընտրանքներ |
| Բաղադրիչ (Padding) | փոփոխական | Հետագծի հարթեցման համար |
| Տվյալներ | փոփոխական | Փոխանցվող տվյալներ |
// Կառավարիչ նշաններ (Control Bits):
// URG: Շտապ ցուցիչի նշանակություն
// ACK: Պատասխանման նշան
// PSH: Դիմում Push գործառույթ
// RST: Կապի վերականգնում
// SYN: Հաջորդականության համարանիշների սինխրոնիզացիա
// FIN: Ավարտված տվյալներ ուղարկողից