Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

9_Транспортный уровень__ТСР_UDP

.doc
Скачиваний:
28
Добавлен:
03.05.2015
Размер:
713.22 Кб
Скачать

Протокол ТСР, RFC 793

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

Все байты данных, передаваемые по ТСР соединению, нумеруются, начиная со случайного числа. Все сегменты (блок данных протокола ТСР называется сегментом) содержат контрольную сумму, что позволяет обнаружить ошибки в принятом сегменте.

Протокол ТСР обеспечивает восстановление потерянных данных за счет использования механизма подтверждения приема с повторной передачей (Positive Acknowledgment with Retransmission, PAR). На все принятые сегменты с данными должны передаваться сегменты подтверждения ACK. При этом подтверждение может быть кумулятивным, когда один сегмент ACK подтверждает несколько сегментов с данными.

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

Формат заголовка ТСР

32 бита

Прямая соединительная линия 2

Source Port

Destination Port

Sequence Number

Acknowledgement Number

Offset (0-3)

Reserved (4-9)

Flags (10-15)

Window

CRC (Checksum)

Urgent Pointer

Options

Padding

DATA

Размер заголовка – шесть 32-разрядных слов. После заголовка следуют данные – неструктурированный поток байт.

Source Port (порт источника) – поле, которое идентифицирует исходный процесс прикладного уровня ULP. Случайное число (>1024).

Destination Port (порт назначения) – поле, которое идентифицирует процесс ULP назначения, то есть тот процесс, который будет обрабатывать сегмент у получателя. В RFC существует список номеров портов, которые соответствуют процессам-приложениям, например FTP, Telnet.

Sequence Number (порядковый номер) – 32-битное поле, которое содержит порядковый номер первого байта в поле данных сегмента среди всех байтов потока данных для текущего логического соединения.

Acknowledgement Number (Ack Num, номер подтверждения) – если ACK-бит установлен (в поле Flags), то это 32-битное поле содержит номер следующего байта данных, который противоположная сторона предполагает получить. Подразумевается, что все предыдущие байты с номерами от ISN+1 (ISN – начальный порядковый номер, см.ниже) до ACK-1 получены успешно (без ошибок). TCP использует принцип скользящего окна (sliding window) и передает одно подтверждение на серию принимаемых сегментов.

Offset (смещение данных) – число 32-битных слов в заголовке.

Flags (флаги) – 6 бит разнообразной контрольной информации, которая используется для установки соединения, контроля соединения, задания приоритетов сегмента:

  • Флаг URG – указывает на срочность доставки сегмента.

  • Флаг ACK – указывает, что в поле ACK Num прописан номер байта данных, который ожидает на прием противоположная сторона.

  • Флаг Push – указатель на немедленную отсылку сегмента более низким уровням протоколов или процессу прикладного уровня. Используется при передаче данных интерактивных приложений.

  • Флаг ReSeT – признак необходимости переустановки текущего ТСР соединения.

  • Флаг SYN – указывает на то, что данный ТСР сегмент является запросом на установление логического соединения. Далее следует процедура «рукопожатия», где задается начальный номер для нумерации байтов данных Initial Sequence Number (ISN).

  • Флаг FIN – говорит о том, что передающее устройство не имеет больше информации для передачи и логическое ТСР-соединение должно быть закрыто.

CRC – контрольная сумма всего ТСР сегмента для обнаружения ошибок.

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

Urgent Pointer (указатель на данные особой важности) – указатель длины срочных данных, которые обычно размещаются в начале поля данных. Например, прерывания. Действует совместно с флагом URG.

Options (опции) – для реализации дополнительных услуг протокола ТСР. Например, определение максимального размера сегмента, который может быть передан по TCP соединению.

Как сказано выше, протокол ТСР воспринимает данные как непрерывный поток байтов, а не набор независимых пакетов. Чтобы сохранить последовательность отправки и получения байтов, в заголовке ТСР предусмотрены поля Порядковый номер байта - Sequence Number и Номер подтверждения - Acknowledgement Number.

Перед началом обмена данными между узлами образуется сквозное логическое соединение. Узлы обмениваются управляющей информацией (рукопожатием). В процессе рукопожатия стороны синхронизируют свои системы нумерации байтов при помощи обмена SYN-сегментами, в которых в поле Порядковый номер указывается начальный порядковый номер (ISN, Initial Sequence Number). Этот номер является начальной точкой отсчета для системы нумерации байтов. Из соображений безопасности он является случайным числом.

Установка ТСР-соединени

(Процедура рукопожатия в 3 фазы, 3-way handshake)

Размер окна Window устанавливается по умолчанию для определенной операционной системы – для Windows 16384 байт.

MSS (Maximum Size Segment) – максимальный размер сегмента, который может быть передан по ТСР-соединению.

MSS=MTU (Maximum Transfer Unit) – IP-header – TCP-header

Узел 2 должен рассчитать допустимый размер окна. Сначала вычисляется общий MSS (минимальный MSS для двух узлов), размер окна по умолчанию делится на величину общего MSS, результат округляется в большую сторону до целого числа “n”. Допустимый размер окна определяется как произведение общего MSS и найденного значения n.

Window=n*MSS

Каждый сегмент содержит контрольную сумму, при помощи которой получатель проверяет наличие ошибок в сегменте. Поврежденный сегмент (сегмент, содержащий ошибки) аннулируется. Если ошибок не обнаружено, получатель отправляет источнику подтверждение ACK (Acknowledgment segment, сегмент с битом ACK=1).

В ТСР не требуется отправки подтверждения на каждый сегмент. Номер подтверждения является подтверждением получения всех байтов вплоть до этого номера. Подтверждающий сегмент выполняет две функции – подтверждение приема и управление потоком.

Существуют 2 способа обнаружения потери ТСР сегмента из-за некорректной работы сети:

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

  2. Поступление трех повторных сегментов ACK (DUP#ACK)

Если на момент заполнения окна источником (отправителем) подтверждения не получены, по истечении установленного интервала времени (тайм-аут), модуль-источник ТСР повторно передает данные, начиная с первого неподтвержденного байта.

На временной диаграмме ТСР соединения показан случай потери сегментов с данными DATA 5 и DATA 6. Передающая сторона принимает решение о повторной передаче сегментов, начиная с DATA 5 после получения трех повторных сегментов подтверждения DUP#1, DUP#2, DUP#3. После повторной передачи сегмента DATA 6, Узел 2 получает кумулятивное подтверждение для сегментов DATA5, DATA6, DATA7, DATA8 и DATA9.

Временная диаграмма ТСР-соединения

Протокол UDP (протокол пользовательских дейтаграмм), RFC 768

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

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

В заголовке UDP только четыре 16-битных поля, где указаны порты назначения и отправки, длина дейтаграммы и контрольная сумма.

Формат UDP-дейтаграммы

Source Port

Destination Port

Length

Checksum

DATA

Source Port – Порт источника указывает порт приложения, отправившего дейтаграмму. Необязательное поле, может содержать ноль.

Destination Port – Порт получателя указывает порт приложения, которое должно обработать дейтаграмму у получателя.

Length – Длина дейтаграммы в байтах, включая заголовок.

Cheksum – Контрольная сумма дейтаграммы. Поле может содержать ноль, тогда получатель не проверяет целостность дейтаграммы. Если контрольная сумма вычисляется, то вычисление выполняется по псевдозаголовку UDP:

Source IP address (IP адрес отправителя, см.ниже)

Destination IP address (IP адрес получателя, см.ниже)

Ноль

Protocol (код протокола UDP, равный 17)

UDP Length

Идентичность контрольных сумм, принятой и вычисленной получателем, гарантирует доставку пакета по правильному адресу.