Поэтому протоколы сетевого уровня и выше инвариантны к сетевой физической среде. |
Транспортный уровень моделей OSI, TCP/IP
9.1. Общие сведения о транспортном уровне
Основной функцией транспортного уровня является транспортировка сообщений между приложениями узла источника и узла назначения. Приложение узла источника формирует сообщение и передает его на приложение узла назначения независимо от маршрута, т.е. независимо от протоколов сетевого уровня, и независимо от среды передачи, т.е. независимо от протоколов канального и физического уровней. Транспортный уровень реализует управление потоком информации от источника до устройства назначения.
В "Протоколы обмена сообщениями" отмечено, что Транспортный уровень делит большое сообщение узла источника информации на части, при этом добавляет заголовок и формирует сегменты определенного объема, а короткие сообщения может объединять в один сегмент. В узле назначения происходит обратный процесс. В заголовке сегмента задаются номера порта источника и назначения, которые адресуют службы верхнего уровня приложений для обработки данного сегмента. Кроме того, транспортный уровень может обеспечивать надежную доставку пакетов. При обнаружении потерь и ошибок на этом уровне формируется запрос повторной передачи, при этом используется протокол TCP. Когда необходимость предварительного соединения и проверки правильности доставленного сообщения отсутствует, то используется более простой и быстродействующий протокол дейтаграмм пользователя (User Datagram Protocol - UDP).
Транспортный уровень моделей OSI и TCP/IP одинаков как по функциям, так и по названию (см. рис. 3.5). Термин TCP/IP - это комбинация двух протоколов. Протокол IP функционирует на сетевом Уровне 3 моделиOSI, он является протоколом дейтаграммного типа без предварительного соединения (connectionless), который обеспечивает доставку сообщения через сеть по возможности, т.е. доставку с наибольшими возможными усилиями (best-effort delivery), но без гарантий, т.е. доставка не надежная.
Протокол управления передачей TCP работает на транспортном Уровне 4 модели OSI и является протоколом, ориентированным на предварительное соединение (connection-oriented), что обеспечивает контроль потока и надежность доставки. Когда эти протоколы (TCP/IP) объединены, они обеспечивают более широкий объем услуг: малую задержку и высокую надежность. Всемирная сеть Интернет строится на основе набора (стека) протоколов TCP/IP.
Контроль доставки сообщения из одного конца соединения до другого и надежность обеспечены целым рядом параметров, передаваемых в заголовках сегментов:
- номерами последовательности передаваемых сегментов данных,
- размером, так называемого, скользящего окна,
- квитированием, т.е. подтверждением приема сообщения.
Транспортный уровень устанавливает логическое соединение между двумя конечными точками сети. Протоколы транспортного уровня сегментируют данные, посланные приложениями верхнего уровня на передающей стороне, и повторно собирают (реассемблируют) из полученных сегментов целое сообщение на приемной стороне.
Таким образом, протоколы транспортного уровня реализуют сегментацию данных и повторную сборку целого сообщения из полученных сегментов. Большинство сетей имеет ограничение на объем передаваемых сообщений. Поэтому Транспортный уровень делит большое сообщение прикладного уровня на сегменты данных, размер которых соответствует требованиям протокола единиц данных (Protocol Data Unit - PDU) более низких уровней сетевой модели. Кроме того, если в процессе контроля обнаружится, что принятое сообщение содержит ошибку, то возникает необходимость повторной передачи всего большого сообщения. При обнаружении ошибки в одном из принятых сегментов только данный сегмент будет передан повторно.
Мультиплексирование сегментов передаваемых данных позволяет одновременно передавать различные потоки данных. При этом высокоскоростной поток передаваемых сообщений, например видео-поток, не заблокирует другие сообщения.
На каждом конечном узле сети может быть запущено много разных приложений. Кроме того, сегменты могут быть направлены одному или многим узлам назначения. Процесс обмена данными между приложениями источника и назначения называется сеансом связи. Протоколы транспортного уровня обеспечивают многочисленные одновременно протекающие процессы обмена данными, т.е. отслеживают отдельные сеансы связи. Множество одновременно протекающих процессов обмена данными верхнего уровня (множество сеансов связи) может быть мультиплексировано поверх одного логического транспортного соединения.
Чтобы передавать потоки данных соответствующим приложениям, протокол транспортного уровня должен идентифицировать каждое приложение. В протоколах TCP и UDP в качестве идентификатора приложения используют номер порта. Номер порта в заголовке сегмента транспортного уровня указывает, какое приложение создало передаваемое сообщение, и какое должно обрабатывать полученные данные. При множестве одновременно протекающих процессах обмена данными каждому из приложений или услуг назначается свой адрес (номер порта) так, чтобы транспортный уровень мог определить, с каким конкретно приложением или службой должны взаимодействовать передаваемые данные.
Наиболее известными протоколами транспортного уровня являются протокол контроля передачи (Transmission Control Protocol - TCP) и протокол дейтаграмм пользователя (User Datagram Protocol - UDP). Протокол контроля передачи TCP является ориентированным на предварительное соединение (connection-oriented). Помимо деления сообщения на сегменты и идентификации приложений (задание номеров портов источника и назначения) TCP обеспечивает надежность и контроль потока. Он взаимодействует с протоколами верхнего прикладного уровня приложений: HTTP, SMTP, FTP, Telnet и другими. Протокол UDP является протоколом дейтаграммного типа (connectionless), он взаимодействует с такими протоколами прикладного уровня, как система доменных имен (DNS), передачи потока видеоданных (Video Steaming), голос поверх IP (Voice over IP) и рядом других. Следует отметить, что система DNS взаимодействует как с TCP, так и с UDP.
Итак, протокол транспортного уровня TCP помимо деления сообщения на сегменты и идентификации приложений обеспечивает:
- Контроль потока.
- Надежность доставки сообщения.
Для облегчения контроля и обеспечения надежности сообщения передаются частями (порциями), т.е. сегментами. При этом протокол транспортного уровня узла источника должен прослеживать каждый сегмент данных при передаче и повторно передавать любую часть сообщения, прием которой не был подтвержден устройством назначения. Транспортный уровень конечного узла на приемной стороне должен отследить получение данных и подтвердить это получение.
Контроль потока необходим, чтобы гарантировать, что источник, передавая данные с некоторой скоростью, не переполняет буферные устройства узла назначения. Если узел назначения не может обрабатывать данные в темпе их поступления, то может произойти переполнение буферов и потеря данных. Управление скоростью передачи данных обеспечивается изменением размера окна (Window Size), который указывает, сколько байт данных должно быть передано за одну порцию. При переполнении буферных устройств узел назначения посылает источнику требование уменьшения размера окна, т.е. снижения скорости передачи.
После получения каждой порции данных узел назначения посылает источнику подтверждение принятых данных или подтверждение доставки (acknowledgment).
Подтверждение (квитирование) обеспечивает надежность сети передачи данных. Если подтверждение не получено, то неподтвержденная часть данных передается узлом источником повторно.
В дейтаграммных IP-сетях пакеты одного сообщения между двумя конечными устройствами могут проходить разными путями. Поэтому на узел назначения сегменты могут прийти не в том порядке, в котором были переданы. Надежный протокол транспортного уровня (ТСР) должен восстановить правильный порядок сегментов и собрать переданное сообщение, т.е. реассемблировать его.
Адресация приложений, надежность, контроль потока, сегментация сообщений и их реассемблирование, реализуются путем задания ряда параметров в заголовке сегмента TCP, размер которого 20 байт.
Поля заголовка TCP сегмента определяют следующее:
- Номер порта источника (Source Port) - 16 бит номера порта, который посылает данные;
- Номер порта назначения (Destination Port) - 16 бит номера порта, который принимает данные;
- Номер последовательности (Sequence Number) - 32 бита номера первого байта в сегменте, используемого, чтобы гарантировать объединение частей (порций) данных в корректном порядке в устройстве назначения;
- Номер подтверждения (Acknowledgment Number) - 32 бита последовательного номера подтверждения принятых данных, (начальный номер байта следующей ожидаемой порции данных);
- ДЗ - длина заголовка (число 32-разрядных слов в заголовке, в примере 9.1 - пять слов);
- Резерв - разряды поля, установленные в ноль;
- Код - 6 разрядов, определяющих тип сегмента, например, сегмент установки соединения (SYN) и завершения сеанса (FIN), сегмент подтверждения принятых данных (ACK), срочного сообщения (URG), а также PSH - протолкнуть данные и RST - оборвать соединение;
- Размер окна (Window Size) - число байтов, передаваемых за одну порцию;
- Контрольная сумма (Checksum) - значение контрольной суммы заголовка и поля данных;
- Индикатор (Urgent pointer) - индицирует конец срочных данных;
- Опции (Option) - поле не обязательное, каждая текущая опция определяет максимальный размер TCP сегмента;
- Данные (Data) - сообщение протокола верхнего уровня.
Заголовок TCP (рис. 9.1) содержит номер последовательности (Sequence Number), используемый, чтобы гарантировать объединение частей (сегментов) сообщения в том порядке, в котором они были переданы. TCP обеспечивает надежность передачи сообщений за счет передачи номера подтверждения, и контроль потока, управляемого размером окна. Однако TCP потребляет много ресурсов и вносит задержку в передачу данных. При передаче некоторых видов трафика (аудио- и видеоинформация) задержка и особенно ее вариация могут исказить передаваемые сообщения.
Когда требования высокой скорости передачи данных, минимизации задержек и джиттера превалируют над надежностью и гарантией доставки сообщения, то используется более простой и быстрый протокол дейтаграмм пользователя (UDP). Протокол UDP не имеет механизма реассемблирования принятых сегментов, поэтому возможны ошибки при объединении сегментов данных при передаче по сложной сети. Однако скорость передачи данных с использованием протокола UDP выше, чем TCP.
Поскольку UDP является протоколом дейтаграммного типа, то в заголовке его сегмента (рис. 9.2) отсутствуют такие параметры, как Номер последовательности, Номер подтверждения, Размер окна, характерные для протокола TCP.
Поля UDP сегмента определяют следующее:
- Номер порта источника (Source Port) - 16 бит номера порта, который посылает данные;
- Номер порта назначения (Destination Port) - 16 бит номера порта, который принимает данные;
- Длина (Length) - число байтов в заголовке и в поле данных;
- Контрольная сумма (Checksum) - контрольная сумма заголовка и поля данных;
- Данные (Data) - сообщение протокола верхнего уровня.
Поскольку протокол UDP не обладает механизмами надежности, то она обеспечивается протоколами верхнего уровня приложений. Однако небольшой размер заголовка UDP и отсутствие дополнительной обработки номера последовательности, размера окна и пересылки подтверждения получения данных повышают скорость обработки и передачи сообщений по сравнению с протоколом ТСР. При пропадании какого-либо сегмента на видеоизображении (или в голосовом сообщении) появится помеха, которую пользователь может и не заметить. При надежной доставке (ТСР) повторная передача пропавшего сегмента может занять много времени, что приведет к значительному искажению изображения (звука). Поэтому протокол UDP используется для передачи аудио- и видеоинформации.
Комбинация номера порта и IP-адреса образует комплексный адрес, называемый сокет (socket address), который определяет не только уникальное устройство, но и программное обеспечение, используемое для создания и обработки сообщения, например, 192.168.10.17:1275; 10.1.10.6:53.
Номера портов делятся на несколько типов:
- известные номера (Well Known Ports), диапазон адресов которых находится в пределах от 0 до 1023, назначаются серверам;
- зарегистрированные порты с номерами от 1024 до 49151 назначаются как серверам, так и пользователям;
- динамические порты с номерами от 49151 до 65535, которые обычно динамически присваиваются пользователям.
Номера известных портов заданы организацией Internet Assigned Numbers Authority (IANA), распределяющей адреса в Интернете. Номера известных портов назначаются протоколам и службам сервиса уровня приложений. Примеры номеров некоторых известных портов протокола TCP приведены в табл. 9.1
Протоколы | FTP | Telnet | SMTP | HTTP | HTTPS | POP3 |
---|---|---|---|---|---|---|
Порты | 20, 21 | 23 | 25 | 80 | 443 | 110 |
В приложении протокола передачи файлов FTP используются два известных (стандартных) номера порта 20 и 21. Порт 20 используется для передачи данных, а порт 21 - для управления соединением.
Среди номеров известных портов протокола UDP наиболее распространенными являются: протокол TFTP - 69, RIP - 520.
Служба DNS с номером порта 53 и простой протокол управления сетью (Simple Network Management Protocol - SNMP) с номером порта 161 взаимодействуют как с протоколом TCP, так и с UDP.
Зарегистрированные порты назначаются как пользователям, так и приложениям. Когда зарегистрированные порты не используются для ресурсов сервера, они могут быть использованы динамически клиентом как номер порта источника. Приложения клиента выбирают номера порта источника из этого диапазона. Из зарегистрированных номеров портов можно отметить 8008 и 8080, которые часто используются Proxy-серверами.
Комплексные адреса (сокеты) широко используются при обращении клиентов к серверам. Источник запроса идентифицируется сокетом, образованным IP-адресом и номером порта, который генерируется случайным образом. Например, сокет 10.0.118.52:1244 определяет клиента, как источник запроса. Сокет 10.0.118.3:80 определяет IP-адрес устройства и программное обеспечение, используемое для обработки запроса (сервер HTTP). При ответе сервер формирует сообщение, где сокет 10.0.118.52:1244 используется в качестве адреса назначения. Разные номера портов с одним IP-адресом источника позволяют клиенту формировать несколько разных запросов.
Если необходимо узнать, какие TCP соединения активны на сетевом конечном узле, то можно использовать команду netstat в режиме командной строки. В распечатке команды ( рис. 9.3) указаны: протокол (TCP), локальные адреса (имена) узлов с динамически назначенными номерами портов, внешние адреса (имена) узлов назначения с номером порта, а также состояние связи. В данном примере ( рис. 9.3) номер порта локального адреса является динамически назначаемым зарегистрированным портом источника с номером больше 1023. Для адреса www.cisco.com внешний порт задан символически (http). Состояние связи может быть с установленным соединением (ESTABLISHED) или с ожиданием окончания соединения (TIME_WAIT), когда был послан запрос окончания соединения (FIN).