1.1.3. Сетевые службы

Каждый сетевой уровень модели ISO/OSI обеспечивает определенный сервис для вышележащих уровней. Другими словами, вышележащий уровень полагается на функции, выполняемые своим “соседом”. Каждый сетевой уровень, за исключением физического уровня, добавляет функциональности предыдущему, расположенному ниже уровню. Набор свойств и функций, которым обладает определенный сетевой уровень, называется сетевой службой.

Каждый сетевой уровень подчиняется определенному сетевому протоколу, определяющему набор сетевых служб, присущих данному уровню. Короче говоря, сетевая служба — это набор функций, которые уровень выполняет для вышележащего уровня, например коррекция ошибок. С другой стороны, протоколы — это правила, которым должен следовать уровень, чтобы реализовать сетевую службу. Сетевая модель ISO/OSI четко определяет разницу между службой и протоколом.

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

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

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

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

Сетевые службы, ориентированные на соединение

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

Режим службы, ориентированной на соединение, это почти то же самое, что и двухточечное соединение. Ориентированная на соединение служба образует виртуальное двухточечное соединение, создавая впечатление, что устройства соединены между собой физически. Разумеется, это только впечатление — на самом деле двухточечного физического соединения нет. Несмотря на это, для взаимодействующих сетевых приложений создается видимость наличия неразрывного канала связи. Таким образом, служба, ориентированная на соединение, создает для приложения условия двухточечного непосредственного соединения.

Служба, не ориентированная на соединение

Тогда как ориентированная на соединение служба подобна телефонному разговору, служба, не ориентированная на соединение, похожа на доставку корреспонденции. Разница между двумя режимами служб состоит в том, что не ориентированная на соединения служба не устанавливает двухточечного соединения.

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

Контроль последовательности

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

Контроль ошибок

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

Система контроля ошибок обязана обнаруживать и обрабатывать два вида повреждения данных: их искажение или исчезновение. Другими словами, контроль ошибок обязан узнать, что в процессе передачи данные подверглись модификации. Либо он обязан узнать, что данные исчезли по пути к получателю. Это может произойти, например, в случае физического обрыва линии связи. Как правило, протоколы коррекции ошибок используют контрольную сумму и ее разновидность – CRC (Cyclic Redundancy Check). Значения контрольной суммы или CRC используются программами для проверки данных на наличие ошибок.

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

Для вычисления контрольной суммы данные делятся на части одинаковой длины. Например, приложения Интернет обычно делят данные на сегменты размером в 16 бит. Программа трактует такие сегменты как целые числа. Эти числа суммируются, и полученный результат (контрольная сумма) посылается вместе с самим блоком данных.

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

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

Для каждого принятого сообщения приемник посылает подтверждение (часто оно называется АСК (Acknowledged)). Обычно приемник остается пассивным участником обмена. То есть вся инициатива в обмене принадлежит передатчику, а приемник только отвечает сообщениями АСК.

Как изображено на рис. 1.5, когда приемник получает Сообщение 1, он отвечает, посылая Подтверждение 1. После того, как передатчик получит Подтверждение 1, он посылает следующее Сообщение 2. Сообщение 3 не будет послано до тех пор, пока не вернется Подтверждение 2. Обычно, если передатчик не получает подтверждение о доставке в течение некоторого времени (тайм-аута), он посылает сообщение еще раз.

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

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

Многие протоколы коррекции ошибок выходят из ситуации, посылая сообщение о недоставке — Сообщение NAK (Not Acknowledged). Например, при несовпадении старой и новой контрольных сумм в Сообщении 2 приемник пошлет обратно Сообщение NAK. Когда передатчик получит его, он узнает, что данные были повреждены. Передатчик немедленно высылает Сообщение 2 еще раз, а не ждет тайм-аут для повтора передачи. Таким образом устраняется задержка в обмене сообщениями.

Сообщения, посылаемые по сети, можно рассматривать, как поток данных. Для того чтобы передатчик не посылал данные быстрее, чем приемник может их обработать, сетевая служба должна управлять этим потоком. Такой режим службы называется – “управление потоком”. Он служит для того, чтобы приемник не переполнился и не начал терять данные в результате слишком быстрой передачи. Механизм управления потоком должен контролировать скорость передачи и учитывать размер буфера приемника.

Потоковая служба

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

Службы конечной и промежуточной доставки

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

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

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