Сетевые средства Linux - страница 41
Рис. 3.1. Компоненты стека протоколов выполняют обработку данных для передачи их на другой компьютер
Несмотря на то что OSI является универсальной моделью, описывающей сетевое взаимодействие, в реальных стеках протоколов редко поддерживаются все семь уровней. Наиболее часто используемые стеки — TCP/IP, AppleTalk и NetBEUI — могут быть описаны в терминах OSI. При этом стек TCP/IP насчитывает лишь четыре уровня, однако общие принципы обработки передаваемых данных остаются неизменными.
Каждый уровень модели OSI взаимодействует только с двумя уровнями; один из них расположен непосредственно над ним, а другой — под ним. (Исключениями являются прикладной и физический уровни. Прикладная программа взаимодействует непосредственно с пользователем, а на физическом уровне решаются вопросы соединения двух компьютеров.) Для программных средств, реализующих различные уровни стека протоколов на конкретном компьютере, должен быть четко определен интерфейс межуровневого взаимодействия. Компоненты, соответствующие определенным уровням, должны допускать замену. Так, например, на прикладном уровне могут работать Web-броузеры и Web-серверы. Если вы замените один броузер или сервер другим, работа всего стека протоколов не нарушится. (В некоторых броузерах и серверах могут отсутствовать определенные возможности, например, броузер может не поддерживать средства SSL, однако на самом деле такие вопросы скорее относятся к интеграции сетевых средств.) Аналогично вы можете на физическом уровне заменять сетевые кабели, концентраторы и даже сетевые карты с драйверами. При этом средства поддержки более высоких уровней не нуждаются в модификации.
Для двух компьютеров, взаимодействующих по сети, действия на некотором уровне одного компьютера строго согласованы с действиями на этом же уровне другого компьютера. В некотором смысле можно утверждать, что результаты, получившиеся при обработке данных на определенном уровне стека протоколов передающего компьютера, отменяются на этом же уровне принимающего компьютера. Главная цель работы всего стека протоколов — обеспечение взаимодействия программ прикладного уровня, поэтому каждый уровень на принимающем узле сети должен получать от нижележащего уровня в точности те же данные, которые предоставил соответствующий уровень на передающем узле. Взаимодействие компьютеров, использующих стеки протоколов, можно представить себе так, как будто некоторый уровень обменивается данными не с нижележащим и вышестоящим уровнями, а непосредственно с соответствующим уровнем другого компьютера. Очевидно, что стеки протоколов на разных компьютерах должны отвечать одному стандарту, даже если эти компьютеры работают под управлением различных операционных систем. Например, на разных уровнях стека TCP/IP, реализованного для Linux, Windows, и BeOS, выполняются одинаковые действия, несмотря на то, что коды соответствующих программных средств различаются.
Инкапсуляция и извлечение данных
Стек протоколов хорошо иллюстрирует перемещение данных между программными компонентами, поддерживающими сетевое взаимодействие, однако он не дает ответа на вопрос, какие же изменения претерпевает информация на этом пути. На различных уровнях стека протоколов выполняются инкапсуляция и извлечение данных. При инкапсуляции данные разбиваются на фрагменты, и к каждому фрагменту добавляется управляющая информация (после добавления управляющей информации фрагменты данных, в зависимости от уровня протокола, становятся пакетами или кадрами). Кроме того, информация, предназначенная для передачи, может быть модифицирована, но подобная обработка выполняется крайне редко. При извлечении данных выполняются действия, противоположные инкапсуляции.
Рассмотрим в качестве примера передачу содержимого файла с помощью протокола FTP (File Transfer Protocol — протокол передачи файлов) в сети Ethernet. При этом используется стек протоколов TCP/IP. Размер файла может превышать максимальный размер пакета данных, допустимый в TCP/IP или Ethernet. В этом случае содержимое файла должно быть разбито на несколько фрагментов. На различных уровнях стека протоколов к каждому из этих фрагментов добавляется заголовок и, возможно, суффикс (служебная информация, следующая за передаваемыми данными). Заголовок и суффикс содержат информацию, необходимую для того, чтобы система могла передавать и обрабатывать остальную часть пакета. Результат действий по инкапсуляции данных показан на рис. 3.2. На самом деле ситуация может быть более сложной. На некотором уровне стека протоколов пакет может быть разбит на несколько фрагментов меньшего размера, так, например, драйверы Ethernet могут разбить IP-пакет на два Ethernet-кадра. Подобные действия могут выполнять и маршрутизаторы. При этом заголовки IP, TCP и FTP, показанные на рис. 3.2, остаются в одном из кадров и не дублируются в другом кадре. Однако если на некотором уровне стека протоколов пакет разбивается на кадры, то на том же уровне стека на принимающем узле эти кадры обязательно объединяются в исходный пакет. Точно так же дело обстоит в том случае, если разбиение пакета выполнит маршрутизатор.