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

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


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

1. UDP — User Datagram Protocol (протокол пользовательских дейтаграмм)

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


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


- поток данных транспортного уровня является логическим соединением между конечными точками сети;

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

- для управления различными сетевыми соединениями в протоколах четвертого уровня TCP и UDP и для передачи информации верхним уровням используются так называемые порты (port).


Необходимо более подробно рассмотреть понятие порта в сетях.


Порт — натуральное число, записываемое в заголовках протоколов транспортного уровня модели OSI. Используется для определения процесса-получателя пакета в пределах одного хоста.


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

Процесс программы, желающей обмениваться данными по сети, может:

  • потребовать у ОС в свое распоряжение порт с определенным номером. ОС может либо предоставить порт с этим номером, либо отказать программе (например, в случае, когда порт с этим номером уже отдан в распоряжение другому процессу);

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

Таким образом для установки соединения нам необходимы:

  • два IP-адреса (адрес хоста-отправителя и адрес хоста-получателя) для построения маршрута между ними;

  • два номера порта (порт процесса-отправителя и порт получателя) для определения конкретного процесса на хосте.

Все порты разделены на три диапазона:

- общеизвестные (или системные, 0 — 1023) - номера портов назначены IANA (Internet Assigned Numbers Authority, Администрация адресного пространства Интернет), например, порт 22 зарезервирован за протколом SSH, 80 — за HTTP.

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

- динамические (или частные, 49152 — 65535) - используются временными (короткоживущими) соединениями «клиент — сервер».


Напомним, что два основных транспортных протокола, используемых на данный момент в компьютерных сетях — UDP и TCP. В первой лекции рассмотрим подробнее UDP.

UDP — это простой протокол, который осуществляет обмен дейтаграммами без подтверждения и без гарантии доставки.

В протоколе UDP надежность передачи данных должна обеспечиваться протоколами уровня приложений (application layer protocol). Протокол UDP был разработан для приложений, у которых нет необходимости соединять вместе упорядоченные сегменты. Протокол UDP используют такие службы и протоколы верхнего уровня:

- TFTP (Trivial File Transfer Protocol, простейший протокол передачи файлов);

- SNMP (Simple Network Management Protocol, простой протокол управления

сетью);

- DHCP (Dynamic Host Configuration Protocol, протокол динамической конфигурации узла);

- DNS (Domain Name System, служба доменных имен).

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

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


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


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


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

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

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

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

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

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

- протокол TCP отслеживает дублирование пакетов и в случае обнаружения уничтожает их.


Протокол TCP использует алгоритм работы с установлением соединения, поэтому перед передачей данных должно быть установлено логическое соединение. Синхронизация достигается за счет обмена специализированными сегментами, которые содержат контрольный бит SYN (сокращение от synchronization) и подтверждениями в виде сообщения-уведомления ACK (сокращение от acknowledgment) от другого участника соединения. Такой обмен сообщениями называется трехэтапным квитированием (three-way handshake).

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

https://itempuniversity.com/pluginfile.php/8496/mod_lesson/page_contents/61/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F_TCP1.docx.png

Рисунок 1. Трехэтапное квитирование



1. Узел А посылает узлу Б сообщение с установленным битом синхронизации SYN, сообщая свой начальный порядковый номер ISN (Initial Sequence Number). Бит уведомления ACK не установлен.

2. Узел Б получает сообщение и отвечает на него сегментом с набором бит SYN для переговоров о соединении, сообщая свой ISN, и АСК для подтверждения получения сегмента синхронизации от отправителя.

3. Узел А подтверждает сегмент синхронизации, полученный от узла Б, посылая сообщение с ACK. Бит SYN сбрасывается, подтверждая, что трехэтапное квитирование завершено.


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


Необходимо рассмотреть также такой механизм надежной доставки, как механизм скользящего окна.

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


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


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


На рисунке ниже представлена схематично передача данных по TCP с размером окна равным 3. Отправитель узел А передает пакеты 1, 2 и 3. Получатель подтверждает прием пакетов, запрашивая пакет 4. Отправитель, получив подтверждение, посылает пакеты 4, 5 и 6. Если пакет 5 не доставляется получателю, он посылает соответствующее подтверждение с запросом о повторной отправке пакета 5. Отправитель повторно отсылает пакет 5 и должен получить соответствующее подтверждение, чтобы продолжить передачу пакета с номером 7.

https://itempuniversity.com/pluginfile.php/8496/mod_lesson/page_contents/61/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F_TCP2.docx.png