TCP

Transmission Control Protocol, TCP ( укр. Протокол управления передачей ) - Один из основных сетевых протоколов Интернет, предназначенный для управления передачей данных в сетях и подсетях TCP / IP.

Информацию, которую нужно передать, TCP разбивает на порции-сегменты. Каждая порция нумеруется, чтобы можно было проверить, вся ли информация получена, и расположить информацию в правильном порядке. Для передачи этого порядкового номера по сети у протокола есть свой собственный сегмент данных, в котором в частности написана служебная необходимая информация. Порция Ваших данных помещается в сегмент TCP. Сегмент TCP в свою очередь размещается в сегменте IP и передается в сеть.

На принимающей стороне программное обеспечение протокола TCP собирает сегменты, извлекает из них данные и располагает их в правильном порядке. Когда каких-то сегментов нет, программа просит отправителя передать их еще раз. После размещения всей информации в правильном порядке эти данные передаются той программе, которая использует услуги TCP.

В реальной ситуации пакеты не только теряются, но и получают изменения в связи с кратковременными неполадками в линии передачи. TCP решает и эту проблему. При размещении данных производится так называемая контрольная сумма. Контрольная сумма - это число, которое позволяет принимающему TCP выявить ошибки в пакете. Когда пакет прибывает в пункт назначения, принимающий TCP рассчитывает контрольную сумму и сравнивает ее с той, которую послал отправитель TCP. Если значения не совпадают, то при передаче произошла ошибка. Принимающий TCP отбрасывает этот пакет и просит повторную передачу.


1. Формат TCP-сегмента

Бит 0 - 3 4 - 9 10 - 15 16 - 31
0 Порт источника Порт назначения
32 Номер последовательности
64 Номер подтверждения
96 Смещение данных Ограниченная Флажки Окно
128 Контрольная сумма Указатель важности
160 Опции (необязательно)
160/192 +
Данные

1.1. Порт источника

Порт источника идентифицирует порт, с которого отправлен пакет.

1.2. Порт назначения

Порт назначения идентифицирует порт, на который отправлен пакет

1.3. Номер последовательности

Номер последовательности выполняет две задачи:

  • Если установлен флаг SYN, то это начальное значение номера последовательности и первый байт данных - номер последовательности плюс 1.
  • Иначе, если SYN не установлен, первый байт данных - номер последовательности

1.4. Номер подтверждения

Если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый отправителем следующий раз. Обозначает этот пакет как подтверждение получения.

1.5. Смещение данных

Это поле определяет размер заголовка пакета TCP в 32-битовых словах. Минимальный размер составляет 5 слов, а максимальный - 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.

1.6. Ограниченная

4 бита зарезервировано для будущего использования и должны устанавливаться в ноль.

1.7. Флажки (управляющие биты)

Это поле содержит 8 битовых флажков:

  • CWR - Поле устанавливается отправителем, чтобы показать TCP-сегмент был получен с установленным полем ECE (добавлен в заголовке в RFC 3168).
  • ECE - Поле показывает, что отправитель поддерживает ECN
  • URG - Поле "Указатель важности" задействовано ( англ. Urgent pointer field is significant )
  • ACK - Поле "Номер подтверждения" значимо ( англ. Acknowledgement field is significant )
  • PSH - ( англ. Push function ) Инструктирует получателя передать данные с приемного буфера в программу, которой эти данные предназначены.
  • RST - Оборвать соединения, сбросить буфер (очистка буфера) ( англ. Reset the connection )
  • SYN - синхронизация номеров последовательности ( англ. Synchronize sequence numbers )
  • FIN ( англ. final ) - Флажок, если установлен, указывает на завершение соединения ( англ. FIN bit used for connection termination ).

1.8. Контрольная сумма

Поле контрольной суммы - это 16-битное дополнение суммы всех 16-битовых слов заголовка и текста. Если сегмент содержит нечетное число октетов в заголовке / или тексте, последние октета дополняются справа 8 нулями для выравнивания по 16-битной границе. Биты заполнения (0) не передаются в сегменте и служат только для расчета контрольной суммы. При расчете контрольной суммы значение самого поля контрольной суммы принимается равным 0.

1.9. Указатель важности

16-битное значение положительного смещения от порядкового номера в данном сегменте. Это поле указывает порядковый номер октета, с которого начинаются важные (urgent) данные. Поле принимается во внимание только для пакетов с установленным флагом U.