Кіріспе

Файл беру протоколы

XMODEM – Уорд Кристенсеннің 1977 жылғы MODEM бағдарламасында пайдалану үшін шапшаң түрде жасаған қарапайым файл беру протоколы. ASM терминалды бағдарламасы. Ол пайдаланушыларға екі жақ та MODEM қолданғанда компьютерлері арасында файлдарды жіберуге мүмкіндік берді. Кит Петерсен "жай режимді" әрдайым қосу үшін шағын жаңарту жасады және нәтижені XMODEM деп атады. XMODEM, көптеген файл беру протоколдары сияқты, бастапқы деректерді қабылдаушыға жіберілетін "пакеттер" тізбегіне бөледі, сонымен қатар қабылдаушыға осы пакет дұрыс алынғанын анықтауға көмектесетін қосымша ақпаратпен бірге. Егер қате анықталса, қабылдаушы пакетті қайта жіберуді сұрайды. Қате пакеттер тізбегі беруді тоқтатуға себеп болады. XMODEM алғашқы электрондық бюллетень тақтасы (BBS) нарығында өте танымал болды, себебі оны іске асыру оңай болды. Сонымен қатар ол тиімді емес еді, және модемнің жылдамдығы артқан сайын, бұл мәселе протоколдың өнімділігін жақсарту немесе басқа проблемаларын шешу үшін XMODEM-нің бірнеше өзгертілген нұсқаларын жасауға әкелді. Кристенсен өзінің бастапқы XMODEM-ін "компьютер тарихындағы ең көп өзгертілген бағдарлама" деп санайды. Чак Форсберг өзінің YMODEM протоколына көптеген жалпы өзгерістерді жинады, бірақ нашар іске асыру олардың кейіннен ZMODEM протоколымен қайта біріктірілуіне дейін одан әрі бөлінуіне әкелді. ZMODEM өте танымал болды, бірақ BBS нарығында XMODEM-ді толыққанды алмастыра алмады.

Пакеттер құрылымы

Бастапқы XMODEM 128 байттық дерек пакетін қолданды, бұл CP/M дискеталарында қолданылатын негізгі блок өлшемі. Пакет 3 байттық қарапайым таңба баспен басталды, онда <SOH> таңбасы, 1-ден 255-ке дейінгі "блок нөмірі" және "кері" блок нөмірі – 255 минус блок нөмірі болды. Блоктарды нөмірлеу бірінші жіберілген блок үшін 1-ден басталады, 0-ден емес. Баспен 128 байт дерек және содан кейін бір байттық тексеру қосындысы келді. Тексеру қосындысы – пакеттегі барлық 128 дерек байтының 256 модулі бойынша қосындысы. Осылайша, толық пакет 132 байтты құрады, оның 128 байты пайдалы жүктеме деректері, арнаның тиімділігі шамамен 97% болды. Файл соңғы блоктан кейін жіберілген <EOT> таңбасымен "толық" деп белгіленді. Бұл таңба пакетке енбеді, ол жеке бір байт ретінде жіберілді. Файл ұзындығы протоколдың бір бөлігі ретінде жіберілмегендіктен, соңғы пакет "белгілі таңбамен" толтырылды, оны тастауға болады. Бастапқы сипаттамада бұл <SUB> немесе 26 ондық саны болды, CP/M оны өз дискілік форматында файл соңының маркері ретінде пайдаланды. Стандартта толтыру үшін кез келген таңбаны қолдануға болады делінген, бірақ оны протоколдың өзінде өзгертуге болмайды. Егер орындалу толтыру таңбасын өзгертсе, жаңа толтыру таңбасын тек сол орындалуды пайдаланатын клиенттер ғана дұрыс түсіне алады.

Ауыстыру туралы мәліметтер

Файлдар бір-бірлеп пакеттермен жіберілді. Қабылданған кезде, қабылдаушы пакеттің бақылау қосындысын есептеп, оны жөнелтушіден алынған пакеттің соңындағы бақылау қосындысымен салыстырды. Егер екеуі сәйкес келсе, қабылдаушы <ACK> хабарламасын жөнелтушіге қайтарады, содан кейін жөнелтуші келесі пакетті ретімен жібереді. Егер бақылау қосындысында мәселе болса, қабылдаушы оның орнына <NAK> жіберді. Егер <NAK> қабылданса, жөнелтуші пакетті қайта жібереді және беруді тоқтатудан бұрын бірнеше рет, әдетте он рет қайталап тырысады. <NAK> белгісі сондай-ақ, қабылдаушы <EOT> белгісінің болмауына байланысты деректерді күтіп тұрғанда, он секунд ішінде жарамды пакет алмаса жіберіледі. Пакеттің ішінде жеті секундтық тайм-аут та қолданылды, бұл пакет ортасында байланыс үзілуіне қарсы қорғады. Блок нөмірлері де қателерді тексеру үшін қарапайым әдіспен тексерілді. Пакет сәтті қабылданғаннан кейін, келесі пакеттің нөмірі бірге өсуі керек еді. Егер ол орнына сол блок нөмірін алса, бұл аса маңызды деп есептелмейді, себебі <ACK> жөнелтушіге жетпегендіктен пакет қайта жіберілген болар еді. Кез келген басқа пакет нөмірі пакеттердің жоғалғанын көрсетеді. Жіберілімдер қабылдаушымен басқарылатын; жөнелтуші қабылдаушыдан бастапқы <NAK> жіберілгенше ешқандай дерек жібермейді. Бұл пайдаланушының қашықта орналасқан жіберуші машинамен өзара әрекеттесуінің логикалық салдары болды. Пайдаланушы жіберуші машинадағы сұралған файлды іздеп, содан кейін осы машинадан оны жіберуді сұрайды. Бұл команда берілгеннен кейін, пайдаланушы жергілікті бағдарламалық құралда команданы орындап, қабылдауды бастайды. Қашық жүйеден файлды сұрау мен жергілікті қабылдау командасын беру арасындағы кешігу белгісіз болғандықтан, XMODEM қабылдаушыға дерек пакеттеріне сұрау салуды бастауға 90 секундқа дейін уақыт береді.

Қиындықтар

XMODEM 1982 жылы журналистің Пәкістаннан АҚШ-қа Osborne 1 және акустикалық модулятор арқылы нашар сапалы телефон желілерімен хабарларды жіберуіне жеткілікті сенімді болғанмен, бұл протокол бірнеше кемшіліктерге ие болды.

Кішігірім проблемалар

XMODEM CP/M машиналары үшін жазылған және сол операциялық жүйенің ерекшеліктерін сақтайды. CP/M жүйесіндегі файлдар әрқашан 128 байттың еселі санында болып, олардың соңы <EOT> таңбасымен белгіленген блок ішінде көрсетілген. Осы ерекшеліктер тікелей XMODEM-ге көшірілді. Дегенмен, басқа операциялық жүйелерде мұндай ерекшеліктер болған жоқ, ал 1980-ші жылдардың басында MS DOS-тың кеңінен таралуы XMODEM-ді жаңартуға алып келді. Осы жаңартулар файл соңының белгісі ретінде <EOT> немесе <EOF> таңбаларын тануға мүмкіндік берді. Біраз уақыт бойы, қабылдаушы тараптан берілісті оңай тоқтату үшін <ACK> немесе <NAK> орнына <CAN> таңбасын жіберуді қолдау қажет деп ұсынылды. Сол сияқты, <SOH> орнына алынған <CAN> таңбасы, жөнелтуші берілісті тоқтатуды қалайтынын білдіреді. Алайда, бұл таңба <ACK> немесе <NAK> таңбаларының қате жіберілуінен туындаған қарапайым шу арқылы оңай "создалуы" мүмкін. Бұл мәселенің алдын алу үшін екі рет <CAN> таңбасын жіберу ұсынылды, бірақ оның кеңінен қолданылғаны белгісіз.

Негізгі проблемалар

XMODEM қарапайымдық үшін жасалған, басқа файлдарды беру протоколдары туралы көп білместен – олардың өзі де сирек кездесетін. Оның қарапайымдылығынан туындап, бірнеше өте қарапайым қателерге тап болатын, олар беруді сәтсіз аяқтауына, тіпті нашаррақ, протокол байқамайтын бұрмаланған файлға әкелуі мүмкін еді. Мұның басты себебі – қателерді түзету үшін қолданылған қарапайым тексеру сомасы болатын, егер екі бит орны ауысса, деректегі қателерді анықтай алмайтын, бұл қысқа шу арқылы орын алуы мүмкін. Сонымен қатар, басқа немесе тексеру сомасына ұқсас зақым келген жағдайда, деректердің өзі зақымдалмаған болса да, беру сәтсіз аяқталуы мүмкін еді. Көптеген авторлар осы және басқа да мәселелерді шешу үшін XMODEM-ге қосымша мүмкіндіктер енгізді. Көптеген адамдар осы қосымшаларды жаңа XMODEM стандартының бір бөлігі ретінде қосуды сұрады. Алайда, Уорд Кристенсен мұны істеуден бас тартты, себебі осы мүмкіндіктердің болмауы және оларды қолдау үшін қажетті кодтау, XMODEM-нің кеңінен таралған себебі болды. Ол былай түсіндірді:

Бұл менің жеке қажеттілігімді – басқа адамдармен байланысуды қанағаттандыру үшін жасаған, өте жоспарланбаған (менің барлық ісім сияқты) жылдам хакерлік әрекет еді. Оның 1977 жылғы тамыздың 8-де жасалып, дереу жарияланғандығы ғана оны қазіргі стандартқа айналдырды. Протоколға "толық дуплекс", "көптеген күтіліп тұрған блоктар", "көптеген бағыттар" сияқты маңызды өзгерістер енгізуді ұсынатындар протоколдың тірі қалу себебінің бірі – оның керемет қарапайымдылығы екенін түсінбейді.

Партиялық трансферттер

XMODEM-нің тағы бір кемшілігі – ол автоматтандырылмаған, пайдаланушының араласуын қажет ететін дерек алмасуды талап етті. Әдетте, бұл пайдаланушы жіберуші жүйеде қажетті файлды таңдап, содан кейін осы жүйені "жіберуге дайын" күйге келтіру үшін команда беретін. Олар терминал эмуляторындағы команда арқылы дерек алмасуды бастайтын. Егер пайдаланушы тағы бір файлды жібергісі келсе, осы процесті қайтадан орындауы керек еді. Екі сайт арасында автоматты дерек алмасу үшін XMODEM протоколына уақыт өте келе бірнеше қосымшалар енгізілді. Олар әдетте жіберушінің файлдан кейін файл жіберуді жалғастыра беретінін, ал алушы келесі файлды сұрап, NAK жіберу арқылы дерек алмасуды бастауға тырысатынын болжайтын. Егер NAK сәтке дейін жауап бермесе, онда файлдар таусылған немесе байланыс үзілген деген қорытынды жасауға болады.

MODEM7

MODEM7, сонымен қатар MODEM7 партиясы немесе XMODEM партиясы деп те аталады, XMODEM протоколының алғашқы белгілі кеңейтімі болды. Әдеттегі XMODEM файл беру, алушының жөнелтушіге бір NAK белгісін жіберуімен басталады, содан кейін деректердің басталуын көрсету үшін бір SOH белгісі жіберіледі, одан кейін деректер пакеттері жіберіледі. MODEM7 бұл әрекетті аздап өзгертті, <SOH> белгісінен бұрын файл атауын 8.3 форматта жіберді. Әрбір әріп жеке-жеке жіберіліп, қателерді түзету үшін қабылдаушы оны қайталауға тиіс болды. XMODEM-ді білмейтін бағдарлама үшін бұл деректер SOH белгісі келгенше назарсыз қалдырылып, әріптер қайталанбас еді, соның салдарынан бағдарлама әдеттегі XMODEM режиміне қайта оралуы мүмкін. "Білуші" бағдарламалық қамтамасыз етумен файл атауын файлды жергілікті түрде сақтау үшін пайдалануға болады. Ауыстыру басқа <NAK> белгісі арқылы жалғаса береді, әрбір файл алушыға жіберілген атаумен сақталады. Джерри Пурнелл 1983 жылы MODEM7-ді "әрине, қазіргі кездегі ең танымал микрокомпьютерлік байланыс бағдарламасы" деп сипаттады.

TeLink желісі

MODEM7 файл атауын қарапайым мәтін түрінде жіберді, сол себепті XMODEM болдырмауға тырысқан қателер оны бұзуы мүмкін еді. Бұл FidoNet пошта бағдарламаларының авторы Том Дженнингстің TeLink енгізуіне алып келді. TeLink MODEM7-нің мәселелерін бастапқы файл туралы ақпаратты қамтитын жаңа "нөлдік пакетті" стандарттау арқылы шешті. Бұл файлдың атауы, көлемі және жасалған уақыты қарапайым 128 байттық XMODEM блогына орналастырылды. Әдеттегі XMODEM жіберу <SOH> бас әріпімен "блок 1" жіберумен басталатын болса, TeLink бас пакеті "блок 0" деп белгіленді және <SYN> әріпімен басталды. Пакетте файлдың жасалған күні мен уақыты, 16 таңбаға дейін файлдың атауы, файлдың көлемі 4 байттық мән ретінде және файлды жіберген бағдарламаның атауы қамтылған. XMODEM-нің стандартты іске асырылуы мұндай пакеттің нөмірі бұзылған деп есептеп, жай ғана жойып тастайтын. Бірақ пакет жойылған жағдайда уақыт бойынша кешігу туындауы мүмкін еді, себебі жөнелтуші қабылдаушы <NAK> жауап бергенін анықтай алмады, себебі ол нөлдік пакетті түсінбеді немесе беріліс қатесі болды. TeLink көбінесе FidoNet бағдарламалық қамтамасымен ғана қолданылды, себебі ол FidoNet стандарттарының бөлігі ретінде қажет болды, сондықтан бұл нақты жағдайда проблема тудырмады, екі жақ та осы стандартты қолдайтын. Бастапқы "блок 0" жүйесі FidoNet қауымдастығында стандартқа айналды және SEAlink және YMODEM сияқты келешек протоколдарда қайта қолданылды.

XMODEM-CRC

Бастапқы протоколдағы тексеру сомасы өте қарапайым болды, сондықтан пакеттегі қателер байқалмай қалуы мүмкін еді. Бұл Джон Бёрнстің XMODEM CRC енгізуіне әкелді, ол 8 биттік тексеру сомасының орнына 16 биттік CRC қолданды. CRC пакеттегі деректерді ғана емес, сонымен қатар оның орналасқан жерін де кодтайды, бұл тексеру сомасы байқамайтын бит алмасу қателерін анықтауға мүмкіндік береді. Статистикалық тұрғыдан алғанда, 16 биттен кем қателерді анықтау мүмкіндігі 99.9969% болды, ал қате биттерінің тізбегі ұзын болғанда бұл көрсеткіш одан да жоғары болды. XMODEM CRC XMODEM протоколымен кері үйлесімді болу үшін жасалған. Осы мақсатта, қабылдаушы аударымды бастау үшін <NAK> орнына C (үлкен C әрпі) символын жіберді. Егер жіберуші пакет жіберіп жауап берсе, қабылдаушы жіберушінің XMODEM CRC-ді "білетінін" болжады және C символын жіберуді жалғастырды. Егер пакет келмесе, қабылдаушы жіберушінің протоколды білмейтінін болжап, "дәстүрлі" XMODEM аударымын бастау үшін <NAK> жіберді. Алайда, кері үйлесімділікке жасалған бұл әрекеттің кемшілігі де болды. Бастапқы C символы жоғалып немесе бұзылып қалуы мүмкін болғандықтан, аударымды бастаудың алғашқы әрекеті сәтсіз аяқталған жағдайда, қабылдаушы XMODEM CRC-ді қолдамайды деп болжауға болмайды. Сондықтан қабылдаушы C символымен үш рет аударымды бастауға тырысты, әр әрекеттің арасында үш секунд күтті. Бұл, егер пайдаланушы XMODEM CRC-ні таңдап, кез келген XMODEM-мен байланысуға тырысса, аударым басталғанға дейін 10 секундқа дейін кешігу тудыруы мүмкін. Бұл кешігуді болдырмау үшін, жіберуші мен қабылдаушы XMODEM CRC-ді XMODEM-нен бөлек тізімдеді, соның арқасында жіберуші оны нақты көрсетпесе, пайдаланушыға "негізгі" XMODEM-ді таңдау мүмкіндігі берілді. Көптеген пайдаланушылар үшін XMODEM CRC, әдетте, "екінші протокол" ретінде қарастырылды. Бірақ FidoNet пошта серверлерінде жағдай басқаша болды, онда CRC барлық TeLink аударымдары үшін стандарт ретінде белгіленді.

Жоғары өнімділік

XMODEM протоколы жіберушінің тоқтауына және қабылдаушыдан <ACK> немесе <NAK> хабарын күтуіне қатысты болғандықтан, ол өте баяу болды. 300 бит/с модемдер дәуірінде 132 байттық пакеттің толық жіберілуіне 4,4 секунд уақыт кетті (132 байт * (8 бит/байт + 1 бастапқы бит + 1 тоқтату биті) / 300 бит/секунд). Қабылдаушының <ACK> хабары жіберушіге қайтып оралуына 0,2 секунд, ал келесі пакет қабылдағышқа жетуіне 0,1 секунд (екі бағытта) кетсе, бір пакеттің жалпы уақыты 4,6 секундты құрап, арнаның тиімділігі 92%-дан сәл жоғары болды. <ACK>/<NAK> процесіне кеткен уақыт модемдердің емес, негізгі байланыс желісінің тұрақты функциясы еді. Модемдердің жылдамдығы артқан сайын, белгілі бір кешігу пакетті жіберуге қажетті уақытқа пропорционалды түрде өсті. Мысалы, 2400 бит/с жылдамдықта пакеттерді жіберуге 0,55 секунд қана кетсе, егер <ACK>/<NAK> пайдаланушының компьютеріне қайта оралуға 0,2 секунд кетсе, тиімділік 71%-ға дейін төмендеді. 9600 бит/с жылдамдықта бұл көрсеткіш 40%-дан аспайды – жауапты күтуге пакетті жіберуге кеткен уақыттан көп уақыт жұмсалады. Осы мәселелерді шешу үшін XMODEM-нің бірнеше жаңа нұсқалары ұсынылды. Бұрынғы кеңейтімдер сияқты, бұл нұсқалар да бастапқы XMODEM-мен кері үйлесімді болды, және осы кеңейтімдер сияқты, бұл пайдаланушының терминал эмуляторында XMODEM-нің түрленуіне әкелді. Нәтижесінде, XMODEM-нің ондаған нұсқалары пайда болды.

WXModem (жаңадан орнатылған)

WXmodem, «Windowed Xmodem» дегеннің қысқартылған атауы, 1986 жылы Питер Босвелл жоғары задерлі желілерде, әсіресе X.25 жүйелерінде және PC Pursuit-та пайдалану үшін XMODEM-нің бір түрін жасады. Мұндай желілердің задерлігі қарапайым телефон желісінен әлдеқайда жоғары, бұл XMODEM-де тиімділіктің төмендеуіне әкеледі. Сонымен қатар, бұл желілер ағынды басқару және басқа да міндеттер үшін басқару белгілерін жиі қолданады, мысалы, XON/XOFF деректер ағынын тоқтатады. Сонымен қатар, қайта жіберуді қажет ететін қате пайда болған жағдайда, SOH пакеттің белгісі ме, әлде шу ма екенін анықтау қиын болатын. WXmodem осы мәселелерді шешу үшін XMODEM CRC-ді бейімдеді. Бір өзгеріс – бірнеше басқару белгілерінен құтылу: DLE, XON, XOFF және SYN. Олардың алдына DLE қосылып, кейін XOR 64 операциясы арқылы өңделді. Теория бойынша, егер пакет бастапқыда тек құтылуды қажет ететін белгілерден тұрса, онда пакеттің ұзындығы 264 байтқа дейін жете алады. Бұл қосылған және өңделген белгілер CRC есептеуіне қатыспайды, олар CRC есептелу алдында қабылдаушы тараптан алынып тасталады және түрлендіріледі. Сонымен қатар, барлық пакеттер SYN белгісімен басталады, яғни пакеттің бастамасы SYNSOH болады, бұл түрлі қателік жағдайларында SOH белгісінің пакет басқасымен шатасу мүмкіндігін азайтады. Пакеттің ішінде кездесетін SYN белгісі – қате. WXMODEM-дегі маңызды өзгеріс – жоғары задерлі желілерде өткізу қабілетін жақсарту үшін жылдам сырғымалы терезені пайдалану. Осы үшін ACK хабарламаларына қайта жіберуге немесе жасыруға тиіс пакеттің нөмірі қоса берілді. Алушы әрбір пакетті ACK арқылы растауы міндетті емес; ол бірден төрт пакетке дейінгі кез келген санды растауға құқылы. Төртінші пакет реттік нөмірі бар ACK төрт пакеттің барлығын растайды деп есептеледі. Қате пайда болған жағдайда NAK дереу жіберіледі, содан кейін сол нөмірден бастап барлық пакеттер қайта жіберіледі. Әр төрт пакеттен ACK талап ету жүйені 512 байттық пакетпен жұмыс істейтіндей етеді, бірақ қате пайда болған жағдайда әдетте 128 байтты ғана қайта жіберу қажет болады. Бұдан бөлек, кері бағыттағы деректер көлемі төрт есе азаяды. Бұл әдеттегі модемнің толық дуплекс режимінде аса маңызды емес, бірақ Telebit сияқты жартылай дуплекс жүйелерде маңызды, олардың бір бағыттағы жылдамдығы 19 кБ, ал кері арнада – 75 бит/с.

SEAlink

FidoNet жүйесі үшін үшінші тараптан шыққан алғашқы почта бағдарламаларының бірі SEAdog болды, ол сол кездегі танымал arc деректерді сығу форматының авторымен жазылған. SEAdog көптеген жақсартуларды қамтыды, соның ішінде SEAlink – WXmodem сияқты жылжымалы терезе концепциясына негізделген жетілдірілген деректерді беру протоколы. Ол WXmodem-нен көбінесе ұсақ-түйек нәрселермен ерекшеленді. Бір айырмашылығы – SEAlink, TeLink енгізген "нөлдік пакетті" қолдады, бұл FidoNet жүйелерінде TeLink-тің орнына тікелей ауыстыру ретінде жұмыс істеу үшін қажет болды, яғни жүйе басқа пакет күтуде болғанда. ACK және NAK үш байттық "пакеттерге" дейін кеңейтілді, олар ACK немесе NAK-тан басталып, содан кейін пакет нөмірі және пакет нөмірінің толықтығы келеді, бұл бастапқы XMODEM пакетінің бас жағына ұқсас. Терезе мөлшері әдетте алты пакетке орнатылды. SEAlink X.25 немесе осыған ұқсас желілер арқылы жұмыс істемейді деп күтілді, сондықтан деректерді түрлендіру (escaping) жасалған жоқ. Бұл нөлдік пакеттің дұрыс жұмыс істеуі үшін де қажет болды, себебі бұл стандарт WXmodem қайта қолданған SYN символын пайдаланды. Бұл өзгерістерге қоса, жартылай дуплекс желілері үшін "Overdrive" режимі қосылды. Бұл сәтті жіберілген пакеттерге ACK жіберуді тоқтатты, нәтижесінде терезенің мөлшері шексіз болды. Бұл режим нөлдік блоктағы флаг арқылы көрсетілді. SEAlink кейіннен тағы да бірқатар жақсартулар енгізіп, пайдалы мақсаттағы протоколға айналды. Дегенмен, ол FidoNet әлемінен тыс жерде сирек кездесетін, және пайдаланушы интерфейсі бар бағдарламалық жасақтамада көрінуі де сирек болды.

XMODEM-1K

Пропуск қабілеті мәселесін шешудің тағы бір жолы – пакеттердің мөлшерін ұлғайту. Дегенмен, жалатыну уақытының негізгі мәселесі қалпында, ол мәселеге айналатын жылдамдық жоғарылайды. 1024 байттық пакеттері бар XMODEM 1K осындай шешімдердің ең танымал болғаны. Бұл жағдайда, жоғарыда көрсетілгендей болжамдарды ескере отырып, 9600 бит/с жылдамдығымен өтімділік 81% құрайды. XMODEM 1K – XMODEM CRC протоколының кеңейтілген нұсқасы, ол <SOH> орнына <STX> таңбасымен пакетті бастау арқылы жіберушідегі ұзын блок өлшемін көрсетеді. Басқа кері үйлесімді XMODEM кеңейтулері сияқты, 1K жіберуді XMODEM протоколының кез келген нұсқасымен бастауға болады, қажет болған жағдайда мүмкіндіктерді шектеуге болады. XMODEM 1K бастапқыда Чак Форсберг өзінің YMODEM протоколында енгізген XMODEM-нің көптеген жақсартуларының бірі болды. Форсберг әртүрлі жақсартулардың міндетті емес екенін айтты және бағдарламалық жасақтама авторлары мүмкіндігінше көптерін іске асыруды күтті. Бірақ олар көбінесе ең аз қажеттіні ғана іске асырды, нәтижесінде жартылай үйлесімді нұсқалардың көптеген түрлері пайда болды, содан кейін "YMODEM" атауы "XMODEM 1K" және әртүрлі YMODEM нұсқаларына бөлінді. Осылайша, XMODEM 1K шын мәнінде YMODEM-нен кейін пайда болды, бірақ бәрібір кең таралды.

NMODEM

NMODEM – 1990 жылы L. B. Neal әзірлеген файлдарды жіберу протоколы. NMODEM, негізінен, XMODEM CRC протоколының, XMODEM-нің 128 байттық блоктарына қарағанда үлкен 2048 байттық блоктарды қолданатын нұсқасы болып табылады. NMODEM IBM PC үйлесімді компьютерлер отбасысы үшін Turbo Pascal 5.0 тілінде жазылған жеке бағдарлама ретінде іске асырылды. Блок өлшемі сол кездегі қатты дискілердегі MS DOS FAT файлдық жүйенің кең таралған кластер өлшемімен сәйкес келу үшін таңдалды, бұл деректерді жазу үшін буферлеуді жеңілдетті.

Хаттаманы бұрмалау

Сенімді (қатесіз) қосылымдар арқылы пакеттерді "алдын ала растау" арқылы кідіріс уақытын жою мүмкін, бұл әдіс жалпы "протоколды бұрмалау" деп аталады. Бұл әдетте байланыс аппараттық құралдарында, әсіресе Telebit модемдерінде іске асырылады. Модемдер, егер бұл опция қосылған болса, XMODEM тақырыбын анықтап, дереу ACK жібереді. Бұл XMODEM бағдарламасын бірден келесі пакетті жіберуге итермелейді, нәтижесінде шексіз терезе сияқты үздіксіз деректерді беру пайда болады. Модемдер сондай-ақ, қашықтағы XMODEM бағдарламалық жасақтамасы жіберген ACK-ты жояды, соның салдарынан төмен жылдамдықты кері байланыс арнасын босатады. Бұл жүйені протоколдың өзінде де іске асыруға болады, және XMODEM-нің кейбір нұсқалары осы мүмкіндікті ұсынады. Мұндай жағдайларда, қабылдағыш пакеттің басталуымен бірге, Telebit модемдеріндей, дереу ACK жібереді. Бұл мүмкіндік қабылдаушы тараптың мінез-құлқын өзгертетін болғандықтан, жіберуші тараптың протоколында ешқандай өзгеріс қажет етілмейді. YMODEM бұл жүйені ресми түрде қалыптастырды. Бұл принцип SEAlink-те қолданылатын, байланыстың екі жағындағы мінез-құлқын өзгертетін принциптен өзгеше. SEAlink-те қабылдағыш ACK жіберуді толығымен тоқтатады, ал жіберуші оларды күтпеу үшін өз мінез-құлқын өзгертеді.