43. Описание сервисов сетевого и транспортного уровней.
Сетевой уровень занимается разработкой маршрутов доставки пакетов от отправителя до получателя. Чтобы добраться до пункта назначения, пакету может потребоваться преодолеть несколько транзитных участков между маршрутизаторами. Функции, выполняемые на сетевом уровне, резко контрастируют с деятельностью уровня передачи данных, цель которого была более скромной - просто переместить кадры с одного конца провода на другой. Таким образом, сетевой Уровень оказывается самым низким уровнем, который имеет дело с передачей Данных по всему пути от одного конца до другого.
Для достижения этих целей сетевой уровень должен обладать информацией о топологии подсети связи (то есть о множестве всех маршрутизаторов) и выбирать нужный путь по этой подсети. Он должен также заботиться о том, чтобы нагрузка на маршрутизаторы и линии связи была, по возможности, более равномерной. Наконец, если источник и приемник находятся в различных сетях, именно сетевой уровень должен уметь решать проблемы, связанные с различиями в сетях. В данной главе мы рассмотрим все эти аспекты и проиллюстрируем их прежде всего на примере Интернета и его протокола сетевого уровня - IP, хотя и беспроводные сети мы также рассмотрим.
Сервисы, предоставляемые транспортному уровню
Сетевой уровень предоставляет транспортному уровню сервисы в виде интерфейса между сетевым и транспортным уровнями. Важным вопросом является то, какой именно вид сервиса сетевой уровень предоставляет транспортному. При разработке сервисов сетевого уровня ставились следующие задачи:
• Сервисы сетевого уровня не должны зависеть от технологии маршрутизатора.
• Транспортный уровень должен быть независим от количества, типа и топологии присутствующих подсетей с маршрутизаторами.
• Сетевые адреса, доступные транспортному уровню, должны использовать единую систему нумерации в локальных и глобальных сетях.
Находясь в рамках поставленной перед ними задачи, разработчики оказываются абсолютно свободными в написании детальной спецификации сервисов, которые должны предоставляться транспортному уровню. Эта свобода часто вырождается в яростную борьбу между двумя непримиримыми группировками. В центре дискуссии оказывается вопрос о том, какие сервисы должен предоставлять сетевой уровень - ориентированные на соединение или не требующие соединений.
Один лагерь (представленный Интернет-сообществом) заявляет, что работа маршрутизатора заключается исключительно в перемещении с места на место пакетов и больше ни в чем. С их точки зрения (основанной на примерно тридцатилетнем опыте работы с реальными компьютерными сетями), подсеть обладает врожденной ненадежностью вне зависимости от того, как она спроектирована. Хосты должны учитывать это и защищаться от ошибок своими силами (то есть заниматься обнаружением и исправлением ошибок), а также самостоятельно управлять потоком.
Из этого следует, что сетевой сервис должен быть сервисом, не требующим установки соединения и состоящим в основном из примитивов END P A C K E T (послать пакет) и R E C E IV E P A C K E T (принять пакет). В частности, сюда нельзя включать упорядочивание пакетов и контроль потока - все равно эти действия будет выполнять хост. От того, что одна и та же работа будет выполнена дважды, качество обслуживания не повысится. Кроме того, каждый пакет должен содержать полный адрес получателя, так как пересылка производится независимо от предшествующих пакетов.
Другой лагерь, представленный телефонными компаниями, возражает, что сеть должна предоставлять надежный, ориентированный на соединение сервис. Они утверждают, что 100 лет успешного управления телефонными системами по всему миру - это серьезный аргумент в их пользу. По их мнению, качество обслуживания является определяющим фактором, и без установления соединения в подсети очень сложно добиться каких-либо приемлемых результатов, особенно Когда дело касается трафика реального масштаба времени - например, передачи голоса и видео. Примерами технологий, защищаемых каждой из сторон, являются Интернет и ATM. Интернет предоставляет не требующие установления соединения сервисы сетевого уровня, а система ATM - ориентированные на соединение. Интересно, что в последнее время вопрос гарантии качества обслуживания становится все более важным, а Интернет при этом активно развивается. В частности, как мы увидим позже, ему все больше вменяются свойства, ассоциирующиеся с сервисами, ориентированными на соединение.
Реализация сервиса без установления соединения
Рассмотрев два класса сервисов, которые сетевой уровень может предоставлять своим пользователям, можно перейти к обсуждению устройства этого уровня. Возможны два варианта в зависимости от типа сервиса. Если предоставляется сервис без установления соединения, пакеты внедряются в подсеть по отдельности и их маршруты рассчитываются независимо. При этом никакой предварительной настройки не требуется. В этом случае пакеты часто называют дейтаграммами, по аналогии с телеграммами, а подсети, соответственно, - дейтаграммными. При использовании сервиса, ориентированного на соединение, путь от маршрутизатора отправителя до маршрутизатора получателя должен быть установлен до начала каких-либо передач пакетов. Такое соединение называется виртуальным каналом, по аналогии с физическими каналами, устанавливаемыми в телефонной системе. Подсеть при этом называется подсетью виртуального канала. В этом разделе мы обсудим дейтаграммные подсети; в следующем разделе - подсети виртуального канала.
Реализация сервиса с установлением соединения
Сервису с установлением соединения нужна подсеть виртуального канала. Рассмотрим ее работу. Идея виртуальных каналов состоит в предотвращении выбора своего маршрута для каждого пакета, как было показано на рис. 5.2. Вместо этого устанавливается соединение, маршрут от отправляющей до получающей машины прописывается в настройках системы и хранится в специальных таблицах, встроенных в маршрутизаторы. Один и тот же маршрут используется для всего трафика, проходящего через данное соединение. Именно так работает телефонная система. Когда соединение разрывается, виртуальный канал также прекращает свое существование. При использовании сервиса, ориентированного на установление соединения, каждый пакет включает в себя идентификатор виртуального канала.
Транспортный уровень - это не просто очередной уровень. Это сердцевина всей иерархии протоколов. Его задача состоит в предоставлении надежной и экономичной передачи данных от машины-источника машине-адресату вне зависимости от физических характеристик использующейся сети или сетей. Без транспортного уровня вся концепция многоуровневых протоколов потеряет смысл. В данной главе мы подробно рассмотрим транспортный уровень, включая его сервисы, устройство, протоколы и производительность.
Услуги, предоставляемые верхним уровнем
Конечная цель транспортного уровня заключается в предоставлении эффективных, надежных и экономичных услуг (сервисов) своим пользователям, которыми обычно являются процессы прикладного уровня. Для достижения этой цели транспортный уровень пользуется услугами, предоставляемыми сетевым уровнем. Аппаратура и/или программа, выполняющая работу транспортного уровня, называется транспортной сущностью или транспортным объектом. Транспортный объект может располагаться в ядре операционной системы, в отдельном пользовательском процессе, в библиотечном модуле, загруженном сетевым приложением, или в сетевой интерфейсной плате. Логическая взаимосвязь сетевого, транспортного и прикладного уровней проиллюстрирована на рис. 6.1.
Сервисы транспортного уровня, как и сервисы сетевого уровня, могут быть ориентированными на соединение или не требующими соединений. Ориентированный на соединение транспортный сервис во многом похож на ориентированный на соединение сетевой сервис. В обоих случаях соединение проходит три этапа: установка, передача данных и разъединение. Адресация и управление потоком на разных уровнях также схожи. Более того, похожи друг на друга и не требующие соединений сервисы разных уровней.
Возникает закономерный вопрос: если сервис транспортного уровня так схож с сервисом сетевого уровня, то зачем нужны два различных уровня? Почему недостаточно одного уровня? Для ответа на этот важный вопрос следует вернуться к рис. 1.7. На рисунке мы видим, что транспортный код запускается целиком на пользовательских машинах, а сетевой уровень запускается в основном на машрутизаторах, которые управляются оператором связи (по крайней мере, в глобальных сетях). Что произойдет, если сетевой уровень будет предоставлять ориентированный на соединение сервис, но этот сервис будет ненадежным? Например, если он часто будет терять пакеты? Можно себе представить, что случится, если маршрутизаторы будут время от времени выходить из строя.
В этом случае пользователи столкнутся с большими проблемами. У них нет контроля над сетевым уровнем, поэтому они не смогут улучшить качество обслуживания, используя хорошие маршрутизаторы или совершенствуя обработку ошибок уровня передачи данных. Единственная возможность заключается в использовании еще одного уровня, расположенного над сетевым, для улучшения качества обслуживания. Если транспортный объект узнает, что его сетевое соединение было внезапно прервано, но не получит каких-либо сведений о том, что случилось с передаваемыми в этот момент данными, он может установить новое соединение с удаленной транспортной сущностью. С помощью нового сетевого соединения он может послать запрос к равноранговому объекту и узнать, какие данные дошли до адресата, а какие нет, после чего продолжить передачу данных.
По сути, благодаря наличию транспортного уровня транспортный сервис может быть более надежным, чем лежащий ниже сетевой сервис. Транспортным уровнем могут быть обнаружены потерянные пакеты и искаженные данные, после чего потери могут быть компенсированы. Более того, примитивы транспортной службы могут быть разработаны таким образом, что они будут независимы от примитивов сетевой службы, которые могут значительно варьироваться от сети к сети (например, сервис локальной сети без соединений может значительно отличаться от сервиса ориентированной на соединение глобальной сети). Если спрятать службы сетевого уровня за набором примитивов транспортной службы, то для изменения сетевой службы потребуется просто заменить один набор библиотечных процедур другими, делающими то же самое, но с помощью других сервисов более низкого уровня.
Благодаря наличию транспортного уровня прикладные программы могут использовать стандартный набор примитивов и сохранять работоспособность в самых различных сетях. Им не придется учитывать имеющееся разнообразие интерфейсов подсетей и беспокоиться о ненадежной передаче данных. Если бы все реальные сети работали идеально и у всех сетей был один набор служебных примитивов, то транспортный уровень, вероятно, был бы не нужен. Однако в реальном мире он выполняет ключевую роль изолирования верхних уровней от деталей технологии, устройства и несовершенства подсети.
Именно по этой причине часто проводится разграничение между уровнями с первого по четвертый и уровнями выше четвертого. Нижние четыре уровня можно рассматривать как поставщика транспортных услуг, а верхние уровни - как пользователя транспортных услуг. Разделение на поставщика и пользователя оказывает серьезное влияние на устройство уровней и помещает транспортный уровень в ключевую позицию, поскольку он формирует основную границу между поставщиком и пользователем надежной службы передачи данных.