2.7 Формат TCP сегмента
Transmission Control
Protocol (TCP) (протокол управления передачей) — один
из основных сетевых протоколов Интернета, предназначенный для управления
передачей данных в сетях и подсетях TCP/IP.
Выполняет
функции протокола транспортного уровня модели OSI.
TCP — это
транспортный механизм, предоставляющий поток данных, с предварительной
установкой соединения, за счёт этого дающий уверенность в достоверности
получаемых данных, осуществляет повторный запрос данных в случае потери данных
и устраняет дублирование при получении двух копий одного пакета (см. также T/TCP). В отличие от UDP гарантирует, что
приложение получит данные точно в такой же последовательности, в какой они были
отправлены, и без потерь.
Заголовок TCP сегмента
Порт
источника
Порт
источника идентифицирует приложение клиент, с которого отправлены пакеты. По
возвращении данные передаются клиенту на основании номера порта источника.
Порт
назначения
Это просто
порт.
TCP-порты
Существует
набор служб (использующих для передачи данных TCP), за которыми закреплены
определенные порты:
·
20/21 —
FTP
·
23 —
Telnet
·
25 —
SMTP
·
80 —
HTTP
·
110 —
POP3
·
443 —
HTTPS (Secure HTTP)
·
8080 —
альтернативный порт HTTP
Номер последовательности
Номер
последовательности выполняет две задачи:
1. Если установлен флаг SYN, то это
начальное значение номера последовательности — ISN (Initial
Sequence Number), и первый
байт данных, которые будут переданы в следующем пакете, будет иметь номер
последовательности равный ISN + 1.
2. В противном случае, если SYN не
установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер
последовательности.
Поскольку
поток TCP в общем случае может быть длиннее, чем число различных состояний
этого поля, то все операции с номером последовательности должны выполняться по
модулю 2^32. Это накладывает практическое ограничение на использование TCP.
Если скорость передачи коммуникационной системы такова, чтобы в течение MSL
(максимального времени жизни сегмента) произошло переполнение номера
последовательности, то в сети может появиться два сегмента с одинаковым
номером, относящихся к разным частям потока, и приёмник получит некорректные
данные.
Номер
подтверждения
Если установлен флаг ACK, то это
поле содержит номер последовательности, ожидаемый получателем в следующий раз.
Помечает этот сегмент как подтверждение получения.
Это
поле определяет размер заголовка пакета TCP в 32-битных словах. Минимальный
размер составляет 5 слов, а максимальный — 15, что составляет 20 и 60 байт
соответственно. Смещение считается от начала заголовка TCP.
Зарезервировано
(6 бит) для будущего использования и должно устанавливаться в ноль. Из них два
(5-й и 6-й) уже определены:
·
CWR (Congestion Window
Reduced) — Поле «Окно перегрузки
уменьшено» — флаг установлен отправителем, чтоб указать, что получен пакет
с установленным флагом ECE (RFC
3168)
·
ECE (ECN-Echo) — Поле «Эхо
ECN» — указывает, что данный узел способен на ECN (явное уведомление
перегрузки) и для указания отправителю о перегрузках в сети (RFC 3168)
Флаги (управляющие биты)
Это поле
содержит 6 битовых флагов:
* URG — Поле «Указатель важности»
задействовано (англ. Urgent pointer field is
significant)
* ACK — Поле «Номер
подтверждения» задействовано (англ. Acknowledgement
field is significant)cvcbcvb
* PSH — (англ. Push function) инструктирует получателя протолкнуть данные,
накопившиеся в приемном буфере, в приложение пользователя
* RST — Оборвать соединения, сбросить буфер
(очистка буфера) (англ. Reset the
connection)
* SYN — Синхронизация номеров
последовательности (англ. Synchronize sequence numbers)
* FIN (англ. final,
бит) — флаг, будучи установлен, указывает на завершение соединения (англ. FIN bit used for
connection termination).
Окно
В этом
поле содержится число, определяющее в байтах размер данных, которые получатель
готов принять.
Контрольная сумма
Поле
контрольной суммы — это 16-битное дополнение к сумме всех 16-битных слов
заголовка и текста. Если сегмент, по которому вычисляется контрольная сумма,
имеет длину не кратную 16-ти битам, то длина сегмента увеличивается до кратной 16-ти, за счет дополнения к нему справа нулевых
битов заполнения. Биты заполнения (0) не передаются в сообщении и служат только
для расчёта контрольной суммы. При расчёте контрольной суммы значение самого
поля контрольной суммы принимается равным 0.
Указатель важности
16-битовое
значение положительного смещения от порядкового номера в данном сегменте. Это
поле указывает порядковый номер октета которым
заканчиваются важные (urgent) данные. Поле
принимается во внимание только для пакетов с установленным флагом URG.