Nästa kapitel

6 PROTOKOLL

6.1 Användning av protokoll.

Man brukar säga att datorn är dum, att den enbart gör vad man sagt till den, dvs programmerat den. Då är det inte underligt att även datorns kommunikation med andra datorer och enheter måste vara lika noggrannt reglerad. Protokoll är helt enkelt en uppsättning regler för hur en sak skall utföras. Datakommunikations-protokoll är regler för hur kommunikationen skall ske. Pratar inte båda delarna i ett system enligt samma regler, samma protokoll, så förstår säkerligen inte mottagaren. Ett protokoll brukar även omfatta någon metod för att upptäcka och rätta fel.

Det finns många olika typer av protokoll. Det kan vara datalänkprotokoll, hur data skall överföras i nätet; det kan vara terminalprotokoll, vilka konster terminalen skall utföra för vissa specialtecken; det kan vara meddelandeprotokoll, hur ett meddelande skall se ut, vad det minst måste innehålla, och hur man skall läsa adressen. Alla dessa protokoll är olika typer av protokoll, för olika användningsbehov.

Det finns två typer av datalänkprotokoll, teckenorienterade (byte-oriented) och bit-orienterade (bit-oriented). Datalänkprotokoll kontrollerar dataöverföringen i länken (linjen, sladden) mellan enheterna.

6.2 Teckenorienterade länk-protokoll:

I ett teckenorienterat protokoll används vissa tecken för att kontrollera kommunikationen. Man använder s.k. kontrolltecken, i ascii-tabellen är det de 30 första tecknen. Skriver man ut de tecknen på en skrivare ger de antingen ingen utskrift, eller utför en funktion på skrivaren, som att mata fram ny rad, mata nytt ark, m.m. På bildskärmen brukar de visas som ^A för control-A (tecken nr 1), ^B för ctrl-B, osv.

NUL (tecken 0) NUL-tecknet används mest som utfyllnadstecken. Äldre skrivare kräver en viss tid från att ha skrivit Retur (vagnretur) tills skrivhuvudet kommit i position för att skriva igen. Då kan man fylla ut med ett antal Nul-tecken.

SOH (tecken 1, ^A) Start-Of-Heading används i många block-orienterade protokoll för att beteckna meddelanderubrik. I synkron trafik via multidrop följs SOH av en adress, som kontrolleras av alla terminaler på linjen för att se om de är mottagare. I asynkron trafik kan SOH användas för att beteckna nytt filnamn, så att flera filer kan överföras i samma sändning. Asynkron överföring innebär punkt-till-punkt kommunikation, och därför behövs ingen adress.

STX (tecken 2, ^B) Start-Of-Text avgränsar meddelanderubrik från meddelande.

ETX (tecken 3, ^C) End-Of-Text meddelar mottagaren att informationsblocket överförts. Tecknet används även för att beteckna början på checksumme-blocket.

EOT (tecken 4, ^D) End-Of-Transmission betyder att meddelandet är slut, alla data har överförts. På en multidrop-linje betyder EOT även att andra enheter skall börja lyssna aktivt efter meddelanden adresserade till dem.

ENQ (tecken 5, ^E) ENQuiry används i bisynk protokollet för att kräva svar eller status av den andra enheten på linjen, eller en specifikt adresserad enhet på en multidroplinje. Som svar på ENQ kan den tillfrågade enheten svara med numret på det sista block som togs emot med framgång. På en multidroplinje skulle centraldatorn kunna polla med ENQ adresserat till varje enhet i tur och ordning.

ACK och DLE (tecken 6, ^F, och tecken 16, ^P) ACKnowledgement signalerar att data togs emot korrekt. Mottagaren beräknar checksumma på mottagna data, och kontrollerar beräknad checksumma mot sänd checksumma. Stämmer de överens, sänder mottagaren ACK till avsändaren. I bisynk protokollet används tecknet Data-Link-Escape (DLE) tillsammans med teckenet 0 eller 1, DLE0 eller DLE1. DLE0 och DLE1 alterneras, på så sätt kan man lättare avgöra vilket block som försvann.

NAK (tecken 21, ^U) Negative-AcKnowledgement sänds av mottagren för att begära omsändning. NAK sänds när något fel i överföringen detekterats.

SYN (tecken 22, ^V) SYNchronous idle sänd i bisynk protokollet för att behålla synkronisering mellan sändare och mottagare, när inga data sänds på linjen. När SYN-serien avbryts, märker mottagaren att ett block data kommer.

ETB (tecken 23, ^W) End-of-Transmission-Block används i bisynk protokollet i stället för ETX när data är uppdelat på flera block. Det betyder slut på ett block, och det kommer fler.

6.2.1 Bisynchronous transmission, BSC.

Ett av de mest använda synkrona protokollen är IBM's BISYNC (binary synchronous communications) protokoll. Det kan användas med ASII- eller EBCDIC-data. För EBCDIC sker felkontroll med CRC-16. Bisync kan endast använda halvduplex. Det finns många versioner av BSC i användning. De tre vanligaste är kända som 2780, 3780 och 3270. 2780/3780 BSC används för remote job entry ("kortläsare") till en centraldator. 3780 kan utföra komprimering av mellanslag, och utför endast CRC vid blockslut, medan 2780 kan avsluta varje record med CRC. 3270 är avsett för anslutning av pollade enheter, på multidroplinje eller med en clusterkontroller. 3270 är ett begrepp för anslutning av IBM-terminaler.

Eftersom Bisync använder kontrolltecken för att styra dataflödet, betyder det att de data man sänder inte kan innehålla kontrolltecken, dvs man kan inte sända binära data, som mycket väl kan innehålla kontrolltecken. För att ändå kunna sända binära data sätter man in ett speciellt tecken (DLE) som betyder att "följande tecken är del av meddelandet", och på så sätt kan kontrolltecken överföras. Bisynk kan bara ha ett meddelande utestående. Sedan krävs svar av mottagaren, s.k. handskakning.

bild 6.1
Figur Generell BSC block struktur

Vi visar ett exempel på felkontrollen. Först visas en störning på linjen, sedan visas ett förlorat block. Observera att sändningen går i halvduplex. När mottagaren får ett block där sänd checksumma inte stämmer med beräknad checksumma, sänds NAK, och blocket sänds om igen. Notera att DLE0 och DLE1 alternerar. När det gäller "försvunna" block antar vi att terminalen tog emot block 2, och sände en bekräftelse som försvann eller förvanskades. Efter en tid sänder datorn ENQ för att få veta terminalens status. När terminalen mottar ENQ så måste den sända DLE0. Datorn sänder därefter om blocket.

bild 6.2
Figur BISYNC Protokoll

6.2.2 Bit-orienterade länk-protokoll.

Det finns flera olika bitorienterade protokoll grundade på HDLC (High-level Data Link Control) specificerat av ISO. Några kända namn är SDLC (Synchronous Data Link Control, från IBM), BDLC (Burroughs), UDLC (Sperry Univac). Det finns flera fördelar med bitorienterade protokoll. De kan hantera kommunikation i fullduplex, vilket ger högre genomströmning än i Bisync. Bitorienterade protokoll är transparenta för data, vilket gör att man utan problem kan överföra binära data.

6.2.2.1 HDLC

En enhet kontrollerar linjen och kommunikationen med de andra enheterna. Alla de andra enheterna är slavstationer som svarar på primärstationens pollar. I HDLC är begreppet "frame" (svenska "ram") mycket centralt. All information överförs i ramar, och det finns olika typer av ramar. I HDLC sänds både styrinformation och dataflöde i en ram. Ramen innehåller sex fält, varav första och sista är ramavgränsare, även kallad flagga, HDLC flag. Flaggan består av det unika bitmönstret 01111110 och definierar början och slut på en ram. För att skydda flaggan och ge en transparent förbindelse, sätter sändaren alltid in en nolla (extra) efter fem ett-bitar i följd. Mottagaren tar alltid bort en nolla efter att ha upptäckt fem ett-bitar i följd. Tekniken gör att inga överförda data kan råka ha ett flagg-mönster, medan förbindelsen är totalt transparent, dvs alla tecken kan överföras.

bild 6.3
Figur HDLC frame format.

Adressfältet är 8 bitar som identifierar slavstationen i överföringen. Styrfältet kan vara 8 eller 16 bitar, och identifierar ramen som en informationsram eller en kommando/svarsram. Informationsfältet innehåller sända data, och kan vara vilken längd som helst. Frame check sequence innehåller en 16-bit CRC-summa.

6.2.2.2 Styrfältet.

Styrfältet (control field) som är 8 bitar långt innehåller två summor, N(S) och N(R). Varje enhet håller räkning på N(S) och N(R). N(S) ökas med ett varje gång en ram sänds. N(R) innehåller det väntade numret på nästa ram som skall mottas. Med ett 8-bitars styrfält kan N(S) och N(R) variera mellan 0 och 7. Med ett 16-bitars styrfält mellan 0 och 127. Det är antalet ramar som kan sändas utan att kvittering erhållits. P/F biten är en poll/final bit. Den används vid pollning från primärstationen (satt till 1) för att få svar från slavstationen. Den sätts till 1 av slavstationen för att indikera att sista ramen i en sekvens har sänts.

bild 6.5
Figur HDLC control field formats.

bild 6.6
Figur Supervisory control field.

Kommando/svarsramen används i HDLC för att kontrollera dataflödet. De innehåller en N(R) räknare och används för att bekräfta eller begära omsändning av I-ramar, begära tillfälligt stopp av I-ramar, eller liknande funktioner.

6.2.2.3 Ett exempel.

Antag att vi har en fullduplex förbindelse, och att vi i figuren kan se ram-typ, N(S), N(R) och poll/final (P/F) bit.

bild 6.7
Figur HDLC fullduplex.

I sekvensen till vänster har primärstationen sänt fem ramar, 0 - 4, när den sätter pollbiten i ram 4. Biten tolkas av slaven som att den skall meddela sin status, och den sänder ett RR svar, där man ser att slaven väntar sig att motta ram nr 5 härnäst. Slaven sätter finalbiten för att indikera att sändningen är färdig. Svaret visar primärstationen att ram noll till fyra mottagits korrekt. Notera att HDLC kan utnyttja fullduplex, därför fortsätter primärstationen att sända I-ramar medan slavstationen svarar på pollen. När I-ram 7 sänds, sätter primärstationen pollbiten. Den får svaret att slaven väntar sig motta ram nr noll. Det betyder att ram 5 till 7 har mottagits korrekt. Att ram noll kommer igen efter ram sju beror på att vi här arbetar med 8 bitars styrfält. Arbetade vi med 16 bitars styrfält skulle vi kunna haft fler utestående ramar.

I sekvensen till höger störs linjen under sändningen av ram två. Under HDLC behöver inte sändaren vänta på svar för varje block, i motsats till Bisync, och den kan fortsätta sända tills maximala antalet utestående ramar nåtts. Sändaren kan också sända en poll till slavstationen för att få status på mottagning, samtidigt som den fortsätter att sända ramar. Sålunda pollade primärstationen slavstationens status i ram tre, och sände sedan ram fyra medan den väntade på slavens svar. När svaret kom visade det sig att slaven väntade sig att motta ram två, dvs alla ramar efter ram ett behövde sändas om. Efter att ha sänt ram fyra fick alltså primärstationen sända om ram 2, 3, 4.

Man kan notera att om selektiv reject kunnat användas, skulle slavstationen kunnat sända en selective reject av ram två. Då skulle primärstationen bara behövt sända om ram två, och sedan fortsatt med ram fem. Selective reject kan öka genomströmningen betydligt, men även utan får man betydligt större genomströmning än Bisync.

6.3 Asynkron överföring.

Asynkron överföring kallas ibland för start-stopp sändning. Sändningen börjar med en startpuls lika lång som en kodpuls. Startbiten är en övergång från mark (1) till space (0). Linjen är följaktligen i tillstånd mark när inga data sänds, och startbiten signalerar att data kommer härnäst. Därefter kommer data-bitarna. Efter tecknets alla bitar kommer en eller två stoppbitar, där linjen återställs i tillstånd mark. Mellan tecknen blir det ett uppehåll, idle time. Startbiten används för att synkronisera mottagaren, synkronisering sker alltså för varje tecken. Asynkron överföring används idag för hastigheter upp till 2400 bps över uppringd linje (observera att modemet kan ansluta asynkron utrustning med högre hastighet, överföringen mellan modemen sker ändå synkront), samt enheter anslutna direkt till datorn upp till 19,2 kbps.

bild 6.8
Figur Asynkron överföring.

6.4 Felkontroller och felrättning.

Det finns flera sorters störningar som datasignaler kan råka ut för. Mediet (kabeln) har ett visst motstånd som dämpar signalen. Induktans och kapacitans förvränger signalen. Gaussiskt brus existerar pga värmerörelserna hos elektronerna i en krets. Linjen kan störas av statiskt elektricitet eller dålig kontakt.

6.4.1 Asynkron överföring.

Paritet. Vid asynkron överföring är den mest använda felkontrollen paritetskontroll. Man använder en extra bit, paritetsbiten, för att upptäcka fel.

En extra bit läggs till varje tecken, så att totala antalet 1-bitar blir udda eller jämnt, beroende på om udda eller jämn paritet valts. Har man valt udda paritet sätts paritetsbiten till 1 om antalet ettor i tecknet är jämnt, paritetsbiten sätts till 0 om antalet ettor i tecknet är udda.

Har man valt jämn paritet sätts paritetsbiten till 1 om antalet ettor i tecknet är udda, paritetsbiten sätts till 0 om antalet ettor i tecknet är jämnt.

          databitar   paritetsbit
        -------------
        1 0 1 0 0 1 0 0      udda paritet
        1 0 1 0 0 1 0 1      jämn paritet

Ibland används även "mark" och "space" paritet. Mark paritet är att paritetsbiten alltid är satt till ett. Space parity är att paritetsbiten alltid är satt till noll.

Paritetskontroll är en enkel metod att upptäcka ett bitfel. Däremot kan metoden inte upptäcka ett jämnt antal bitfel.

        ASCII tecknet Q     1010010
        Jämn paritet        1010010 1
        1 bit felaktig      1110010 1   upptäcks av paritet
        2 bitar felaktiga   1111010 1   upptäcks inte av paritet

Många datorsystem använder ingen paritet alls, systemet struntar i eventuell paritet.

Block checking. Data grupperas i block för överföring. En checksumma beräknas och sätts på slutet av blocket innan det sänds. När blocket kommer fram beräknas checksumman på samma sätt, och jämförs med den överförda checksumman. Stämmer checksummorna överens, antar programmet att blocket överförts korrekt. Stämmer checksummorna inte, antas att blocket är felaktigt och måste sändas om. En populär block-check metod är att summera ASCII-värdet av varje tecken i blocket, och dela summan med 256. Resten från divisionen sätts till blocket som checksumma.

6.4.2 Synkron överföring.

De flesta felkontrollsmetoder för synkron överföring använder geometriska eller cykliska koder. Geometriska koder angriper paritetskontrollens brister genom att utsträcka den till två dimensioner. Man sätter paritet på varje tecken, liksom på alla tecken i blocket. Blockpariteten kallas ibland "longitudinal redundancy check" (LRC).

                paritetsbit
        1011011 0
        0100101 0
        0110100 0
        1001001 0
        0111101 0
        1010000 1
        0101110 1
        0111001 1
        1000110 0
        0110101 1

        1110101 1   Block parity check (LRC)

Kraftfullare metoder är cykliska koder. Datablocket behandlas som ett datapolynom, som divideras med ett fördefinierat polynom, så att ett kvot-polynom och ett rest-polynom skapas. Resten från divisionen är känt som Cyclic Redundancy Check, och är normalt 16 bitar. CRC beräknas först av sändaren, sätts sist i blocket, och mottagaren beräknar CRC samt jämför beräknad CRC med mottagen CRC. Stämmer de överens, har blocket överförts korrekt. Stämmer CRC inte överens begär mottagaren omsändning.

    Polynom som används.

    Standard              Polynom
    CRC-16  (ANSI)        X^16 + X^15 + X^5 + 1
    CRC-16  (CCITT)       X^16 + X^12 + X^5 + 1
    CRC-16  (BISYNC)      X^16 + X^15 + X^2 + 1
    CRC-12                X^12 + X^11 + X^3 + 1

CRC-16 (ANSI) används vanligen i USA. CRC-16 (CCITT) används oftast i Europa och HDLC. CRC-12 har generellt ersatts med CRC-16. CRC-16 har ett bitmönster av 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 .

6.5 ISO Referensmodell.

ISO har definierat en standard för kommunikationssystem. OSI standarden definierar sju lager som tillsammans utgör ett komplett dataöverföringsprotokoll. Varje lager innehåller specifika funktioner, och varje lager är oberoende av övriga lager med undantag av ett väl definierat gränssnitt mellan lagren. Det är endast två närstående lager som har ett gemensamt gränssnitt.

bild 6.9
Figur ISO lager.

Varje lager utför vissa funktioner som behövs för lagret ovanför. Fysiska lagret, lager 1, motsvarar direkta signaler, dvs signalnivåer, kontakter, om + 3 V skall betyda etta eller nolla, och vad - 3 V då skall betyda, m.m. Vanligen uttrycks lager 1 med något standardiserat interface, t.ex. V.24, V.28, RS-423-A, eller X.20. Länknivån, lager 2, motsvarar hur en enhet får tillgång till fysisk överföring, data format, felkorrektioner, och andra länkkontroller. Bisync och HDLC kan sägas ligga i detta lager.

Vi ser nu att lager 2 är inte beroende av lager 1, dvs använder vi HDLC protokoll, kan vi använda samma protokoll, även om vi t.ex. byter betydelse av + 3 V och - 3 V, kastar om dem. Vi har isolerat skikt 1 från skikt 2, och kan byta ut själva signaleringsprocessen utan att förändra lager 2 och lagren ovanför. Lager 3, nätverkslagret, ansvarar för logiska förbindelser mellan sändare och mottagare i nätverket. Lagret ansvarar för dataflödet genom nätverket, routing, växla mellan olika vägar, och flödeskontroll. Transportlagret, lager 4, ansvarar för att data mottas korrekt. Felkorrektioner, sekvenskontroll, och andra ändpunk-till-ändpunkt funktioner ligger här. Lagret är till för att utjämna skillnader mellan skikt 5 och skikt 3.

Sessionsskiktet, lager 5, innehåller regler för att koppla upp och koppla ned dataförbindelser mellan stationer. Logiska kommunikationsvägar, kallade sessioner, upprättas. Presentationsskiktet, lager 6, ansvarar för dataformat, som kodkonvertering, kryptering, datakomprimering, omvandling av syntax. Skiktet är till för att vid behov omvandla teckenkoder. Applikationsskiktet, lager 7, ger användaren tillgång till nätets tjänster. I princip kan man säga själva nätkommunikationsprogrammet, så som det ser ut för användaren.

bild 6.10
Figur OSI model.

Skälet till att man har infört skiktindelningen är att man kan byta procedur i ett enstaka skikt utan att behöva ändra eller byta de övriga skikten. Systemet blir flexiblare. Det blir lättare att anpassa olika system mot varandra, datakommunikation mellan olika tillverkares system och utrustning blir lättare att genomföra.

Alla tillverkare på marknaden hade redan tidigare infört en liknade skiktindelning. Problemen var att varje tillverkare hade sin egen skiktindelning, inte kompatibel med andra tillverkare. I flera fall är skikten inte isolerade från varandra. Därför fanns skäl att åstadkomma en standard. Likaså hävdar alla tillverkare att man kan uppnå ISO standard med deras befintliga nät-arkitektur, t.ex. IBM's SNA eller Digitals DECnet. Det stämmer, men bara till en viss del. Deras produkter är grundade på gamla specifikationer, och kan inte ändras för att motsvara ISO standard.

Nästa kapitel