Рассмотрим понятия протоколы, интерфейсы и сервисы на примере транспортного уровня, стека протоколов TCP/IP.
Базовые понятия компьютерных сетей
Сети строятся в виде нескольких уровней организованными один над другим. И каждый уровень предоставляет сервис вышестоящему уровню. Сервис описывает, что полезного делает уровень.
Интерфейс, он находится внутри одного компьютера и задает набор примитивных операций, который верхний уровень должен вызвать для того, чтобы воспользоваться сервисом нижестоящего уровня.
Протокол это набор правил и соглашений, которыми пользуются уровни разных хостов, для взаимодействия друг с другом по сети.
Транспортный уровень TCP/IP
Рассмотрим пример для транспортного уровня (ТУ) стека протоколов tcp ip. В стеке протоколов, есть два протокола транспортного уровня, tcp и udp. Они используются, чтобы транспортные уровни различных хостов взаимодействовали друг с другом.
В качестве интерфейса ТУ используется интерфейс сокетов. С использованием интерфейса сокетов пишут программы, которые взаимодействуют с сетью на ТУ.
Зачем разделять понятия протокол и интерфейс
Это стандартная практика в информационных технологиях, описание и реализация должны быть отделены друг от друга. Так делается во многих языках программирования и других технологиях.
Изоляция решений
Причем, в компьютерных сетях у нас есть два вида изоляций решений. Изоляция решений (ИР) внутри одного компьютера и ИР при взаимодействии между компьютерами по сети.
Внутри компьютера
Когда мы работаем внутри одного компьютера, то есть пишем программы, которые будут работать с сетью, мы используем интерфейсы. На транспортном уровне это интерфейс сокетов. Реализация сетевого взаимодействия, которая выполнена в протоколах, скрыта от нас. Таким образом, если протоколы изменятся, то нам не придётся менять нашу программу.
Между компьютерами
С другой стороны, при взаимодействии между компьютерами, постоянными сохраняются протоколы. А интерфейсы и программы, которые находятся внутри компьютера, скрыты от других компьютеров и устройств. За счет этого, обеспечивается возможность взаимодействия по сети устройств, использующих разные операционные системы. Несмотря на значительные внутренние различия, в составе программ и интерфейсов, отлично взаимодействуют между собой, так как они используют один и тот же набор протоколов tcp ip.
Разделение интерфейса и протокола необходимо, чтобы отделять описание от реализации.
Зачем разделять интерфейс и сервис
Эти понятия важно различать, чтобы правильно проектировать сети, протоколы и сетевые технологии.
Сервис этот абстрактное описание того, что делает уровень. Оно позволяет сформулировать, чтобы мы хотели, чтобы уровень делал, не привязываясь ни к каким конкретным деталям реализации. Например, стек протоколов tcp ip предоставляет на транспортном уровне, два типа сервисов:
- Это надежная передача потока байт, которая реализуется протоколом tcp;
- Ненадёжная передача коротких сообщений, для реализации которой, используется протокол UDP.
Интерфейс ТУ в стеке протоколов TCP IP использует один сервис — сокеты. Через интерфейс мы можем получить доступ к сервисам двух уровней, для этого при создании сокетов нам нужно указать разные константы и вызывать некоторые разные операции. Например, при ненадежной доставки дейтаграмм (блок информации) нам не нужно устанавливать соединение.
Сервисы — абстрактное описание функций
Представим, что мы не ограничиваем себя текущей реализацией стека протоколов tcp ip, а подумаем, какие есть сервисы на транспортном уровне и чего бы нам еще хотелось.
Описание двух сервисов можно разбить на две части. Первое, обеспечивает сервис надежность или нет. Второе, тип передаваемых данных. Может передаваться поток байт или короткое сообщение. В стеке tcp ip выбрали всего две комбинации: надежная передача потока байт и ненадежная передача коротких сообщений.
Вполне допустимы две другие комбинации, ненадежная передача потока байт и надежная передача коротких сообщений. Если для ненадежной передачи потока байт сложно придумать подходящие примеры использования, то надежная доставка коротких сообщений очень полезный тип сервиса и этого сервиса в стеке протоколов tcp ip в настоящее время нет.
Многие приложения, которые используют протокол udp, например служба имён DNS, отправляет короткий запрос, ждет в течении некоторого времени ответа и если ответ не пришел, запрос отправляется снова.
На самом деле это типовая ситуация, которая используется часто и кажется нерациональным перекладывать эту работу на приложения, если есть возможность предоставить такой тип сервиса прямо в стеке протоколов tcp/ip. Было разработано несколько протоколов ТУ, которые реализуют такой сервис, но к сожалению они не пользуются большой популярностью.