Протоколы TCP-IP

Необходимость нескольких протоколов


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

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

  • Сбой оборудования. ГВМ или шлюз может перестать работать либо из-за аварии оборудования, либо из-за краха операционной системы. Канал передачи данных может перестать работать или может быть неожиданно отключен. Протокольному ПО нужно распознавать такие сбои и восстанавливаться после них, если это возможно.
  • Перегрузка сети. Даже, если все оборудование и ПО работает корректно, сети имеют конечную пропускную способность, которая может быть превышена. Протокольному ПО нужно знать способы, которыми перегруженная машина может подавить остальной траффик.
  • Задержка или потеря пакетов. Иногда пакеты сильно задерживаются или теряются. Протокольному ПО нужно узнавать о таких ошибках или адаптироваться к большим задержкам при передаче.
  • Ошибки в данных. Электрические или магнитные помехи или ошибки оборудования могут вызвать ошибки передачи, разрушающие передаваемые данные. Протокольному ПО надо узнавать о таких ошибках и восстанавливаться после них.

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


  • Собранные воедино, эти проблемы подавляют. Трудно понять, как написать один протокол, которые бы обрабатывал их всех. По аналогии с языками программирования мы можем выбрать способ, как справиться с таким уровнем сложности. Трансляция программ делится на четыре концептуальных этапа, выделяемые по именам запускаемых программ: компилятор, ассемблер, компоновщик и загрузчик. Такое деление позволяет разработчику сосредотачиваться в каждый момент времени на одной проблеме, а программисту писать и тестировать каждый модуль ПО независимо от других.

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


    Содержание раздела