logo search
Технологии корпоративных сетей

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

Протокол TCP — это основной транспортный протокол в стеке протоколов TCP/IP. Он обеспечивает надежную передачу потока данных, опираясь при этом на ненадежный сервис транспортировки дейтаграмм, предоставляемый протоколом IP. В сетях IP протокол TCP используется для обработки запросов на вход в сеть, разделения ресурсов (файлов и принтеров), репликации инфор­мации между контролерами доменов, передачи списков ресурсов и т. д. На про­токол TCP, в частности, возложена задача управления потоками и перегрузками. Он отвечает за согласование скорости передачи данных с техническими возмож­ностями рабочей станции-получателя и промежуточных устройств в сети.

Рассмотрим пример использования TCP в неоднородной сети. На рис. 7.2 показана схема движения информации по цепочке: отправитель, сеть Frame Relay, маршрутизатор, получатель. Маршрутизатор является связующим звеном между сетью Frame Relay и сетью Ehternet 802.2, в которой работает получатель.

Как видно из рис. 7.2, протокол TCP выполняет основную задачу по доставке информации.

С течением времени в протокол TCP постоянно добавляются расширения и появляются более современные его реализации. Этот протокол использует толь­ко один тип протокольного блока данных (PDU — Protocol Data Unit), который называется сегментом TCP. Сегмент состоит из заголовка и поля данных (полез­ной нагрузки). На рис. 7.3 показан формат заголовка сегмента TCP.

Минимальная длина составляет 20 байт. Такая большая величина обуслов­лена тем, что один и тот же заголовок используется протоколом для самых раз­личных целей. Для определения назначения большинства полей предназначены контрольные биты. Формат и значения поля «Контрольные биты» описаны в табл. 7.2.

Таблица 7.2. Формат и значения поля «Контрольные биты»

Бит

1

2

3

4

5

6

Сокращение

URG

АСК

PSH

RST

SYN

FIN

Назначение

Поле

«Указа­тель срочности» задействовано

Поле

«Номер

подтверждения» задействовано

Включена

функция

про­талкивания

Перезагрузка

данного

соединения

Синхрониза­ция

номеров

в очереди

Данных для передачи нет

Из рис. 7.3 видно, что протокол TCP использует следующие поля:

Некоторые поля в заголовке сегмента протокола TCP могут быть использо­ваны при его дальнейшем развитии. «Номер в последовательности» и «Номер подтверждения» выравниваются по числу байтов в поле данных, а не по длине всего сегмента. Например, если сегмент содержит в поле «Номер в последо­вательности» значение 1000 и несет в поле данных 600 байт данных, то поле «Номер в последовательности» указывает на номер первого байта в поле дан­ных. Следующий (в логическом порядке) сегмент будет иметь в поле «Номер в последовательности» значение 1601. Мы видим, что протокол TCP изначально логически ориентирован на работу с потоком данных. Он принимает байты от пользовательского приложения, группирует их, а затем распределяет по сегмен­там и формирует поток сегментов с нумерацией каждого байта.

Флаги PSH (Push) и URG (Urgent) реализуют две службы протокола TCP: продвижение (проталкивание) потока данных и сигнализацию о срочных дан­ных. Обычно протокол TCP передает данные, когда количество предназна­ченных для передачи байтов равно длине поля данных очередного сегмента. Приложение может потребовать, чтобы протокол передал все оставшиеся дан­ные и пометил их флагом PSH. На принимающей стороне модуль протокола TCP доставит эти данные приложению сразу (то есть данные не будут ждать своей очереди в буфере). Приложение может прибегнуть к проталкиванию, если достигнут логический конец данных. Поле «Указатель срочности» позволяет ин­формировать приложения на принимающей стороне о том, что в принимаемый ими поток помещены важные данные.

Связь модуля протокола TCP и пользовательского приложения осуществля­ется при помощи специального интерфейса. Приложение использует ряд команд для управления модулем протокола. Если пользовательское приложение форми­рует команду SEND для передачи блока данных модулю протокола TCP, то он помещает эти данные в буфер отправки. Если при этом был установлен флаг PSH, любые оставшиеся в буфере данные, включая данные, которые только что были помещены в него, будут немедленно посланы (в одном или нескольких сегментах), а последний сегмент будет помечен флагом PSH. Если этот флаг не установлен, то протокол TCP может держать данные в буфере и посылать их в подходящее время. Например, протокол может ожидать до тех пор, пока в буфе­ре накопится такое количество данных, которое позволит отсылать сегменты с предельно большим полем данных, повышая тем самым эффективность пере­дачи.

Данные в сегменте проходят через соединение к точке входа в модуль прото­кола TCP и сохраняются в буфере приема, который ассоциируется с этим соеди­нением. Если входящие данные помечены флагом PSH, то они вместе с данными, уже имеющимися в буфере, немедленно доставляются приложению по команде RECEIVE. Если данные не помечены флагом PSH, то протокол TCP доставляет эти данные в подходящее время. Например, протокол может ожидать накопления большего количества данных для уменьшения прерываний в сис­теме.

Документ RFC 793 определил только одну опцию — максимальный размер сегмента. Поле этой опции с размером 16 бит может быть использовано только в сегменте, который посылается при запросе на создание логического соедине­ния. Опция определяет максимальный размер сегмента в байтах, который будет использоваться будущим соединением. За время, прошедшее после публикации документа RFC 793, широкое распространение получили две другие опции: «Параметр масштабирования окна» (Window scale factor) и «Временной штамп» (Timestamp).

Обычно, поле «Окно» в заголовке протокола TCP определяет некий лимит или кредит, выданный отправителю на размещение его данных в отсылаемых сегментах и измеряемый в байтах. Когда используется опция «Параметр масш­табирования окна», количество байтов данных, размещаемых в поле «Окно» должно быть кратно 2F, где F это параметр масштабирования окна. Макси­мальное значение F, которое может быть использовано протоколом TCP, — 14. Следует отметить, что эта опция включается только на время установления соединения. Полное описание этого метода приведено в разделе 2.2 документа RFC 1323.

В этом же документе описан алгоритм «Временной штамп». Этот алгоритм используется для соединений, работающих с окнами большого размера. Опция «Временной штамп» используется для того, чтобы проводить точное измерение времени прохождения сигнала до получателя и обратно, то есть времени обра­щения (Round Trip Time, RTT).

Такие замеры необходимы для корректировки времени повторной переда­чи при отсутствии подтверждения приема определенного сегмента. «Временной штамп» реально может быть использован в любом сегменте с данными и определя­ет два дополнительных поля: «Timestamp Value» (значение временного штампа) и «Timestamp Echo Reply» (ответ на временной штамп получен). Протокол TCP может включить поле «Timestamp Value» в любой исходящий сегмент. Когда этот сегмент подтверждается принимающей стороной, то отвечающий модуль протокола TCP включает в ответный сегмент поле «Timestamp Echo Reply» с тем же самым значением, что было в поле «Timestamp Value» в сегменте, ко­торый был подтвержден. Это позволяет протоколу TCP выполнять постоянный мониторинг времени обращения. В операционной системе Windows 2000 пре­дусмотрен режим использования алгоритма «Временной штамп» по умолчанию.