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 в определено време (тайм-аут), той препраща сегмента отново.

  5. Контрол на грешките (Error Control): Използват се контролни суми (checksums) за проверка на цялостта на данните. Ако сегментът е повреден, той се отхвърля и изпращачът чака тайм-аут или дублирано 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 сегмента:

Поле Размер (байтове) Описание
Source Port 2 Порт на изпращача
Destination Port 2 Порт на получателя
Sequence Number 4 Номер на първия байт в сегмента
Acknowledgement Number 4 Номер на следващия очакван байт
Data Offset/Header Length 4 бита Дължина на TCP заглавието
Reserved 6 бита Запазено
Flags (Control Bits) 6 бита URG, ACK, PSH, RST, SYN, FIN
Window Size 2 Размер на прозореца за получаване
Checksum 2 Контролна сума на заглавието и данните
Urgent Pointer 2 Посочва спешни данни (ако URG е зададено)
Options Променливо Допълнителни опции
Padding Променливо За изравняване на заглавието
Data Променливо Предавани данни
// Flags (Control Bits):
// URG: Значимо поле Urgent Pointer
// ACK: Значимо поле за потвърждение
// PSH: Функция Push
// RST: Нулиране на връзката
// SYN: Синхронизиране на номерата на последователността
// FIN: Няма повече данни от изпращача