logo
2 / ИСС / Основы сетевых технологий

3.9 Протоколы транспортного уровня

Напомним, транспортный уровень - 4-й уровень сетевой модели OSIпредназначен для доставки данных без ошибок, потерь и дублирования в той последовательности, как они были переданы. При этом неважно, какие данные передаются, откуда и куда, то есть он предоставляет сам механизм передачи. Блоки данных он разделяет на фрагменты, размер которых зависит от протокола, короткие объединяет в один, а длинные разбивает.

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

Протоколы этого уровня предназначены для взаимодействия типа точка-точка. Пример: TCP,UDP.

Протокол UDP

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

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

Пакеты, поступающие на транспортный уровень, организуются операционной системой в виде множества очередей к точкам входа различных прикладных процессов. В терминологииTCP/IPтакие системные очереди называютсяпортами. Прикладной процесс, предоставляющий некоторые услуги другим прикладным процессам (сервер), ожидает поступления сообщений в порт, специально выделенный для этих услуг. Сообщения отправляются процессами-клиентами и должны содержать запросы на предоставление услуг. Порты нумеруются, начиная с нуля. Например, серверSNMPвсегда ожидает поступлений сообщений в порт 161. Если клиентSNMPжелает получить услугу, он посылает запрос вUDP-порт 161 на машину, где работает сервер. В каждом узле может быть только один серверSNMP, так как существует только одинUDP-порт 161. Данный номер порта является общеизвестным, то есть фиксированным номером, официально выделенным для услугSNMP. Таким образом, адресом назначения, который используется на транспортном уровне, является идентификатор (номер) порта прикладного сервиса.Номер порта, задаваемый транспортным уровнем, в совокупности с номером сети и номером компьютера, задаваемыми сетевым уровнем, однозначно определяют прикладной процесс в сети.

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

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

Централизованное присвоение сервисам номеров портов выполняется организацией Internet Assigned Numbers Authority.

Протокол TCP

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

Протокол TCPиспользуется в тех случаях,когда требуется надежная доставка сообщений. Он освобождает прикладные процессы от необходимости использовать таймауты и повторные передачи для обеспечения надежности. Наиболее типичными прикладными процессами, использующимиTCP,являютсяFTPиTELNET. Кроме того,TCPиспользуют система X-Window, rcp (remotecopy - удаленное копирование) и другие "r-команды". Большие возможностиTCPдаются не бесплатно. РеализацияTCPтребует большой производительности процессора и большой пропускной способности сети. Внутренняя структура модуляTCPгораздо сложнее структуры модуляUDP.

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

Порт источника (SOURS PORT) занимает 2байта, идентифицирует процесс-отправитель;

Порт назначения (DESTINATION PORT)занимает 2 байта, идентифицирует процесс-получатель;

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

Подтвержденный номер (ACKNOWLEDGEMENT NUMBER) занимает 4байта, содержит максимальный номербайта в полученном сегменте, увеличенный на единицу; именно это значение используется в качестве квитанции;

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

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

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

URG - срочное сообщение;

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

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

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

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

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

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

Контрольная сумма (CHECKSUM) занимает 2байта, рассчитывается по сегменту;

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

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

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

В протоколе TCPпредусмотрен случай, когда приложение обращается с запросом о срочной передаче данных (бит PSH в запросе установлен в 1). В этом случае протоколTCPпередает указанные данные в сеть немедленно, не ожидая заполнения буфера до уровня размера сегмента. О таких данных говорят, что они передаются вне потока - out of band.

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

Аналогичные проблемы решаются и на сетевом уровне. Для того, чтобы избежать фрагментации, должен быть выбран соответствующий максимальный размер IP-пакета. Однако при этом должны быть приняты во внимание максимальные размеры поля данных кадров всех протоколов канального уровня, используемых в сети. Максимальный размер сегмента не должен превышать минимальное значение на множестве всехMTUсоставной сети.

В протоколе TCPтакже, как и вUDP, для связи с прикладными процессами используются порты. Номера портам присваиваются аналогичным образом: имеются стандартные, зарезервированные номера (например,номер 21 закреплен за сервисомFTP, 23 - заtelnet), а менее известные приложения пользуются произвольно выбранными локальными номерами.

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

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

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

При установлении соединения одна из сторон является инициатором. Она посылает запрос к протоколу TCPна открытие порта для передачи.

После открытия порта протокол TCPна стороне процесса-инициатора посылает запрос процессу, с которым требуется установить соединение.

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

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

Сторона-инициатор открывает порт для приема и возвращает квитанцию.

Соединение считается установленным. Далее происходит обмен данными в рамках данного соединения.

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

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