Информационные сети и коммуникации. Учебное пособие
.pdf
Устанавливая ключи командной строки утилиты aplay и arecord, можно конфигурировать различные форматы воспроизведения и записи.
В системах, где вместо ALSA микшер установлен PULSE audio (например, все современные версии UBUNTU), можно воспользоваться программой padsp. При этом в вашей прикладной программе необходимо вести обмен с виртуальным устройством /dev/dsp. В этом случае прямое копирование файла на устройство будет выглядеть как
padsp cp ./test.raw /dev/dsp
Для того чтобы улучшить качество воспроизведения аудиоданных, целесообразно организовать буфер (такой буфер обычно называют Jitter буфер), который будет компенсировать влияние задержек и нарушение порядка следования пакетов.
На компьютере преподавателя функционирует приложение-сервер, которое осуществляет параллельное вещание нескольких потоков данных в различных звуковых форматах (см. рисунок).
Байты 0–3 – признак типа потока. Байты 3–6 – временная метка. Байты 7 – данные.
0 |
1 |
2 |
|
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Т |
и |
п |
|
М |
е |
т |
ка |
Данные |
|
|
Формат пакета
Вещание осуществляется через систему подписки ZMQ и посредством рассылки широковещательных UDP-пакетов.
Реализованы следующие типы аудиопотоков (указаны метки, которые заполняются в пакет):
R08 – 8 бит, моно, 8000 Гц, без сжатия;
Z08 – 8 бит моно 8000 Гц, сжатие LZW;
Z16 – 16 бит моно 8000 Гц, сжатие LZW (Little Endian); R16 – 16 бит, моно, 8000 Гц, без сжатия (Little Endian).
Каждый из потоков представлен в виде подписки ZMQ и в виде широковещательной рассылки.
Сжатие выполняется при помощи библиотеки zlib (методы compress и uncompress). Как уже было сказано выше, первое четырех-
51
байтное слово «пакета» содержит уникальную метку пакета (порядковый номер увеличивается с каждым новым пакетом). При воспроизведении аудиоданных пакета необходимо учитывать данную метку и отбрасывать дублированные пакеты, а также учитывать очередность (в простейшем варианте допускается просто отбрасывать устаревшие пакеты, но для качественного воспроизведения рекомендуется организовать буфер). Временную метку не нужно направлять на устройство «audio» (это не является данными звуковых отсчетов).
Для возможности получения широковещательных UDP-пакетов необходимо установить соответствующую опцию гнезда Socket:
int a = SO_BROADCAST;setsockopt(fd , SOL_SOCKET , a , sizeof(a) );
Вам потребуется:
1)проверить работу аудиосистемы компьютера путем прямого копирования случайного потока в устройство. При этом должен воспроизводиться белый шум;
2)создать файл с текстом программы на Си в любом текстовом редакторе, выполняющем действия в соответствии с вариантом;
3)откомпилироватьпрограмму припомощикомпилятораGNU GCC:
gcc ./yourprog.c -o ./yourprog.bin –lzmq;
4) выполнить отладку программы и запротоколировать сетевой обмен (tcpdump).
В процессе выполнения работы можно пользоваться справкой man <функция>.
Проведите эксперимент с имитацией потери пакетов. Изучите, как сказывается на качестве воспроизведения аудиоданных потеря одного или нескольких пакетов.
Проведите эксперимент с имитацией задержки получения пакетов. Изучите, как сказывается на качестве воспроизведения аудиоданных задержка получения одного или нескольких пакетов.
Сформируйте поток аудиоданных в виде RAW-файла. Сожмите указанный поток при помощи специализированного кодека для сжатия звука SPEEX. Используйте утилиту speexenc, а для декодирования – speexdec. Оцените коэффициент сжатия. Сравните коэффициент сжатия алгоритмом LZW;
Cделайте выводы.
52
ВАРИАНТЫ ЗАДАНИЙ
Вариант 1
Разработать программный модуль на языке Си для получения и воспроизведения аудиоданных потока UDP-пакетов. Воспроизводить поток с меткой RAW.
Вариант 2 |
|
|
|
Разработать |
программный |
модуль на языке Си для |
получения |
и воспроизведения аудиоданных потока ZMQ-подписки. Воспроизво- |
|||
дить поток с меткой RAW. |
|
|
|
Вариант 3 |
|
|
|
Разработать |
программный |
модуль на языке Си для |
получения |
и воспроизведения аудиоданных потока UDP-пакетов. Воспроизводить поток с меткой Z08.
Вариант 4
Разработать программный модуль на языке Си для получения и воспроизведения аудиоданных потока ZMQ-подписки. Воспроизводить поток с меткой Z08.
Вариант 5
Разработать программный модуль на языке Си для получения и воспроизведения аудиоданных потока UDP-пакетов. Воспроизводить поток с меткой Z16.
Вариант 6 |
|
|
|
Разработать |
программный |
модуль на языке Си для |
получения |
и воспроизведения аудиоданных потока ZMQ-подписки. Воспроизво- |
|||
дить поток с меткой Z16. |
|
|
|
Вариант 7 |
|
|
|
Разработать |
программный |
модуль на языке Си для |
получения |
и воспроизведения аудиоданных потока ZMQ-подписки. Воспроизводить поток с меткой Z08. Протоколировать факт пропадания (утери) пакета.
Передайте на проверку преподавателю:
•текст программы на языке Си;
•протоколы обмена данными между клиентом и сервером;
•результаты экспериментов;
•выводы по работе.
53
Компиляцию программы следует производить при помощи компилятора gcc, который обычно входит в базовую поставку операционной системы. Компьютер преподавателя с установленной и запущенной на нем программой, размещенной в приложении, должен быть подключен к сети и находиться в пределах одного физического сегмента с компьютерами студентов. Для выполнения работы потребуются пакеты libzmq-dev liblz-dev. Для работы с аудиопотоками требуется установить утилиту aplay. Воспроизводить аудиопоток можно с помощью наушников, подключенных к аудиокарте компьютера. Возможно потребуется настройка громкости воспроизведения.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Что изменится, если для доставки мультимедиа данных будет использован алгоритм TCP? Какие преимущества и недостатки будут наиболее заметны в этом случае?
2.Почему использование сжатия без потерь не является оптимальным решением для передачи звуковых данных?
3.Чем обусловлен выбор квантования в 0,2 с?
4.Что такое битрейт и как эта величина влияет на качество обмена мультимедиа данными?
54
8.БЛОКЧЕЙН И РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СЕРВИСЫ
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Современный мир все больше зависит от решения сложных вычислительных задач. В условиях, когда вычислительная сложность задач возрастает непропорционально росту доступных вычислительных ресурсов вычислителя, а математическая сущность задачи допускает распараллеливание, может оказаться перспективным разделить задачу на фрагменты, которые могут выполняться независимо, и распределить ее решение по нескольким вычислительным системам. Алгоритмы эффективного распараллеливания математических задач на суперкомпьютерах и многопроцессорных системах – область научного знания, которая находится за рамками нашего курса, посвященного в основном решению технических и коммуникационных задач. В рамках текущего курса мы ознакомимся с некоторыми элементами задачи распределенных сетевых вычислений с целью понять сложность и важность задач
иосновные пути решения возникающих проблем.
Взадаче распределенных вычислений можно выделить несколько основных этапов.
1.Математическая (аналитическая) постановка задачи распараллеливания вычислений.
2.Техническая задача распределения подзадач между вычислительными системами.
3.Организация очереди подзадач, предлагаемых для решения распределенными вычислительными узлами.
4.Объявление сеанса совместных вычислений.
5.Сборка результатов совместных вычислений.
Врамках настоящего занятия в качестве инструмента распределения подзадач для вычисления мы будем использовать модели
Push\Pull, Request\Reply, Publish\Subscribe системы распределенной доставки сообщений ZeroMQ.
Достоинство библиотеки распределенной доставки сообщений состоит в простоте переносимости кода распараллеливания задач между выполнением на одном компьютере (файл-сокеты ZMQ) и сетевой инфраструктурой (сокеты TCP и UDP).
55
Модель push-pull может быть использована как для распределения доставки задач, так и для сборки результатов. В общем случае задача распределения заданий и сборки результатов может быть решена следующим путем (рис. 8.1) [1].
|
|
Исполнитель |
|
|
|
|
|
Сборщик |
|
Постановщик |
|
|
|
|
|
|
|
задач |
|
задач (ventilator) |
|
Исполнитель |
|
|
|
|
|
||
|
|
Исполнитель |
|
|
|
|
|
||
|
|
|
|
|
Рис. 8.1. Распределенные вычисления на Push Pull
Вобщем случае все блоки схемы на рис. 8.1 могут быть как размещены на одном хосте, так и обмениваться данными по сети. Инициатива в данном случае лежит на постановщике задач («Нужно сделать»).
Такая схема автоматизирует процессы распределения и сборки результатов, но обладает некоторыми недостатками и ограничениями.
• Исполнители (workers) должны быть активны на момент распределения задач и готовы для выполнения работы, выполнять ее «ответственно».
• Подключение новых исполнителей в процессе выполнения текущей задачи невозможно (во всяком случае для версии библиотеки ZMQ 4.x, однако разработчики библиотеки zmq работают над решением этой проблемы и обещают реализовать такую возможность в будущих релизах).
• Еще одна возможная проблема кроется в потенциальной некорректной работе отдельного исполнителя (саботаж вычислений). Исполнитель теоретически может заблокировать вычисления своей ноды, если он, обладая готовым к приему сообщений сокетом, не готов выполнять положенную ему работу (рис. 8.2) [3].
Решением указанной проблемы может быть изменение шаблона на
REQ/REP (рис. 8.3).
Вэтой схеме работник декларирует готовность выполнить работу, отправляя req-запрос. Шаблон REQ / REP будет использоваться следующим образом. Работник уведомит мастера (REQ), когда он будет
56
готов выполнить работу. Мастер ответит, поставит задачу, которую нужно выполнить (REP). Когда работа будет выполнена, работник отправит обратно свои результаты (REQ), и мастер отправит подтверждение в качестве благодарственной записки (REP) любое оговоренное сообщение, например, пустую строку. В такой модели инициатива лежит на исполнителе («хочу работать»)
|
|
Исполнитель |
|
|
Постановщик |
|
|
Сборщик задач |
|
|
|
|
||
задач (ventilator) |
|
Исполнитель |
|
(sink) |
|
|
|
|
|
|
|
Исполнитель |
|
|
|
|
|
|
|
Рис. 8.2. Проблема саботажа в модели Push-Pull
Req (хочу работать)
Rep (вот тебе задача)
Исполнитель |
Req (вот мой результат) |
Постановщик задач |
Rep (результат принят)
Рис. 8.3. Распределенные вычисления, построенные на модели REQ\REP
Решение обладает следующими преимуществами:
•количество работников, выполняющих задания, может варьироваться;
•работник забирает свою часть работы, только если он готов ее выполнить.
57
Блокчейн – многосвязный список, где каждая запись связана с предыдущими записями вычисленной хеш-функцией. Для того чтобы усложнить изменение (подделку) предыдущих записей списка, можно использовать вычислительно-затратнуюпроцедуру расчета хеш-подписи.
ПРАКТИЧЕСКАЯ РАБОТА
Предлагается решить задачу подбора хеш-функции (MD5) для поиска решения задачи подписи блока блокчейн с заданной сложностью. Мастер (постановщик задач) предлагает работникам блок информации к подписи (блок блокчейн), размер блока nonce (nonce – number that can only be used once – или «соль» на специализированном сленге ) и диапазон вариаций элементов блока (nonce), который будет разрешено менять исполнителю. Исполнитель перебирает значения блока nonce, и его работа считается выполненной, если результирующая хешфункция будет обладать заданной последовательностью нулей. Все четные бригады выполняют задачу при помощи методов pull\push, все нечетные бригады – при помощи метода request-reply. Все исполнители должны быть подписаны на pub/sub канал по порту 5555 и прекратить выполнение текущего задания, если получат сообщение от сервера с номером task, не соответствующим текущему выполняемому. Это указывает на то, что решение предыдущей задачи было найдено одним из работников и дальнейшие вычисления потеряли свой смысл. После освобождения от текущего задания работник должен встать в очередь за новым заданием.
Формат пакета-задания:
байты 0–4: номер текущего задания (строка, например 00001); байты 5–8: заданная сложность (строка, например 0002); байты 9–13: текущая длина блока блокчейна (например, 00021); байты 14–16: размер соли в байтах(например, 064);
байты 17… ; // блок сообщения блокчейна для обработки: максимальная длина 16 384 символа.
Формат сообщения о текущей решаемой задаче:
байты 0–5: задание, которое решается в текущий момент, напри-
мер, 00003.
Формат сообщения о выполнении задания:
58
байты 0–31: найденный хеш, например, 005ef3a84dc7343651ce5813a7a6703f
байты 32–37: номер решенной задачи, например, 00001 байты 38–48: псевдоним работника, который решил задачу, напри-
мер, 0vasya0000000
байты 49–64: значение nonse, найденной в процессе решения задачи.
Гарантией того, что работодатель (Постановщик задач) принял работу, будет сообщение-объявление в канале PUB-SUB (канал “прораба”) со следующей задачей, объявленной для выполнения.
В канале REQ\REP используются следующие команды:
WRKREC# - запрос текущей задачи READY# - готов к выполнению работы
ANSWER# - отвечаю за выполненную работу.
Предоставьте преподавателю на проверку:
•текст программы на языке Си;
•протоколы обмена данными между клиентом и сервером;
•результаты экспериментов;
•пример элемента блокчейн, который был получен на вашем компьютере;
•выводы по работе.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Модель push/pull, особенности ее применения.
2.Модель request/reply, особенности ее применения.
3.Роль технологий хеширования в блокчейн-алгоритмах.
4.Объясните назначение блока nonce – «number that can only be used once» в блокчейн-цепочках.
5.Задание повышенной сложности. Модифицируйте схему взаимоотношений работник – работодатель, чтобы работник получал вознаграждение за выполненную работу, и предложите ее программную реализацию.
59
ЗАКЛЮЧЕНИЕ
В данном учебном пособии рассмотрены лишь базовые аспекты обмена информацией по сетям с использованием некоторых базовых функций Беркли-сокетов и некоторых библиотек распределенной доставки данных. Может показаться, что выбор языка программирования Си приводит к неоправданно объемному программному коду при реализации рассмотренных задач. Действительно: код на некоторых языках программирования, таких как Пайтон, может оказаться значительно короче за счет того, что многие параметры и настройки останутся скрыты «за кулисами», но это не дает возможности прочувствовать их роль в организации сетевого обмена. Кроме того, язык Си – один из классических языков программирования и его ведущая роль в задачах сетевого обмена не будет изменяться еще продолжительное время. Стоит отметить, что основной акцент представленного учебного пособия сделан именно на долгосрочных тенденциях: на методах и библиотеках, хорошо зарекомендовавших себя в проектах, выполненных автором, и в практических задачах, которые решаются в настоящий момент.
60
