SMS - Datarepræsentation

Grundlæggende repræsentation

Inden vi går i gang med den grundlæggende repræsentation af SMS beskeder, så erindrer vi os lige helt overordnet, hvad bits og bytes er for nogle størrelser. En bit er det mindste element i et binært talsystem og kan antage enten 0 eller 1 som værdi. En byte er normalt 8 bits. Det binære talsystem (og det hexadecimale som er afledt af det binære) benyttes overalt i forbindelse med computerteknologi, herunder netværk. Det hexadecimale talsystem består af 16 tegn bestående af de sædvanlige 0-9 og bogstaverne A, B, C, D, E og F. Du kan læse om det hexadecimale talsystem på http://da.wikipedia.org/wiki/Hexadecimale_talsystem.

Når vi i det følgende kigger på, hvordan en SMS besked bliver sendt over netværket, så bliver den repræsenteret med tal ud fra det hexadecimale talsystem. De tekstbeskeder, vi normalt ser på vores telefon, kommer derfor til at se noget mere kryptiske ud.

Netværksarkitekturen ved afsendelse og modtagelse af SMS beskeder blev gennemgået i SMS - Netværksarkitektur. Som vi så på i det afsnit, så sendes SMS beskeder med MAP mo-ForwardSM og mt-ForwardSM operationer. Beskedernes samlede længde er begrænset af signalprotokollen til præcis 140 bytes (140 bytes = 140 * 8 bits = 1120 bits). SMS beskeder kan kodes i en række forskellige alfabeter: Standard GSM 7-bits alfabetet (vist herunder), som er det vi bruger her i Danmark, 8-bits data alfabetet og 16-bits UTF-16/UCS-2 alfabetet. Afhængig af, hvilket alfabet operatøren har konfigureret i mobiltelefonen, betyder dette et maximum i længden af SMS beskederne på 160 7-bits karakterer, 140 8-bits karakterer eller 70 16-bits karakterer (inklusiv mellemrum).

Alle GSM mobiltelefoner og netværksenheder skal understøtte 7-bits alfabetet. Karakterer i sprog som arabisk, kinesisk, koreansk, japansk og russisk er nødt til at benytte 16-bits UCS-2 alfabetet.

Større beskeder (konkatenerede SMS beskeder, segmenterede SMS beskeder eller "lang SMS") kan sendes ved hjælp af flere beskeder. I dette tilfælde vil hver besked starte med en User Data Header (UDH), der indeholder information om de enkelte segmenter. UDH sendes som en del af beskeden, så antallet af karakterer i hvert segment er mindre: 153 for 7-bits alfabetet, 134 for 8-bits alfabetet og 67 for 16-bits alfabetet. Den modtagende mobiltelefon er ansvarlig for at samle segmenterne til én besked og præsentere den for brugeren. Den teoretiske grænse for antallet af segmenter er 255, men 6 til 8 segmenter er det praktiske maksimum. Lange beskeder koster typisk det samme som det ville have kostet at sende et antal SMS beskeder svarende til antallet af segmenter[2].

Følgende tabel viser det 7-bits alfabet, der som standard benyttes til SMS beskeder[1]:

gsm-0338-defaultcharset.png

Nogle ekstra karakterer kan sendes ved at bruge <ESC> koden i ovenstående tabel plus en ekstra karakter, som vist i nedenstående tabel[1]:

gsm-0338-additionalchars.png

PDU formatet

Der er to måder at sende og modtage SMS beskeder: i tekst tilstand eller i PDU (Protocol Description Unit) tilstand. Tekst tilstanden (ikke tilgængelig på nogle telefoner) er blot en speciel tegnoversættelse af den bit stream, som PDU tilstanden repræsenterer. Det benyttede alfabet kan variere, idet der er flere muligheder ved visning af en SMS besked. De mest almindelige muligheder er "PCCP437", "PCDN", "8859-1", "IRA" og "GSM".

Modtage en besked i PDU formatet

PDU strengen indeholder ikke blot beskeden, men også en mængde meta-information om afsenderen, afsenderens SMS center, tidsstempel osv. Hele beskeden er repræsenteret som hexadecimale bytes eller decimale semi-bytes. Følgende streng er modtaget på en Nokia 6110 ved afsendelse af en SMS besked indeholdende "hellohello":

07 917283010010F5 040BC87238880900F10000993092516195800AE8329BFD4697D9EC37

Denne byte sekvens består af tre dele:

  1. En indledende byte indeholdende længden af SMS center information ("07")
  2. Selve SMS center information ("917283010010F5")
  3. SMS_DELIVER delen (specificeret af ETSI i GSM 03.40)
Bytes Beskrivelse
07 Længden af SMS center information (dvs. 7 bytes)
91 Typen af SMS center adressen (91 betyder internationalt format for telefonnummeret)
72 83 01 00 10 F5 SMS center nummeret (i decimal semi-byte format, der forklares i teksten under skemaet). Længden af telefonnummeret er ulige (11), så et F er tilføjet for at bevare byte-formatet. Nummeret er "+27381000015".
04 Første byte i denne SMS-DELIVER besked
0B Adresselængde. Længden af afsenderens nummer ("0B" i hexadecimal = "11" i decimaltal)
C8 Typen af afsendernummeret
72 38 88 09 00 F1 Afsenderens nummer (i decimal semi-byte format) med et F tilføjet
00 TP-PID. Protokol identifikator
00 TP-DCS. Data kodningsmetode
99 30 92 51 61 95 80 TP-SCTS. Tidsstempel (i decimal semi-byte format)
0A TP-User-Data-Length. Længden af beskeden. TP-DCS feltet angiver, at der er tale om 7-bit data, så længden her er antallet af 7-bits dataenheder (dvs. 10). Hvis TP-DCS var sat til 8-bit data eller Unicode, ville længden være antallet af bytes (dvs. 9).
E8329BFD4697D9EC37 TP-User-Data. Beskeden "hellohello", 8-bit bytes, der repræsenterer 7-bit data.

Alle de viste bytes i skemaet er hexadecimale 8-bit bytes undtagen nummeret på SMS centeret, afsenderens nummer og tidsstemplet. Disse er i decimal semi-byte format, der betyder, at den faktiske information findes ved at bytte om på tallene i hver byte. Afsenderens nummer oversættes på denne måde fra "72 38 88 09 00 F1" til "27 83 88 90 00 1F", idet "72" bliver til "27", "38" bliver til "83" osv. Længden af telefonnummeret er ulige, så der kan ikke dannes en fuld byte sekvens af nummeret. Derfor tilføjes et F i enden af telefonnummeret, der så blot skal ignoreres af modtageren.

Tidsstemplet bliver oversat til "99 03 29 15 16 59 08", hvor de første 6 karakterer repræsenterer datoen (29. marts 1999), de næste 6 karakterer repræsenterer tidspunktet (15:16:59) og de sidste 2 karakterer indeholder tidszonen relativt til GMT (8 timer efter GMT).

The message part in the end of the PDU string consists of hexa-decimal 8-bit octets, but these octets represent 7-bit data (see below).

Sende en besked i PDU formatet

Følgende eksempel viser, hvordan man sender beskeden "hellohello" i PDU tilstanden fra en Nokia 6110.

AT+CMGF=0     //Set PDU mode          
AT+CSMS=0     //Check if modem supports SMS commands          
AT+CMGS=23    //Send message, 23 octets (excluding the two initial zeros) 
>0011000B916407281553F80000AA0AE8329BFD4697D9EC37<ctrl-z>

Der er 23 bytes i denne besked (46 karakterer). Den første byte ("00") tæller ikke, da den blot angiver længden af den SMS center information, som beskeden indeholder. PDU strengen består af følgende:

Bytes Beskrivelse
00 Længden af SMS center information. Her er længden 0, hvilket betyder, at den SMSC, der er gemt på SIM-kortet, skal bruges.
11 Første byte i SMS-SUBMIT beskeden
00 TP-Message-Reference. Værdien "00" betyder at telefonen selv sætter besked reference nummeret.
0B Adresselængde. Længden af afsenderens nummer ("0B" i hexadecimal = "11" i decimaltal)
91 Typen af modtagerens nummer (91 betyder internationalt format for telefonnummeret)
64 07 28 15 53 F8 Telefonnummeret i decimal semi-byte format. Længden af telefonnummeret er ulige (11), så et F er tilføjet som om nummeret var "46708251358F". Hvis typen af modtagerens nummer var 81 for ukendt format, så ville telefonnummerets byte sekvens have været "7080523185" ("0708251358"). Bemærk, at længden nu er 10, der er et lige tal.
00 TP-PID. Protokol identifikator
00 TP-DCS. Data kodningsmetode. Denne besked er kodet i 7-bit format. Hvis dette felt havde indeholde "04" i stedet for "00", så ville beskedformatet have været 8-bit i stedet for 7-bit.
AA TP-Validity-Period. "AA" betyder 4 dage. Denne byte kan udelades.
0A TP-User-Data-Length. Længden af beskeden. TP-DCS feltet angiver, at der er tale om 7-bit data, så længden her er antallet af 7-bits dataenheder (dvs. 10). Hvis TP-DCS var sat til 8-bit data eller Unicode, ville længden være antallet af bytes (dvs. 9).
E8329BFD4697D9EC37 TP-User-Data. Beskeden "hellohello", 8-bit bytes, der repræsenterer 7-bit data.
Referencer
1. Connection Software: GSM 03.38 character set; www.csoft.co.uk, 2011; http://www.csoft.co.uk/sms/character_sets/gsm.htm
2. Developer's Home: What is an SMS Center / SMSC?; www.developershome.com, 2004-2011; http://www.developershome.com/sms/smsIntro.asp
3. Lars Pettersson: SMS and the PDU format; communication.howstuffworks.com, 2011; http://communication.howstuffworks.com/framed.htm?parent=sms.htm&url=http://www.dreamfabric.com/sms/
Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-NonCommercial 3.0 License