Почему-то в последнее время вопросы про ASL перешли в разряд "очень часто задаваемых" К сожалению, как правило ответы в конференциях появляются неправильные. Чтобы поставить точку на теме ASL я написал следующий текст. ЧТО ТАКОЕ ASL И КАК ЕГО ОПОЗНАТЬ [Версия 1.3 от 10-Oct-96] Итак, вопреки распространенному заблуждению, стандартный V.32bis *позволяет* переключать скорости во время сеанса связи, причем как вверх (fallforward), так и вниз (fallback). Ниже описаны подробности. Для начала немного теории. Вот краткое описание стандартной процедуры "V.32bis Rate Re-negotioation". Смена скорости AKA rate re-negotioation AKA fallback/fallforward происходит на V.32bis следующим образом: когда модем хочет изменить скорость, он посылает т.н. preamble (специальный сигнал), по которому второй модем узнает, что надо прекратить обмен данными и перейти к пересогласованию скорости. После этого модемы обмениваются масками скоростей (Rate Signal) примерно следующего вида: <1110000>. Это следует читать как <4800,7200,9600,_,_,_,_> - т.е. желаемые скорости отмечаются в этом битовом поле единицами, а нежелаемые - нулями. Последние два бита в V.32bis зарезервированы, а в AT&T V.32terbo (этот протокол является фирменным развитием V.32bis и построен на его базе) используются для скоростей 16800 и 19200. Множество несущественных подробностей тут сознательно опущено, дабы лучше видна была суть. Обменявшись масками, модемы совершают над ними логическую операцию побитового умножения (AND), и таким образом выбирают максимальную общую скорость. Поскольку pезультаты умножения на обеих сторонах по определению одинаковы, то более никаких согласований делать не нужно и модемы могут смело переходить на новую скорость. На слух процедура V.32bis rate re-negotiation представляет собой кратковременный писк, который можно услышать, если включить звук (ATM2). Обращаю внимание, что всегда устанавливается минимальная из двух скоростей, которые заказывают в свою сторону каждый модем (т.е. максимальная общая, если смотреть по маскам). Нелишне будет сказать, что если по истечении соответствующего таймаута процесс rate re-negotiation по какой-либо причине не завершился, то запрашивается ретрейн (см. ниже). Теперь тонкий вопрос насчет обязательности изменения скорости. Ответ на него такой: любой V32-модем _может_ запрашивать Ff/Fb (но может и не запрашивать!), и _обязан_ отвечать на запросы с удаленной стороны. Применительно к Sportster/Courier это выглядит так: И Sportster, и Courier обязаны отвечать, и отвечают на запросы как Ff, так и Fb на стандартном V32. Насчет самостоятельных запросов интереснее: Courier посылает запросы как на Ff, так и на Fb, а вот Sportster - только на Fb, но это проблемы спортстера, а не протокола! Обращаю внимание, что в классическом документе "Sportster upgrade FAQ" by Robert Agababyan написана полнейшая чушь насчет того, что стандартный протокол не может повышать скорость (хотя для спортстера это и так). Еще один миф - насчет "обязательности fallback, и необязательности fallforward". Как видно из описания, никакой разницы, что делать, вообще нет. Кстати, заранее неизвестно, что получится из переговоров. Может случиться, например, так: работали на 9600, запросили фаллфорвард на 12000, а удаленный модем уже почти решился на запрос фаллбака на 7200, и прислал в ответ на нашу маску <4800,7200,9600,12000,_,_,_> свою <4800,7200,_,_,_,_,_>. В финале, разумеется, будет установлена наибольшая общая скорость 7200. Вопрос на самом деле состоит совсем в другом, а именно в том, насколько корректна и интеллектуальна в модеме программа, ответственная за выбор скорости. Это сложный и нетривиальный вопрос, и он выходит за рамки данного faq. Обращаю внимание лишь на то, что в принципе, для выбора скорости на симметричном протоколе может быть достаточно одного хорошего в этом смысле модема. Впрочем, с двумя ощутимыми поправками: на то, что линия может оказаться несимметричной, а главное - на то, что разные модемы (точнее, их приемники) при прочих равных могут обеспечить разные скорости приема, что определяется качеством сигнальной обработки (эквалайзер, эхоподавитель, etc.) _до_ детектирования состояния сигнала. Это тоже весьма непростой вопрос (кстати, гораздо сложнее первого) и он тоже выходит за рамки faq. Мораль этого абзаца в состоит том, что корректный выбор скорости - это один из залогов качественной связи, ибо как заниженная, так и завышенная скорость приводят к снижению CPS. Помимо Rate Re-negotiation, в V.32 имеется процедура Retrain, которая на слух подобна Start-up (хендшейку). Ретрейн - это переустановка связи по полной программе (как во время первичного хендшейка, только без стадии выяснения максимального общего протокола). Ретрейн - процедура длительная, и перепутать ее с первой довольно сложно. Больше всего времени в ретрейне занимает настройка эхоподавления, речь о котором впереди. Теперь насчет ASL. ASL - это действительно фирменное расширение стандарта V.32, которое включает в себя следующие вещи: 1. В отличие от стандартного V.32bis, ASL допускает асимметричное соединение, т.е. в каждую сторону устанавливается своя скорость. То, какая скорость будет установлена в направлении модема, всецело им и определяется: какую скорость в свою сторону он закажет, ту и выставит для него удаленный передатчик. Принципиальных трудностей с точки зрения модуляции в асимметричном соединении нет, поскольку каналы "туда" и "обратно" полностью независимы. Более того, в документе ITU-T V.32 было следующее примечание: "возможность несимметричного соединения является предметом дальнейшего исследования". В ITU-T V.32bis замечание исчезло (по-видимому, ITU-T решил оставить это до лучших времен, т.е. до V.34), однако инженеры из USR реализовали такое соединение в фирменном протоколе класса V32. Выигрыш от этого потенциально полезного свойства при ближайшем рассмотрении оказывается существенно меньше, чем мог бы быть. Причина этого состоит в том, что "поле деятельности" ASL - это не особенно хорошие линии, где недостаточно просто поднять скорость до 14400, и все. А на таких линиях USR-ы излишне оптимистично задирают скорости, что в финале приводит к снижению CPS из-за разрушения заметной доли кадров V.42 и их переспроса. 2. Сразу после хендшейка устанавливаются скорость 7200 в обоих направлениях (в этот момент это все еще стандартный V32), и лишь потом происходит разгон до максимальной(ых) скорости(ей). Это наиболее полезное в условиях зашумленных линий свойство ASL, поскольку во время хендшейка, сразу после установки протокола модуляции, начинается хендшейк V.42, который физически выглядит как обмен специальными битовыми последовательностями (т.н. шаблонами вызывающего и отвечающего, ODP/ADP-хендшейк). Если из-за оптимистично завышенной скорости эти последовательности пропихнуть безошибочно не удается, то получается /NONE-коннект. А вот спешки никакой нет: хоть на 4800, но надежно. Скорость же может быть повышена и потом... Ваш покорный слуга не раз видел линии, где без этого свойства ASL коннекта с коррекцией на V32 USR-ам установить не удавалось. Во всяком случае, Sportster бодро вязался на 14400/NONE. Справедливости ради следует отметить, что и стандартный V32 допускает трюк, в результате которого можно установить первоначальный коннект на маленькой скорости, а разогнаться потом. Именно это и реализовано в модемах фирмы INPRO. Более того, если для ASL нужно два курьера, то на симметричном стандартном V32 достаточно, чтобы трюк умел делать только один модем - второму (пусть даже это и спортстер) просто будет некуда деваться (если, конечно, у него не съедет крыша и он не откажется впоследствии повышать скорость). Кстати, в инпрошных модемах есть аналогичный по назначению трюк и на V34. 3. Добавлена процедура "быстрый ретрейн", которая отличается от стандартной отсутствием длительной стадии настройки эхоподавления. При этом нормальные, "длинные" ретрейны вовсе не отменяются. Это довольно полезное на зашумленных линиях свойство. Дело в том, что ретрейн в USR запрашивается по следующим причинам: (а) в случае, когда за определенное время V42 не может принять/передать ни одного кадра (по таймауту), первопричин чего может быть много, (б) в случае, когда наблюдается снижение качества приема и DSP рекомендует снижать скорость и (в) при потере синхронизации (при импульсных помехах). Обычный длинный ретрейн во-первых, связан со значительными накладными расходами, и во-вторых, настройка эхоподавления в условиях шумов - не лучшая идея, потому что эти шумы во время настройки будут приняты за эхо, и будут "вычитаться" из сигнала при приеме. Итак, вернемся к причинам ретейнов. Видно, что эхоподавление нужно перенастраивать только в случае (б), т.е. в случае существенного уплывания параметров линии, которое следящие системы скомпенсировать уже не в состоянии. Критерий тут примерно такой: если не очевидно, что надо сразу запросить длинный ретрейн, то запрашивается короткий. Если за несколько коротких восстановить связь не удалось (т.е. перенастройка сигналки все-таки оказалась необходимой), то опять же запрашивается длинный. По моим наблюдениям, если за два коротких ретрейна связь восстановить не удалось, USR всегда запрашивает длинный. На слух короткий ретрейн похож на rate re-negotiation на стандартном V32, т.е. это короткий (меньше секунды) писк-пшик. К сожалению, по словам апгрейдеров и тут не обошлось без ошибки, и некоторые модемы при первом же длинном ретрейне теряют возможность запрашивать короткие ретрейны до конца сеанса связи. 4. В отличие от стандартного V.32, "ASL Rate Re-negotioation" выполнено на уровне протокола коррекции ошибок (V.42), т.е. никакого специального "писка" нет. В V42 добавлено несколько служебных кадров, через которые модемы и запрашивают изменение скорости. По этой причине коннект V32_ASL/NONE принципиально невозможен, в отличие от V32_просто/NONE. Работа через V42 - довольно удачное решение, поскольку уменьшаются накладные расходы на пересогласование скоростей, и не возникает варианта "не удавшихся переговоров", который кончается ретрейном по таймауту (см.выше). Недостатки управления через V.42 являются логическим продолжением достоинств, ибо ничто не достается бесплатно. А именно, для того, чтобы "переговоры" о изменении скорости были успешными, необходимо, чтобы V.42 жил. Если на стандартном V32 rate re-negotiation (через писк) сработает всегда, даже в случае полного затора V.42, ASL будет вынужден запросить ретрейн (занимающий, впрочем, примерно столько же времени, сколько V32 rate re-negotiation). Кроме того, существует классическая иерархия сетевых протоколов и это завязывание в один узел протокола модуляции с протоколом коррекции идеологически является запрещенным приемом. Обсуждение достоинств и недостатков этой идеологии мы оставим в стороне, но главная ее идея - это разграничение полномочий уровней. Вот, собственно, и все... ВНИМАНИЕ! Начитавшись рекламы USR и апгрейдерских FAQ-ов, люди часто ошибочно полагают, что без ASL смена скорости на V32 невозможна. Так вот: это большой успех рекламной политики USR, и стопроцентная туфта, направленная на то, чтобы запутать несведущих и помочь им расстаться с денежками. ВОПРОСЫ И ОТВЕТЫ. ВОПРОС. У меня появился модем USR. Как узнать, есть ли в нем ASL ? ОТВЕТ. Если сделать RTFM путем AT$ ATS$ AT&$, то можно обнаружить, что в регистре S34 есть следующие биты: S34 Bit Mapped 2 = Disable Enhanced V32 mode 4 = Disable Quick V32 retrain Так вот: то, что возле них написано именно это, а не "Reserved" и указывает на наличие ASL в модеме. Заметьте, что у тех спортстеров, которые при помощи волшебной команды превращаются в курьеры, хелп в этом месте меняется. ВОПРОС. Ну хорошо, похоже ASL мой модем поддерживает. Как мне его включить ? ОТВЕТ. Сбросить эти два бита (S34=0)! Обратите внимание, что у спортстера эти биты не сбрасываются. ВОПРОС. Хорошо, сделал S34=0 и позвонил на курьер. Модем по-прежнему пишет CONNECT 14400/ARQ/... так как узнать, что ASL работает ? ОТВЕТ #1 Убедиться, что ASL работает, можно, сказав модему ATi6 сразу после коннекта (или прямо во время коннекта: ~~~+++~~~ati6 ATO). Среди всех параметров, выводимых модемом по ati6, нас интересуют два: Fallback и Speed. При коннекте с ASL в строке Speed пишется две скорости через слэш: "Speed 14400/9600", где первая скорость - это скорость направлении "к нам", вторая - "от нас". "Fallback Enabled" следует переводить с USR-овского английского на русский как "ASL работает" (это не стеб!), поскольку на стандартном V32 там всегда "Disabled", даже когда на самом деле скорости весело переключаются, как вверх, так и вниз, и как по инициативе USR, так и по инициативе удаленного модема. ОТВЕТ #2 Если во время коннекта перевести модем в командный режим (~~~+++~~~), и затем вернуть его в режим передачи данных с ретрейном (ATO1), то можно на слух определить, короткий ретрейн или длинный. Если повторить эту операцию несколько раз, то в конце концов ваш модем запросит длинный ретрейн по причине, описанной выше. [способ Alexey Tikhomirov (2:5020/797.6)] ОТВЕТ #3 Если остались сомнения - можно попытаться определить наличие ASL не по вторичным признакам, как это делалось выше, а проверить работу ASL на практике. Это особенно актуально, если у Вас не работает вывод двух скоростей (9600/14400) по ati6 (см. следующий вопрос). Но это потребует кое-какой сноровки. Также придется найти хорошую линию и обеспечить не бросание трубки на том конце по таймауту (т.е. лучше все-таки делать это со знакомыми или на BBS, чем у IP-провайдеров, где обычно небольшие таймауты на логин). Идея заключается в том, чтобы заставить модемы переключать скорости, и послушать, как они это делают. Техника такая: надо устанавливать хороший коннект на 14400 с курьером, перевести модем в командный режим (~~~+++~~~), и потом следить за скоростью(ями), много раз подряд давая ati6. Последнее можно делать минимум тремя способами: (а) просто ati6 ati6 ati6 много раз, (б) один раз ati6 и потом a/ a/ a/ a/ много раз (a/ - это повтор последней команды, если кто не знает), (в) ati6>, или ati6 a> один раз, (суффикс > означает автоповтор), если это у Вас работает. Теперь начинается самое интересное: надо снять трубку на параллельном телефонном аппарате (от этого щелчка модемы часто ретрейнятся - обязательно дождитесь конца ретрейна!), и _тихо_ подуть в микрофон, глядя при этом на то, что происходит со скоростью и внимательно слушая то, что происходит в линии. Если все делается правильно, и дуете вы тихо, то модемы будут не ретрейниться, а просто снижать скорость (а когда перестаете дуть - то и повышать). Ключевым моментом является то, слышен ли rate re-negotiation. На стандартном V32 это короткий писк, а на ASL его не слышно, т.е. ровное шипение. Rate re-negotiation на стандартном протоколе можно перепутать с короткими ретрейнами на ASL. Проблема решается просто: по ati6 выводится также и счетчики ретрейнов. Если все делается правильно, то они не должны расти. Для сравнения попробуйте позвонить на не-USR, и посмотрите, как все это происходит на стандартном протоколе. При некоторой тренировке за всеми этими источниками информации уследить довольно просто, и я всем любопытным советую попробовать. Тут-то у Вас и наступит ясность на тему того, как все это работает. Рекомендую также следить и за "Blers" и "Blocks resend", это счетчики сбойных кадров в направлении приема/передачи. Пользуясь этой методикой, кстати, можно наблюдать и повышение скорости по запросу удаленного модема на спортстере. ОТВЕТ #4 В строчке коннекта никаких намеков на ASL нет. ВОПРОС. У меня "самоапгреженый" курьер. По всем признакам (хелп по ats$, S34 устанавливается в нуль) ASL в модеме есть но по ati6 он всегда пишет одну скорость. ОТВЕТ. См. ОТВЕТ #3 на предыдущий вопрос. По-видимому, из прошивок этих модемов возможность вывода двух скоростей удалена, не забывайте, что это все-таки бывший спортстер, и никто на USR не тестировал этот модем в режиме ASL. Насколько мне известно (проверьте!) это так на спортстерах весны 93-го и на двухпроцессорных спортстерах Vi. ВОПРОС. Вы тут все толкуете, что ASL есть только на Курьерах. А у меня Sportster 28800 94-го года, и после коннекта на V32 с RC (и любым курьером) он пишет в статистике две скорости, точно так, как вы тут и объясняете. В чем дело ? ОТВЕТ. Дело в том, что эти спортстеры действительно поддерживают ASL. Более того, внутренние Sportster 28800 94-го года были собраны на плате от курьера, и достаточно было просто припаять четыре недостающие детали на заботливо подготовленные места, чтобы сделать из него курьер с флэшем. ВОПРОС. Я что-то не понял: только что прочитал про то, что на ASL скорость первоначального коннекта 7200. Так почему же в строчке коннекта пишется 14400 ? ОТВЕТ. Все верно. USR в строчке коннекта пишут максимальную скорость независимо от текущей. Как наверное уже стало понятно, вывод скорости в строчке коннекта на протоколах старше V.22bis (2400) начисто лишен смысла, поскольку скорость(и) во время сеанса связи постоянно прыгают. А если бы там выводилась "оценка" скорости на момент хендшейка (и никаких гарантий, что в следующую секунду свойства канала не изменятся), то пользователи бы достали службу технической поддержки (а чего это мой модем соединяется то на 7200, то на 14400, то на 9600 ?). Поэтому модем пишет там максимальную скорость, и все довольны. Кроме того, на классном фирменном ASL, за который с человека слупили денег, надо бы всегда писать 7200 (а еще точнее 7200/7200), что заведомо неприемлемо для USR. Да и не надо забывать, что USR разрабатывала модемы для качественных линий, где, скорее всего, устанавливается (оправданно!) именно максимальная скорость, и все получается честно. ВОПРОС. А я наблюдал CONNECT 4800/все/дела, CPS был около 1000, а скорость по ati6 после коннекта 9600. ОТВЕТ #1 Такое может быть на стандартном V32. Есть минимум два ответа на этот вопрос. Во-первых, модемы IDC (инпро) позволяют задавать в регистре S80 скорость первоначального коннекта (повышая вероятность успешного входа в V42 совершенно стандартными средствами V32). При этом удаленный модем (USR) пишет именно CONNECT 4800 (если скорость в IDC зажата на 4800), а потом скорость быстро поднимается (либо по инициативе Курьера, либо - самого IDC, даже при связи со спортстером). В самом IDC есть возможность при этом писать в строчке коннекта прогнозируемую скорость, что (а) более информативно и (б) важно для некоторых программ типа Maximus. Во-вторых, некоторые модемы выдают при Start-up'е (при котором происходит обмен масками, подобный rate re-negotiation) маску, в которой разрешены только те скорости, на которых, по мнению удаленного модема, возможно работать при том SNR, который наблюдался на момент Start-up. Но ведь в дальнейшем линия может не только ухудшиться, но и улучшиться! ОТВЕТ #2 Если же на той стороне USR с ASL, а скорость в строчке коннекта была меньше, чем в статистике коннекта по ati6, то Вам посчастливилось наблюдать чрезвычайно редкое событие. Иногда (крайне редко) такое действительно бывает и на ASL: модем пишет не максимальную скорость, но впоследствии поднимает ее. Способа воспроизвести ситуацию пока не найдено. Лично я видел такое всего пару раз. ВОПРОС. Ну а как понимать, что "при помощи ASL достигается скорость 21600 на V.32terbo" ? Вроде терба - это 19200, а ASL, как я понял из объяснений - способ изменения скорости. Неувязочка получается... ОТВЕТ. Для того, чтобы понять, что кроется за этими словами, придется сначала разобраться с тем, что такое терба. Выше я уже говорил, что в V.32bis rate signal содержит два зарезервированных бита. AT&T в своем фирменном протоколе использовала эти биты для скоростей 16800 и 19200, соответствующим образом дополнив протокол двумя сигнальными созвездиями для новых скоростей. Кроме этого, на новых скоростях введено нелинейное кодирование, которое нужно для повышения помехоустойчивости на линиях с ИКМ (цифровым уплотнением). Спецификации AT&T V.32terbo являются открытыми, поэтому терба поддерживается многими производителями модемов и модемных чипсетов. Теперь насчет USR. USR-терба 21600 - это гибрид AT&T-тербы с ASL, к которому добавлена еще одна скорость 21600 и в котором изменен полином нелинейного кодирования. С точки зрения юзера, это просто V32bis/ASL плюс еще три скорости 16800, 19200 и 21600. Ну а то, что ASL позволяет достичь скорости 21600, надо понимать так: (а) 21600 достижимо лишь на фирменном протоколе ASL, и (б) действительно, скорость с 7200 до 21600 поднимается при помощи ASL. ;-) ВОПРОС. Все это, конечно, замечательно. Ну а что с этого ASL толку ? ОТВЕТ. Хорошо, что вопрос теперь ставится именно так. И все же, польза есть. Я бы выстроил достоинства в следующем порядке. (1) Первоначальный коннект на маленькой скорости резко повышает вероятность успешного прохождения хендшейка V.42. (2) Короткие ретрейны на зашумленной линии, во-первых, отбирают не столь много времени, как длинные, а во-вторых, не приводят к кривой настройке системы эхоподавления. (3) на сильно "полупроводниковой" линии асимметричное соединение может быть весьма полезным. (4) USR 21600-V32T-ASL очень даже неплохо обеспечивает CPS 2400-2450 на хорошей линии, что совсем неплохо для модема класса V.32*. ВОПРОС. Ну почему же нет толку ? Вон, на V.34 соединяется с разными скоростями в разные стороны за милую душу.. ОТВЕТ. Несимметричное соединение является совершенно нормальным для V.34 и оговорено в стандарте. ASL к V.34 не имеет ни малейшего отношения. 22-Sep-1996 (с) Андрей Кувалдин E-mail: andr@kuv.msk.su Fido: 2:5020/234.21 AKA 2:5020/493.21 P.S. Замечания и дополнения будут приняты с благодарностью, адреса выше.