Кіріспе

ZMODEM – файл беру протоколы, 1986 жылы Чак Форсберг X.25 желісінде файл беруді жақсарту мақсатында, Telenet қаржыландырған жобада әзірлеген. Ескі протоколдармен салыстырғанда өнімділігі күрт жақсарғаннан өзге, ZMODEM қайта іске қосылатын берулерді, жіберушінің автоматты бастауын, кеңейтілген 32 биттік CRC-ді және 8 биттік таза беруді қолдайтын басқару таңбаларын жіберуді қамтамасыз етті, бұл оны басқару таңбаларын өткізбейтін желілерде пайдалануға мүмкіндік берді. Хабарлама тақталары жүйелері (BBS) үшін жасалған көптеген беру протоколдарынан өзгеше, ZMODEM тікелей XMODEM-ге негізделмеген және оған үйлесімді болмаған. XMODEM-нің көптеген нұсқалары оның кемшіліктерін жою үшін жасалған, соның ішінде көпшілігі кері үйлесімділікті сақтап, «классикалық» XMODEM нұсқаларымен сәтті жұмыс істеген. Бұл тізімге Форсбергтің өзінің YMODEM-і де кіреді. ZMODEM кері үйлесімділіктен бас тартып, түбегейлі жақсартылған протокол құруға баса назар аударды. Ол XMODEM-нің жоғары өнімді нұсқаларынан кем емес, тіпті жақсы жұмыс істеді, бұрын жұмыс істемейтін (мысалы, X.25) немесе нашар жұмыс істейтін (мысалы, Telebit модемдері) байланыстар арқылы да жұмыс істеді, сондай-ақ басқа протоколдарда сирек кездесетін немесе мүлдем жоқ пайдалы мүмкіндіктерді ұсынды. ZMODEM 1990-шы жылдардың басында хабарлама тақталары жүйелерінде (BBS) кең танымал болды және XMODEM-нен бұрынғыдай кең таралған стандартқа айналды.

Ағызатын

Әдетте, файл беру протоколдары файлды бірнеше пакетке бөледі, содан кейін оларды бірінен кейін бірі алушыға жібереді. Пакеттің негізгі бөлігі, пайдалы жүктеме, жіберілетін файлдың белгілі бір мөлшердегі байттарынан тұрады. Пайдалы жүктемеден кейін тексеру сомасы немесе циклдық артықшылық тексеруі (CRC) келеді, оны пайдалану арқылы пайдалы жүктеменің дұрыс қабылданғанын анықтауға болады. Егер пакет дұрыс қабылданса, алушы жауап хабарламасын жібереді, ал жіберуші келесі пакетті жібере бастайды. Телефон жүйесі осы процеске кедергі келтіретін шағын кешігуді (latency) енгізеді. Алушы дереу жауап берсе де, телефон желілеріндегі кешігу жіберуші оны қабылдап, келесі пакетті жібергенге дейін белгілі бір уақыт өтетінін білдіреді. Модемнің жылдамдығы артқан сайын, бұл кешігу кезінде жіберілуі мүмкін пакеттердің саны артады, бұл арнаның тиімділігін төмендетеді. XMODEM 128 байттық жүктемелерді үш байттық бас және бір байттық тексеру сомасымен пайдаланды, барлығы пакетке 132 байт. 300 бит/с модемдер дәуірінде пакетті жіберуге шамамен төрт секунд уақыт кетті, ал кәдімгі кешігу шамамен секундының 1/10 бөлігін құрады, сондықтан өнімділік шығындары айтарлықтай болмады. Жылдамдықтар артқан сайын мәселе күрделенеді; 2400 бит/с жылдамдықпен пакетті жіберуге шамамен 1/2 секунд уақыт кетеді, сондықтан қол жетімді өткізу қабілетінің шамамен 1/5 бөлігі жауапты күтуге ысырап болады. 9600 бит/с жылдамдықпен пакетті жіберуге 0,13 секунд уақыт қажет, сондықтан өткізу қабілетінің шамамен 1/2 бөлігі ысырап болады. Бұл мәселенің бір шешімі – жылдам терезе (sliding window) қолдану. Бұл протоколдар кешігуді ескере отырып, жіберушіге бірнеше пакетті жауап күтпей-ақ жіберуге мүмкіндік береді. Рұхсат етілген пакеттер саны – «терезе» деп аталады, және көптеген жүзегілендірулерде әдетте екіден он алтыға дейін болды. 1980 жылдардың басында жылдам терезе қолдауы бар XMODEM-нің бірнеше жаңа нұсқалары пайда болды. Жылдам терезелер дәстүрлі телефон желілерінде XMODEM үшін кездесетін бірнеше пакет ұзындығына тең кешігулер үшін пайдалы. Алайда, ол шетелдік телефон қоңырауларында, спутниктік байланыстарда немесе PC Pursuit сияқты X.25 қызметтерінде кездесетін ұзақ кешігулерді шешуге жеткіліксіз, онда кешігу бір секундтан асады. Басқа жағдайларда, кері арна жіберу арнасынан әлдеқайда баяу болғанда, Telebit немесе US Robotics модемдеріндегідей, тіпті аз ғана жауап хабарламалары кері арнаны толып кетуіне және беруді тоқтатуға әкелуі мүмкін. ZMODEM бұл мәселелерді жауап хабарламаларына деген қажеттілікті жою арқылы шешті, бұл жіберушіге қабылдаушы қателерді анықтамайынша деректерді үздіксіз жіберуге мүмкіндік берді. Жауап хабарламалары тек қана қате болған жағдайда жіберілуі керек. ZMODEM көбінесе X.25 сияқты қателерді түзетуге ие сілтемелерде пайдаланылғандықтан, қабылдаушы көбінесе жіберушіге ешқандай хабарлама жібермейтін. Нәтижесінде, жүйе бүкіл файлды үздіксіз ағынмен жіберетін, ал ZMODEM өзін «ағынды протокол» деп атады. ZMODEM-нің бұрынғы кең таралған протоколдарға қарағанда өнімділігі жақсарғандықтан, ол тіпті қателерді түзетуді қамтымайтын және модемдермен сақталатын қатесіз сілтемелерге сүйенетін YMODEM g сияқты арнайы протоколдарды да алмастырды. YMODEM g жылдам болғанымен (және осылайша «күшті пайдаланушылар» арасында танымал болғанымен), қайта іске қосылатын берулер сияқты басқа мүмкіндіктердің болмауы оны азырақ тартымды етті.

Қайта бастау

XMODEM және оған негізделген көптеген протоколдар пакеттердің ретін 1-ден 255-ке дейінгі пакет нөмірін қосу арқылы басқарды. Терезеленген нұсқалары осы пакет нөмірін қай пакеттер дұрыс қабылданғанын, ал қайсысы қабылданбағанын көрсету үшін пайдаланды. Пакеттердің ұзындығы 128 байт болғандықтан, пакет нөмірлері қайта басталмас бұрын берілуге болатын деректердің максималды көлемі 32 кБ құрады. ZMODEM пакет нөмірін 32 биттік санмен көрсетілген файлдағы нақты орнымен алмастырды. Бұл файлдың ұзындығына қарамастан, қателік орынға дейін беруді қайта бастауға мүмкіндік берді. Осы мүмкіндіктер беру сәтсіз аяқталған немесе қасақана тоқтатылған жағдайларда да қайта іске қосу үшін қолданылды. Мұндай жағдайда қабылдаушы бұрын қанша дерек алынғанын тексеріп, содан кейін сол орналасқан жерге хабарлама жіберетін болды, бұл жіберушіні автоматты түрде сол жерден бастауға итермелейді.

Автоматты түрде іске қосу

Автоматты бастау жіберуші машинаға деректерді жіберуді бастауға мүмкіндік беру арқылы басқаруды жеңілдетеді. Бұрын пайдаланушы файлды жіберушіден сұрап, оны "күту" күйіне қою керек еді, содан кейін өз бағдарламасына оралып, деректерді жіберу үшін команданы іске қосу керек еді. Автоматты деректерді жіберу кезінде пайдаланушы тек файлды сұраса жеткілікті, ал жіберуші дереу пайдаланушының бағдарламасында деректерді жіберуді автоматты түрде іске қосады.

Вариациялар

ZMODEM-нің бірнеше өзгертілген нұсқалары пайда болды. ZedZap – жоғары жылдамдықты модемдерде жақсы өнімділік үшін 8 кбайттық блоктары бар ZMODEM нұсқасы. LeechZmodem – BBS жүктеу квоталарын бұзған ZMODEM нұсқасы (ұқсас XMODEM және YMODEM туындыларының арасында). 2002 және 2007 жылдары ADONTEC компаниясы 32 кбайт және 64 кбайт блок ұзындығы бар ZMODEM-нің кері үйлесімді кеңейтілген нұсқасын жасады. Бұл ISDN немесе TCP/IP желілері сияқты жоғары жылдамдықты, қатесіз қосылымдарда өнімділікті арттыру мақсатында жасалды. Ең танымал ZMODEM іске асырылымдары Чак Форсбергтің Omen Technology, Inc. компаниясынан шықты. Оларға DSZ (DOS Send ZMODEM), GSZ (Graphical Send ZMODEM) және Unix нұсқалары үшін кең таралған (l)rzsz кірді. Соңғы уақыттарда Synchronet әзірлеушілері zmtx/zmrx жинағына негізделген, Windows және Unix нұсқаларында тікелей жұмыс істейтін, ұзын файл атауларын қолдайтын және жылдам, сенімді деректерді жіберуді қамтамасыз ететін SEXYZ деп аталатын жаңа X/Y/ZMODEM іске асырылымын жасады. SEXYZ-ден ZMODEM іске асырылымы да SyncTERM жобасына қосылды. Synchronet, SEXYZ және SyncTERM – бәрі де ашық кодты, платформадан тәуелсіз, BBS-ке бағытталған жобалар. Форсберг өзі ZMODEM 90-ға бірқатар жақсартулар енгізді. Олардың біріншісі – MobyTurbo, ол өнімділікті шамамен 15%-ға арттыру үшін басқару тікелей жазбаларын жойды. Бақылау таңбаларын «жеп қоятын» желілерде де ZMODEM 90 желінің нақты жейтін таңбаларын ғана тікелей жазуға бейімделуі мүмкін, барлық мүмкін таңбаларға емес. Ұқсас жақсарту ZMODEM 90-ды 7 биттік желілерде жұмыс істеуге мүмкіндік береді, ал бұрынғы протоколдар (Кермиттен басқа) әртүрлі деңгейде 8 бит талап еткен. Соңында, ZMODEM 90 негізгі жүріс ұзындығын кодтау жүйесін қамтиды, бұл қысылмаған файлдарда өнімділікті одан әрі жақсартады.

Шектеулер

ZMODEM пакеттерінің кейбіреулері (мысалы, ZACK, ZRPOS) жіберіліп жатқан файл ішінде байт сметасын 32 биттік таңбасы жоқ бүтін сан ретінде сақтайды. Бұл конструкция ZMODEM-нің 4 ГБ-тан кіші файлдарды ғана сенімді түрде жіберу мүмкіндігімен шектеледі. Протокол бұған мүмкіндік берсе де, эталондық (l)rzsz іске асыруы кез келген басқару таңбаларын (мысалы, '~') кодтай алмайды, оларды telnet және ssh сияқты TCP/IP қосылыс бағдарламалары клиенттік жағындағы "терминалдан шығу" таңбалары ретінде жиі пайдаланады. Осы сияқты қосылыстар арқылы сенімді жіберуді қамтамасыз ету үшін пайдаланушылар терминалдан шығу мүмкіндігін өшіруі керек, мысалы ssh -e none user@hostname.