Необходимость нескольких протоколов
Мы уже говорили, что протоколы позволяют специфицировать или понимать взаимодействие, не зная детали сетевого оборудования конкретного производителя. Они являются для компьютерного взаимодействия тем же самым, чем являются языки программирования для вычислений. Теперь вам должно быть понятно, насколько верна эта аналогия. Как язык ассемблера, некоторые протоколы описывают взаимодействие по физической сети. Например, детали формата кадра Etherneta, политика доступа к сети, обработка ошибок в кадрах вместе составляют протокол, описывающий взаимодействие по Ethernetу. Аналогично, детали IP-адресов, формат дейтаграммы, понятие ненадежной доставки, без установления соединения составляют Межсетевой Протокол.
Сложные системы передачи данных не используют один протокол для решения всех задач передачи. Вместо этого, им требуется набор взаимодействующих протоколов, иногда называемый семейством протоколов или стеком протоколов. Чтобы понять почему это так, перечислим ошибки, которые могут возникнуть, когда машины взаимодействуют по сети данных.
Собранные воедино, эти проблемы подавляют. Трудно понять, как написать один протокол, которые бы обрабатывал их всех. По аналогии с языками программирования мы можем выбрать способ, как справиться с таким уровнем сложности. Трансляция программ делится на четыре концептуальных этапа, выделяемые по именам запускаемых программ: компилятор, ассемблер, компоновщик и загрузчик. Такое деление позволяет разработчику сосредотачиваться в каждый момент времени на одной проблеме, а программисту писать и тестировать каждый модуль ПО независимо от других.
Два последних наблюдения из нашей аналогии с языками программирования помогут вам уяснить организацию протоколов. Во-первых, ясно, что части транслируемого ПО должны согласовать формат данных, передаваемых между ними. Например, данные, передаваемые от компилятора ассемблеру, состоят из программы на языке ассемблера. Поэтому, мы видим, как процесс трансляции включает несколько языков программирования. Эта аналогия применима к коммуникационному ПО, где мы видим, что несколько протоколов определяют интерфейсы между модулями коммуникационного ПО. Во-вторых, четыре части транслятора образуют линейную последовательность, в которой выход компилятора становится входом для ассемблера, и т.д. Протокольное ПО также использует линейную последовательность.