Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Технологии > Протокол

3. Спецификация для функций протокола. Протокол TCP

3. Спецификация для функций протокола

3.1 Формат заголовка

Передача TCP сегментов осуществляется в виде Internet датаграмм. Заголовок датаграммы в Internet протоколе имеет несколько информационных полей, включая адреса отправляющего и принимающего хост-компьютеров [2]. Заголовок TCP следует за Internet заголовком и дополняет его информацией, специфической для TCP протокола. Такое деление допускает использование на уровне хост-компьютеров протоколов, иных нежели TCP.

Формат TCP заголовка

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Source Port
Destination Port
Sequence Number
Acknowledgment Number
Data
Offset

Reserved
U
R
G
A
C
K
P
S
H
P
S
T
S
Y
N
F
I
N

Window
Checksum
Urgent Pointer
Options
Padding
Data
Рис. 3 Формат TCP заголовка

Отметим, что каждая метка указывает здесь место для соответствующего бита.

Source Port (порт отправителя) 16 бит
номер порта отправителя

Destination Port (порт получателя) 16 бит
номер порта получателя

Sequence Number (номер очереди) 32 бита
Номер очереди для первого октета данных в данном сегменте (за исключением тех случаев, когда присутствует флаг синхронизации SYN). Если же флаг SYN присутствует, то номер очереди является инициализационным (ISN), а номер первого октета данных - ISN+1.

Acknowledgment Number (номер подтверждения) 32 бита
Если установлен контрольный бит ACK, то это поле содержит следующий номер очереди, который отправитель данной датаграммы желает получить в обратном направлении. Номера подтверждения посылаются постоянно, как только соединение будет установлено.

Data Offset (смещение данных) 4 бита
Количество 32-битных слов в TCP заголовке. Указывает на начало поля данных. TCP заголовок всегда кончается на 32-битной границе слова, даже если он содержит опции.

Reserved 6 бит
Это резервное поле, должно быть заполнено нулями.

Control Bits (контрольные биты) 6 бит

Биты этого поля слева направо
URG: поле срочного указателя задействовано
ACK: поле подтверждения задействовано
PSH: функция проталкивания
RST: перезагрузка данного соединения
SYN: синхронизация номеров очереди
FIN: нет больше данных для передачи

Window (окно) 16 бит
Количество октетов данных, начиная с октета, чей номер указан в поле подтверждения. Количество октетов, получения которых ждет отправитель настоящего сегмента.

Checksum (контрольная сумма) 16 бит
Поле контрольной суммы - это 16-битное дополнение суммы всех 16- битных слов заголовка и текста. Если сегмент содержит в заголовке и тексте нечетное количество октетов, подлежащих учету в контрольной сумме, последний октет будет дополнен нулями справа с тем, чтобы образовать для предоставления контрольной сумме 16-битное слово. Возникший при таком выравнивании октет не передается вместе с сегментом по сети. Перед вычислением контрольной суммы поле этой суммы заполняется нулями.

Контрольная сумма, помимо всего прочего, учитывает 96 бит псевдозаголовка, который для внутреннего употребления ставится перед TCP заголовком. Этот псевдозаголовок содержит адрес отправителя, адрес получателя, протокол и длину TCP сегмента. Такой подход обеспечивает защиту протокола TCP от ошибшихся в маршруте сегментов. Эту информацию обрабатывает Internet протокол. Она передается через интерфейс протокол TCP/локальная сеть в качестве аргументов или результатов запросов от протокола TCP к протоколу IP.

Адрес отправителя
Адрес получателя
нули PTCL длина TCP

Длина TCP сегмента - это длина TCP заголовка и поля данных, измеренная в октетах. Это не является точным указанием количества передаваемых по сети октетов, она не учитывает 12 октетов псевдозаголовка, но тем не менее расчет этого параметра все же производится.

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

Options (опции) длина переменная
Опции могут располагаться в конце TCP заголовка, а их длина кратна 8 бит. Все опции учитываются при расчете контрольной суммы.

Опции могут начинаться с любого октета. Они могут иметь два формата:

  • однооктетный тип опций;
  • октет типа опции, октет длины опции и октеты данных рассматриваемой опции.

В октете длины опции учитываются октет типа опции, сам октет длины, а также все октеты с данными.

Заметим, что список опций может оказаться короче, чем можно указать в поле Data Offset. Место в заголовке, остающееся за опцией "End-of-Option", должно быть заполнено нулями. Протокол TCP должен быть готов обрабатывать все опции.

В настоящее время определены следующие опции:
Тип Длина Значение
0 - конец списка опций
1 - нет операций
2 4 максимальный размер сегмента

Определения указанных опций

Конец списка опций
00000000 тип 0

Этот код опции определяет конец списка опций. Конец списка может не совпадать с концом TCP заголовка, указанным в поле Data Offset.

Эта опция используется после всех опций, но не после каждой из них. Опцию необходимо использовать только в том случае, если иначе не будет совпадения с концом TCP заголовка.

Нет операций
00000001 тип 1

Опции этого типа могут ставиться между опциями. Целью при этом может служить выравнивание очередной опции по границе слова. Нет гарантии, что отправители будут использовать данную опцию. Поэтому получатели должны быть готовы обрабатывать опции, даже если они не будут начинаться на границе слова.

Максимальный размер сегмента
00000010 00000100 макс.разм.сегм.
тип 2 длина 4 .

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

Padding (выравнивание) длина переменная Выравнивание TCP заголовка осуществляется с тем, чтобы убедиться в том, что TCP заголовок заканчивается, а поле данных сегмента начинается на 32-битной границе. Выравнивание выполняется нулями.

3.2 Терминология

Прежде чем мы сможем обсудить многие детали действия TCP протокола, нам необходимо ввести подробную терминологию. Для поддержания TCP соединения необходимо иметь несколько переменных. Мы решили, что эти переменные будут помещены в соответствующую запись - блок управления передачей (Transmission Control Block - TCB). Среди переменных блока TCB имеются номера местного и чужого сокетов, флаги безопасности и приоритета для данного соединения, указатели буферов посылки и получения, указатели текущего сегмента и очереди повторной посылки. Кроме всего этого в TCB имеются несколько переменных, имеющих отношение к номерам очередей отправителя и получателя.

Отправление
SND.UNA посылка неподтверждена
SND.NXT послать следующий сегмент
SND.WND отправить окно
SND.UP отправить срочный указатель
SND.WL1 номер очереди сегмента, использованный для обновления последнего окна
SND.WL2 номер подтверждения в сегменте, используемый для обновления последнего окна
ISS первоначальный номер очереди отправления

Получение

RCV.NXT - получить следующий сегмент
RCV.WND - получить окно
RCV.UP - получить срочный указатель
IRS - первоначальный номер очереди получения

Нижеприведенные диаграммы могут помочь связать некоторые из этих переменных с местом в очереди

Очередь отправления

  1. старые номера очереди, которые получили подтверждение
  2. номера очереди для данных, не получивших подтверждения
  3. номера очереди, допущенные к новой передаче
  4. следующие номера очереди, чья передача еще не разрешена

Рис. 4 Очередь отправления

Окно отправления - это участок очереди, отмеченный меткой 3 на рисунке 4.

Очередь получения

  1. старые номера очереди, которые получили подтверждение
  2. номера очереди, допущенные к очередному этапу получения
  3. следующие номера очереди, еще не получившие разрешения

Рис. 5 Очередь получения

Окно получения - это участок очереди, отмеченный меткой 2 на рисунке 5.

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

Переменные для очередного сегмента
SEG.SEQ номер очереди для сегмента
SEG.ACK номер подтверждения для сегмента
SEG.LEN длина сегмента
SEG.WND окно для сегмента
SEG.UP срочный указатель для сегмента
SEG.PRC приоритет для сегмента

Соединение во время функционирования проходит через серии промежуточных состояний. Это состояния LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, а также фиктивное состояние CLOSED. Состояние CLOSED является фиктивным, поскольку оно представляет состояние, когда не существует блока TCP, а потому и нет соединения.

Краткое описание состояний:
LISTEN Ожидание запроса на соединение со стороны чужих портов и программ TCP
SYN-SENT Ожидание парного запроса на установление соединения. С нашей стороны запрос уже сделан.
SYN-RECEIVED Ожидание подтверждения после того, как запрос соединения уже принят и отправлен.
ESTABLISHED Состояние открытого соединения, принимаемые данные можно представить пользователю. Это нормальное состояние соединения в фазе передачи данных.
FIN-WAIT-1 Ожидание запроса от чужой программы TCP, или подтверждения ранее отправленного запроса на закрытие соединения.
FIN-WAIT-2 Ожидание запроса на закрытие соединения со стороны чужой программы TCP.
CLOSE-WAIT Ожидание запроса на закрытие соединения со стороны своего клиента.
CLOSING Ожидание подтверждения со стороны чужой программы TCP запроса о закрытии соединения.
LAST-ACK Ожидание запроса на закрытие соединения, ранее отправленного чужой программе TCP (запрос включал также подтверждение получения чужого запроса на закрытие соединения).
TIME-WAIT Ожидание когда истечет достаточное количество времени и можно быть уверенным, что чужая программа TCP получила подтверждение своего запроса на закрытие соединения.
CLOSED Состояние полного отсутствия соединения.

Соединение TCP переходит с одного состояния на другое в ответ на события. Событие - это запросы клиента (открытие, посылка, получение, закрытие, отказ, получение состояния соединения), приход сегментов, и особенно тех, которые содержат флаги SYN, ACK, RST и FIN, а также истечение выделенного времени.

Диаграмма состояний на рисунке 6 иллюстрирует лишь смену состояний, а также вызвавшие это события, производимые действия, но не адреса, условия ошибок, не действия, не связанные прямо с изменением состояния.

Более подробные сведения о действиях программы протокола TCP в ответ на события приведены в последней главе.

Замечание. Данная диаграмма является лишь сводной, но не должна восприниматься как полная спецификация.



Главная > Технологии > Протокол