CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Какая сеть такой улов

Виктор БОНДАРЬ apollo-13@ukr.net

Продолжение, начало в МК, №27 (250), 31 (254).

Передача данных. Концепция пакета

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

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

А зачем все это нужно? Ответ в том, что таким образом решается сразу две серьезные проблемы. Во-первых, при передаче данных возможны ошибки, и их гораздо легче проконтролировать, если информация транслируется пакетами. Во-вторых, передающая среда часто используется многими компьютерами, и чтобы обеспечить равноправные условия, необходимо чтобы каждый из компьютеров обращался к ней по очереди и на короткое время (а именно на этом и основан метод пакетной передачи данных).

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

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

Обычно соблюдают некоторое равновесие между вероятностью ошибки и величиной передаваемых данных для ее исправления. Рассмотрим несколько наиболее известных способов обнаружения ошибок.

На ошибках учатся

Самым простым способом является добавление к каждому символу бита контроля четности. Этот бит вычисляется таким образом, чтобы общее количество битов 1 в пакете было четным, если контроль осуществляется по четности, и нечетным, если по нечетности. При подсчете учитывают и сам бит контроля.

Например, если контроль производится по четности, то к символу 0101001 должен быть добавлен бит 1, чтобы общее количество единиц оказалось четным. Для символа же 1010101, чтобы соблюдалось условие четности количества единиц, бит контроля надо оставить равным 0. Аналогично проводится и контроль по нечетности, только в этом случае количество единиц должно быть непарным.

Такая проверка имеет то неоспоримое достоинство, что для нее на каждый символ необходим только один бит дополнительной передаваемой информации. Она позволяет обнаружить ошибку, если искажен один бит символа. Но если же искажено больше, чем один бит, а точнее парное количество в одном из символов, то последний сможет без проблем пройти проверку .

Еще одним способом контроля целостности данных является контрольная сумма. Думаю, это понятие знакомо всем, так как оно часто применяется не только при передаче данных, но и при контроле целостности данных, хранимых на компьютере.

Может применяться 16-битовая или 32-битовая контрольные суммы. Для вычисления 16-битовой контрольной суммы все данные рассматриваются в виде последовательности целых двоичных чисел. (Тут стоит еще раз напомнить, что любой символ имеет свой ASCII-код, следовательно, является по сути целым числом. Просто этот факт от нас заботливо скрывает программное обеспечение, которое и показывает эти числа в виде букв и знаков.) Данные разбивают на участки длиной в 16 битов, которые затем рассматривают как 16-битовые числа и суммируют. Если размерность суммы получается большей, чем 16 бит, то к ней добавляют так называемые биты переноса, чем урезают ее до приемлемой двухбайтовой величины.

Для примера рассмотрим контрольную сумму Билла Гейтса :-). Итак:

B i l l G a t e s

42 69 6C 6C 20 47 61 74 65 73

4269 + 6C6C + 2047 + 6174 + 6573 = 19603

Добавив к 19603 биты переноса (а попросту отрезав «1»), получим окончательный результат 9603 (16-битное число). Вот оказывается, какова она, контрольная сумма Билла. Теперь, кажется, уже ни с кем его при передаче данных не спутаешь. Попробуем переслать пакет с его именем по сети, и вдруг получаем весьма необычный результат — Bila Rates. Кажется-таки спутали. Каким же образом пакет прошел проверку контрольной суммой? А самым естественным — его контрольная сумма тоже равна 9603. Так что вероятность ошибки сохраняется всегда, хотя по сравнению с битом контроля четности, в этом случае она в тысячи раз меньшая.

Еще лучшие результаты демонстрирует метод циклического избыточного кода (CRC — Cyclic Redundancy Check). Он позволяет обнаружить ошибку там, где бессильна контрольная сумма. Например, в предыдущем примере ошибка, скорее всего, была бы обнаружена, если бы для проверки применялся CRC. Не буду говорить наверняка, потому что сам не проверял, однако вы можете вполне сделать это сами. И сейчас я вам расскажу как.

Для начала несколько слов об отдельных компонентах реализации механизма получения CRC. Первый компонент — это схема логической операции XOR (исключающее ИЛИ). Она получает на входе два значения и выдает определенный результат так, как это показано на рисунке 1. Принимая во внимание, что все значения двоичные, то существует всего четыре возможных варианта, результатом которых будет 0, если оба числа одинаковые (0 и 0, или 1 и 1 на входе), либо 1, если числа разные (1 и 0 на входе).

Второй компонент — это сдвиговый регистр. Он представляет собой последовательность ячеек, в которых биты двигаются справа налево (рис. 2). В первоначальный момент сдвиговый регистр инициализируется нулями. Во время сдвига все биты перемещаются влево на одну позицию, самый правый бит становится равным значению на входе, а значение на выходе приравнивается к самому левому биту.

Рис. 1.   Рис. 2.

Данные компоненты объединяют таким образом, как это показано на рисунке 3. Это лишь один из многих вариантов, в котором используются сдвиговые регистры длиной 5, 7 и 4 бита. Однако независимо от длины регистров, общий принцип одинаков: при поступлении данных выполняется сдвиг, самый левый бит при этом подается на вход сразу к трем операциям XOR, и далее выполняются вычисления. Таким образом, если пропустить через такую схему все данные пакета, то получим 16-битное число, которое и называется циклическим избыточным кодом.

Рис. 3.

Возможно, вы скажете, что такая схема весьма сложна. Однако сложна она лишь для человека. Ее аппаратная или программная реализация выглядит весьма просто и изящно. К тому же стоит отметить, что аппаратная реализация стоит весьма недорого.

Для упрощения работы получателя при отправке вычисляется инверсный циклический избыточный код. Таким образом, получателю необходимо лишь определить CRC всего пакета вместе с содержащимся в нем инверсным CRC, и если результат равен нулю, значит, пакет был доставлен в целости.

Конечно же, вероятность ошибки остается всегда, но она настолько мала, что ее уже можно не принимать во внимание. Ведь схема получения CRC выдаст совершенно другой результат, даже если будет искажен всего один бит, так как в формировании итогового проверочного кода каждый бит пакета принимает участие трижды.

Мы рассмотрели, каким образом может проходить контроль ошибок при пакетной передаче данных. Это всего несколько способов из десятков возможных, однако на практике чаще всего применяются именно они. Данные для проверки обычно добавляются в конце фрейма.

Клеим пакет

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

Приведем простой пример формата фрейма. Предположим, вам нужно передать пакет в системе RS-232, о которой рассказывалось в предыдущей статье. Хотя в стандарте RS-232 и существует описание того, как передавать отдельные биты данных, но нет соглашения относительно того, как обозначать начало и конец фрейма. Для этого можно использовать символы кодировки ASCII soh (start of header — начало заголовка) и eot (end of transmisson — конец передачи), которые обычно не встречаются в текстовых документах. Тогда каждый фрейм будет иметь следующий вид: soh  область передаваемых данных  eot.

Недостатком подобного решения является то, что такие символы встречаются и в области данных, когда происходит передача программного кода, и тогда фрейм может быть отброшен как ошибочный, либо получен не до конца. Чтобы избежать этого, применяют так называемую вставку байтов. Ее смысл заключается в том, что символы soh и eot в области данных заменяются некой оговоренной последовательностью. Например, для обозначения символа soh используют последовательность двух символов esc и x, для eot — esc и y. Но не исключено, что в тексте встретится символ esc в чистом виде, а за ним случайно будут следовать символы x или y. Чтобы избежать этого, символы заменяют следующей последовательностью — esc z.

Такая замена позволяет полностью избежать недоразумений и делает возможной пакетную передачу. А чтобы восстановить передаваемые данные в первозданном виде, при приеме пакета производится обратная замена. Благодаря таким вот несложным манипуляциям система RS-232 может осуществить пакетную передачу данных.

Передача данных. Фрейм и его адресация

Фрейм — это обозначение пакета, применяемого в сетевой технологии. У каждого фрейма есть минимальный и максимальный размер, формат заголовка и применяемые механизмы коррекции ошибок. И хотя в каждой сетевой технологии может применяться свой формат фрейма, все они в принципе схожи между собой, отличаясь лишь в деталях. Так, в большинстве сетевых технологий фрейм состоит из двух частей: заголовка фрейма и области данных, следующей за ним. В заголовке обычно располагается адрес назначения, адрес источника, информация о типе фрейма, необходимая для правильной его интерпретации, и другие служебные данные. Размер заголовка чаще всего неизменен в фреймах конкретного типа сети, область же данных может иметь переменный размер, определяемый объемом передаваемых данных. Адрес назначения используется компьютерами локальной сети для определения того, кому из них предназначен фрейм. Ведь при использовании разделяемой передающей среды, когда один из компьютеров ведет передачу данных, электрический сигнал, несущий информацию, будут получать все подключенные к этой среде станции. Таким образом, копию переданного фрейма получат все компьютеры сети. Однако примет ее и передаст для обработки процессору только та станция, адрес которой указан в заголовке.

Именно для этого в сетях применяется адресация: каждой станции присвоен свой уникальный номер, называемый аппаратным адресом, или адресом доступа к передающей среде (Media Access Control — MAC).

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

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

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

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

Кроме обычного адреса, в сетях также часто применяются широковещательные и групповые адреса. Преимущества использования широковещательных адресов можно проиллюстрировать на следующем примере. Если одному компьютеру нужно найти в сети другой по его имени, то можно по очереди посылать каждой станции пакет с запросом, пока не будет получен положительный ответ. Однако в случае использования общей передающей среды, где каждый компьютер и без того получает копию с каждого фрейма, пересылка множества пакетов, отличающихся лишь адресом в заголовке, окажется крайне неэффективным использованием сетевых ресурсов. Гораздо проще переслать один пакет со специальным зарезервированным адресом, который получат и обработают все станции в сети. Ответ же пришлет лишь нужный компьютер.

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

Однако остается невыясненным еще один вопрос: каким образом получатель пакета определяет тип его содержимого. Ведь в области данных может быть, к примеру, обычный текст с кодировкой ASCII, либо информация со специальным представлением (данные протоколов IP, IPX, специальные сведения для сетевого оборудования или программ). Для обозначения содержимого может использоваться явное либо неявное определение типа фрейма. При явном обозначении информация о типе фрейма включается в заголовок каждого переданного пакета. Она обычно представляет собой числовое значение, которое стандартизировано и обозначает тот или иной тип содержимого. При неявном обозначении в заголовке каждого фрейма нет информации о его содержимом. Вместо этого отправитель и получатель предварительно согласовывают между собой содержимое каждого пакета, либо используют для этого часть области данных.

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

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov