Лекция 3. Концепции, модели и стандарты инфокоммуникационных сетей.
Язык компьютеров
Все задачи компьютер решает, оперируя исключительно нулями и единицами. Все процессы внутри компьютера — это команды, исходными данными и результатами которых являются двоичные числа, которые, как будет видно дальше, великолепно подходят для электронной коммуникации. Сами команды тоже представляют собой двоичные числа. Двоичный код команд называется машинным языкам.
Системы счисления
Существует несколько систем счисления. В своих повседневных делах люди пользуются десятичной системой, однако в компьютерных и коммуникационных технологиях чаще используются шестнадцатеричная и двоичная системы.
Десятичная система
Десятичную систему счисления называют также системой счисления с основанием 10, потому что она основана на десяти цифрах (от 0 до 9), с помощью которых можно представить любое число.
В десятичном числе 342 цифра "3" представляет три сотни, "4" — четыре десятки, "2" — две единицы. Таким образом, каждая цифра представляет величину, определенную значением цифры и ее положением в числе.
Шестнадцатеричная система
Еще одна система счисления, используемая в компьютерных технологиях, — шестнадцатеричная (система счисления с основанием 16). Число 16 не имеет какого-либо магического значения, однако операции с ним для непосвященных могут показаться не менее загадочными, чем черная магия. Главная причина, по которой число 16 удостоено столь высокого звания, — его равенство целой степени двойки. Для представления шестнадцатеричных чисел используется десять цифр десятичной системы и шесть символов латинского алфавита от А до F.
В шестнадцатеричной системе цифры от 0 до 9 имеют то же значение, что и в десятичной. Символ А (здесь он уже называется цифрой) представляет число, равное 10 в десятичной системе. Соответственно цифра В равна 11 и так далее вплоть до цифры F, равной 15. Дальнейшие числа уже нельзя представить одной цифрой. Десятичное число 16 в шестнадцатеричной системе записывается как 10, десятичное 17 — как 11 и т.д. Другими словами в шестнадцатеричной системе, как и в десятичной (и во всех других), величина, представленная цифрой, определяется значением цифры и ее позицией в числе.
Как преобразовать число из одной системы счисления в другую? Проще всего это сделать с помощью калькулятора Windows в научном режиме или карманного калькулятора. Все арифметические операции над шестнадцатеричными числами выполняются точно так же, как над десятичными, за исключением того, что в них участвуют дополнительные шесть цифр. В табл. 3.1 приведено соответствие шестнадцатеричных и десятичных чисел.
Шестнадцатеричная запись используется в компьютерах потому, что в двоичное число легче преобразовать шестнадцатеричное, чем десятичное. Поскольку байт состоит из восьми битов, а шестнадцатеричное число можно выразить четырьмя битами, следовательно, в одном байте можно записать две шестнадцатеричные цифры.
В табл. 3.1 обратите внимание на то, что некоторые шестнадцатеричные числа выглядят точно так же, как десятичные, хоть и не равны им. Как же узнать, в какой системе записано число, если, например, написано "12"? Ведь оно может представлять десятичное число 12, или шестнадцатеричное 18! Следовательно, нужен какой-то способ обозначения шестнадцатеричных чисел (но не десятичных, потому что люди давно уже привыкли писать десятичные числа, никак не отмечая, что они десятичные). Обозначать шестнадцатеричные числа принято одним из следующих двух способов:
- добавить символ "Н" в конец числа, например 12Н;
- добавить символы "Ох" в начало числа, например 0x12.
Второй способ (символы Ох) является стандартным способом обозначения шестнадцатеричных чисел в С++ и большинстве других языков программирования.
Двоичная система
С одной стороны, двоичная система счисления чрезвычайно проста: в ней используются только две цифры — 0 и 1. Однако с другой стороны, использование только двух цифр приводит к настолько быстрому росту размеров чисел, что человек не в состоянии работать с ними. Например, десятичное число 519 в двоичной системе равно 10000000111.
Английское слово binary (двоичный) происходит от латинского bi, означающего 'два". Другое название двоичной системы — система счисления с основанием 2.
Нули и единицы
Если вы никогда не работали с двоичными числами, то вас может удивить: как ложно представить любое число, используя только нули и единицы? Этот же вопрос можно задать и о десятичной системе счисления, однако нас это не удивляет, поскольку десятичную систему мы используем всю жизнь. Для любого человека кажется совершенно нормальным использовать позицию цифры для указания представляемой этой цифрой величины. Например, в третьей позиции справа записываются сотни. Точно так же записывается и двоичное число.
Биты и байты
Двоичная цифра (0 или 1) называется битом. Один байт равен восьми битам. Байт — это строка битов, сгруппированных для удобства в группы по восемь битов. В компьютерах байт используется для представления символа, т.е. буквы, цифры или какого-либо другого символа.
Преобразование двоичного числа в десятичное
Рассмотрим двоичное число 01001100. Чтобы определить значение этого числа, нужно знать, какую величину представляет каждая цифра в зависимости от ее позиции.
Каждый бит в двоичном числе "включен" или "выключен". Цифра 0 означает, что он выключен, а 1 — включен. Как и в других системах счисления, номер позиции в числе отсчитывается справа.
В двоичном числе (как и в десятичном) первая позиция справа представляет величину, равную 1. Однако на этом сходство двоичной и десятичной систем заканчивается. В двоичной системе счисления вес каждой следующей позиции в два раза больше веса предыдущей (в десятичной системе — в десять раз, в шестнадцатеричной — в шестнадцать). В табл. 3.2 приведены десятичные эквиваленты каждой позиции двоичного числа (т.е. вес позиции, или ее значение, когда бит равен 1).
Если двоичная цифра равна 0, значит, бит в этой позиции выключен и значение позиции равно нулю. Чтобы преобразовать двоичное число в десятичное, нужно просуммировать десятичные значения каждого бита. В табл. 3.3 показано преобразование двоичного числа 01001100 в десятичное.
Итак, чтобы получить десятичный эквивалент двоичного числа 01001100, вычислим сумму 64+8+4. В результате получим десятичное значение, равное 76. Этот результат можно проверить с помощью научного калькулятора Windows: введите двоичное число 01001100, щелкните на кнопке Dec (Преобразование в десятичное число) и убедитесь, что результат преобразования равен 76.
Почему используются двоичные числа
Использование двоичной системы обусловлено весьма вескими причинами. Компьютеры представляют собой электронные устройства, в которых данные представлены электрическими импульсами, т.е. в них используются цифровые сигналы.
Цифровые сигналы представляют собой дискретные состояния какого-либо устройства (ячейки памяти или канала связи). Проще всего реализовать устройство, у которого есть только два дискретных состояния. Например, участок магнитного материала, служащий ячейкой памяти, может быть или намагничен или размагничен. Если бы этих состояний было больше (например, намагничен в разных направлениях или в разной степени), то конструкция ячейки памяти была бы значительно сложнее. Поскольку для обозначения двух состояний лучше всего подходят 0 и 1, двоичная система счисления в компьютерных технологиях стала базовой.
Двоичная система счисления и цифровые сигналы — базовые понятия в области компьютерных и коммуникационных технологий. Более глубоко с этими вопросами можно ознакомиться с помощью источников, приведенных в конце главы.
Пакеты данных
Прежде чем передать данные по сети как электрические импульсы, их нужно разделить на небольшие части, с которыми смогут работать сетевые устройства. Текстовый документ или сообщение электронной почты нельзя передать по сети как один длинный непрерывный поток, потому что он "свяжет" сеть на неопределенное время и другие компьютеры окажутся отключенными от сети. Чтобы многие компьютеры могли работать в сети одновременно, прежде чем передать большие файлы по кабелю или по какому-либо другому каналу, нужно разбить их на маленькие фрагменты.
Небольшие легкопередаваемые порции информации, на которые компьютерные данные разбиваются для передачи по сети, называются пакетами. В зависимости от архитектуры сети и этапа процесса коммуникации, пакеты могут называться кадрами или (в протоколе TCP) сегментами.
Преимущества разбивки данных на пакеты
Разделение передаваемых данных на небольшие пакеты предоставляет ряд преимуществ.
Сетевые компьютеры могут передавать данные по очереди. Один компьютер, передающий большое количество данных, не монополизирует канал связи.
Если в сети происходит сбой и пакет теряется, то потребуется передать заново только один небольшой пакет, а не весь файл.
В зависимости от топологии сети и типа соединения, каждый пакет может проходить к адресату разными путями. Следовательно, если один из путей перегружен или вышел из строя, пакеты могут достичь адресата другими путями. Эффективность и надежность передачи при этом существенно повышаются.
Сбор данных из пакетов
Если данные разбиты на фрагменты и каждый фрагмент передается отдельно, то что с ними происходит у получателя? В каждом пакете, кроме передаваемых данных, есть заголовок пакета (как адрес на конверте). Заголовок содержит информацию об адресе пакета, чтобы он мог попасть к нужному адресату. Кроме адреса, в заголовке содержится информация о месте пакета в последовательности других пакетов, чтобы в принимающем компьютере пакеты могли быть аккуратно собраны вместе.
Заголовок размещается в начале пакета, перед данными. Пакет может также содержать трейлер, присоединенный к концу пакета, т.е. после передаваемых данных. Информация в трейлере чаще всего предназначена для обнаружения ошибок передачи. На рис. 3.1 показана структура типичного пакета данных.
В трейлере находится код CRC (cyclical redundancy check), представляющий собой короткую последовательность нулей и единиц. Вычисления с кодом CRC выполняются дважды: перед отправкой пакета в сеть специальная процедура формирует код CRC, а после получения пакета адресатом такая же процедура вычисляет его еще раз. Если результаты этих двух вычислений отличаются, значит, данные в процессе передачи изменились. В этом случае пакет отбрасывается и посылается запрос на его повторную передачу.
Конкретное положение в пакете и размеры полей заголовка и трейлера зависят от сетевой архитектуры и протоколов. Например, в Ethernet кадр (так здесь называется пакет) может иметь размер от 64 до 1 518 байт, причем 18 байт всегда используются под заголовок и трейлер. Поэтому в одном кадре Ethernet можно передать не более 1 500 байт данных. Пакеты Token Ring немного больше — обычно в них находится 4 202 байта данных.
Многоуровневый процесс коммуникации
Компьютер преобразует данные в нули и единицы, а затем обрабатывает их. При передаче данных в другой компьютер нужно учесть, что на нем может быть загружена. Другая операционная система или установлены другие программы приложений. Например, нужно передать электронное письмо, созданное с помощью программы Microsoft Outlook Express на компьютере с операционной системой Windows NT, причем на принимающем компьютере установлена система Apple, а электронные письма обрабатываются программой Eudora Pro.
Процесс сетевой коммуникации сложен. Чтобы получатель смог принять сообщение, все введенные пользователем слова с графической информацией и файлами должны быть правильно преобразованы в последовательность нулей и единиц, которые принимающий компьютер должен правильно расшифровать.
Данные в виде электрических сигналов должны по кабелю дойти до нужного компьютера, затем их необходимо правильно преобразовать в исходную форму. Этот процесс выполняется в несколько этапов, которые называются уровнями процесса коммуникации.
Процессы и протоколы
В многоуровневой модели процесс сетевой коммуникации разбит на отдельные этапы. В компьютерной сети роль рабочих играют протоколы: один "рабочий" принимает данные от приложения, другой сжимает и шифрует данные, третий формирует пакеты и т.д. И наконец, в принимающем компьютере последний "рабочий" формирует из пакетов исходный документ.
Каждый протокол используется на определенном уровне модели коммуникации. В следующих разделах модели коммуникации рассматриваются более подробно. Вам необходимо хорошо понимать, как протоколы соотносятся с уровнями. Уровень не только определяет функции протокола, но и служит источником ценной информации для устранения неполадок в случае их возникновения.