### 2.3 Протокол TCP

Протокол управления передачей TCP описан в RFC 793. Он предназначен для использования в качестве надёжного транспортного средства при общении удаленных систем в локальных сетях с коммутацией пакетов, а так же в системах, объединяющих такие сети. Протокол TCP так же как и протокол UDP работает на транспортном уровне модели OSI. Он обеспечивает надёжную транспортировку данных между прикладными программами путем установления логического соединения, чем и отличается от своего собрата UDP. Для обеспечения надежной передачи данных по установленным логическим соединениям между парами прикладных программ протокол TCP должен обеспечивать выполнение следующих функций:

1. Передачу необходимых данных.
2. Поддержание достоверности данных при передаче.
3. Управление потоком данных.
4. Разделение каналов связи.
5. Работу по обслуживанию установленных соединений.
6. Oбеспечение установленного приоритета пользователей и соответствующего уровня безопасности.

Передача осуществляется надежно благодаря использованию подтверждений после приема данных и механизма нумерации очередей.
Упрощённо процесс соединения можно представить следующей последовательностью:

1. инициатор соединения посылает запрос к протоколу TCP на открытие порта для передачи;
2. после открытия порта протокол TCP на стороне приложения – инициатора посылает запрос приложению, с которым требуется установить соединение;
3. протокол TCP на приёмной стороне открывает порт для приема данных и отсылает квитанцию, подтверждающую прием запроса;
4. приёмная сторона открывает порт для передачи и так же передает запрос к противоположной стороне;
5. приложение – инициатор открывает порт для приема и возвращает квитанцию. С этого момента соединение считается установленным. После этого начинается обмен информацией по данному соединению.

Заголовок TCP следует за заголовком IP и дополняет его информацией, специфичной для протокола TCP. На рисунке 2.4 представлен формат заголовка протокола TCP.

Рисунок 2.4 – Формат заголовка протокола TCP
Порт отправителя (16 бит) | Порт получателя (16 бит)
Номер очереди | (32 бита)
Номер подтверждения | (32 бита)
Смещениеданных(4 бита) | Резерв(3 бита) | Контрольные биты (6 бит) | Окно (16 бит)
Контрольная сумма (16 бит) | Указатель срочности (16 бит)
Опции (длина переменная) | Выравнивающее поле (до 32 бит)
Данные Поля “Порт отправителя” и “Порт получателя” идентичны соответствующим полям в заголовке протокола UDP. Поле “Номер очереди” определяет номер очереди для первого байта данных в этом сегменте. Исключения составляют случаи, когда присутствует флаг синхронизации SYN. Поле “Номер подтверждения” содержит следующий номер очереди, который отправитель данной дейтаграммы желает получить в обратном направлении. При этом контрольный бит подтверждения ACK должен быть установлен. Номера подтверждения посылаются постоянно, как только соединение будет установлено. Поле ”Смещение данных” определяет количество 32-х битных слов в TCP –заголовке и указывает на начало поля данных. Заголовок протокола TCP всегда заканчивается на 32-х битной границе слова, даже если он содержит опции. Поле “Резерв” обязательно должно быть заполнено нулями. Поле “Окно” содержит объявляемое значение размера окна в байтах. Поле “Контрольная сумма” рассчитывается по сегменту, при этом определяется 16-битное дополнение суммы всех 16 битных слов заголовка и данных. Если сегмент содержит нечётное количество байт, то он будет дополнен нулями справа до образования 16 битного слова. При этом выравнивающий байт не передается вместе с сегментом в сети. Контрольная сумма учитывает так же 96-битный псевдо-заголовок, который ставиться перед заголовком протокола TCP. Псевдозаголовок содержит адрес отправителя, адрес получателя, тип протокола и длину TCP сегмента. Механизм псевдозаголовка обеспечивает защиту протокола TCP от искажения сегментов при передаче. Поле “Указатель срочности” определяет смещение данного сегмента относительно номера очереди. Этот указатель сообщает номер очереди для байта, следующего за срочными данными. Поле используется совместно с контрольным битом URG. Поле “Опции” имеет переменную длину и может отсутствовать вообще. Оно располагается в конце заголовка протокола TCP, и его длина кратна восьми битам. Поле ”Выравнивающее поле” может иметь переменную длину и представляет собой фиктивное поле, используемое для доведение размера заголовка до целого числа 32-х битных слов. Протокол TCP является основным транспортным протоколом передачи данных в сети Internet. Более 90% всего совокупного трафика сети переноситься с помощью TCP. Его используют такие распространённые сетевые сервисы как WWW (основной сервис, отображение контента WEB-серверов); SMTP и POP3 (сервисы электронной почты); NNTP (сервис телеконференций); FTP (сервис обмен файлами) и многие другие. Следует также отметить, что запрос на установление соединения и служебная информация для проведения соединения голосового вызова, также передается посредством TCP.