2. Datorkommunikation- ett problem



För att vi ska förstå vilka problem som föreligger vid kommunikation mellan datorer så ska vi börja så enkelt som möjligt, vi börjar med kommunikation mellan två datorer via serieporten, s.k. asynkron kommunikation. PC-datorer idag är oftast utrustade med två serieportar, ofta kallade COM1 och COM2 och/eller serial eller V24/RS232. Dessa portar används för kommunikation mellan datorer via en nollmodemskabel, eller för kommunikation med diverse kringutrustning t.ex. skrivare eller ett modem. För att en dator skall kunna kommunicera med en annan dator eller kringutrusting krävs regler. Vaddå för regler? Varför måste det finnas regler för kommunikationen? Tänk dig ett samtal mellan två personer. Om samtalet följer de oskrivna "regler" som finns vid kommunikation mellan människor, dvs. att man lyssnar när den andra talar och talar när det är ens tur, så flyter det på ganska bra och samtalet kan genomföras på ett vettigt sätt. Men om båda pratar samtidigt och i mun på varandra så skapar det kaos, och troligen så får ingen ut någon större nytta av det. Om datorerna inte skulle ha fasta regler som gäller när dom skall "prata" och när dom skall "lyssna", så skulle kommunikation inte kunna genomföras, kommunikationen skulle inte leda nån vart och den skulle avbrytas. Dessutom skall man ha i åtanke att datorer är dumma, de kan inte fatta egna beslut, de kan inte se nyanser eller läsa av känslor, egenskaper som människan är bestyckad med och kan använda vid kommunikation med andra människor. För att kommunikation mellan datorer ska kunna ske så krävs alltså mycket strikta regler. Dessa regler specifieras i vad man kallar ett kommunikationsprot okoll.

2.1 Asynkron datorkommunikation



Asynkron kommunikation är en kommunikationsform där det inte finns något som håller takten, vilket betyder att man måste ha samma inställningar för serieporten hos både sändare och mottagare när dessa skall kommunicera. Överföringen sker tecken för tecken, inte i block. Vid dataöverföring via nollmodemskabel används två pinnar på varje dators serieport, TxD och RxD. På TxD, Transmitt Data, skickas data och på RxD, Receive Data, tas data emot. Nollmodemskableln skiftar kabeln så att TxD pekar på RxD och vice versa.

Nollmodemkable version enkel



De spänningar som används är +10V och -10V. En logisk etta motsvaras av -10V och en logisk nolla motsvaras av +10V. Men hur vet exempelvis den ena datorn när den andra datorn vill börja kommunicera? Jo, man använder en s.k. startbit. I vila så är TxD ledaren -10V, eller en logisk etta, och då vet RxD på den andra datorn att det är vila. När sedan kommunikation skall påbörjas så skickas en logisk nolla, +10V, ut på TxD under en viss tid. Detta är den s.k. startbiten och efter den börjar man sända data, växelvis ettor och nollor under en viss tid. Om man ska skicka flera tecken så kommer det en eller flera stoppbitar som en avgränsare mellan tecknen, vilket innebär att TxD sätts hög, dvs. -10V under en tidsperiod. Om man vill kan man även använda en mycket enkel form av feldetektion med den s.k. paritetsbiten. Den hamnar då mellan datan och stoppbitarna. Paritetskontrollen räknar hur många ettor det är i varje tecken, och beroende på om det är jämn eller udda paritet så blir paritetsbi ten antingen hög eller låg. Bittiden, tiden som varje tecken sänds avgörs av överföringshastigheten. Överföringshastigheten mäts i BAUD eller BPS(Bits Per Second) och kan vara exempelvis 2400 , 4800, 9600, 14400, 19200, 38400, 56000 eller 115200 BPS. En överföringshastighet på 115200 BPS ger bittiden 1/115200»8,7mS. Överföringshastigheten väljer man i det kommunikationsprogram man använder. Där bestämmer man också om man vill ha paritetskontroll, och om man vill ha udda eller jämn paritet, samt hur många databitar man vill ha. Antalet databitar är 7 eller 8, men för att kunna se internationella tecken så behöver man ha 8 bitar. Dessa 7 eller 8 bitar har att göra med vilken ASCII teckentabell man använder. ASCII står för American Standard Code for Information Interchange, och är ett standard-iseringsorgan när det gäller t.ex. teckentabeller. ASCII tabellen gör att datorn kan tolka vilka tecken du skriver in på ditt tangentbord, översätta dom till ett binärt tal som sedan kan överföras till den andra datorn som sen gör samma process fast åt andra hållet, dvs. tar det binära talet och översätter det till ett tecken som kan visas på skärmen. Teckentabellen bör vara den samma i båda datorerna. Man måste göra samma inställningar i båda datorerna, dvs. samma överföringshastighet, paritetskontroll av/på, udda/jämn samt antalet bitar 7/8 och hur många stopbitar man vill ha.

2.2 Ett exempel



Okej, för att det här ska bli lite tydligare kan vi ta ett exempel. Vi säger att vi skall upprätta en kommunikation och det vi skall överföra är lite vanlig text, vi tar mitt namn Andreas. Hur gör vi? Hur kommer de signalerna som skickas att se ut? Ja, det beror ju på. Om vi bara skall skicka text mellan två PC-datorer utan att bry oss om hur det går till, så är det ju enkelt. Vi ser till att båda datorerna har serieportar, men det torde ju inte vara något problem då det ju i princip är standard på PC-datorer av idag. Sen så skaffar vi eller bygger en lämplig kabel, en s.k. nollmodemskabel, i dess allra enklaste form så behövde man ju bara ser till att TxD pekar på RxD. Så en sån kan man ju bygga rätt lätt själv. Sen så kan man ju behöva någon bra kommunikationsprogramvara, men sån följer med både DOS och senare versioner av Windows, så det räcker gott med dom. Då har vi allt vi behöver, hårdvara, överförings-medium och programvara. Så nu behöver vi bara se till att konfigurera båda datorerna på samma sätt. Vi kan t.ex. välja överföringshastighet 115200 BPS, ingen paritet, 8 databitar och en stoppbit. Sen är det bara att börja "prata" eller rättare sagt, skriva med varandra, skriver du något på din dator så kommer det snart också att stå på den andra datorns skärm. Men man kan göra mer än att bara skicka meddelanden mellan datorerna, man kan också överföra filer om man vill, men det kräver lite annan och bättre programvara. Men vi är ju lite mera intresserade av hur själva överföringen av datan går till eller hur? Hur ser signalerna ut som vandrar ut från min serieport, ut på kabeln och in i den andra datorns serieport när jag skriver Andreas på mitt tangentbord? Först så måste vi bestämma vilka parametrar vi skall ha , men vi tar väl samma som i föregående exempel, alltså 115200 BPS, ingen paritet, 8 databitar och en stoppbit. Ja, då återstår bara att fundera ut hur överföringen på seriekabeln ser ut i verkligheten. När sändning inte äger rum, så har TxD negativ potential, dvs. -10V, som ju var en logisk etta. Kommunikation inleds med att TxD sätts till +10V, eller logisk nolla, under en bittid. Sen så kommer det första tecknet, i vårt fall ett versalt A, att omvandlas till ett binärt tal enligt den teckentabell vi har. Vi skulle ju använda 8 bitars tabell och naturligtvis svensk sådan( på nästa sida finns det en sådan). Ett versalt A motsvaras av ASCII koden 65, eller 10000010 binärt. Så då skickas de t och sist kommer vår stopbit. Vi har alltså startbit -tecken - stopbit. Men en sak som man måste komma ihåg är att den lägsta biten kommer först (LSB=Least Significant Bit, minst värda bit)i själva tecknet, dvs. det binära talets lägsta tecken kommer först. Så 10000010 blir 01000001 på serieportens utgång. Binärt skulle alltså hela denna session se ut så här 1(stopbit)01000001(tecknet A versalt i binärform) 0(startbit) eller på ett oscilloskop:

Oscilloskopbild

Det var vad som behövdes för att skicka ett tecken mellan två datorer. Kontrollera gärna själv med ett oscilloskop att stämmer. Ska vi ta och skicka resten också? Vi har ett A, vilket betyder att vi bara har ndreas kvar. Ett gement n är enligt ASCII-tabellen är 110 decimalt, vilket ger 01110110 binärt, och med LSB först blir det 01101110. Sändningen blir som vanligt stopbit-tecken-startbit, alltså 1011011100. Sen var det d, som har det decimala värdet 100, eller 00100110, eller 01100100 med LSB först.. Sändningen blir 1011001000. Då var det r som har 114 decimalt som ASCII-värde, 01001110 binärt, och med LSB först 01110010. Sändningen blir 1011100100. Nu är det e som står på tur. e har ASCII-värdet 101 decimalt eller 10100110 binärt, eller med LSB först 01100101 binärt. Sändningen blir 1011001010. Nu tar vi a, gement, som har ASCII-värdet 97, 10000110 binärt och 01100001 med LSB först. Sändningen blir alltså 1011000010. Och sist har vi s, som har ASCII-värdet 115 decimalt, 11001110 binärt och 01110011 med LSB först. Sändningen blir 1011100110. Hela bitströmmen för Andreas blir alltså: 1011100110; 1011000010; 1011001010; 1011100100; 1011001000; 011011100;1010000010 s a e r d n A Lite krångligt är det ju, men det är ganska logiskt ändå, förutom att en 1:a är -10V och en 0:a +10V. Är det här ett bra kommunikationssätt? Det beror ju på vad man har för krav. Den asynkrona kommunikationen har en begränsad överföringshastighet, men om man inte har behov av det så är det en alldeles utmärkt kommunikationsform. En sak som kan göras bättre är fel-detekteringen, paritetskontrollen är långt ifrån bra, då det räcker med att två bitar får fel nivå så fungerar inte paritetskontrollen längre. Men, det finns bättre metoder, t.ex. checksumme-beräkning tillsammans olika varianter av protokoll, samt s.k. hårdvaruhandskakning och mjukvaruhandskakning. Kort sagt kan man säga att man kollar block av tecken istället för varje tecken, det går lite snabbare då. Protokollen definierar hur stora datablocken skall vara och sedan kontrollerar man dom med checksummeberäkning. Vid checksummeberäkning så summeras alla teckens ASCII värden, t.ex. skulle "Andreas" bli 65 110 100 114 101 97 115 som blir 702 decimalt. Sen kan man dividera med att visst tal, t.ex. 256. 702d/256d=190d i rest, BE hexadecimalt. Datablocket ser då ut så här: Starttecken, t.ex. SOH(ASCII värde 01d), blocknummer, det inverterade blocknumret, datablocket(ex. 128 bytes) och kontrollsumman hexadecimalt, i det här fallet alltså Beh. Hårdvaruhandskakning eller CTS/RTS använder en extra signalledning för att indikera när mottagaren kan ta emot data och när den inte kan det, för tvåvägskommunikation krävs två ledningar. Mjukvaruhandskakning eller XON/XOFF: Sändaren skickar olika tecken beroende på om kan ta emot data eller inte. XON betyder att den kan ta emot data, XOFF betyder att den inte kan det. Även fast det här är en väldigt enkel form av datorkommunikation, så ser vi att det snabbt blir krångligare och krångligare ju säkrare och snabbare överföring man vill ha. Men nu kanske det trots allt är så att kommunikation mellan endast två datorer inte är så intressant, utan för att kunna arbeta effektivare, dela på filer och resurser så krävs det något mera, nämligen nätverk där flera datorer kan kopplas samman. Hur fungerar kommunikationen där?





Föregående kapitel Innehållsförteckning Nästa kapitel

Copyright Andreas Höglund © 1999.