Tillbaka

9. FILÖVERFÖRING.

9.1 Filöverföringsprotokollet.

Det är mycket vanligt att man vill flytta information mellan datorer. Ofta ligger informationen i filer, dvs man vill flytta en fil. Det har skrivits många programvaror för den funktionen. Alla program som överför data använder ett protokoll. Filöverföringsprogram använder filöverföringsprotokoll. Ett filöverföringsprotokoll är helt skilt från datalänkprotokoll, t.ex. HDLC, som används i den fysiska dataöverföringen Filöverföringsprotokollet ligger i högre skikt än datalänkprotokollet. Filöverföringsprotokollet bekymrar sig inte om hur data överförs, utan snarare hur filen skall delas upp, hur början/slut signaleras, vilken felkontroll som skall användas, hur fel skall åtgärdas.

De flesta större datorleverantörer erbjuder ett eget firmaspecifikt nätverksprotokoll, t.ex. Digitals DECnet, IBM's SNA, Bulls UFT. Varje dator är en station, nod, i nätet. Näten är inte begränsade till just filöverföring, utan är datornätsprotokoll. En av de viktigaste funktionerna i ett datornätsprotokoll är just filöverföring. De leverantörsbundna nätverken kräver fast uppkopplad förbindelse.

När persondatorn kom, växte behovet av att kunna flytta information via tillfälliga uppkopplingar. Man skulle inte behöva koppla upp sig i ett datornät och låta PC bli en nod. Man behövde inte tillgång till datornätets avancerade funktioner. Leveratörsbundna datornät kräver synkron förbindelse, för att ge vettiga prestanda. Här ville man använda en seriell linje, de flesta datorer brukar vara utrustade med en serieport, och då kan man även koppla upp sig via modem. Här kunde enkla filöverföringsprogram användas. Olika protokoll utvecklades, nya program skrevs. Med tiden har filöverföringsprogrammen fått många fler funktioner.

Det finns många protokoll för filöverföring, de viktigaste (För PC) är: Kermit, och Xmodem. Härutöver finns Saft, Telelink, Modem7, och Ymodem. Dessutom finns i många fall protokoll utvecklade av databasvärdar för överföring mellan värd och PC, som inte används utanför den databasvärden. Ett annat protokoll som har blivit vanligt, främst mellan Unix-datorer, är TCP/IP.

Man bör skilja mellan namnet på protokollet för filöverföring, och namnet på själva programmet. Kermit är namnet på både protokollet, och en uppsättning program som arbetar enligt Kermit-protokollet. Det finns även andra program som kan arbeta enligt Kermit-protokollet, men som heter något helt annat, t.ex. Procomm.

Ett av de mest spridda filöverföringprogrammen, och samtidigt namnet på protokollet, Kermit, utvecklades ursprungligen 1981-82 med syftet att kunna flytta filer från stordatorer (DECSYSTEM-20 och IBM) till en CP/M mikrodator, för att lagra filerna på floppy-disk. På den tiden var disk till stordatorn dyr. Columbia University i USA utvecklade snabbt versioner för CP/M och IBM PC. Eftersom man hade offentliggjort protokollet skrev några andra universitet versioner för andra mikrodatorer, och sände tillbaka till Columbia. På så sätt har en mängd olika Kermit-versioner utvecklats. Ja, Kermit har fått sitt namn efter grodan Kermit. Alla versioner av Kermit är fria, dvs ingen tar betalt för att du använder programmen, men ger ingen garanti för deras funktion heller. Det finns många versioner av Kermit, så kvaliteten varierar. Källkoden är alltid tillgänglig, därför kan man själv korrigera eventuella fel, eller skriva nya versioner. Nya versioner skall sändas till Columbia University, för att kunna distribueras ut i världen. Kermit är fri såtillvida att du kan kopiera ett program gratis, men du är inte fri att sälja ytterligare en kopia med vinstsyfte. Likaså får Kermit-protokollet användas i kommersiella programvaror, om priset inte höjs bara för att de innehåller Kermit. Programmen är utvecklade av frivilliga, dvs de har inte fått betalt för jobbet. Trots det är många versioner av hög klass, och mycket väl dokumenterade. Titta gärna på Kermit för IBM-PC, version 2.31. Den är duktig.

9.2 Vad är ett filöverföringsprotokoll ?

Ett filöverföringsprotokoll är avsett att hantera filöverföringar, det är inget dataöverföringsprotokoll. Dataöverföringen på linjen sköts av ett annat protokoll, vanligen använder man asynkron överföring. Filöverföringsprotokollet avgör vad programvaran skall göra med mottagna data, hur den skall kontrollera att data överförts rätt, vad göra om linjen bryts, m.m. Sådana funktioner har dataöverföringsprotokollet inte med att göra.

Här i texten kommer vi främst att ta upp programvara och protokoll för kommunikation PC - centraldator. Filöverföring i leverantörsbundna nät är olika mellan olika leverantörer, principerna är dock ganska lika.

9.3 Beskrivning av protokoll.

De två viktigaste protokollen för PC, Kermit och Xmodem, kommer att beskrivas och diskuteras.

9.3.1 XMODEM.

Xmodem används i många PC-kommunikationsprogram och BBS. Xmodem är mycket populärt, tack vare att protokollet är "public domain" vilket betyder att programvarukonstruktören inte behöver betala licensavgifter. En annan fördel är att algoritmen för att beräkna checksumma är lätt att programmera i högnivåspråk som Pascal eller Basic, medan CRC-16 vanligen programmeras i assembler. Härutöver är protokollet enkelt, det blir lätt att skriva program, och det kräver bara 256 bytes buffer, det får följaktligen lätt plats även i de första PC med maximalt 64 K minne.

bild 9.1
Figur XMODEM protocol

Den mottagande datorn startar överföringen genom att sända ett NAK. Den sändande datorn svarar på NAK genom att sända ett SOH kontrolltecken, följt av två tecken för blocknummer och två tecken för blocknumrets ett-komplement. Ett-komplementet får man fram genom att subtrahera blocknumret från 255. Därefter kommer ett datablock om 128 tecken, följt av checksummetecknet. Checksumman fås genom att addera ASCII-värdet på varje tecken i datablocket, och dela summan med 255, resten används som checksumma. Kvoten kastas. För varje datablock svara mottagaren med ACK, om blocket godkändes, eller NAK, om blocket var felaktigt överfört. Efter nio försök avbryts överföringen. Fel i överföringen upptäcks genom att checksumman inte stämmer, blocknumret och blocknumrets ett-komplement stämmer inte, eller SOH saknas, skall komma först i datablocket.

9.3.2 KERMIT.

Kermit-protokollet är uttryckligen avsett för teckenorienterad överföring över seriella telelinjer. Protokollet tillåter en hel del variationer, buffring, halv eller full duplex, paritet, teckenset, filorganisation, m.m. Protokollet är enbart avsett för överföring av ASCII-tecken. Överföringen sker i paket. Paketen är strukturerade i linje med ISO skiktmodell. I grunden ger Kermit bara överföring av sekventiella filer. Många utvidgningar finns, och de mest avancerade verionerna är försedda med en imponerande rad finesser. Kermit för mikrodatorer skall även innefatta en enkel terminalemulator, för att underlätta uppkoppling mot stordator. Allt eftersom fler datorer kopplas i lokala nätverk, kommer behovet av Kermit-liknande protokoll att minska. Däremot kommer aldrig behovet av enkla improviserade uppkopplingar och felfri dataöverföring att försvinna. Vanligast är att man vill överföra textfiler. De kan läsas och användas även på olika system. Kermit standard är 7-bitars Ascii, med rader som avslutas med CRLF. Binära filer kan inte användas på olika system, utan de måste föras tillbaka till ett av de ursprungliga systemen. Sådana filer överförs till ett olika system för att arkiveras.

9.3.2.1 För att Kermit-protokollet skall fungera krävs:

9.3.2.2 Kermit paket.

Kermit använder paket där alla fälten är Ascii-tecken. Paketen ser ut som:

Figur  Kermit paket.
  +--------+------------+------------+--------+--------+---------+
  |        |            |            |        |        |         |
  |  MARK  |  tkn(LEN)  |  tkn(SEQ)  |  TYPE  |  DATA  |  CHECK  |
  |        |            |            |        |        |         |
  +--------+------------+------------+--------+--------+---------+

Tkn( ) betyder att det här finns ett numeriskt värde, konverterat till skrivbart ascii-tecken. tkn=numeriskt värde + 32.
Fälten är:

MARK
Synkroniseringstecken, markerar att paket börjar. Vanligen kontroll-A.
LEN
Antalet Ascii-tecken som följer efter detta tecken, dvs paketlängden minus två. Detta antal konverteras till ett enda Ascii-tecken via en funktion som lägger 32 till talet, och använder det tecknet som kod. Därför kan paketlängden inte vara längre än 94 (94 + 32 + 2 =128), och antalet tecken i ett paket kan som mest vara 96. I paketlängden räknas checksumman in, men inte eventuella radslutstecken, som bara behövs för operativsystemet.
SEQ
Paketets sekvensnummer, 0 - 63. Efter 64 paket börjar numreringen om på 0.
TYPE
Ett tecken för typ av paket. Följande paket skall finnas, andra paket kan finnas i mer utvecklade versioner.
DATA
Eventuella data i paketet. Det finns pakettyper utan data, t.ex. ett NAK överför aldrig eventuell orsak till att paketet inte godkändes, och skall därmed ha ett tomt datafält.
CHECK
En checksumma i form av ett ascii-tecken. Alla tecken utom Mark och cheksummetecknet ingår i beräkningen. Checksumman måste stämma överens för sändande och mottagande dator. Denna blockcheck måste alla versioner av Kermit kunna. Avancerade versioner kan använda andra checksummor. Checksumman beräknas som summan av tecknens ascii-värde. Endast de första sex bitarna av summan används, och för att alla bitar i data skall användas läggs bit 6 och 7 till genom formeln: (s är summan)
check = tkn ((s + ((s AND 192)/64)) AND 63)

Andra tecken kan behövas. Vissa datorer kan inte läsa tecken för tecken, där måste varje paket avslutas med ett tecken, vanligen CR. Långsamma datorer kan behöva läsa in alla tecken i en buffert, ända tills det avslutande tecknet kommit, för att då börja tolka tecknen i maklig takt. Mellan paketen behöver vissa system handskakningstecken eller flödeskontrollerande tecken.

9.3.2.3 Filöverföringen.

En filöverföring, som kan omfatta en eller flera filer, börjar med ett S-paket (sändningsinitiering). Varje paket innehåller enbart skrivbara ascii-tecken, utom första tecknet (mark) som är ett kontrolltecken. Förvunna eller förvanskade paket sänds om. Både sändare och mottagare tar tiden de väntar, på svar eller nytt paket, om maskinen klarar att ta tid. Idag klarar alla maskiner att ta tid. Efter ett visst antal omsändningar, vanligen 5, avbryts överföringen. Datorer med time-share os kan bli väldigt långsamma med många samtidiga användare. Därför bör enbart en maskin räkna time-out, gärna det större systemet som därmed kan anpassa time-out-intervallet efter maskinens last. Andra fel kan inträffa. Mottagaren kan få ett skrivfel på disken, disken kan bli full, eller vara skrivskyddad. Då rapporteras ett fel genom ett "E"-paket. I datafältet finns en kort förklaring till vad som hänt. Det finns inget sätt att överföra varningar, man har valt denna väg eftersom användaren inte alltid tittar kontinuerligt på skärmen. Istället bör användaren logga överföringen på fil, för att där kunna titta om alla filer överfördes o.k., eller om någon fil inte kunde föras över.

bild 9.2
Figur Kermit transaction exempel.

I figuren ovan väntar båda sidorna i startläget på ett kommando. Vi antar att användaren vill sända en fil från mikrodatorn till stordatorn. Användaren startar Kermit på mikron, och går in i terminalemulatorn. Nu kopplar användaren upp förbindelsen mot stordatorn, via modem, växel, eller vad som krävs. När förbindelsen är kopplad, loggar användaren in och startar Kermit på stordatorn. Nu ger användaren kommandot "Receive" på stordatorn, och trycker därefter på escape-sekvensen (vanligen ctrl-Å). Escapesekvensen gör att man kan ge mikro-Kermit ett kommando, C (Close connection), som gör att man bryter terminalemuleringen, men själva linjen pc-stordator fortsätter vara uppkopplad. Nu kan användaren ge mikro-Kermit kommandot "SEND filn*.ext" där man specificerar att en grupp filer skall sändas, alla vars namn börjar med "filn". Den sändande Kermit sänder ett Send-Init-paket, som innehåller alla parametrar. Mottagaren upptäcker ett överföringsfel, checksumman stämmer ej, och svarar med NAK. Sändaren gör ett nytt försök, mottagaren svarar ACK med sina parametrar. Nu har båda sidornas Kermit angivit parametrar, finns inte någon önskad funktion med på båda sidor används inte denna. Filnamnspaket överförs, följt av datapaket. När filen är slut signaleras detta med ett filslutspaket. Eftersom vi här skulle sända en grupp av filer kontrollerar mikro-Kermit om det finns fler filer vars namn passar in, det gör det, och nästa filnamnspaket sänds. Ett datapaket sänds och ACKas, nästa datapaket sänds, och ACK för det paketet försvinner. Sändaren väntar tåligt på ett ACK, men får till sist "time out", för lång tid har gått. Då sänder sändaren samma paket igen, nu kommer ACK som svar, överföringen fortsätter, och filen tar slut. Inga fler filer finns att sända, ett "B"-paket sänds för att bryta förbindelsen, och när svaret mottagits är förbindelsen mellan de båda Kermit slut. Notera dock att linjen inte är nedkopplad, det måste användaren göra manuellt. Vanligen brukar användaren först ge kommandot "finish" som stoppar Kermit på stordatorn, sedan "connect" för att återgå till terminalemulering och förbindelsen med stordatorn. Där loggar användaren av sig, och kopplar ned linjen, kopplar ned terminalemuleringen, och kan avsluta Kermit på mikrodatorn. Filerna har sänts.

9.3.2.4 Överföring av binära filer.

För att med säkerhet kunna överföra alla kontrolltecken använder Kermit s.k. prefixtecken, dvs kontrolltecknet konverteras till ett skrivbart ascii-tecken. För att mottagaren skall veta att den måste konvertera tillbaka till kontrolltecken, används ett speciellt tecken före det konverterade kontrolltecknet, vanligen brädgård (#). Ett annat problem är överföringen av binära filer. De flesta mikro- och minidatorer arbetar idag med en ordlängd på 8 bitar, eller en multipel av 8 (16 eller 32), dvs använder 8-bits bytes. Kan man överföra 8-bits bytes korrekt mellan systemen, så har man överfört filen korrekt. Ibland kan dessa 8-bitars-datorer inte kopplas upp direkt, utan filen måste mellanlagras eller överföras via ett 7-bitars system. Det betyder att den åttonde biten kan påverkas, man vet inte säkert vad ett 7-bitars system gör med en åttonde bit. Därför finns i Kermit-protokollet en funktion "8th-bit prefixing". Den finns inte på alla versioner av Kermit. Det sker genom att ta bort åttonde biten från 8-bits byten, då får man ett 7-bitars ascii-tecken. Tecknet konverteras om nödvändigt till skrivbart tecken, och förses med "8th bit prefix", ett speciellt tecken som markerar för mottagaren att det här 7-bitars-tecknet skall konverteras till 8 bitar. Vanligen används "&" för 8th bit prefixing. På så sätt kan binära filer överföras mellan alla system. 8th bit prefixing innebär mycket arbete för programmet, och gör därför överföringen långsammare. Därför skall metoden inte användas om den inte är nödvändig.

Tillbaka