Телевизоры

Протокол tcp работает транспортном уровне. Смотреть что такое "Tcp" в других словарях

Протокол tcp работает транспортном уровне. Смотреть что такое

Транспортный уровень

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

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

Transmission Control Protocol

Transmission Control Protocol (TCP) (протокол управления передачей) - является обязательным протоколом стандарт TCP/IP , определенный в стандарте RFC 793, "Transmission Control Protocol (TCP)".

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

В отличие от протокола UDP гарантирует целостность передаваемых данных и подтверждения отправителя о результатах передачи. Используется при передаче файлов, где потеря одного пакета может привести к искажению всего файла.

TCP обеспечивает свою надежность благодаря следующему:

  • Данные от приложения разбиваются на блоки определенного размера, которые будут отправлены.
  • Когда TCP посылает сегмент, он устанавливает таймер, ожидая, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении времени, сегмент передается повторно.
  • Когда TCP принимает данные от удаленной стороны соединения, он отправляет подтверждение. Это подтверждение не отправляется немедленно, а обычно задерживается на доли секунды
  • TCP осуществляет расчет контрольной суммы для своего заголовка и данных. Это контрольная сумма, рассчитываемая на концах соединения, целью которой является выявить любое изменение данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, TCP отбрасывает его и подтверждение не генерируется. (Ожидается, что отправитель отработает тайм-аут и осуществит повторную передачу.)
  • Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.
  • Так как IP датаграмма может быть продублирована, принимающий TCP должен отбрасывать продублированные данные.
  • TCP осуществляет контроль потока данных. Каждая сторона TCP соединения имеет определенное пространство буфера. TCP на принимающей стороне позволяет удаленной стороне посылать данные только в том случае, если получатель может поместить их в буфер. Это предотвращает от переполнения буферов медленных хостов быстрыми хостами.

  • Порядковый номер выполняет две задачи:
    • Если установлен флаг SYN, то это начальное значение номера последовательности - ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности, равный ISN + 1.
    • В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.
  • Номер подтверждения - если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.
  • Длина заголовка - задается словами по 32бита.
  • Размер окна - количество байт, которые готов принять получатель без подтверждения.
  • Контрольная сумма - включает псевдо заголовок, заголовок и данные.
  • Указатель срочности - указывает последний байт срочных данных, на которые надо немедленно реагировать.
  • URG - флаг срочности, включает поле "Указатель срочности", если =0 то поле игнорируется.
  • ACK - флаг подтверждение, включает поле "Номер подтверждения, если =0 то поле игнорируется.
  • PSH - флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.
  • RST - флаг прерывания соединения, используется для отказа в соединении
  • SYN - флаг синхронизация порядковых номеров, используется при установлении соединения.
  • FIN - флаг окончание передачи со стороны отправителя

Рассмотрим структуру заголовка TCP с помощью сетевого анализатора Wireshark:


TCP порты

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

Номер порта - это условное 16-битное число от 1 до 65535, указывающее, какой программе предназначается пакет.

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

Каждый отдельный порт сервера TCP может предложить общий доступ к нескольким соединениям, потому что все TCP соединения идентифицируются двумя значениями: IP-адресом и TCP портом (сокет).

Все номера портов TCP, которые меньше чем 1024 - зарезервированы и зарегистрированы в Internet Assigned Numbers Authority (IANA).

Номера портов UDP и TCP не пересекаются.

TCP программы используют зарезервированные или хорошо известные номера портов, как показано на следующем рисунке.

Установление соединения TCP

Давайте теперь посмотрим, как устанавливается TCP-соединения. Предположим, что процесс, работающий на одном хосте, хочет установить соединение с другим процессом на другом хосте. Напомним, что хост, который инициирует соединение называется «клиентом», в то время как другой узел называется «сервером».

Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).

  • Запрашивающая сторона (которая, как правило, называется клиент) отправляет SYN сегмент, указывая номер порта сервера, к которому клиент хочет подсоединиться, и исходный номер последовательности клиента (ISN).
  • Сервер отвечает своим сегментом SYN, содержащим исходный номер последовательности сервера. Сервер также подтверждает приход SYN клиента с использованием ACK (ISN + 1). На SYN используется один номер последовательности.
  • Клиент должен подтвердить приход SYN от сервера своим сегментов SYN, содержащий исходный номер последовательности клиента (ISN+1) и с использованием ACK (ISN+1). Бит SYN установлен в 0, так как соединение установлено.

После установления соединения TCP, эти два хоста могут передавать данные друг другу, так как TCP-соединение является полнодуплексным, они могут передавать данные одновременно.

В стеке протоколов TCP/IP протокол TCP (Transmission Control Protocol) работает на транспортном уровне, обеспечивая надежную транспортировку данных между прикладными процессами путем установления логического соединения.

К функциям TCP относят:

    Получение и передача потока данных от вышестоящего уровня IP-модулю;

    Обеспечение полнодуплексной передачи данных;

    Обеспечение защиты от повреждения, потери, дублирования;

    Обеспечение работы нескольких соединений;

    Управление потоком данных (с помощью механизмов окна)

Формат сообщений TCP

Единицей данных протокола TCP является сегмент. Информация, поступающая к протоколу TCP в рамках логического соединения от протоколов более высокого уровня, рассматривается протоколом TCP как неструктурированный поток байт. Поступающие данные буферизуются средствами TCP. Для передачи на сетевой уровень из буфера "вырезается" некоторая непрерывная часть данных, называемая сегментом, состоящая из заголовка и блока данных. Заголовок сегмента имеет следующие поля:

Порт источника (Source Port) и порт назначения (Destination Port) занимают 16 бит. Протокол TCP обеспечивает работу одновременно несколько соединений. Каждый прикладной процесс идентифицируется IP-адресом и номером порта.

Destination Port

Sequence number (SN)

Acknowledgment number (ASK SN)

Urgent Pointer

Порядковый номер (Sequence number) занимает 32 бита, указывает номер байта, который определяет смещение сегмента относительно потока отправляемых данных;

Подтвержденный номер (Acknowledgment number) занимает 32 бита, содержит максимальный номер байта в полученном сегменте, увеличенный на единицу; т.е все предыдущие байты были получены именно это значение используется в качестве квитанции;

Длина заголовка (Data Offset) занимает 4 бита, указывает длину заголовка сегмента TCP, измеренную в 32-битовых словах. Длина заголовка не фиксирована и может изменяться в зависимости от значений, устанавливаемых в поле Опции. Служит указателем на начало пол данных;

Резерв (Reserved) занимает 6 битов, поле зарезервировано для последующего использования. Заполняется нулями;

Кодовые биты (Control bits) занимают 6 битов, содержат служебную информацию о типе данного сегмента, задаваемую установкой в единицу соответствующих бит этого поля:

URG - срочное сообщение, используется если приложение обращается с запросом о срочной передаче данных. В этом случае протокол TCP, не ожидая заполнения буфера до уровня размера сегмента, немедленно передает указанные данные в сеть. Полученные из сети данные минуя буфер передаются процессу или приложению. Данная технология используется для передачи видео и аудио- данных;

ACK - квитанция на принятый сегмент;

PSH - запрос на отправку сообщения без ожидания заполнения буфера;

RST – сброс текущего соединения (при получении соединение ликвидируется, недопоставленные данные уничтожаются);

SYN - запрос на установление соединения;

FIN - признак достижения передающей стороной последнего байта в потоке передаваемых данных.

Окно (Windows) занимает 16 бит, содержит объявляемое значение размера окна в байтах;

Контрольная сумма (Checksum) занимает 16 бит, определяется для блока данных, состоящего из псевдозаголовка и самого сегмента данных. 96 –битный псевдозаголовок предшествует заголовку TCP и содержит IP-адрес отправителя, получателя, идентификатор протокола и сегмента.

Указатель срочности (Urgent Pointer) занимает 16 бит, используется совместно с кодовым битом URG и указывает на конец данных, которые необходимо срочно принять, несмотря на переполнение буфера;

Опции (Options) - это поле имеет переменную длину и может вообще отсутствовать, используется для решения вспомогательных задач, например, при выборе максимального размера сегмента, или передачи дайджеста MD5;

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

Порты и установление TCP-соединений

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

Соединение в протоколе TCP идентифицируется парой полных адресов обоих взаимодействующих процессов включающих IP-адрес (номер сети и номер компьютера) и номер порта. Портам присваиваются стандартные, зарезервированные номера (например, номер 21 закреплен за сервисом FTP, 23 - за TELNET), или произвольно выбранными локальными номерами.

Установление соединения выполняется в следующей последовательности:

1. Узел А посылает узлу В запрос на открытие порта, а также запрос процессу, с которым требуется установить соединение (active open).

2. Узел В открывает порт для приема данных (passive open) и возвращает квитанцию, подтверждающую прием запроса.

3. Получив квитанцию, узел А открывает порт для передачи (active port) и передает запрос к противоположной стороне.

Соединение по протоколу TCP

Предположим, что узел А устанавливает соединение с узлом В. Для этого:

    Узел A в сообщении TCP, посылаемому узлу B устанавливает флаг SYN и начальный порядковый номер ISN с которого будут нумероваться отправляемые данные.

    Для подтверждения приема сообщения, узел B откликается посылкой TCP сегмента с установленным флагом ACK. Но вследствие того, что протокол TCP обеспечивает полнодуплексную передачу, узел B может в свою очередь запросить соединение на передачу данных с узлом А посылкой флага SYN и начального порядкового номера своих сообщений ISN.

    Узел А, подтверждает получение сообщение от узла В. Так как сеанс связи можно считать установившимся, то узел А может включить свои данные, нумерация которых начинается с ISN (A)+1 в это сообщения.

    Происходит передача данных между узлами А и В.

    Сеанс обмена данными заканчивается процедурой закрытия, которая в заголовке последнего сегмента использует флаг FIN. Аварийный разрыв соединения происходит посылкой сообщение с битом RST, при этом все недопоставленные данные уничтожаются.

Концепция квитирования

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

Для организации повторной передачи искаженных данных отправитель нумерует отправляемые кадры и ожидает от приемника положительную квитанцию - служебное сообщение, извещающее о том, что исходный кадр был получен и данные в нем оказались корректными. Существуют два подхода к организации процесса обмена квитанциями: с простоями и с организацией "окна".

Метод с простоями требует, чтобы узел, посылал очередной кадр, после получения квитанции (положительной или отрицательной) от получателя. Производительность обмена данными в этом методе незначительна, так как передающий узел и мог бы послать следующий кадр сразу же после отправки предыдущего, однако он обязан ждать прихода квитанции, что особенно заметно на низкоскоростных каналах связи, то есть в территориальных сетях.

В методе с организацией "окна" отправителю разрешается передать некоторое количество кадров в непрерывном режиме, без получения на эти кадры ответных квитанций. Количество кадров, которые возможно передать таким образом, называется размером окна W. При отправке кадра с номером 1 отправителю разрешается передать еще (W-1) кадров до получения квитанции на первый кадр. Если квитанция на кадр 1 не получена, то процесс передачи приостанавливается, и по истечению некоторого тайм-аута кадр 1 считается утерянным и передача его осуществляется снова. Выбор времени ожидания (тайм-аута) очередной квитанции является важной задачей, при которой необходимо учитывать скорость и надежность линий связи, их протяженность и т.д. В протоколе TCP при каждой передаче засекается время от момента отправки сегмента до прихода квитанции о его приеме. Получаемые значения усредняются с весовыми коэффициентами, возрастающими от предыдущего замера к последующему. В качестве тайм-аута выбирается среднее время оборота, умноженное на некоторый коэффициент.

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

В протоколе TCP квитанцией (ASK SN) подтверждается правильный прием данных, отсутствие квитанции говорит о приеме искаженного сегмента, потере сегмента или квитанции. В качестве квитанции получатель отсылает сообщение (сегмент), в которое помещает число, на единицу превышающее максимальный номер байта в полученном сегменте. Если размер окна равен W, а последняя квитанция содержала значение n, то отправитель может посылать новые сегменты до тех пор, пока в очередной сегмент не попадет байт с номером n+W. Этот сегмент выходит за рамки окна, и передачу в таком случае необходимо приостановить до прихода следующей квитанции.

Изменяя величину окна, возможно, повлиять на загрузку сети. Чем больше окно, тем большую порцию неподтвержденных данных можно послать в сеть. Если сеть не справляется с нагрузкой, то протокол TCP, отправляя квитанцию, помещает в нее новый, уменьшенный размер окна. Если узел совсем отказывается от приема, то в квитанции указывается окно нулевого размера. После приема квитанции с нулевым значением окна отправитель время от времени делает контрольные попытки продолжить обмен данными. Если протокол-приемник уже готов принимать информацию, то в ответ на контрольный запрос он посылает квитанцию с указанием ненулевого размера окна.

За время развития вычислительных сетей было предложено и реализовано много протоколов обмена данными, самыми удачными из которых явились семейство протоколов TCP/IP (Transmission Control Protocol/Internet Protocol – протокол управления передачей/межсетевой протокол).

ТСР/IР – это набор протоколов, состоящий из следующих компонентов:

· межсетевой протокол (Internet Protocol) , обеспечивающий адресацию в сетях (IP-адресацию);

· межсетевой протокол управления сообщениями (Internet Control Message Protocol – ICMP) , который обеспечивает низкоуровневую поддержку протокола IP, включая такие функции, как сообщения об ошибках, квитанции, содействие в маршрутизации и т. п.;

· протокол разрешения адресов (Address Resolution Protocol – ARP) , выполняющий преобразование логических сетевых адресов в аппаратные, а также обратный ему RARP (Reverse ARP);

· протокол пользовательских датаграмм (User Datagramm Protocol – UDP) ;

· протокол управления передачей (Transmission Control Protocol – TCP) .

Протокол UDP обеспечивает передачу пакетов без проверки доставки, в то время как протокол TCP требует установления виртуального канала и соответственно подтверждения доставки пакета с повтором в случае ошибки.

Этот набор протоколов образует самую распространенную модель сетевого обмена данными, получившую название – TCP/IP. Модель TCP/IP иерархическая и включает четыре уровня.

Прикладной уровень определяет способ общения пользовательских приложений. В системах "клиент-сервер" приложение-клиент должно знать, как посылать запрос, а приложение-сервер должно знать, как ответить на запрос. Этот уровень обеспечивает такие протоколы, как HTTP, FTP, Telnet.

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

На сетевом уровне определяются адреса включенных в сеть компьютеров, выделяются логические сети и подсети, реализуется маршрутизация между ними.

На канальном уровне определяется адресация физических интерфейсов сетевых устройств, например, сетевых плат. К этому уровню относятся программы управления физическими сетевыми устройствами, так называемые, драйверы.

Как уже отмечалось ранее, в сетях с коммутацией пакетов, а модель TCP/IP относится к таким, для передачи по сети сообщение (сформированное на прикладном уровне) разбивается на пакеты или датаграммы. Пакет или датаграмма – это часть сообщения с добавленным заголовком пакета или датаграммы.

На транспортном уровне к полезной информации добавляется заголовок – служебная информация. Для сетевого уровня полезной информацией является уже пакет или датаграмма транспортного уровня. К ним добавляется заголовок сетевого уровня.

Полученный блок данных называется IP-пакетом. Полезной нагрузкой для канального уровня является уже IP-пакет. Здесь перед передачей по каналу к нему добавляются собственный заголовок и еще завершитель. Получившийся блок называется кадром. Он и передается по сети.

Переданный по сети кадр в пункте назначения преобразуется в обратном порядке, проходя по уровням модели снизу вверх.

Выводы по теме

1. Протокол сетевого обмена информацией – это перечень форматов передаваемых блоков данных, а также правил их обработки и соответствующих действий.

2. Протокол обмена данными – это подробная инструкция о том, какого типа информация передается по сети, в каком порядке обрабатываются данные, а также набор правил обработки этих данных.

3. В настоящее время почти все сети в мире являются сетями коммутации пакетов.

4. Существуют два принципа организации обмена данными: установление виртуального соединения с подтверждением приема каждого пакета и передача датаграмм.

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

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

7. ТСР/IР – это набор протоколов, состоящий из следующих компонентов: межсетевой протокол (IP), межсетевой протокол управления сообщениями (ICMP), протокол разрешения адресов (ARP), протокол пользовательских датаграмм (UDP) и протокол управления передачей (TCP).

Вопросы для самоконтроля

1. Что понимается под протоколом передачи данных?

2. Охарактеризуйте сети с коммутацией сообщений и коммутацией пакетов.

3. Чем отличается соединение по виртуальному каналу от передачи датаграмм?

4. Какие протоколы образуют модель TCP/IP?

5. Какие уровни входят в сетевую модель TCP/IP?

6. Дайте характеристику всех уровней модели TCP/IP и укажите соответствующие этим уровням протоколы.

7. Соотнесите по уровням модели TCP/IP понятия "пакет" и "кадр". Чем они отличаются?

8. Какой протокол обеспечивает преобразование логических сетевых адресов в аппаратные?

Протокол TCP (Transmission Control Protocol) является протоколом транспортного уровня, обеспечивающим надежную передачу данных в сети. Его транспортный адрес в заголовке IP-сегмента равен 6. Обмен данными осуществляется посредством "TCP-пакетов". В Таблице приведен формат заголовка TCP-пакета.

Порт источника и порт приемника : 16-битовые поля, содержащие номера портов. Существует набор служб, использующих TCP, за которыми закреплены определенные порты: 20/21 - FTP; 22 - SSH; 23 - Telnet; 25 - SMTP; 80,8080 - HTTP, альтернативный порт HTTP; 110 - POP3; 194 - IRC (Internet Relay Chat); 443 - HTTPS (Secure HTTP); 8080 - альтернативный порт HTTP

Номер в последовательности : 32-битовое поле, определяющее положение данных TCP-пакета внутри исходящего потока данных. Номер последовательности выполняет две задачи:

1. Если установлен флаг SYN, то это начальное значение номера последовательности - ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности равный ISN + 1.

2. В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.

Номер подтверждения : 32-битовое поле содержит количество принятых данных из входящего потока к TCP-модулю, формирующему TCP-пакет. Если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.

Смещение данных : содержит длину заголовка TCP-пакета в 32-битовых словах и используется для определения начала расположения данных в TCP-пакете. Это поле определяет размер заголовка пакета 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: бит= 1 означает, что пакет содержит важные (urgent) данные
  • ACK=1 означает, что пакет содержит в поле "номер подтверждения" верные данные.
  • PSH=1 инструктирует получателя протолкнуть данные, накопившиеся в приемном буфере, в приложение пользователя
  • RST=1 Оборвать соединения, сбросить буфер (очистка буфера)
  • SYN= 1 означает, что TCP-пакет представляет собой запрос на установление логического соединения.
  • FIN= 1 означает, что TCP-пакет представляет запрос на закрытие соединения.

Размер окна : содержит количество байт информации, которое может принять TCP-модуль, отправляющий партнеру TCP-пакет. Поле используется принимающим поток данных TCP-модулем для управления интенсивностью этого потока.

Контрольная сумма : 16-битовое поле, содержащее контрольную сумму, подсчитанную для TCP-заголовка, данных пакета и псевдозаголовка.

Указательважности : 16-битовое поле, содержащее указатель на первый байт в теле TCP-пакета, начинающий последовательность важных (urgent) данных.

Дополнительные данные заголовка : Протокол TCP определяет три типа дополнительных данных заголовка: конец списка полей дополнительных данных; пусто (No Operation); максимальный размер пакета.

В отличие от протокола UDP, который может сразу же начать передачу пакетов, TCP перед передачей данных устанавливает соединения:

  • Установка соединения
  • Передача данных
  • Завершение соединения

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

Для того, чтобы передающая сторона не отправляла данные интенсивнее, чем их может обработать приемник, TCP содержит средства управления потоком. Для этого используется поле «окно». В сегментах, направляемых от приемника передающей стороне в поле «окно» указывается текущий размер приемного буфера. Передающая сторона сохраняет размер окна и отправляет данных не более, чем указал приемник. Если приемник указал нулевой размер окна, то передача данных в направлении этого узла не происходит, пока приемник не сообщит о большем размере окна.

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

Завершение соединения можно рассмотреть в три этапа:

  1. Посылка серверу от клиента флагов FIN и ACK на завершение соединения.
  2. Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто.
  3. После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.

Протоколы транспортного уровня, обеспечивающие надежную передачу данных, предполагают подтверждение принимающей стороной правильности полученных данных. Для этого используется принцип "скользящего окна" (sliding window), который заключается в том, что каждая сторона может отправлять партнеру максимум столько байт, сколько партнер указал в поле "размер окна" заголовка TCP-пакета, подтверждающего получение предыдущих данных. Принцип "скользящего окна" обеспечивает опережающую посылку данных с отложенным их подтверждением. Если в течение некоторого времени не будет получено отложенное подтверждение отправленного пакета, то отправляющий TCP-модуль будет вынужден повторить посылку всех TCP-пакетов, начиная с неподтвержденного пакета.

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

Протокол TCP (TransmissionControlProtocol, протокол управления передачей) представляет собой надежный протокол с установлением соединения, являющийся альтернативой UDP, и отвечающий за большинство передач пользовательских данных по сетям TCP/IP, и даже внесший свой вклад в название всего набора протоколов. Протокол TCP, как определено в документе RFC 793, обеспечивает приложения всем диапазоном транспортных услуг, включая подтверждение получения пакетов, отслеживание ошибок и их исправление, а также управление потоком.

Протокол TCP предназначен для передачи относительно больших объемов информации, которая заведомо не сможет быть упакована в один пакет. Информация обычно принимает форму целых файлов, которые должны быть разделены на множественные дейтаграммы для передачи. Информация, поставляемая Транспортному уровню, в терминологии протокола TCP рассматривается как последовательность (sequence), которую протокол разбивает на сегменты (segment) для передачи по сети. Как и в случае протокола UDP, сегменты затем упаковываются в IP-дейтаграммы, которые могут преодолевать маршрут до места назначения различными способами. Поэтому, протокол TCP снабжает каждый из сегментов порядковым номером для того, чтобы система-получатель смогла собрать их воедино в правильном порядке.

Перед началом любой передачи пользовательских данных с применением протокола TCP две системы обмениваются сообщениями с целью установления соединения. Это позволяет убедиться, что система-получатель функционирует и в состоянии принять данные. Как только соединение установлено и начинается процесс передачи данных, система-получатель периодически посылает сообщения, подтверждающие прием пакетов. Эти сообщения оповещают систему-отправителя о потерянных пакетах, а также обеспечивают ее информацией, используемой при контроле скорости потока передачи.

Формат TCP –сообщения

Функции полей TCP-заголовка описаны ниже.

Порт источника (SourcePort), 2 байта. Идентифицирует номер порта передающей системы, используемый процессом, который создал информацию, переносимую TCP-сегментами. В некоторых случаях это может быть фиктивный номер порта, выделенный клиентом специально для данной транзакции.

Порт назначения (DestinationPort), 2 байта. Указывает номер порта системы назначения, на который должна быть передана информация ТСР-сегментов. Номера портов перечислены в документе "AssignedNumbers", а также в файле SERVICES каждой ТСР/1Р-системы.

Порядковый номер (SequenceNumber), 4 байта. Определяет положение конкретного сегмента по отношению ко всей последовательности данных.

Подтвержденный номер (AcknowledgmentNumber), 4 байта. Задает максимальный номер байта в сегменте, увеличенный на единицу, который подтверждающая система ожидает получить от отправителя. Используется совместно с битом управления АСК.

Смещение данных (DataOffset), 4 бита. Задает длину в 4-байтных словах, TCP-заголовка (который может содержать опции, увеличивающие его размер вплоть до 60 байт).

Зарезервировано (Reserved), 6 битов. Выделено для последующих применений.

Биты управления (ControlBits), 6 битов. Содержит шесть 1-битных флагов, выполняющих перечисленные ниже функции:

URG - показывает, что последовательность содержит срочные данные (urgentdata) и активирует поле указателя срочности;

АСК - отмечает, что сообщение является подтверждением ранее полученных данных и активирует поле номера подтверждения;

PSH - предписывает системе-получателю передать всю информацию текущей последовательности, полученную на данный момент, приложению, идентифицированному полем порта назначения, не дожидаясь поступления остальных фрагментов;

RST - инструктирует систему-получателя отбросить все сегменты текущей последовательности, полученные к настоящему моменту, и начать установление TCP-соединение заново;

SYN - используется во время процедуры установления соединения для синхронизирования нумераторов переданных данных между взаимодействующими системами;

FIN - извещает другую систему, что передача данных закончена и соединение должно быть завершено.

Окно (Window), 2 байта. Реализует механизм управления потоком протокола TCP (скользящее окно) путем объявления количества байтов, которое система-получатель может принять от системы-источника.

Контрольная сумма (Checksum), 2 байта. Содержит результат вычисления контрольной суммы с учетом TCP-заголовка, данных, а также псевдозаголовок, составленный из полей IP-адреса источника, протокола, IP-адреса назначения из IP-заголовка плюс длина всего ТСР-сообщения.

Указатель срочности (UrgentPointer), 2 байта. Задействуется совместно с битом URG, определяет данные последовательности, которые должны рассматриваться получателем как срочные.

Опции (Options), переменный размер. Может содержать дополнительные конфигурационные параметры для TCP-соединения вместе с битами выравнивания, требуемыми для того, чтобы привести размер поля до ближайшего значения, кратного 4 байтам. Возможные опции перечислены ниже.

Максимальный размер сегмента (MaximumSegmentSize). Задает размер максимального сегмента, который текущая система может получить от другой системы, соединенной с ней.

Фактормасштабаокна (Window Scale Factor). Используется для увеличения размера поля окна с 2 до 4 байтов.

Временная отметка (Timestamp). Используется для хранения временных отметок пакетов данных, которые система-получатель возвращает отправителю с целью подтверждения. Это позволяет отправителю измерять время путешествия данных в оба конца.

Данные (Data), переменный размер. Может включать в себя сегменты данных, поступившие с вершины протокольного стека, от протоколов Прикладного уровня. В пакетах SYN, АСК и FIN это поле оставляется пустым.

IPX/SPX: Для обеспечения транспортных услуг для операционной системы NovellNetWare, фирмой Novell был создан свой собственный стек протоколов, получивший общее название по наименованию протокола Сетевого уровня - IPX (InternetworkPacketExchange, межсетевой обмен пакетами). По аналогии с TCP/IP этот стек иногда также называют IPX/SPX. Вторая часть этого обозначения соотносится с SPX (SequencedPacketeXchange, последовательный обмен пакетами), протоколом, работающим на Транспортном уровне. Однако, в отличие от комбинации TCP и IP, которая повсеместно встречается в TCP/IP- сетях и предназначена в основном для доставки большого количества трафика, комплекс IPX/SPX в сетях NetWare можно встретить относительно редко.

Протоколы IPX в нескольких аспектах похожи на TCP/IP. Оба стека протоколов задействуют на Сетевом уровне ненадежные протоколы без установления соединения (IPX и IP соответственно) для переноса дейтаграмм, содержащих данные множества протоколов верхних уровней, что обеспечивает широкий спектр услуг для различных применений. Подобно IP, IPX отвечает за адресацию дейтаграмм и маршрутизацию их к месту назначения в другой сети.

Однако в отличие от TCP/IP протоколы IPX были разработаны для применения в локальных сетях, и не поддерживают той почти неограниченной масштабируемости, свойственной протоколам Интернета. IPX не обладает такой самостоятельной адресной системой, какая имеется у протокола IP. Системы в сети NetWare идентифицируют другие системы посредством аппаратных адресов, "зашитых" в платы сетевых адаптеров в сочетании с адресом сети, назначенным администратором (или ОС) во время инсталляции операционной системы.

Дейтаграммы IPX переносятся внутри стандартных кадров протокола Канального уровня точно так же, как дейтаграммы IP. Протоколы IPX не имеют собственных протоколов Канального уровня. Тем не менее, в большинстве сетей данные IPX инкапсулируются кадрами Ethernet или TokenRing.

IPX базируется на протоколе IDP (InternetworkDatagramPacket, межсетевой обмен дейтаграммами), разработанном для сетевых служб Xerox (XNS, XeroxNetworkServices). IPX обеспечивает базовые транспортные услуги без установления соединения между системами интерсети при широковещательной и однонаправленной передаче. Большая часть обычного трафика между серверами NetWare или между клиентами и серверами переносится посредством дейтаграмм IPX.

Заголовок дейтаграммы IPX имеет длину 30 байтов (для сравнения: размер заголовка IP равен 20 байтам). Назначение полей заголовка перечислено ниже.

Контрольная сумма (Checksum), 2 байта. В оригинальном заголовке IDP это поле содержит значение CRC для дейтаграммы. Так как протоколы Канального уровня сами выполняют проверку контрольных сумм, то данная функция при обработке дейтаграмм IPX не задействована и поле всегда содержит шестнадцатеричное значение ffff.

Длина (Length), 2 байта. Задает размер дейтаграммы в байтах, включая заголовок IPX и поле данных.

Управление доставкой (TransportControl), 1 байт. Это поле также известно как счетчик транзитов (hopcount). Оно фиксирует количество маршрутизаторов, через которые прошла дейтаграмма на пути к месту назначения. Передающая система сбрасывает его в 0, а каждый из маршрутизаторов при обработке дейтаграммы увеличивает значение счетчика на 1. Как только количество транзитных маршрутизаторов достигает 16, последний из них отбрасывает дейтаграмму.

Тип пакета (Packet Туре), 1 байт. Идентифицирует сервис или протокол верхнего уровня, который создал данные, переносимые дейтаграммой. Используются следующие значения:

0 - не определен;

1 - RoutingInformationProtocol (RIP, протокол информации маршрутизации);

4 - ServiceAdvertisingProtocol (SAP, протокол извещения об услугах);

5 - SequencedPacketExchange (SPX, последовательный обмен пакетами);

17 - NetWare Core Protocol (NCP, основнойпротокол NetWare).

Адрессетиназначения (Destination Network Address), 4 байта. Указывает сеть, в которой расположена система-получатель, содержит значение, выделенное администратором или операционной системой во время инсталляции NetWare.

Адрес узла назначения (DestinationNodeAddress), 6 байтов. Определяет сетевой интерфейс компьютера, которому должны быть доставлены данные, представляет собой аппаратный адрес протокола Канального уровня. Широковещательные сообщения передаются с шестнадцатеричным адресом ffffffffffff.

Сокет назначения (DestinationSocket), 2 байта. Отвечает за идентификацию процесса, выполняющегося на системе-получателе, для которого, собственно, и предназначены данные внутри дейтаграммы. Используетсяодноизследующихзначений:

0451 - NetWare Core Protocol;

0452 - Service Advertising Protocol;

0453 - Routing Information Protocol;

0456 - диагностический пакет;

0457 - пакет присваивания номера (serializationpacket);

4000-6000 - сокеты, отведенные процессам сервера;

9004 - IPXWAN Protocol.

Адрес сети источника (SourceNetworkAddress), 4 байта. Идентифицирует сеть, в которой находится система, пославшая дейтаграмму. Используется значение, выделенное администратором или операционной системой во время инсталляции NetWare.

Адрес узла источника (SourceNodeAddress), 6 байтов. Содержит аппаратный адрес протокола Канального уровня для сетевого интерфейса компьютера, который отправил дейтаграмму.

Сокет источника (SourceSocket), 2 байта. Определяет процесс, выполняющийся на локальной системе, сформировавший данные пакета. Применяются те же значения, что и для поля сокета назначения.

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

Реализация TCP, как правило, встроена в ядро системы, хотя есть и реализации TCP в контексте приложения.

TCP часто обозначают «TCP/IP». Когда осуществляется передача от компьютера к компьютеру через Internet, TCP работает на верхнем уровне между двумя конечными системами, например, интернет-браузер и интернет-сервер. Также TCP осуществляет надежную передачу потока байт от одной программы на некотором компьютере в другую программу на другом компьютере. Программы для электронной почты и обмена файлами используют TCP. TCP контролирует длину сообщения, скорость обмена сообщениями, сетевой трафик.

Формат TCP-сегмента

Формат TCP-сегмента
Бит 0 - 3 4 - 9 10 - 15 16 - 31
0 Порт источника Порт назначения
32 Номер последовательности
64 Номер подтверждения
96 Смещение данных Зарезервировано Флаги Окно
128 Контрольная сумма Указатель важности
160 Опции (необязательное)
160/192+
Данные

Порт источника

Порт назначения

Порт назначения идентифицирует порт, на который отправлен пакет.

Номер последовательности

Номер последовательности выполняет две задачи:

  1. Если установлен флаг SYN, то это начальное значение номера последовательности и первый байт данных - это номер последовательности плюс 1.
  2. В противном случае, если SYN не установлен, первый байт данных - номер последовательности

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

Номер подтверждения

Если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.

Смещение данных

Это поле определяет размер заголовка пакета TCP в 32-битных словах. Минимальный размер составляет 5 слов, а максимальный - 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.

Зарезервировано

Зарезервировано (6 бит) для будущего использования и должны устанавливаться в ноль. Из них два (7-й и 8-й) уже определены:

  • 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 )
  • PSH - (англ. Push function ) инструктирует получателя протолкнуть данные, накопившиеся в приемном буфере, в приложение пользователя
  • RST - Оборвать соединения, сбросить буфер (очистка буфера) (англ. Reset the connection )
  • SYN - Синхронизация номеров последовательности (англ. Synchronize sequence numbers )
  • FIN (англ. final , бит) - флаг, будучи установлен, указывает на завершение соединения (англ. FIN bit used for connection termination ).

Контрольная сумма

Поле контрольной суммы - это 16-битное дополненение суммы всех 16-битных слов заголовка и текста. Если сегмент содержит нечетное число октетов в заголовке /или тексте, последние октеты дополняются справа 8 нулями для выравнивания по 16-битовой границе. Биты заполнения (0) не передаются в сегменте и служат только для расчета контрольной суммы. При расчете контрольной суммы значение самого поля контрольной суммы принимается равным 0.

Указатель важности

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

Механизм действия протокола

Состояния сеанса TCP

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

Установка соединения

Процесс начала сеанса TCP называется «тройным рукопожатием». Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN. Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буфера и управляющие структуры памяти) для обслуживания нового клиента. В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED. В случае неудачи сервер посылает клиенту сегмент с флагом RST.

Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK, если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED. Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться.

Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.

Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED. В противном случае после таймаута он закрывает сокет и переходит в состояние CLOSED.

Процесс называется «тройным рукопожатием», поскольку возможен процесс установления соединения с использованием 4 сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), но для экономии времени используется 3 сегмента.

Передача данных

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

Для того, чтобы передающая сторона не отправляла данные интенсивнее, чем их может обработать приемник, TCP содержит средства управления потоком. Для этого используется поле «окно». В сегментах, направляемых от приемника передающей стороне в поле «окно» указывается текущий размер приемного буфера. Передающая сторона сохраняет размер окна и отправляет данных не более, чем указал приемник. Если приемник указал нулевой размер окна, то передача данных в направлении этого узла не происходит, до тех пор пока приемник не сообщит о большем размере окна.

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

Завершение соединения

Завершение соединения можно рассмотреть в три этапа: 1. Посылка серверу от клиента флагов FIN и ACK на завершения соединения. 2. Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто. 3. После получение этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.

Известные проблемы

Максимальный размер сегмента

TCP требует явного указания максимального размера сегмента (MSS) в случае, если виртуальное соединение осуществляется через сегмент сети, где максимальный размер блока (MTU , IPIP, а так же MTU туннеля меньше чем стандартный, поэтому сегмент TCP максимального размера имеет длину пакета больше, чем MTU. Поскольку фрагментация в подавляющем большинстве случаев запрещена, то такие пакеты отбрасываются.

Проявление этой проблемы выглядит как «зависание» соединений. При этом «зависание» может происходить в произвольные моменты времени, а именно тогда, когда отправитель использовал сегменты длинее допустимого размера.

Для решения этой проблемы на маршрутизаторах применяются правила Firewall-а, добавляющие параметр MSS во все пакеты, инициирующие соединения, чтобы отправитель использовал сегменты допустимого размера.

MSS может так же управляться параметрами операционной системы.

Обнаружение ошибок при передачи данных

Хотя протокол осуществляет проверку контрольной суммы по каждому сегменту, используемый алгоритм считается слабым . Так в 2008 году не обнаруженная сетевыми средствами ошибка в передаче одного бита, привела к остановке серверов системы Amazon Web Services .

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

Реализация

См. также

Ссылки

  • RFC 793 - Transmission Control Protocol

Литература

  • Терри Оглтри Модернизация и ремонт сетей = Upgrading and Repairing Networks. - 4-е изд. - М.: «Вильямс» , 2005. - С. 1328. - ISBN 0-7897-2817-6
  • Дуглас Камер Сети TCP/IP, том 1. Принципы, протоколы и структура = Internetworking with TCP/IP, Vol. 1: Principles, Protocols and Architecture. - М.: «Вильямс» , 2003. - С. 880. - ISBN 0-13-018380-6
  • Андрей Робачевский, Сергей Немнюгин, Ольга Стесик Операционная система UNIX. - 2-е изд. - "БХВ-Петербург" , 2007. - С. 656. - ISBN 5-94157-538-6