По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Дорогой читатель! В поисках полезной автоматизации и кастомизации своего Asterisk продвинутые администраторы прибегают к использованию различных скриптов. Это может быть PHP, Perl C, Pascal или Shell. Для использования скриптов, написанных на одном из перечисленных языков программирования в диалплане Asterisk используется AGI (Asterisk Gateway Interface) – о нем и поговорим. Как это работает? AGI - это прослойка между скриптом и диалпланом (планом набора) в Asterisk. В скрипт мы можем передавать различные переменные, а можем получать какие - то значения из скрипта. Когда Asterisk инициирует запуск скрипта через AGI, он передает в него набор переменных. Все переменные обладают префиксом agi_: Переменная Описание Пример agi_request Имя файла исполняемого скрипта trunk.php agi_channel Канал, инициирующий звонок Local/89123456789@from-internal-00000002;2 agi_language Языковой код en agi_type Тип канала, инициирующий вызов Local agi_uniqueid Уникальный идентификатор звонка 1497364935.15 agi_version Версия Asterisk 13.10.0 agi_callerid Номер звонящего (CID Number) 89123456789 agi_calleridname Имя звонящего (CID Name) 89123456789 agi_dnid Набранный номер unknown agi_context Контекст обработки вызова macro-dialout-trunk Как вызвать AGI в диалплане? Вызвать AGI скрипт очень просто: предварительно, загрузите скрипт в директорию /var/lib/asterisk/agi-bin/. После этого, скрипту необходимо дать права и собственника. Предположим, наш скрипт называется trunk.php: chmod 755 /var/lib/asterisk/agi-bin/trunk.php chown asterisk:asterisk /var/lib/asterisk/agi-bin/trunk.php Теперь, чтобы скрипт был вызван в диалплане, просто добавьте следующую конструкцию: exten => 1333,n,AGI(trunk.php) Просто, не правда ли? А если мы хотим передать переменную в скрипт? Просто добавьте ее после запятой: exten => 1333,n,AGI(trunk.php, ${CALLERID(number)}) А как же написать скрипт? Теперь к самому скрипту – напишем его на PHP. Пусть нам нужно отправлять письмо с номером звонящего. Выглядеть скрипт будет так: #!/usr/bin/php -q <?php require('phpagi.php'); $agi = new AGI(); //подключаем файл phpagi.php – 1 и 2 строки обязательны в любом скрипте $cid = $agi->request['agi_callerid']; // берем из AGI номер звонящего mail("info@merionet.ru", 'Привет!', 'Вот и номер звонящего:', $cid); //отправляем в письме Вот и все. Нам будет приходить на почту письмо с номером звонящего – прокачав данный функционал можно отслеживать пропущенные вызовы, например.
img
Первая часть тут. В конце 1980—х в мире сетевой инженерии появилась новая тема для обсуждения-асинхронный режим передачи данных (ATM). Потребность в более скоростных схемах в сочетании с медленным развитием в коммутации пакетов персонально на основе их адресов назначения привела к толчку к новому виду передачи, который, в конечном счете, реконфигурировал бы весь набор (или стек, потому что каждый протокол образует слой поверх протокола ниже, как «слоёный пирог») протоколов, используемых в современных сетях. ATM объединил размер ячейки (или пакета) с фиксированной длиной коммутации каналов с заголовком из коммутации пакетов (хотя и значительно упрощенным), чтобы произвести «промежуточное» технологическое решение. Было два ключевых момента для ATM: label switching и fixed call sizes; рисунок 1 иллюстрирует первый вариант. На рис. 1 G отправляет пакет, предназначенный для H. При получении этого пакета A проверяет локальную таблицу и обнаруживает, что следующий переход к H — это C. Локальная таблица A также указывает метку, показанную как L, а не «просто» информацию о том, куда переслать пакет. A вставляет эту метку в специальное поле в начале пакета и пересылает ее в C. Когда C получает пакет, ему не нужно читать адрес назначения в заголовке, скорее, он просто читает метку, которая является коротким полем фиксированной длины. Метка просматривается в локальной таблице, которая сообщает C переадресовать трафик в D для назначения H. Метка очень мала и поэтому легко обрабатывается для устройств пересылки, что делает переключение намного быстрее. В некотором смысле метка также может «содержать» информацию для обработки пакета. Например, если на самом деле существует два потока трафика между G и H, каждому из них может быть назначена своя метка (или набор меток) через сеть. Пакеты, несущие одну метку, могут иметь приоритет над пакетами, несущими другую метку, поэтому сетевым устройствам не нужно просматривать какие-либо поля в заголовке, чтобы определить, как обрабатывать конкретный пакет. Это можно рассматривать как компромисс между коммутацией пакетов и коммутацией каналов. В то время как каждый пакет все еще пересылается hop by hop, виртуальный канал также может быть определен путем метки через сеть. Второй момент заключался в том, что ATM также был основан на ячейке фиксированного размера: каждый пакет был ограничен 53 октетами информации. Ячейки фиксированного размера могут показаться незначительной проблемой, но пакеты фиксированного размера могут иметь огромное значение для производительности. Рисунок 2 иллюстрирует некоторые факторы, связанные с фиксированными размерами ячеек. На рисунке 2 пакет 1 (A1) копируется из сети в память на сетевой карте или интерфейсе LC1; затем он проходит через внутреннюю структуру внутри B (между ячейками памяти) к LC2, и, наконец, возвращается в сеть на исходящем интерфейсе B. На такой диаграмме это может показаться тривиальным, но, пожалуй, наиболее важным фактором скорости, с которой устройство может переключать / обрабатывать пакеты, является время, необходимое для копирования пакета по любым внутренним путям между ячейками памяти. Процесс копирования информации из одного места в памяти в другое является одной из самых медленных операций, которые может выполнять устройство, особенно на старых процессорах. Создание одинакового пакета (фиксированный размер ячейки) позволило оптимизировать код во время процесса копирования, что значительно увеличило скорость переключения. Путь пакета 2 через B еще хуже с точки зрения производительности; сначала он копируется из сети в локальную память. Когда порт назначения определяется путем поиска в локальной таблице пересылки, код, обрабатывающий пакет, понимает, что пакет должен быть фрагментирован, чтобы соответствовать наибольшему размеру пакета, разрешенному на исходящем канале [B,C]. Карта входящей линии, LC1, фрагментирует пакет на A1 и A2, создавая второй заголовок и корректируя любые значения в заголовке по мере необходимости. Пакет делится на два пакета, А1 и А2. Эти два пакета копируются в двух операциях через матрицу на исходящую сетевую карту LC2. Используя ячейки фиксированного размера, ATM избегает затрат на производительность фрагментации пакетов (в то время, когда предлагалась ATM), понесенных почти любой другой системой коммутации пакетов. ATM, на самом деле, не начинался в ядре сети и не прокладывал свой путь к краю сети. А почему бы и нет? Первый ответ заключается в довольно странном выборе размера ячейки. Почему 53 октета? Ответ прост-и, возможно, немного поразителен. АТМ должна была заменить не только сети с коммутацией пакетов, но и тогдашнее поколение голосовых сетей, основанных на технологиях коммутации каналов. Объединяя эти две технологии, провайдеры могли бы предлагать оба вида услуг на одном наборе схем и устройств. Какой объем информации или размер пакета идеально подходит для передачи голосового трафика? Около 48 октетов. Какой объем информации или размер пакета является минимумом, который имеет какой-либо смысл для передачи данных? Около 64 октетов. Пятьдесят три октета были выбраны в качестве компромисса между этими двумя размерами; это не было бы идеально для передачи голоса, так как 5 октетов каждой ячейки, несущей голос, были бы потрачены впустую. Это не было бы идеально для трафика данных, потому что самый распространенный размер пакета, 64 октета, должен был бы быть разделен на две ячейки для переноса через сеть ATM. Общим мнением во время проведения этих обсуждений было то, что протоколы передачи данных могли бы адаптироваться к немного меньшему размеру ячейки, что делает 53 октета оптимальным размером для поддержки широкого спектра трафика. Протоколы передачи данных, однако, не изменились. Для переноса 64-октетного блока данных одна ячейка будет содержать 53 октета, а вторая - 9 октетов с 42 октетами свободного пространства. Провайдеры обнаружили 50% или более доступной пропускной способности на каналах ATM использовались пустые ячейки, что фактически приводило к потере пропускной способности. Следовательно, поставщики данных прекратили развертывание ATM, поставщики голосовой связи так и не начали его развертывание, и ATM умер. Что интересно, так это то, как наследие таких проектов, как ATM, живет в других протоколах и идеях. Концепция переключения меток была подхвачена Yakov Rekhter и другими инженерами и превращена в переключение меток. Это сохраняет многие фундаментальные преимущества быстрого поиска ATM на пути пересылки и объединения метаданных об обработке пакетов в саму метку. Коммутация по меткам в конечном итоге стала Multiprotocol Label Switching (MPLS), которая не только обеспечивает более быстрый поиск, но также стеки меток и виртуализацию. Таким образом, была взята и расширена основная идея, которая существенно повлияла на современные сетевые протоколы и конструкции. Вторым наследием ATM является фиксированный размер ячейки. В течение многих лет доминирующий сетевой транспортный пакет, основанный на TCP и IP, позволял сетевым устройствам фрагментировать пакеты при их пересылке. Однако это хорошо известный способ снижения производительности сети. Бит «не фрагментировать» был добавлен в заголовок IP, сообщая сетевым устройствам о необходимости отбрасывать пакеты, а не фрагментировать их, и были предприняты серьезные усилия для обнаружения самого большого пакета, который может передаваться по сети между любой парой устройств. Новое поколение IP, названное IPv6, удалило фрагментацию сетевыми устройствами из спецификации протокола. Третья часть тут.
img
Девятая часть тут. Ни одна среда передачи данных не может считаться совершенной. Если среда передачи является общей, как радиочастота (RF), существует возможность возникновения помех или даже столкновений дейтаграмм. Это когда несколько отправителей пытаются передать информацию одновременно. Результатом является искаженное сообщение, которое не может быть понято предполагаемым получателем. Даже специализированная среда, такая как подводный оптический кабель типа point-to-point (световолновой), может испытывать ошибки из—за деградации кабеля или точечных событий-даже, казалось бы, безумных событий, таких как солнечные вспышки, вызывающие излучение, которое, в свою очередь, мешает передаче данных по медному кабелю. Существует два ключевых вопроса, на которые сетевой транспорт должен ответить в области ошибок: Как можно обнаружить ошибки при передаче данных? Что должна делать сеть с ошибками при передаче данных? Далее рассматриваются некоторые из возможных ответов на эти вопросы. Обнаружение ошибок Первый шаг в работе с ошибками, независимо от того, вызваны ли они отказом носителя передачи, повреждением памяти в коммутационном устройстве вдоль пути или любой другой причиной, заключается в обнаружении ошибки. Проблема, конечно, в том, что когда получатель изучает данные, которые он получает, нет ничего, с чем можно было бы сравнить эти данные, чтобы обнаружить ошибку. Проверка четности — это самый простой механизм обнаружения. Существуют два взаимодополняющих алгоритма проверки четности. При четной проверке четности к каждому блоку данных добавляется один дополнительный бит. Если сумма битов в блоке данных четная—то есть если в блоке данных имеется четное число битов 1, то дополнительный бит устанавливается равным 0. Это сохраняет четное состояние четности блока. Если сумма битов нечетна, то дополнительный бит устанавливается равным 1, что переводит весь блок в состояние четной четности. Нечетная четность использует ту же самую дополнительную битную стратегию, но она требует, чтобы блок имел нечетную четность (нечетное число 1 бит). В качестве примера вычислите четную и нечетную четность для этих четырех октетов данных: 00110011 00111000 00110101 00110001 Простой подсчет цифр показывает, что в этих данных есть 14 «1» и 18 «0». Чтобы обеспечить обнаружение ошибок с помощью проверки четности, вы добавляете один бит к данным, либо делая общее число «1» в недавно увеличенном наборе битов четным для четной четности, либо нечетным для нечетной четности. Например, если вы хотите добавить четный бит четности в этом случае, дополнительный бит должен быть установлен в «0». Это происходит потому, что число «1» уже является четным числом. Установка дополнительного бита четности на «0» не добавит еще один «1» и, следовательно, не изменит, является ли общее число «1» четным или нечетным. Таким образом, для четной четности конечный набор битов равен: 00110011 00111000 00110101 00110001 0 С другой стороны, если вы хотите добавить один бит нечетной четности к этому набору битов, вам нужно будет сделать дополнительный бит четности «1», так что теперь есть 15 «1», а не 14. Для нечетной четности конечный набор битов равен: 00110011 00111000 00110101 00110001 1 Чтобы проверить, были ли данные повреждены или изменены при передаче, получатель может просто отметить, используется ли четная или нечетная четность, добавить число «1» и отбросить бит четности. Если число «1» не соответствует используемому виду четности (четное или нечетное), данные повреждены; в противном случае данные кажутся такими же, как и первоначально переданные. Этот новый бит, конечно, передается вместе с оригинальными битами. Что произойдет, если сам бит четности каким-то образом поврежден? Это на самом деле нормально - предположим, что даже проверка четности на месте, и передатчик посылает 00110011 00111000 00110101 00110001 0 Приемник, однако, получает 00110011 00111000 00110101 00110001 1 Сам бит четности был изменен с 0 на 1. Приемник будет считать «1», определяя, что их 15. Поскольку даже проверка четности используется, полученные данные будут помечены как имеющие ошибку, даже если это не так. Проверка на четность потенциально слишком чувствительна к сбоям, но в случае обнаружения ошибок лучше ошибиться в начале. Есть одна проблема с проверкой четности: она может обнаружить только один бит в передаваемом сигнале. Например, если даже четность используется, и передатчик отправляет 00110011 00111000 00110101 00110001 0 Приемник, однако, получает 00110010 00111000 00110101 00110000 0 Приемник подсчитает число «1» и обнаружит, что оно равно 12. Поскольку система использует четную четность, приемник будет считать данные правильными и обработает их в обычном режиме. Однако оба бита, выделенные жирным шрифтом, были повреждены. Если изменяется четное число битов в любой комбинации, проверка четности не может обнаружить изменение; только когда изменение включает нечетное число битов, проверка четности может обнаружить изменение данных. Циклическая проверка избыточности (Cyclic Redundancy Check - CRC) может обнаруживать более широкий диапазон изменений в передаваемых данных, используя деление (а не сложение) в циклах по всему набору данных, по одной небольшой части за раз. Работа с примером - лучший способ понять, как рассчитывается CRC. Расчет CRC начинается с полинома, как показано на рисунке 1. На рис. 1 трехчленный многочлен x3 + x2 + 1 расширен, чтобы включить все члены, включая члены, предшествующие 0 (и, следовательно, не влияют на результат вычисления независимо от значения x). Затем эти четыре коэффициента используются в качестве двоичного калькулятора, который будет использоваться для вычисления CRC. Чтобы выполнить CRC, начните с исходного двоичного набора данных и добавьте три дополнительных бита (поскольку исходный полином без коэффициентов имеет три члена; следовательно, это называется трехбитной проверкой CRC), как показано здесь: 10110011 00111001 (оригинальные данные) 10110011 00111001 000 (с добавленными битами CRC) Эти три бита необходимы для обеспечения того, чтобы все биты в исходных данных были включены в CRC; поскольку CRC перемещается слева направо по исходным данным, последние биты в исходных данных будут включены только в том случае, если эти заполняющие биты включены. Теперь начните с четырех битов слева (потому что четыре коэффициента представлены в виде четырех битов). Используйте операцию Exclusive OR (XOR) для сравнения крайних левых битов с битами CRC и сохраните результат, как показано здесь: 10110011 00111001 000 (дополненные данные) 1101 (Контрольные биты CRC) ---- 01100011 00111001 000 (результат XOR) XOR'инг двух двоичных цифр приводит к 0, если эти две цифры совпадают, и 1, если они не совпадают. Контрольные биты, называемые делителем, перемещаются на один бит вправо (некоторые шаги здесь можно пропустить), и операция повторяется до тех пор, пока не будет достигнут конец числа: 10110011 00111001 000 1101 01100011 00111001 000 1101 00001011 00111001 000 1101 00000110 00111001 000 110 1 00000000 10111001 000 1101 00000000 01101001 000 1101 00000000 00000001 000 1 101 00000000 00000000 101 CRC находится в последних трех битах, которые были первоначально добавлены в качестве заполнения; это "остаток" процесса разделения перемещения по исходным данным плюс исходное заполнение. Получателю несложно определить, были ли данные изменены, оставив биты CRC на месте (в данном случае 101) и используя исходный делитель поперек данных, как показано здесь: 10110011 00111001 101 1101 01100011 00111001 101 1101 00001011 00111001 101 1101 00000110 00111001 101 110 1 00000000 10111001 101 1101 00000000 01101001 101 1101 00000000 00000001 101 1 101 00000000 00000000 000 Если данные не были изменены, то результат этой операции всегда должен быть равен 0. Если бит был изменен, результат не будет равен 0, как показано здесь: 10110011 00111000 000 1101 01100011 00111000 000 1101 00001011 00111000 000 1101 00000110 00111000 000 110 1 00000000 10111000 000 1101 00000000 01101000 000 1101 00000000 00000000 000 1 101 00000000 00000001 000 CRC может показаться сложной операцией, но она играет на сильных сторонах компьютера—бинарных операциях конечной длины. Если длина CRC задается такой же, как у стандартного небольшого регистра в обычных процессорах, скажем, восемь бит, вычисление CRC-это довольно простой и быстрый процесс. Проверка CRC имеет то преимущество, что она устойчива к многобитовым изменениям, в отличие от проверки четности, описанной ранее. Исправление ошибок Однако обнаружение ошибки — это только половина проблемы. Как только ошибка обнаружена, что должна делать транспортная система? Есть, по существу, три варианта. Транспортная система может просто выбросить данные. В этом случае транспорт фактически переносит ответственность за ошибки на протоколы более высокого уровня или, возможно, само приложение. Поскольку некоторым приложениям может потребоваться полный набор данных без ошибок (например, система передачи файлов или финансовая транзакция), у них, вероятно, будет какой-то способ обнаружить любые пропущенные данные и повторно передать их. Приложения, которые не заботятся о небольших объемах отсутствующих данных (например, о голосовом потоке), могут просто игнорировать отсутствующие данные, восстанавливая информацию в приемнике, насколько это возможно, с учетом отсутствующей информации. Транспортная система может подать сигнал передатчику, что произошла ошибка, и позволить передатчику решить, что делать с этой информацией (как правило, данные при ошибке будут повторно переданы). Транспортная система может выйти за рамки отбрасывания данных, включив достаточное количество информации в исходную передачу, определить, где находится ошибка, и попытаться исправить ее. Это называется Прямой коррекцией ошибок (Forward Error Correction - FEC). Коды Хэмминга, один из первых разработанных механизмов FEC, также является одним из самых простых для объяснения. Код Хэмминга лучше всего объяснить на примере - для иллюстрации будет использована таблица 1. В Таблице № 1: Каждый бит в 12-битном пространстве, представляющий собой степень двух (1, 2, 4, 6, 8 и т. д.) и первый бит, устанавливается в качестве битов четности. 8-битное число, которое должно быть защищено с помощью FEC, 10110011, распределено по оставшимся битам в 12-битном пространстве. Каждый бит четности устанавливается равным 0, а затем четность вычисляется для каждого бита четности путем добавления числа «1» в позиции, где двоичный бит имеет тот же бит, что и бит четности. В частности: P1 имеет набор крайних правых битов в своем битовом номере; другие биты в числовом пространстве, которые также имеют набор крайних правых битов, включены в расчет четности (см. вторую строку таблицы, чтобы найти все позиции битов в номере с набором крайних правых битов). Они указаны в таблице с X в строке P1. Общее число «1»-нечетное число, 3, поэтому бит P1 устанавливается равным 1 (в этом примере используется четная четность). P2 имеет второй бит из правого набора; другие биты в числовом пространстве, которые имеют второй из правого набора битов, включены в расчет четности, как указано с помощью X в строке P2 таблицы. Общее число «1»-четное число, 4, поэтому бит P2 установлен в 0. P4 имеет третий бит из правого набора, поэтому другие биты, которые имеют третий бит из правого набора, имеют свои номера позиций, как указано с помощью X в строке P3. В отмеченных столбцах есть нечетное число «1», поэтому бит четности P4 установлен на 1. Чтобы определить, изменилась ли какая-либо информация, получатель может проверить биты четности таким же образом, как их вычислял отправитель; общее число 1s в любом наборе должно быть четным числом, включая бит четности. Если один из битов данных был перевернут, приемник никогда не должен найти ни одной ошибки четности, потому что каждая из битовых позиций в данных покрыта несколькими битами четности. Чтобы определить, какой бит данных является неправильным, приемник добавляет позиции битов четности, которые находятся в ошибке; результатом является положение бита, которое было перевернуто. Например, если бит в позиции 9, который является пятым битом данных, перевернут, то биты четности P1 и P8 будут ошибочными. В этом случае 8 + 1 = 9, так что бит в позиции 9 находится в ошибке, и его переворачивание исправит данные. Если один бит четности находится в ошибке—например, P1 или P8—то это тот бит четности, который был перевернут, и сами данные верны. В то время как код Хэмминга гениален, есть много битовых шаблонов-перевертышей, которые он не может обнаружить. Более современный код, такой как Reed-Solomon, может обнаруживать и исправлять более широкий диапазон условий ошибки, добавляя меньше дополнительной информации в поток данных. Существует большое количество различных видов CRC и кодов исправления ошибок, используемых во всем мире связи. Проверки CRC классифицируются по количеству битов, используемых в проверке (количество битов заполнения или, точнее, длины полинома), а в некоторых случаях - по конкретному применению. Например, универсальная последовательная шина использует 5-битный CRC (CRC-5-USB); Глобальная система мобильной связи (GSM), широко используемый стандарт сотовой связи, использует CRC-3-GSM; Мультидоступ с кодовым разделением каналов (CDMA), другой широко используемый стандарт сотовой связи, использует CRC-6-CDMA2000A, CRC-6-CDMA2000B и CRC-30; и некоторые автомобильные сети (CAN), используемые для соединения различных компонентов в автомобиле, используют CRC-17-CAN и CRC-21-CAN. Некоторые из этих различных функций CRC являются не единственной функцией, а скорее классом или семейством функций со многими различными кодами и опциями внутри них.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59