ZMODEM - ZMODEM

ZMODEM
Protokół komunikacyjny
Cel, powód Protokół Przesyłania Plików
Deweloper (y) Chuck Forsberg
Wprowadzono 1986 ; 34 lata temu ( 1986 )
Port (y) Żaden
Sprzęt komputerowy modemy

ZMODEM to protokół przesyłania plików opracowany przez Chucka Forsberga w 1986 roku w ramach projektu finansowanego przez Telenet w celu usprawnienia przesyłania plików w ich sieci X.25 . Oprócz radykalnej poprawy wydajności w porównaniu ze starszymi protokołami, ZMODEM oferował transfery z możliwością ponownego uruchomienia, automatyczne uruchamianie przez nadawcę, rozszerzone 32-bitowe CRC i cytowanie znaków kontrolnych obsługujące 8-bitowe czyste transfery, dzięki czemu można go używać w sieciach, które nie przekazuje znaków sterujących.

W przeciwieństwie do większości protokołów transferu opracowanych dla systemów tablic ogłoszeń (BBS), ZMODEM nie był bezpośrednio oparty na nowatorskim XMODEM , ani nie był z nim kompatybilny . Wiele wariantów XMODEM zostało opracowanych w celu usunięcia jednego lub więcej jego niedociągnięć, a większość z nich pozostała wstecznie kompatybilna i pomyślnie zakończyłaby transfery z "klasycznymi" implementacjami XMODEM. Ta lista zawiera własny YMODEM firmy Forsberg .

ZMODEM zrezygnował ze wstecznej kompatybilności na rzecz stworzenia radykalnie ulepszonego protokołu. Działał równie dobrze lub lepiej niż którakolwiek z wysokowydajnych odmian XMODEM, działał na łączach, które wcześniej w ogóle nie działały, jak X.25, lub miały słabą wydajność, jak modemy Telebit , i zawierał przydatne funkcje znalezione w niewiele lub żadnych innych protokołów. ZMODEM stał się niezwykle popularny w systemach tablic ogłoszeń (BBS) na początku lat 90., stając się standardem tak rozpowszechnionym, jak wcześniej XMODEM.

Improvements

Streaming

Zwykle protokoły przesyłania plików dzielą plik na serie pakietów , a następnie wysyłają je pojedynczo do odbiorcy. Główna część pakietu, ładunek , to określona liczba bajtów z wysyłanego pliku. Po ładunku następuje suma kontrolna lub cykliczna kontrola nadmiarowa (CRC), której można użyć do określenia, czy ładunek został odebrany poprawnie. Jeśli pakiet zostanie odebrany poprawnie, odbiorca wysyła komunikat ACK, a nadawca rozpoczyna wysyłanie następnego pakietu.

System telefoniczny wprowadza niewielkie opóźnienie znane jako opóźnienie, które zakłóca ten proces. Nawet jeśli odbiorca natychmiast wyśle ACK , opóźnienie w liniach telefonicznych oznacza, że ​​zawsze będzie trochę czasu, zanim nadawca je otrzyma i wyśle ​​następny pakiet. Wraz ze wzrostem szybkości modemu opóźnienie to oznacza coraz większą liczbę pakietów, które mogły zostać wysłane w czasie opóźnienia, zmniejszając wydajność kanału .

XMODEM używał 128-bajtowych ładunków z trzy-bajtowym nagłówkiem i jednobajtową sumą kontrolną, co daje łącznie 132 bajty na pakiet. W dobie 300 bps modemów pakiet trwało około czterech sekund, aby wysyłać i typowe opóźnienia były rzędu 1 / 10 sekundy, więc napowietrznej wydajność nie była znacząca. Wraz ze wzrostem prędkości problem staje się bardziej problematyczny; przy 2400 bps pakiet zajmuje około 1 / 2 do wysłania, więc o 1 / 5 z dostępnej przepustowości jest marnowana oczekiwania na ACK s. Przy 9600 bps pakiet wymaga tylko 0,13 sekundy wysłać, więc o 1 / 2 o przepustowości jest marnowana.

Jednym z rozwiązań tego problemu jest zastosowanie przesuwnego okna . Protokoły te rozwiązują problem opóźnienia, umożliwiając nadawcy kontynuowanie wysyłania wielu pakietów bez czekania na potwierdzenie . Liczba pakietów, które umożliwia kontynuowanie, to „okno”, które w większości implementacji wynosiło zwykle od dwóch do szesnastu pakietów. Wiele nowych wersji XMODEM z obsługą okien przesuwnych pojawiło się na początku lat 80.

Przesuwne okna są przydatne w przypadku opóźnień rzędu kilku długości pakietów, co ma miejsce w przypadku XMODEM na konwencjonalnych liniach telefonicznych. Jednak nie wystarczy zająć się dłuższymi opóźnieniami występującymi w zagranicznych rozmowach telefonicznych lub usługach X.25, takich jak PC Pursuit , gdzie opóźnienia są rzędu sekundy lub dłuższe. W innych przypadkach, gdy kanał zwrotny był znacznie wolniejszy niż kanał wysyłający, jak miało to miejsce w przypadku modemów Telebit lub US Robotics , nawet niewielka liczba ACK może przepełnić kanał zwrotny i spowodować wstrzymanie transferu.

ZMODEM rozwiązał te problemy, usuwając w ogóle potrzebę ACK , pozwalając nadawcy na ciągłe wysyłanie danych, o ile odbiorca nie wykrył błędów. Trzeba było wysłać tylko NAK , wtedy i tylko wtedy, gdy był problem. Ponieważ ZMODEM był często używany w łączach z wbudowaną korekcją błędów, takich jak X.25, odbiorca często nie wysyłał ani jednej wiadomości z powrotem do nadawcy. W rezultacie system wysyłałby cały plik w ciągłym strumieniu, a ZMODEM określał siebie jako „protokół przesyłania strumieniowego”.

Wydajność ZMODEM została tak ulepszona w porównaniu z poprzednimi popularnymi protokołami, że ogólnie zastąpił nawet specjalne protokoły, takie jak YMODEM-g , które nie zawierały żadnej korekcji błędów i zamiast tego polegały na bezbłędnych łączach obsługiwanych przez modemy. Chociaż YMODEM-g był szybszy, brak innych funkcji, takich jak ponowne uruchamianie transferów, sprawił, że był mniej atrakcyjny.

Uruchom ponownie

XMODEM i większość opartych na nim protokołów zarządzały kolejnością pakietów, poprzedzając dane numerem pakietu od 1 do 255. Wersje z oknem używały tego numeru pakietu, aby wskazać, które pakiety zostały odebrane prawidłowo, lub określić, który nie. Ponieważ pakiety miały długość 128 bajtów, oznaczało to, że maksymalna ilość danych, które można przesłać przed przeniesieniem numerów pakietów, wynosiła 32 kB.

ZMODEM zastąpił numer pakietu rzeczywistą lokalizacją w pliku, wskazywaną przez 32-bitową liczbę. Pozwoliło to na wysyłanie wiadomości NAK, które ponownie nawijały transfer do punktu awarii, niezależnie od długości pliku. Ta sama funkcja była również używana do wznawiania transferów, jeśli się nie powiodły lub zostały celowo przerwane. W takim przypadku odbiorca będzie szukał informacji o tym, ile danych zostało wcześniej odebranych, a następnie wyśle NAK z tą lokalizacją, automatycznie uruchamiając nadawcę od tego momentu.

Automatyczny start

Automatyczne uruchamianie uprościło zarządzanie, umożliwiając maszynie wysyłającej rozpoczęcie transferu. Wcześniej użytkownik musiał najpierw zażądać pliku od nadawcy, wprowadzając go w stan „oczekiwania”, a następnie powrócić do programu lokalnego i wywołać polecenie rozpoczęcia przesyłania. W przypadku automatycznego przesyłania po prostu zażądali pliku, a nadawca automatycznie uruchomiłby transfer w programie użytkownika.

Wariacje

Pojawiło się kilka zmodyfikowanych wersji ZMODEM. ZedZap był wariantem ZMODEM z 8-kilobajtowymi blokami dla lepszej wydajności na szybkich modemach. LeechZmodem był złośliwym wariantem ZMODEM (wśród podobnych pochodnych XMODEM i YMODEM), który oszukiwał limity pobierania BBS . Zgodne wstecz rozszerzenie ZMODEM o długościach bloków 32 kB i 64 kB zostało stworzone przez ADONTEC w 2002 i 2007 r. W celu zwiększenia wydajności szybkich, wolnych od błędów połączeń, takich jak sieci ISDN lub TCP / IP.

Najbardziej godne uwagi implementacje ZMODEM pochodziły od Chucka Forsberga z Omen Technology, Inc. Obejmowały one DSZ (DOS Send ZMODEM), GSZ (Graphical Send ZMODEM) i wszechobecny (l) rzsz dla wariantów Uniksa.

W dzisiejszych czasach programiści Synchronet stworzyli nowoczesną implementację X / Y / ZMODEM o nazwie SEXYZ, luźno opartą na pakiecie zmtx / zmrx, który działa natywnie w wariantach Windows i Unix, obsługuje długie nazwy plików i szybsze, bardziej niezawodne transfery danych . Implementacja ZMODEM firmy SEXYZ została również włączona do projektu SyncTERM. Synchronet, SEXYZ i SyncTERM to projekty typu open source, wieloplatformowe, zorientowane na BBS.

Sam Forsberg zebrał szereg ulepszeń w ZMODEM-90. Pierwszym z nich jest MobyTurbo, który usunął cytowanie kontrolne, aby jeszcze bardziej poprawić wydajność, o około 15%. Nawet w sieciach, które „zjadają” znaki sterujące, ZMODEM-90 można dostosować tak, aby cytował tylko te znaki, które faktycznie zjada sieć, w przeciwieństwie do wszystkich możliwych. Podobna poprawa umożliwia ZMODEM-90 pracę w sieciach 7-bitowych, podczas gdy wcześniejsze protokoły (z godnym uwagi wyjątkiem Kermit ) wymagały 8-bitów w takim czy innym stopniu. Wreszcie, ZMODEM-90 zawiera podstawowy system kompresji kodowania długości serii , aby jeszcze bardziej poprawić wydajność nieskompresowanych plików.

Ograniczenia

  • Niektóre pakiety ZMODEM (np. ZACK, ZRPOS) osadzają przesunięcie bajtów w przesyłanym pliku jako 32-bitową liczbę całkowitą bez znaku. Ten projekt ogranicza wykonalność ZMODEM do niezawodnego przesyłania tylko plików o rozmiarze poniżej 4 GB.
  • Mimo że protokół mógłby na to pozwolić, implementacja referencyjna (l) rzsz nie może kodować dowolnych znaków niebędących znakami sterującymi (np. „~”), Które są często używane przez programy obsługujące połączenia TCP / IP, takie jak telnet i ssh jako „ucieczka terminala” po stronie klienta postacie. Użytkownicy muszą wyłączyć funkcję ucieczki terminala, aby uzyskać niezawodne transfery przez tego rodzaju łącza, np. Ssh -e none user @ hostname.

Bibliografia

Linki zewnętrzne