Функционирование протокола ТСР
В этом разделе будут рассмотрены структура сегмента ТСР, механизмы установления соединения, передачи данных и ликвидации соединения. Формат ТСР сегмента представлен на рис. 6.16.
Заголовок сегмента содержит 20-байтную фиксированную часть и опциональную часть переменной длины. Рассмотрим смысл отдельных полей заголовка.
«Порт источника»и«Порт назначения» -определяют передающее и приемное приложения, соответственно.
«Порядковый номер сегмента» -в режиме установления соединения, когда флаг SYN установлен в 1, в этом поле содержится начальное значение нумерующей последовательности байтов данного потока (ISN – initial sequence number); значение номера первого байта данных этого потока будет ISN+1. В режиме передачи данных (флаг SYN=0) значение в этом поле определяет позицию первого байта данных сегмента в байтовом потоке источника. Напомним, что ТСР нумерует байты, а не сегменты и если порядковый номер текущего сегмента равен 567, а поле данных содержит 12 байт, то следующий сегмент будет иметь порядковый номер 579. Отметим также, что соединения ТСР являются дуплексными и в каждом из направлений передачи устанавливается своя нумерация.
![]() | |||
|
«Порядковый номер подтверждения» -при установленном флаге ACK (режим передачи данных) это поле содержит наибольший порядковый номер байта в их непрерывном потоке, полученных приемником без ошибок; тем самым подтверждается правильность приема всех предыдущих байт. В режиме установления соединения (ACK=0) значение этого поля не обрабатывается.
«Смещение данных» -поле определяет длину заголовка ТСР-сегмента в 32-битных словах; эта информация позволяет приемному модулю определить начало поля данных, т.к. заголовок может содержать опциональное поле переменной длины.
«Резерв» -поле в настоящее время не используется и заполняется нулями.
«Размер окна» -поле, в котором указывается величина (в байтах) объявляемого окна (WА).
«Флаги» -поле длиной 6 бит, каждый из которых является флагом; их последовательность и смысл следующие.
SYN – флаг установления соединения; приэтом поле «Порядковый номер сегмента» содержит начальное значение нумерующей последовательности байт.
ACK – флаг, указывающий на достоверность значений в поле «Порядковый номер подтверждения».
PSH – включение функции «проталкивания» сегмента. В исходной спецификации протокола ТCP предполагалось, что приложение будет располагать возможностью передать своему передатчику ТСР требование установки этого флага; наряду с установкой соответствующего флаг-бита это требовало от TCP-передатчика немедленной (т.е. без ожидания получения объема даных, достаточного для формирования сегмента максимального размера) передачи сегмента. Одновременно, установка этого флага означает, что буфер передатчика пуст. Получив сегмент с установленным флагом PSH приемник TCP отправит приложению сигнал о необходимости чтения данных из буфера. Следует отметить, что все реализации TCP в отношении установки этого флага ведут себя по разному, а общих правил его применения так и не выработано.
URG – флаг, индицирующий наличие срочных данных в сегменте. В ряде случаев, возникает необходимость передачи срочных данных (например, команду прервать передачу большого файла). Такие данные помещаются передатчиком в очередной формируемый сегмент и дополняются обычными данными т.е. в таком сегменте будут байты как срочных, так и обычных данных. Естественно, необходим сигнал приемнику передать эти срочные данные приложению немедленно, вне естественной очереди обработки байтов приемного буфера. Флаг URG приносит приемнику сигнал о наличии в сегменте срочных данных и необходимости организации специальной процедуры передачи их приложению. Поле «Указатель срочных данных» определяет номер последнего байта этих срочных данных в данном сегменте; после приема срочных байтов приложение переходит в обычный режим чтения приемного буфера. Флаг в сегменте устанавливается по тебованию приложения (например, ftp и telnet требуют его установки при разрыве сессии). Сегмент с установленным флагом URG отправляется даже в случае, когда противоположная сторона установила нулевое окно приема.
RST – указание приемному модулю разорвать соединение по причине каких-то аномалий; используется для перезагрузки соединения.
FIN – флаг, индицирующий, что у передатчика нет больше данных для этого соединения; тем не менее соединенение не разрывается и по нему передаются данные от другого участника.
«Указатель срочных данных» - значение этого поля при установленном флаге URG, будучи добавленным к значению поля «Порядковый номер сегмента»,определяетпоследний байт срочных данных.
«Контрольная сумма» - значение этого поля рассчитывается по всему сегменту с дополнением его нулями до размера, кратного 16 битам, и с 12-байтным псевдозаголовком, включаемым перед заголовком TCP; псевдозаголовок содержит сетевые адреса отправителя и получателя, тип протокола (17) и размер ТCP сегмента. Эти дополнения используются только для расчета контрольной суммы и не передаются.
«Опции» - поле используется для задания дополнительных параметров. Опции могут задаваться указанием только их типа (один байт), или заданием трех полей: тип (1 байт), общий размер в байтах (1 байт) и значение опции (ри. 6.17).
![]() |
Определены несколько опций TCP. Опция MSSпозволяет хосту проинформировать противоположную сторону о величине максимального размера сегмента, который он может отправить и принять. Соответственно, противоположная сторона для предупреждения фрагментации, не будет формировать сегменты большей величины, даже если ее MSS превышает полученной значение. Опция MSS может появляться только в сегментах с установленным флагом SYN.
В высокоскоростных сетях в поле «Опции» могут передаются параметры «Коэффициент масштабирования окна» (от 20 до 214) и «Временная метка». Значение первой опции – это показатель степени числа 2k, которое является множителем к размеру объявляемого окна. Опция может появляться только в сегменте с установленным флагом SYN и информирует противопололжную сторону о возможности масштабирования окна передающей стороной. Если в ответном сегменте SYN эта опция не представлена, то это означает неспособность модуля TCP противоположной стороны работать с увеличенным окном. Появление опции в ответном сегменте SYN с любым значением от 0 до 14 говорит о возможности работы с масштабируемым окном обоих участников соединения. При этом, коэффициент масштабирования может быть разным у взаимодействующих станций.
Опция «Временная метка» (timestamp)используется для расширения возможностей нумерации сегментов и дляизмерения RTT. Значения опции - два 4-байтовых поля. В поле Timestamp Value (TSval) записывается значение системного времени хоста-передатчика, зафиксированное при отправке сегмента. Оно копируется в поле Timestamp Echo Reply (TSecr) сегмента, подтверждающего доставку исходного сегмента (с установленным флагом ACK). Если подтверждение имеет накопительный характер, то в поле TSecr записывается значение TSval из подтверждаемого сегмента с минимальным порядковым номером.
По умолчанию, когда опция не используется, RTT измеряется посредством одного из таймеров соединения. Отправка одного сегмента запускает этот таймер и при отправке других сегментов в пределах окна передачи таймер уже не может быть использован. Следовательно, RTT измеряется только для одного сегмента из окна передачи. Если оно невелико (например, 8-10 сегментов), то этого оказывается достаточно. Однако, при больших окнах передачи, когда отправляется много сегментов, требуется более частое измерение времени полного оборота. В этом случае и используется опция timestamp. Естественно, что значение этой метки должно изменяться при отправке каждого сегмента, что требует таймером с малым шагом (до 1 мс).
Определение поля «Порядковый номер подтверждения»отражает возможность реализации механизма ARQ с возвратом на N. Выборочное подтверждение реализуется как дополнительная возможность и для ее осуществления используются две опции. Первая «SACK permitted» — возможность использования выборочного подтверждения, — может передаваться при установлении соединения в пакетах SYN узлом, который способен принимать (и, вероятно, обрабатывать) опцию SACK (RFC 2018). Вторая опция «SACK» (расширенное подтверждение доставки) может использоваться в фазе передачи данных. В частности, получатель при обнаружении нарушения порядка доставки сегментов может уведомить отправителя о приеме и буферизации таких блоков. Значения опции идентифицируют диапазоны байт сегментов в буфере приемника (рис. 6.18).
Левый край первого блока – это номер первого байта первого сегмента, принятого с нарушением порядка следования и сохраненного в буфере приема; правый край первого блока - это номер на единицу больше номера последнего байта первого «внеочредного» сегмента. При наличии нескольких «внеочередных» сегментов в буфере приемника, указываются их границы. В одной опции может указываться до 4 таких блоков. Очевидно, что применение режима выборочного подтверждения возможно только при участии в этом процессе обоих конечных станций, т.е. в фазе установления соединения обе станции должны в сегментах SYN указать опции «SACK permitted».
![]() |
Теперь рассмотрим работу протокола в различных фазах жизни соединения.