Протоколы уровней
Концепция протоколов уровней коммуникационной модели, на первый взгляд, может показаться сложной и не вполне понятной. Смеем вас обнадежить, что картина быстро прояснится, когда мы начнем детально изучать коммуникационную модель Интернета, а пока попробуем разобраться в механизме многоуровневого обмена сообщениями между двумя хостами. Предположим, что некоторая компьютерная сеть использует четырехуровневую коммуникационную модель (эта сеть отличается от Интернета, где коммуникационная модель состоит из пяти уровней), как показано на рис. 1.22. Таким образом, в сети существует четыре вида единиц обмена (PDU), соответствующих каждому уровню. Пусть приложение хоста А создает сообщение М, предназначенное приложению хоста В. Поскольку приложения находятся на вершине многоуровневой структуры, сообщение М относится к PDU уровня 4. Сообщение может включать в себя множество полей, подобно структуре или записи; содержимое полей интерпретируется приложениями. Обычно в PDU включается имя отправителя, тип сообщения, а также другая информация.
Сначала сообщение М передается с четвертого уровня на третий, где происходит расщепление исходного сообщения на две единицы обмена уровня 3, М1 и М2. При этом к сообщениям присоединяются так называемые заголовки третьего уровня Н3, содержащие дополнительную информацию; необходимую для обслуживания сообщения М. Аналогичным образом полученные единицы обмена «спускаются» вниз по стеку протоколов с присоединением новых заголовков на каждом уровне. Единицы обмена уровня 1 передаются по линии связи хосту В, где снова поступают в стек протоколов. Далее происходит передача полученных единиц обмена «вверх» с отсоединением заголовков, и затем единицы обмена М1 и М2 объединяются в исходное сообщение М, которое принимается приложением.
Приведенный пример наглядно демонстрирует концепцию службы в коммуникационной модели: каждый уровень выполняет собственные обслуживающие функции, используя результаты обслуживания более высоких уровней.
Интересно заметить, что описанным выше образом обслуживание производится не только в компьютерных сетях. Рассмотрим, например, работу почтовых служб. Когда вы намереваетесь отправить письмо, на конверте вы указываете служебную информацию, включающую адреса получателя и отправителя. В данном случае вы являетесь наивысшим уровнем почтовой модели. Опуская письмо в почтовый ящик, вы посылаете его на более низкий уровень — уровень почтового отделения. Там на конверте будет поставлен штамп отделения и, возможно, добавлена какая-либо иная информация. Эти действия аналогичны присоединению заголовка уровня.
Опуская конверт в почтовый ящик, вы задействуете обслуживающие функции (услуги) почтовой службы, которая обязана обеспечить доставку письма адресату за определенное время. Вас не интересуют технические аспекты процесса доставки, которые целиком находятся в компетенции почтовой службы. Кроме того, почтовая служба сама является многоуровневой по структуре, и каждый уровень использует обслуживающие функции уровней, «младших» по иерархии.
Для успешного взаимодействия соседних уровней необходимо четкое определение интерфейса между ними. Обычно такое взаимодействие описывается документированными стандартами, рекомендуемыми к применению разработчиками аппаратного и программного сетевого обеспечения. Это несколько ограничивает «свободу творчества» разработчиков, однако позволяет защитить структуру коммуникационной модели.