När vi studerar nätverk är det lätt att tänka på kablar, routrar och trådlös teknik. Men i grunden bygger all nätverkskommunikation på matematik – och särskilt på olika talsystem. Utan förståelse för hur datorer representerar tal och data är det svårt att förstå viktiga nätverksfunktioner som IP-adresser, MAC-adresser, programmering, kryptering och synkronisering.
Datorer och nätverk ”tänker” inte i ord eller bilder, utan i ettor och nollor – det binära talsystemet. Men för att människor ska kunna arbeta med dessa tal på ett enklare sätt används olika talsystem, som det decimala, det hexadecimala och ibland oktala.
Människor använder decimala (bas 10) talsystem för räkning och mätningar (förmodligen för att vi har 10 fingrar). Datorer använder binära (bas 2) talsystem, eftersom de är gjorda av binära digitala komponenter (kända som transistorer) som fungerar i två tillstånd – på och av. I beräkningar använder vi också hexadecimala (bas 16) eller oktala (bas 8) talsystem, som en kompakt form för att representera binära tal.
Decimaltal (bas 10) talsystem
Decimal talsystemet har tio symboler: 0, 1, 2, 3, 4, 5, 6, 7, 8 och 9, så kallade siffror. Den använder positions beteckning. Det vill säga, den minst signifikanta siffran (siffran längst till höger) är av storleksordningen 100 (enheter), den andra siffran längst till höger är av storleksordningen 101 (tiotal), den tredje höger- de flesta siffror är av storleksordningen 102 (hundratals), och så vidare. Till exempel,
735 = 700 + 30 + 5 = 7×102 + 3×101 + 5×100
Vi ska beteckna ett decimaltal med ett index 10. Till exempel 73510
Binärt (bas 2) talsystem
Binärt talsystem har två symboler: 0 och 1, kallade bitar. En binär siffra kallas en bit och åtta bitar kallas en byte eller oktett. Det binära talsystemet är också en positions beteckning, t.ex.
101102 = 10000 + 0000 + 100 + 10 + 0 = 1×24 + 0×23 + 1×22 + 1×21 + 0×20 = 2210 eller bara 22
- Den lilla tvåan (₂) skrivs som ett nedsänkt tal och anger att talet 10110 är skrivet i bas 2, det binära talsystemet. På samma sätt kan betecknas bas-10 tal, med en nedsänkt 10.
- Vissa programmeringsspråk betecknar binära tal med prefixet 0b eller 0B (t.ex. 0b1001000), eller prefixet b med bitarna citerade (t.ex. b’10001111′).
Nedan en tabell som sammanfattar vad vi hanterar inom nätverksteknologier.
| Position | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Bas | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |||
| Potens | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | |||
| Decimalt värde | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Det är bra att ni tränar er på att känna igen vissa vanliga värden i binärt och decimalt. Varför då? Jo, för att de dyker upp hela tiden i nätverkskonfigurationer – särskilt när vi jobbar med IP-adresser och nätmasker.
| Decimalt | Binär | Exempel |
|---|---|---|
| 128 | 10000000 | 128.0.0.0 |
| 192 | 11000000 | 192.0.0.0 |
| 224 | 11100000 | 224.0.0.0 |
| 240 | 11110000 | 240.0.0.0 |
| 248 | 11111000 | 248.0.0.0 |
| 252 | 11111100 | 252.0.0.0 |
| 254 | 11111110 | 254.0.0.0 |
| 255 | 11111111 | 255.0.0.0 |
Hexadecimalt talsystem (bas 16)
Hexadecimalt talsystem använder 16 symboler: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E och F, så kallade hexadecimala siffror och systemet är ett positionssystem, precis som vårt vanliga decimala talsystemet. Exempel:
A3E16 = AOO + 30 + E = 10×162 + 3×161 + 14×160
- Ofta betecknar olika programmeringsspråk hexadecimalt tal med prefixet 0x (t.ex. 0x1A3C5F)
- Andra notationer förekommer också, till exempel prefixet x följt av hexadecimala siffror (t.ex. xC3A4D98B).
- De flesta programmeringsspråk accepterar gemener ”a” till ”f” samt versaler ”A” till ”F”.
Observera att varje hexadecimal siffra motsvarar 4 binära bitar (en nibble). Exempel: 23 22 21 20
Om alla fyra bitarna är satta till 1, alltså 11112 motsvarar detta hexadecimalt F, eller 0xF.
Tabellen nedan visar motsvarigheten mellan hexadecimala, binära och decimala tal.
| Hexadecimal | Binär (bitpositioner) | Decimal | |||
|---|---|---|---|---|---|
| 2³ | 2² | 2¹ | 2⁰ | ||
| 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |
| 2 | 0 | 0 | 1 | 0 | 2 |
| 3 | 0 | 0 | 1 | 1 | 3 |
| 4 | 0 | 1 | 0 | 0 | 4 |
| 5 | 0 | 1 | 0 | 1 | 5 |
| 6 | 0 | 1 | 1 | 0 | 6 |
| 7 | 0 | 1 | 1 | 1 | 7 |
| 8 | 1 | 0 | 0 | 0 | 8 |
| 9 | 1 | 0 | 0 | 1 | 9 |
| A | 1 | 0 | 1 | 0 | 10 |
| B | 1 | 0 | 1 | 1 | 11 |
| C | 1 | 1 | 0 | 0 | 12 |
| D | 1 | 1 | 0 | 1 | 13 |
| E | 1 | 1 | 1 | 0 | 14 |
| F | 1 | 1 | 1 | 1 | 15 |
Koppling till IPv6
Eftersom en IPv6-adress är 128 bitar lång, skulle den bli enormt svår att läsa i binärt eller decimalt. Därför skrivs den i hexadecimalt, uppdelad i åtta block med fyra hex-siffror vardera, separerade med kolon.
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Hexadecimalt används i IPv6 för att göra de 128 bitarna hanterbara. Där en IPv4-adress är fyra oktetter i decimalt, är en IPv6-adress åtta block i hexadecimalt.”
Vi återkommer till IPv6 längre fram i kursen.