УДК 004.738.2
DOI: 10.18698/0236-3933-2017-1-75-85
САМООРГАНИЗАЦИЯ В ДРЕВОВИДНЫХ ПЕРСОНАЛЬНЫХ БЕСПРОВОДНЫХ СЕТЯХ ПРИ НАЛИЧИИ НЕСКОЛЬКИХ ШЛЮЗОВ
С.Н. Падалко [email protected]
М.Н. Терентьев [email protected]
Московский авиационный институт (национальный исследовательский университет), Москва, Российская Федерация
Аннотация Ключевые слова
Проанализирована самоорганизация древовидных персо- Самоорганизация, беспроводная
нальных беспроводных самоорганизующихся сетей при самоорганизующаяся сеть,
наличии одного или нескольких узлов-шлюзов. Пояснена маршрутизация сообщений,
необходимость наличия у сетей указанного класса способ- древовидная топология, не-
ности к самоорганизации. Рассмотрены такие составляю- сколько шлюзов щие самоорганизации, как формирование сети, маршрутизация сообщений, реконфигурация сети. Для перечисленных составляющих приведены алгоритмы работы узлов,
обеспечивающие ее самоорганизацию. Особое внимание Поступила в редакцию 07.07.2016
уделено маршрутизации сообщений © МГТУ им. Н.Э. Баумана, 2017
Исследование выполнено при финансовой поддержке РФФИ в рамках научного проекта № 17-08-01641а
Введение. Класс беспроводных персональных сетей — низкоскоростных, небольшого радиуса действия — во многих случаях разворачивается без предварительной подготовки. Это обстоятельство накладывает на подобные сети требование способности к самоорганизации. Далее проанализированы составляющие самоорганизации древовидных персональных беспроводных сетей при наличии нескольких шлюзов.
Самоорганизация персональной беспроводной сети. Разработкой стандартов персональных беспроводных сетей занимается рабочая группа 802.15 комитета IEEE [1]. В настоящее время распространены стандарты IEEE 802.15.1 и IEEE 802.15.4, предусматривающие создание различных по характеристикам беспроводных сетей, общим для которых является отсутствие инфраструктуры. Далее будут рассмотрены сети стандарта IEEE 802.15.4 [3], называемые сенсорными. Вследствие отсутствия инфраструктуры критически важной для функционирования таких сетей является способность к самоорганизации [2]. Под способностью персональной беспроводной сети к самоорганизации будем понимать совокупность свойств, обеспечивающих автоматизацию процессов жизненного цикла сети: формирование сети; маршрутизация сообщений; реконфигурация сети. Способность беспроводной сети к самоорганизации обеспечивает автоматическое подключение узлов к сети, нахождение маршрутов для доставки сообщений адресату, восстановление работоспособности сети без внешнего управляющего воздействия, несмотря на влияние неблагоприятных факторов, нарушающих связи между узлами.
Рассмотрим составляющие самоорганизации подробнее.
Формирование сети. Стандарт IEEE 802.15.4 предусматривает наличие у узлов сети двух типов адресов. Адреса первого типа, называемые физическими, присваивают узлам при их производстве и в дальнейшем не изменяются. Уникальность физических адресов гарантирует производитель узлов. Адреса второго типа, называемые логическими, назначаются узлам в момент подключения к существующей сети. Узлу известен идентификатор сети, к которой он должен подключиться (Personal Area Network Identifier, PANId) [1]. После включения узел начинает самостоятельный поиск сети, инициируя обмен сообщениями по радиоканалу. При этом подключающийся к сети узел идентифицирует себя с помощью физического адреса. В результате выполнения процедуры подключения узел-координатор (или иной уполномоченный узел) сети сообщает подключаемому узлу, кроме прочей информации, назначенный ему логический адрес. Это делает новый узел полноправным участником сети. Подключенный к сети узел при передаче сообщений идентифицирует себя с помощью логического адреса.
Алгоритм работы узла, подключающегося к сети, представлен ниже.
1. Передать запрос на подключение к сети с заданным PANId.
2. Подождать установленное время ^твет, принимая ответы на свой запрос.
3. Выбрать из принятых ответов наиболее предпочтительный, если не удалось — перейти к п. 7.
4. Направить узлу, приславшему выбранный ответ, уведомление о подключении.
5. Подождать установленное время tJM, ожидая подтверждение фактического подключения от выбранного узла. Если не удалось — перейти к п. 7.
6. Закончить процедуру подключения к сети.
7. Выдержать паузу ^одключ, затем перейти к п. 1.
Выбор узла для подключения в п. 3 алгоритма может основываться на различных критериях: наилучшее качество связи; наименьшая длина маршрута до узла-координатора; ответ, пришедший первым, и т. д.
Процедура подключения узла к сети не является односторонней, другая сторона после приема запроса на подключение к сети действует в соответствии со следующим алгоритмом.
1. Если PANId запроса не совпадает с PANId сети, то закончить алгоритм.
2. Если узел не может подключить к себе потомка, то закончить алгоритм.
3. Сформировать по определенным правилам предлагаемый логический адрес.
4. Зарезервировать предлагаемый логический адрес.
5. Направить подключающемуся к сети узлу ответ, содержащий предлагаемый логический адрес.
6. В течение ^твет ожидать уведомления о подключении. Если уведомление не пришло — перейти к п. 9.
7. Направить подключающемуся узлу подтверждение.
8. Запомнить факт подключения узла, закончить алгоритм.
9. Освободить ранее зарезервированный логический адрес.
Возможность подключения к узлу потомков и правила формирования предлагаемого при подключении логического адреса зависят от класса топологии беспроводной самоорганизующейся сети и выбранного алгоритма маршрутизации сообщений.
Способность к самоорганизации при формировании сети проявляется в том, что отсутствие информации у подключающегося узла об адресах и ролях соседних узлов не влияет на возможность его подключения к сети.
Маршрутизация сообщений. В соответствии с принципами разделения стека протоколов на уровни стек протоколов беспроводных самоорганизующихся сетей состоит из физического (PHY), канального (MAC), сетевого (NWK) и прикладного (APL) уровней [4, 5]. Содержательная часть подлежащего передаче сообщения формируется уровнем APL. Прочие уровни дополняют сообщение заголовками со своими служебными данными. Основные элементы структуры сообщения показаны на рис. 1.
Заголовок Заголовок Заголовок Данные
PHY MAC NWK
Рис. 1. Структура сообщения
Физический уровень PHY стека протоколов обеспечивает физическое взаимодействие узла со средой передачи сообщений. Уровень MAC отвечает за передачу сообщения на одном шаге маршрута. Для этого в состав заголовка MAC входят адреса отправителя и получателя сообщения. На различных шагах многошагового маршрута адреса отправителя и получателя в заголовке MAC различаются. Состав заголовков PHY и MAC установлен стандартом IEEE 802.15.4 [3].
Передачу сообщений по многошаговым маршрутам обеспечивает уровень NWK [1], используя для этого информацию из своего заголовка, в состав которого входят адреса начального и конечного узлов маршрута. Задача обеспечения передачи сообщений по многошаговым маршрутам известна как задача маршрутизации. При рекурсивном решении задача маршрутизации сводится к определению адреса узла, на который должно быть маршрутизировано (т. е. передано дальше) принятое сообщение.
Маршрутизация сообщений в одношлюзовых беспроводных самоорганизующихся сетях древовидной топологии. Один из возможных методов маршрутизации сообщений в беспроводной самоорганизующейся сети древовидной топологии предполагает получение информации о взаимном положении отправителя и получателя в дереве на основе их логических адресов. В этом случае логический адрес узла должен отражать его положение в дереве. Это достигается применением следующей схемы назначения логических адресов узлам сети.
Адреса любых двух узлов, один из которых является непосредственным потомком другого, должны быть связаны соотношением
Ап = АрШ + j, j = 1, m, (1)
где Ап — адрес потомка; Ар — адрес родителя; m — предельное число непосредственных потомков, которое может иметь один узел (модуль сети); j — номер потомка в пределах пространства адресов его родителя.
Координатор имеет адрес 0, подключение к сети ему не требуется. Координатор готов к работе сразу после включения. Остальные узлы после включения должны получить логический адрес. Отвечать на запросы подключающихся узлов могут любые подключенные к сети узлы, имеющие свободные адреса для потомков, т. е. если число уже подключенных потомков данного узла не превышает т. Подключающемуся узлу назначается адрес, определенный по (1).
Адрес родителя Ар любого узла с адресом А, не являющегося координатором
Ар = int | A-1 |, (2)
V m )
где int — целая часть числа.
В общем случае маршрут передачи сообщения от узла с адресом АSRC до узла с адресом АDESt состоит из восходящей и нисходящей ветвей (рис. 2). Эти вет-
Атср л
ви пересекаются в узле с адресом АLCP, являющимся
общим родителем источника и адресата наименьшего
возможного уровня. В частном случае в роли такого
узла может выступать координатор сети — узел с адресе adest t
сом А0.
Рис. 2. МарШрут пере- При использовании приведенной схемы назначе-дачи сообщения ния логических адресов узлам сети маршрутизация сообщений выполняется следующим образом. Приняв некоторое адресованное ему сообщение по радиоканалу, узел определяет адрес следующего в маршруте передачи узла c помощью функции GetNext(), возвращающей на узле с адресом ATHIS адрес узла, на который должно быть передано сообщение
для последующей доставки на узел с адресом ADEST, при условии Adest ^ Athis. Код этой функции, а также функции GetParent(), возвращающей адрес родителя своего аргумента, т. е. реализующей выражение (2), приведен ниже:
/* определение адреса родителя */
unsigned int GetParent(unsigned int A) {
return (A-1)/m; /* модуль сети m — глобальная переменная */
}
/* маршрутизация сообщения по дереву */
unsigned int GetNext(unsigned int Athis, unsigned int Adest) {
/* пока адрес назначения больше моего адреса */ while(Adest > Athis)
{
/* родителем текущего адреса назначения является текущий узел ? */
if(GetParent(Adest) == Athis)
{
/* да, маршрут проходит через него */ return Adest;
}
/* перейдем на уровень выше */
Adest = GetParent(Adest);
}
/* иначе маршрут пролегает через родителя */
return GetParent(Athis);
}
Рассмотренный метод маршрутизации состоит из схемы назначения логических адресов узлов и способа определения следующего узла в маршруте передачи сообщения. В памяти узла должны храниться его физический и логический адреса, идентификатор сети, модуль сети, адрес родителя, число подключенных потомков.
Многошлюзовая беспроводная самоорганизующаяся сеть. Для связи с внешним миром (передачи собранных данных, получения команд и т. д.) в беспроводной самоорганизующейся сети используют узел-шлюз. Шлюз имеет канал связи для обмена данными с некоторым внешним компьютером или сетью. Например, в случае беспроводной сенсорной сети через шлюз передается информация, собранная узлами-измерителями.
Для связи с внешним миром можно использовать не один, а несколько шлюзов, что повышает надежность сети, сокращает потоки данных через маршрутизаторы и шлюзы, ускоряет доставку сообщений, позволяет увеличить обслуживаемую сетью площадь [6].
В одношлюзовых беспроводных самоорганизующихся сетях в качестве шлюза обычно используют узел-координатор. В целях сохранения преимуществ древовидной топологии обязанности координатора возложим на некоторый внешний (по отношению к беспроводной сети) узел, соединенный со шлюзами внешними каналами связи (рис. 3). Совокупность узлов, обслуживаемую одним шлюзом, будем называть кластером.
Приведенный выше метод маршрутизации сообщений при использовании многошлюзовой сети не применим. Вместо него должен использоваться предлагаемый обобщенный на случай нескольких шлюзов метод маршрутизации.
Рис. 3. Топология многошлюзовой сети
Маршрутизация сообщений в многошлюзовых беспроводных самоорганизующихся сетях древовидной топологии. Предлагаемый метод маршрутизации, как и рассмотренный ранее, состоит из схемы назначения узлам логических адресов и способа определения следующего узла в маршруте передачи сообщения.
Назначение логических адресов. Будем назначать узлам логические адреса так, чтобы значение адреса соответствовало положению узла в дереве. Обозначим через K предельное число узлов в одном кластере (включая шлюз). Координатор будет иметь логический адрес 0. При подключении к сети узлы-шлюзы запрашивают свой логический адрес у координатора, используя для коммуникации внешнюю компьютерную сеть, например, интернет.
Координатор назначает подключающимся шлюзам логические адреса начиная с 1 с шагом K:
Ап {= Ki +1, (3)
где Аш i — адрес шлюза с номером i. Шлюз Аш i, получивший адрес, формирует кластер, адреса узлов в котором принадлежат диапазону Аш i +1 до Аш i + K -1. Адрес Aj любого узла в кластере с номером i можно выразить в виде суммы
Aj = Аш + j, j = 0, K -1, (4)
в которой первое слагаемое определяется номером кластера, а второе — порядковым номером узла в кластере.
Если узел с адресом Aj некоторого кластера с номером i является непосредственным потомком узла с адресом Ап ¡ того же кластера, то между этими адресами есть связь:
Aj = Аш i + (Ап i - Аш i )m + j, j = 1, m. (5)
Выражение (5) аналогично выражению (1), но применимо к многошлюзовой сети древовидной топологии.
Логические адреса не должны выходить за пределы кластера:
Aj < Аш i + K. (6)
Для повышения вычислительной эффективности значение K будем выбирать так, чтобы оно было степенью числа 2:
K = 2k, (7)
где k — целое число. При этом номер кластера становится префиксом в двоичном представлении логического адреса узла.
При обращении узла за получением логического адреса шлюз или иной подключенный к сети узел кластера формирует адрес c помощью (5) с учетом ограничения (6).
Номер кластера может быть определен исходя из логического адреса узла
( A -1 ^ „ i = int I —I, A > 0.
Адрес родителя узла с адресом A из кластера с номером i равен
Ap = int | A - Ki -1 | + Ki +1, Ki +1 < A < K (i +1) +1,
^ m )
или 0, если узел является одним из шлюзов Ар = 0, A = Ki +1.
Маршрут передачи сообщения. Несмотря на наличие нескольких шлюзов топология сети остается древовидной, поэтому маршрут передачи сообщения, как и ранее, содержит в общем случае восходящую и нисходящую ветви. Для определения адреса родителя и маршрутизации сообщений будем использовать функции GetParentMGW() и GetNextMGW(), код которых показан ниже:
/* определение адреса родителя в многошлюзовой древовидной кластерной сети */
unsigned int GetParentMGW(unsigned int A) {
if(((A-1)&((1<<k)-1)) == 0) /* k — глобальная переменная */ return 0;
else {
unsigned int a0 = ((A-1)>>k)*(1<<k)+1;
return (A-a0)/m + a0; /* m — глобальная переменная */
}
}
/* маршрутизация сообщения по дереву многошлюзовой кластерной сети
*/
unsigned int GetNextMGW(unsigned int Athis, unsigned int Adest) {
/* если сообщение на координаторе, маршрутизируем его в нужный кластер */
if(Athis == 0 && Adest > 0) {
return ((Adest-1)>>k)*(1<<k) + 1;
}
/* маршрут из одного кластера в другой проходит через координатор
*/
if((Athis-1)>>k != (Adest-1)>>k) {
return GetParentMGW(Athis);
}
/* пока адрес назначения больше моего адреса в пределах одного кластера */
while(Adest > Athis) {
/* родителем текущего адреса назначения является текущий узел ? */
if(GetParentMGW(Adest) == Athis) {
/* да, маршрут проходит через него */ return Adest;
}
/* перейдем на уровень выше */ Adest = GetParentMGW(Adest);
}
/* иначе маршрут пролегает через родителя */
return GetParentMGW(Athis);
}
В этих функциях используются глобальные переменные: m, k — модуль сети и порядок размера кластера (см. (7)).
В случаях, когда функция GetNextMGW() выполняется на узле-координаторе, или когда она возвращает 0 на узле-шлюзе, передача сообщения узлу, логический адрес которого возвращен этой функцией, должна выполняться не посредством беспроводной сети, а через внешнюю сеть, например, интернет.
Для реализации предлагаемого метода в памяти узла должны храниться его физический и логический адреса, идентификатор сети, размер кластера, модуль сети, адрес родителя, число подключенных потомков. Номер кластера может быть получен из логического адреса узла сдвигом вправо на k разрядов.
При маршрутизации способность сети к самоорганизации проявляется в том, что маршруты передачи сообщений строятся автоматически на основании информации о фактическом наличии связей между узлами.
Реконфигурация сети. В случае программного или аппаратного сбоя узел может потерять информацию о назначенном ему логическом адресе. Другой возможностью потери логического адреса является временная потеря связи с сетью. И то, и другое приводит к фактической утрате узлом связи с сетью, вследствие чего узел должен выполнить подключение к сети заново.
Для обнаружения утраты узлом связи с сетью могут использоваться служебные сообщения. В целях сокращения трафика таких сообщений они должны рассылаться координатором (в том числе и в многошлюзовой сети), а затем ретранслироваться шлюзами. По радиоканалу такие сообщения должны рассылаться в широковещательном режиме. Получив служебное сообщение от родителя в дереве, узел должен запомнить факт приема этого сообщения и ретранслировать его потомкам. Интервал рассылки таких сообщений является одним из параметров работы сети. Неполучение узлом служебных сообщений от родителя в течение установленного промежутка времени должно инициировать повторное подключение этого узла к сети. Если некоторый узел принимает по радио запрос на подключение к сети от своего родителя в дереве, он должен сам немедленно начать процедуру подключения к сети.
После реконфигурации сеть может измениться: вновь назначенный узлу логический адрес может не совпасть со старым, узел для подключения может выбрать предложение другого родителя в дереве, возможно, из иного кластера. Таким образом, после реконфигурации связи между узлами могут быть установлены иначе. Это приводит к тому, что часть маршрутов передачи данных в сети может стать недействительной, зато могут появиться новые маршруты. Другими словами, независимо от последствий реконфигурации связность сети
сохраняется. Это является третьей составляющей способности сети к самоорганизации.
Заключение. Показано значение самоорганизации для персональных беспроводных сетей, не имеющих инфраструктуры и предварительной информации о расположении узлов и маршрутах передачи сообщений. Проанализированы составляющие способности персональной беспроводной сети к самоорганизации. Анализ выполнен как для сетей с единственным шлюзом, так и для сетей с несколькими узлами-шлюзами. Сформулированы обеспечивающие самоорганизацию алгоритмы функционирования узлов — формирование и реконфигурация сети, маршрутизация сообщений.
ЛИТЕРАТУРА
1. Таненбаум Э, Уэзеролл Д. Компьютерные сети. СПб.: Питер, 2012. 960 с.
2. Падалко С.Н., Терентьев М.Н. Автоматизированное проектирование адаптивных дискретных беспроводных сенсорных сетей для космических систем. М.: Изд-во МАИ, 2013. 128 с.
3. IEEE Standards 802.15.4. Wireless medium access control (MAC) and physical layer (PHY) specifications for low-rate wireless personal area networks (LR-WPANs). IEEE Computer Society, 2006. URL: http://standart.ieee.org/getieee802/download/802.15.4-2006.pdf
4. International standard ISO/IEC 7498-1:1994.
URL: http://www.iso.org/iso/catalogue_detail?csnumber=20269
5. Heinzelman W, Chandrakasan А., Balakrishnan H. Energy-efficient communication protocols for wireless microsensor networks // Proc. of the Hawaii International Conference on Systems Sciences. Hawaii, 2000. 10 p.
URL: https://pdos.csail.mit.edu/archive/decouto/papers/heinzelman00.pdf
6. Махорин А.О., Падалко С.Н., Терентьев М.Н. Математическая модель многошлюзовой беспроводной самоорганизующейся сети произвольной топологии в аэрокосмической системе // Вестник компьютерных и информационных технологий. 2015. № 3. С. 28-32. DOI: 10.14489/vkit.2015.03.pp.028-032
Падалко Сергей Николаевич — д-р техн. наук, профессор, заведующий кафедрой «Прикладная информатика» Московского авиационного института (национального исследовательского университета) (Российская Федерация, 125993, Москва, Волоколамское ш., д. 4).
Терентьев Максим Николаевич — канд. техн. наук, доцент, доцент кафедры «Прикладная информатика» Московского авиационного института (национального исследовательского университета) (Российская Федерация, 125993, Москва, Волоколамское ш., д. 4).
Просьба ссылаться на эту статью следующим образом:
Падалко С.Н., Терентьев М.Н. Самоорганизация в древовидных персональных беспроводных сетях при наличии нескольких шлюзов // Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 1. C. 75-85. DOI: 10.18698/0236-3933-2017-1-75-85
SELF-ORGANIZATION IN THE TREE PERSONAL WIRELESS NETWORKS WITH MULTIPLE GATEWAYS
S.N. Padalko M.N. Terentiev
[email protected] [email protected]
Moscow Aviation Institute (National Research University), Moscow, Russian Federation
This article analyzes the self-organization of tree personal Self-organization, self-organizing wireless networks in the presence of one or more gateway wireless network, message routing, nodes. We explain the need for such networks to have an tree topology, multiple gateways ability to self-organize and consider such components of self-organization as the formation of the network, message routing, and network reconfiguration. Moreover, for these components we give the units work algorithms providing the self-organization. Special attention is paid to messages routing
REFERENCES
[1] Tanenbaum A., Wetherall D. Computer networks. New Jersey, Prentice Hall, Inc., 2011.
[2] Padalko S.N., Terentiev M.N. Avtomatizirovannoe proektirovanie adaptivnykh dis-kretnykh besprovodnykh sensornykh setey dlya kosmicheskikh system [Automated engineering of adaptive discrete wireless sensor networks for space systems]. Moscow, MAI Publ., 2013. 128 p.
[3] IEEE Standards 802.15.4. Wireless medium access control (MAC) and physical layer (PHY) specifications for low-rate wireless personal area networks (LR-WPANs). IEEE Computer Society, 2006. Available at: http://standart.ieee.org/getieee802/download/ 802.15.4-2006.pdf
[4] International standard ISO/IEC 7498-1:1994.
Available at: http://www.iso.org/iso/catalogue_detail?csnumber=20269
[5] Heinzelman W., Chandrakasan A., Balakrishnan H. Energy-efficient communication protocols for wireless microsensor networks. Proc. of the Hawaii International Conference on Systems Sciences. Hawaii, 2000. 10 p.
Available at: https://pdos.csail.mit.edu/archive/decouto/papers/heinzelman00.pdf
[6] Makhorin A.O., Padalko S.N., Terentiev M.N. Mathematical model of multi-gateway wireless ad hoc network for aerospace system. Vestnik komp'yuternykh i informatsionnykh tekhnologiy [Herald of Computer and Information Technologies], 2015, no. 3, pp. 28-32 (in Russ.). DOI: 10.14489/vkit.2015.03.pp.028-032
Padalko S.N. — Dr. Sci. (Eng.), Professor, Head of Applied Computer Science Department, Moscow Aviation Institute (National Research University) (Volokolamskoe shosse 4, Moscow, 125993 Russian Federation).
Terentiev M.N. — Cand. Sci. (Eng.), Assoc. Professor of Applied Computer Science Department, Moscow Aviation Institute (National Research University) (Volokolamskoe shosse 4, Moscow, 125993 Russian Federation).
Abstract
Keywords
Самоорганизация в древовидных персональных беспроводных сетях. Please cite this article in English as:
Padalko S.N., Terentiev M.N. Self-Organization in the Tree Personal Wireless Networks with Multiple Gateways. Vestn. Mosk. Gos. Tekh. Univ. im. N.E. Baumana, Priborostr. [Herald of the Bauman Moscow State Tech. Univ., Instrum. Eng.], 2017, no. 1, pp. 75-85. DOI: 10.18698/0236-3933-2017-1-75-85
-
■ТЕХНОЛОГИИ СОВРЕМЕННЫХ БЕСПРОВОДНЫХ СЕТЕЙ Wf-Fi
В Издательстве МГТУ им. Н.Э. Баумана вышло в свет учебное пособие под редакцией A.B. Пролетарского
«Технологии современных беспроводных сетей Wi-Fi»
Изложены основные сведения о современных технологиях беспроводных сетей Wi-Fi и показано поэтапное проектирование беспроводных сетей - от планирования производительности и зоны действия до развертывания и тестирования сети. Подробно рассмотрен стандарт ШЕЕ 802.11, включая управление доступом к среде, а также физический уровень 802.11. Описаны особенности радиочастотного спектра, принципы модуляции, приведены варианты спецификаций 802.11, технологии повышения производительности и механизмы защиты. Подробно рассмотрено подключение клиента к беспроводной сети в инфраструктурном режиме - сканирование, методы аутентификации и ассоциации, а также вопросы безопасности передачи данных в беспроводных сетях (WEP, ТИР, ССМР, WPA, WPA2, WPS). Приведены оценка беспроводной линии связи и пример расчета. Теоретические положения дополнены лабораторными работами по всем рассмотренным в книге темам.
По вопросам приобретения обращайтесь:
105005, Москва, 2-я Бауманская ул., д. 5, стр. 1
+7 (499) 263-60-45
www.baumanpress.ru