Протокол TCP
Протокол TCP
TCP (Transmission Control Protocol - протокол контроля передачи) - надежный байт-ориентированный (byte-stream) протокол с установлением соединения.
Протокол TCP осуществляет передачу данных, которыми является неинтерпретируемая протоколом последовательность (поток) байт, разбиваемая по сегментам. Передача данных осуществляется между сокетами с предварительным выполнением диалоговой процедуры установления соединения и с контролем успешной доставки сегментов в процессе пересылки.
Механизм обеспечения надежности в протоколе TCP действует по принципу PAR (Positive Acknowledgment with Retransmission), который состоит в том, что данные передаются заново, если не получено подтверждение об их успешном приеме. Время ожидания подтверждения определяется таймером повторной передачи; при сбросе таймера неподтвержденные данные передаются заново. Контроль целостности данных осуществляется с помощью контрольной суммы. Байты в TCP-сегментах нумеруются (сквозная нумерация по всему потоку) с целью восстановления их исходного порядка в пункте назначения и определения пропущенных сегментов (так как протокол IP работает без установления соединения, нет никакой гарантии, что все IP-дейтаграммы, посланные от одного хоста к другому, будут следовать одним и тем же маршрутом и прибывать к месту назначения в порядке отправки, а точнее - что они вообще будут прибывать к месту назначения).
Ниже мы рассмотрим некоторые подробности работы протокола TCP.
TCP. Установка логического соединения между хостами (handshake)
Предположим, хост А желает установить соединение с хостом В. Первый отправляемый из А в В TCP-сегмент не содержит полезных данных, а служит для установления соединения. В его заголовке (в поле Flags) установлен бит SYN, означающий запрос связи, и содержится ISN (Initial Sequence Number - начальный номер последовательности) - число, начиная с которого хост А будет нумеровать отправляемые байты (обычно 0). В ответ на получение такого сегмента хост В откликается посылкой TCP-сегмента, в заголовке которого установлен бит ACK, подтверждающий установление соединения для получения данных от хоста А. Т.к. протокол TCP обеспечивает полнодуплексную передачу данных, то хост В в этом же сегменте устанавливает бит SYN, означающий запрос связи для передачи данных от В к А, и передает свой ISN (обычно 0). Полезных данных этот сегмент также не содержит. Третий TCP-сегмент в сеансе посылается из А в В в ответ на сегмент, полученный из В. Так как соединение А В можно считать установленным (получено подтверждение от В), от хост А включает в свой сегмент полезные данные, нумерация которых начинается с номера ISN(A)+1 (обычно 1). Данные нумеруются по количеству отправленных байт. В заголовке этого же сегмента хост А устанавливает бит ACK, подтверждающий установление связи B A, что позволяет хосту В включить в свой следующий сегмент полезные данные для А.