Как работи протоколът 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): Всеки байт в потока от данни има уникален номер. Сегментите съдържат номера на първия байт (sequence number) и номера на потвърждението (acknowledgement number), който сочи към следващия байт, който изпращачът очаква да получи.
-
Потвърждения (Acknowledgements - ACK): Получателят изпраща ACK, за да уведоми изпращача кои данни са успешно получени. Ако изпращачът не получи ACK в определено време (тайм-аут), той препраща сегмента отново.
-
Контрол на грешките (Error Control): Използват се контролни суми (checksums) за проверка на цялостта на данните. Ако сегментът е повреден, той се отхвърля и изпращачът чака тайм-аут или дублирано ACK за повторно изпращане.
-
Контрол на потока (Flow Control): Механизъм, който предотвратява препълване на буфера на получателя. Получателят информира изпращача за размера на своя прозорец за получаване (receive window) в ACK пакетите. Изпращачът може да изпрати само толкова данни, колкото позволява прозорецът.
-
Контрол на задръстванията (Congestion Control): Механизъм за определяне на наличната пропускателна способност на мрежата и динамично регулиране на скоростта на предаване на данни, за да се избегне задръстване. Включва алгоритми като slow start, congestion avoidance, fast retransmit и fast recovery.
-
Затваряне на връзката: Обикновено чрез четиристранно ръкостискане:
- Едната страна изпраща 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: Няма повече данни от изпращача