Кіріспе

YMODEM файлдық беру протоколы – модемдер арқылы қосылған микрокомпьютерлер арасында қолданылатын файлдық беру протоколы. Ол негізінен файлдарды бюллетень тақталарына (bulletin board systems) және кері бағытта беру үшін пайдаланылды. YMODEM Чак Форсберг (Chuck Forsberg) тарапынан XMODEM-нің кеңейтілген нұсқасы ретінде әзірленді және алғаш рет оның CP/M YAM бағдарламасында іске асырылды. Бастапқыда YAM деп те аталатын бұл протокол, 1985 жылы түпнұсқа XMODEM авторы Уорд Кристенсен (Ward Christensen) оған «YMODEM» деген атау берді. YMODEM, XMODEM-ді үш жағынан кеңейтті, басқа кеңейтілген XMODEM түрлерінде кездесетін мүмкіндіктерді біріктірді. XMODEM CRC сияқты, YMODEM 8 биттік тексеру сомасын 16 биттік циклдық артықтық тексерумен (CRC) алмастырды, бірақ оны міндетті түзету түрі етіп белгіледі, қосымша опция емес. TeLink-тен файлдың атауын және көлемін жіберуге арналған «блок 0» тақырыбын қосты, бұл бір сеанста бірнеше файлды (топтық беру) жүзеге асыруға және файлдың соңына толтыру қосу қажеттілігін жоюға мүмкіндік берді. Соңында, YMODEM блок көлемін бастапқы 128 байт деректен 1024 байтқа дейін ұлғайтуға мүмкіндік берді, бұл XMODEM 1k-дегідей, жылдам модемдерде өткізу қабілетін едәуір арттырды. Форсберг осы мүмкіндіктердің барлығын орындалу опциялары ретінде стандартқа енгізді, бұл бір протокол драйверіне YAM емес жүйелерге қосылғанда XMODEM CRC немесе тіпті XMODEM-ге қайта оралуға мүмкіндік берді. Ол бағдарламашылардың кез келген платформада осы мүмкіндіктердің мүмкіндігінше көптерін іске асыруға тырысатынына сенді. Бірақ көптеген іске асырылымдардың тек 1k блок көлемін және CRC 16-ны қамтамасыз етіп, «блок 0» мүмкіндігін іске асырмай, YMODEM атауын пайдаланатынын көргенде ол көңіліне күдік келтірді. Нәтижесінде, өзара үйлесімсіз көптеген YMODEM іске асырылымдары пайда болды, ал толық стандартты қолдайтын нұсқаларды нақты көрсету үшін YMODEM Batch атауы қолданыла бастады.

XMODEM

Бастапқы XMODEM өте қарапайым протокол болды және оның сәттілігінің себебі сонда еді; оны сол дәуірдің кез келген машинасына, тіпті процессорлары мен жад сыйымдылығы шектеулі машиналарда да орнатуға болады. Ол жіберілетін деректерді 128 байттық пакеттерге бөліп, 3 байттық бас және 1 байттық тексеру сомасынан тұратын аяқ бөлімін қосып, нәтижеде 132 байттық пакеттерді ретімен жіберетін. Қабылдаушы компьютер 128 байт дерек бойынша тексеру сомасын қайта есептейтін, егер ол аяқ бөлімінде жіберілген тексеру сомасына сәйкес келсе, жауап ретінде бір , ал сәйкес келмесе, жіберетін. Жіберушіге келген кезде келесі пакетті жіберетін, ал келсе соңғы пакетті қайта жіберуге мәжбүр болатын. Протоколде бірнеше мәселелер болды. Қарапайым тексеру сомасын пайдалану кейбір жиі кездесетін қателерге назар аудармауға мүмкіндік берді. Кішкентай пакет мөлшері және немесе күту қажеттілігі жоғары жылдамдықты желілерде немесе үлкен кешігуі бар желілерде өнімділіктің төмендеуіне әкелді. Соңында, файл туралы ешқандай ақпарат болмағандықтан, әрбір файлды қолмен іске қосу қажет болды, бұл көптеген кішкентай файлдарды ауыстырғанда қиындық тудыруы мүмкін. Осы мәселелерді шешу үшін 1980-жылдардың басында жаңа әдістер әзірленді. XMODEM CRC тексеру сомасын 16 биттік циклдық артық кодты тексерумен (CRC) алмастырды, ол жиі кездесетін қателерге қарсы әлдеқайда төзімді болды. XMODEM 1k пакет мөлшерін 128 байттан 1024 байтқа дейін ұлғайтты, бұл жоғары жылдамдықты қосылымдарда өнімділікті жақсартты, ал WXMODEM және SEAlink сияқты басқалары өнімділік пен кешігумен күресу үшін жылдам терезе жүйелерін енгізді, бірақ бұл кейбір күрделіліктерге әкелді. TeLink және MODEM7 сияқты тағы да басқалары файл туралы ақпаратты қосты, соның арқасында бір жіберуде бірнеше файлдарды жіберуге болады, бұл файлдардың партияларын бір командамен жіберуге мүмкіндік берді.

YMODEM

Чак Форсберг, CP/M "Yet Another Modem program" немесе YAM бағдарламасының авторы, XMODEM-нен гөрі көп мүмкіндіктерді қолдайтын жалғыз протоколдық драйвер жазуды шешті және оны YMODEM деп атады. Пайдаланушылар деректерді жіберуді бастағанда, командалық жолда қандай опцияларды пайдаланғысы келетінін көрсете алатын, мысалы, CRC қолдануды қалауларын білдіре алатын. Протокол осылай жұмыс істеуге тырысады, бірақ қашықтағы бағдарламалық қамтамасының мүмкіндіктеріне сәйкес келмесе, автоматты түрде оларға бейімделеді.

Құртып тастау

Бастапқы XMODEM-нің бір мәселесі – басталғаннан кейін деректерді жіберуді тоқтатудың анықталған тәсілі болмады. Әдеттегі шешім – пайдаланушы сұраған жағдайда, әрбір келесі пакетке 's' әрпін жіберу болып табылды. XMODEM протоколы жіберуді тоқтату үшін он 's' әрпіне шектеу қойғандықтан және әрбір пакетті жіберуге бір секунд уақыт кеткендіктен, жіберуші тоқтатылып, назарда ұсталмайтын деректерді жіберіп отыруға он секунд кеткен. Кейбір жүзеге асырулар алынған пакеттің соңында абортты көрсету үшін 'a' әрпін 's' немесе ' ' әрпінің орнына жіберу мүмкіндігін қосты. Алайда, 'a' әрпі желідегі шудың салдарынан пайда болып, тоқтатуды тудыруы мүмкін еді. Сондықтан YAM осыны сәл өзгертті, екі 's' әрпін қатарынан жіберуді талап етті, бұл жіберуші жағында дереу "жағымды тоқтатуды" іске қосады.

КҚК

XMODEM CRC-де CRC қолдауы енгізілді. Бұл бастапқы протоколға өте қарапайым өзгерту болды; егер қабылдаушы сұраса, беруді бастау үшін перне орнына бастапқы жіберу арқылы көтеріледі. Егер қашықтағы жіберуші CRC опциясын қолдаса, ол әдеттегідей пакеттерді жібере бастайды, бірақ 1 байттық тексеру сомасының орнына 16 биттік CRC аяғында болады. YAM бұл опцияны ешқандай өзгеріссіз қолдады.

1 мың

XMODEM 1k нұсқасында 1024 байттық пакеттер енгізілді. Бұл нұсқа қабылдағыштан келетін триггерлік белгіні өзгерте қоймады, сондықтан жіберушіге қабылдағыш үлкен пакеттерді қолдайтынын білу мүмкін болмады. Оның орнына, XMODEM 1k қосылымның екі жағында да дербес протокол ретінде ұсынылды. Осындай қосылыс басталғанда, жіберуші пакетте 1024 байт немесе 128 байт жіберуді таңдай алатын, үлкенін қалыпты белгіден өзгеше белгімен көрсету арқылы анықтайтын. Көбінесе, үлкен мөлшерде бос орынды жібермеу үшін соңғы бірнеше пакеттер ғана кіші пакеттерді пайдаланатын. 1k барлық қосылыстар үшін CRC қолданылатынын да қарастырды. YAM 1k нұсқасын өзгеріссіз қолдады.

Нөлдік пакет

FidoNet поштасының автоматтандырылған жіберілуін қолдау үшін MODEM7 файл атауын алғашқы дерек блогын жіберуден бұрын қарапайым мәтін түрінде жіберу мүмкіндігін қосты. Бұл сенімді болмады, ал TeLink файл атауын және құрылған күні мен файл ұзындығы сияқты қосымша деректерді 128 байттық толық пакетке орналастыру арқылы оны жақсартты. XMODEM деректерді бірінші пакетпен бастады, сондықтан TeLink осы пакетті нөлдік нөмірмен жіберді. Бұл «нөлдік пакет» немесе «нөлдік блок» SEAlink және басқа FidoNet жүйелерінде кеңінен таралды. YAM нөлдік пакет форматын қолдады, бірақ YMODEM-нің көптеген үшінші тараптық нұсқалары оны елемеді. Егер бір нұсқа нөлдік пакетті білмейтін нұсқаға жіберуге тырысса, қабылдаушы пакетті қабылдамайды, өйткені нөлдік пакет заңсыз. Жіберуші бұл қатені тарату қатесі ретінде көріп, пакетті қайта жіберуге тырысады, сәтсіздікке ұшырағанға дейін он рет қайталап бақылайды. YMODEM-нің көптеген нұсқалары осы мүмкіндікті іске аспағанының нақты себептері толыққанды белгілі емес. Олар осы мүмкіндікті білмегендіктен, қайта жіберу әрекеттерін тудыратын пакетті жіберді. Бұл егер пайдаланушы сәйкес YMODEM-ді сәйкес келмейтін нұсқамен қолданса, жіберілім сәтсіз аяқталады дегенді білдірді. Дегенмен, мұндай сәйкес келмейтін нұсқалар көп кездесетін. Осының салдарынан YMODEM және YMODEM Batch екі бөлек протокол ретінде көрсетілуі әдеттегі жағдай болды. XMODEM 1k пен осы сәйкес келмейтін YMODEM-дер арасындағы ұқсастық қосымша шатастыру тудырды, олар көбінесе бірдей деп қате көрсетілді.

Ағызатын бағдарламаны қолдау

YMODEM G – қатесіз қосылымдар үшін қолданылатын ағынды нұсқа. Ол келесі пакетті жіберу үшін ACK күтіп отырмайды. Протокол YMODEM-нен жылдам, себебі пакеттер арасында кідіріс тудырылмайды, бірақ қателерді түзету мүмкіндігі жоқ. Ол негізгі қосылыстың қатесіз болуына тәуелді, мысалы, MNP қолдаған модемдердегідей. Әдетте, YMODEM беруді қабылдаушы CRC-мен 128 байттық форматты пайдалануды көрсету үшін немесе бастапқы тексеру сомасы жүйесін пайдалануды қаласа жібереді. g протоколы қажет болғанда, жіберу оның орнына арқылы басталады. Егер жіберуші g протоколын қолдамаса, ол бұл қате деп санайды және оны елемейді, бірақ g қолдаса, пакеттерді үздіріліссіз ағынмен жібере бастайды. Ол соңғы пакет алынғаннан кейін ғана бір күтеді, бұл деректе таңбаның болуымен белгіленеді. YMODEM g 1000 пакет қолдауға болатынын болжайды. Дегенмен, бұл протокол ZMODEM-нен жылдам болғанымен, оны сирек қолданды. Бұл, бір жағынан, басқа функционалдық мүмкіндіктердің жетіспеуіне, екінші жағынан, одан да маңызды мәселеге байланысты. 16550 UART пайда болғанға дейін, тізбектік портта буфердің толып кетуіне елеулі қауіп бар еді. Бұл YMODEM g арқылы анықталғанымен, түзету мүмкін болмады, себебі блоктарды қайта жіберуге болмайды. Қабылдаушы бүкіл беруді бастапқыдан қайта іске қосуға мәжбүр болар еді. ZMODEM-нің кері қайтару мүмкіндігі бар, бұл оны тартымдырақ етеді.