Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12_Транспортный уровень TCP.doc
Скачиваний:
7
Добавлен:
06.08.2019
Размер:
327.17 Кб
Скачать

Заголовок tcp

Данные TCP инкапсулируются в IP датаграммы, как показано на рисунке:

Обычно размер TCP заголовка составляет 20 байт, если не присутствуют опции.

Требования к размерам сегментов

  1. Сегмент должен помещаться в поле данных IP-пакета размером до 64 кбайт

  2. Сегмент должен помещаться в MTU сети

На практике это обычно 1500 байт в соответствии с размером поля полезной нагрузки кадра Ethernet.

Общий вид заголовка следующий:

INCLUDEPICTURE "mhtml:file://C:\\DOC\\tut\\Nerworks\\Вычислительные%20сети\\Источники\\Сетевые%20технологии\\TCPIP%20крупным%20планом\\15TCP%20Transmission%20Control%20Protocol.mht!http://www.soslan.ru/tcp/img/t17_2_2.gif" \* MERGEFORMAT

Номера порта источника и назначения точно также как и в UDP идентифицируют отправляющее и принимающее приложения. Эти два значения вместе с IP адресом источника и назначения в IP заголовке уникально идентифицируют каждое соединение.

Номер последовательности (sequence number) является уникальным идентификатором сегмента данных и идентифицирует байт в потоке данных от отправляющего TCP к принимающему TCP (т.е. это не порядковый номер сегмента).

При значении флага syn=1 в это поле прописывается код ISN (Initial Sequence Number; ниже мы познакомимся с ним при описании процедуры установления связи), выбираемый для конкретного соединения. Первому байту, передаваемому через созданное соединение, присваивается номер ISN+1. Значение ISN может задаваться случайным образом. Но в UNIX 4.4BSD при загрузке ОС ISN устанавливается равным 1 (это нарушает требования стандарта), а далее увеличивается на 640000 каждые полсекунды. Аналогичная инкрементация осуществляется при установлении нового соединения. В стандарте (RFC) рекомендуется увеличивать счетчик ISN на 1 каждые 4 микросекунды.

Номер последовательности представляет собой 32-битное беззнаковое число, которое переходит через 0, по достижению значения 232 - 1. Отметим, что поскольку это число должно уникально идентифицировать сегмент данных, недопустима ситуация, при которой получателю попадают два разных сегмента с одинаковыми номерами. Именно поэтому для даного числа отведено целых 32 двоичных разряда. В то время, когда разрабатывался протокол типичная скорость выделенных линий между маршрутизаторами равнялась 56 Кбит/с. Даже при непрерывной передаче данных потребовалось бы больше недели на то, чтобы закончились порядковые номера и начался их циклический повтор. С точки зрения разработчиков TCP, 2 в степени 32 считалось неплохим приближением к бесконечности, поскольку вероятность блуждания пакетов по сети в течение недели практически равна нулю. В Ethernet со скоростью 10 Мбит/с критическое время снизилось с одной недели до 57 минут. При скорости 1 Гбит/с, порядковые номера закончатся примерно через 34 с, что уже вполне чревато появлением проблем.

Номер подтверждения это вовсе не последний полученный, как можно было бы подумать, а следующий ожидаемый байт.

Длина заголовка выражается в 32-разрядных словах.

Флаговые биты один или несколько из них могут быть установлены в единицу в одно и то же время.

URG (Urgent pointer field is significant) указатель срочности. Если этот флаг установлен, поле Указатель на срочные данные определяет смещение в байтах от текущего порядкового номера до последнего байта срочных данных. Срочные данные используются для управления при передаче данных интерактивных сессий (например, telnet)

ACK (Acknowledgement field is significant) признак передачи подтверждения на установление соединения или доставки сегмента. В этом случае интерпретируется содержимое поля номера подтверждения (номер подтверждения правилен).

PSH (Push function) получатель должен передать эти данные приложению сразу по получении, не задерживая в буфере до его наполнения.

RST (Reset the connection) сбросить соединение. Самый общий случай, при котором генерируется сброс (reset), это когда запрос о соединении прибывает и при этом не существует процесса с указанным портом назначения.

SYN (Synchronize sequence numbers) признак передачи синхронизирующего номера последовательности для установления соединения. Если этот бит установлен, а ACK=0, то сегмент является запросом на установление соединения. Если ACK=1, то сегмент является подтверждением.

FIN (final) отправитель заканчивает посылку данных.

Размера окна (window size) это количество байт, начинающееся с указанного в поле номера подтверждения, которое приложение собирается принять. Это 16-битовое поле ограничивает размер окна в 65535 байт. Значение поля Размер окна может быть равно нулю, что означает, что все байты вплоть до Номер подтверждения - 1 получены, но у получателя в данный момент заполнен буфер или какие-то еще проблемы и остальные байты он принять не может. Разрешение на дальнейшую передачу будет передано путем отправки сегмента с таким же значением поля Номер подтверждения и ненулевым значением поля Размер окна.

Контрольная сумма (checksum) вычисляется аналогично контрольной сумме UDP датаграммы с использованием аналогичного псевдозаголовка. Единственным отличием последнего является значение поля Протокол (6 вместо 17 для UDP). Это обязательное поле, которое должно быть рассчитано и сохранено отправителем, а затем проверено получателем. Несовпадение контрольной суммы служит основанием для отбрасывания сегмента.

Указатель срочности (urgent pointer) действителен только в том случае, если установлен флаг URG. Этот указатель является положительным смещением, которое должно быть прибавлено к полю номера последовательности сегмента, чтобы получить номер последовательности последнего байта срочных данных. Режим срочности TCP это способ, с помощью которого отправитель передает срочные данные на удаленный конец.

Опции наиболее часто используемое поле опций - это опция максимального размера сегмента (MSS - maximum segment size). На каждом конце соединения эта опция обычно указывается в первом сегменте, с которого начинается обмен (сегмент с установленным флагом SYN, который используется для установления соединения). Она указывает на максимальный размер сегмента, который может быть принят отправителем. Если IP адрес назначения "не локальный", MSS обычно устанавливается по умолчанию – 536 байт. Другим вариантом опции может быть параметр Масштаб окна. Поскольку поле заголовка размер окна не может иметь значение более 65535 байт, а такой размер окна слишком мал для скоростных линий с большими задержками (например, спутниковые каналы), с введением этой опции появилась возможность увеличивать размер окна до 2 в 30 степени байт (примерно 1 Гбайт).

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