Tere! Kuigi sÔnumiÀppid ja sotsiaalmeedia tÔrjuvad traditsioonilisi suhtlusviise, ei vÀhenda see SMS-ide populaarsust. Verifikatsioon populaarsetes saitides vÔi teated tehingutest jÀÀvad ellu ja elavad edasi. Kas olete kunagi mÔelnud, kuidas see kÔik toimib? Massiliste sÔnumite saatmiseks kasutatakse sageli SMPP-protokolli, millest siin juttu tuleb.
Habr'd on juba kirjutatud artikleid SMPP-st, ,, kuid nende eesmĂ€rk ei olnud protokolli enda kirjeldamine. Ilma kahtluseta vĂ”ite kohe alustada algallikast â , aga ma arvan, et oleks hea, kui olemas oleks ka lĂŒhike kokkuvĂ”te. Selgitan v3.4 nĂ€itel. Ootan teie objektiivset kriitikat.
SMPP-protokoll on ĂŒhtse sĂ”numite protokoll. See tĂ€hendab, et iga peer/hub server on vĂ”rdne. Lihtsaima variandi korral nĂ€eb SMS-sĂ”numite vahetamise skeem vĂ€lja nii:

Kuid kui riiklik operaator ei oma marsruuti, mis viib teatud kaugemasse piirkonda, palub ta selleks vahendajat â SMS hub'i. MĂ”nikord on ĂŒhe SMS-i saatmiseks vajalik luua ahel mitme riigi vahel vĂ”i isegi mandrite vahel.
Protokollist
SMPP on rakenduskiht, mis pĂ”hineb PDU vahetusel ja edastatakse TCP/IP vĂ”i X.25 sessioonide kaudu SMS- ja USSD-sĂ”numite edastamiseks. TĂŒĂŒpiliselt kasutatakse SMPP pideva ĂŒhenduse reĆŸiimis, mis aitab aega kokku hoida. SMPP kasutab kliendi ja serveri vahelist suhtlemismudelit.
Suhtlemise reĆŸiim

SĂ”numite vahetus saatja ja SMS-keskuse vahel SMPP kaudu vĂ”ib toimuda jĂ€rgmistes reĆŸiimides:
Transmitter (edastaja) â sĂ”numi edastamine ĂŒhes suunas, jĂ€rk-jĂ€rgult.
Receiver (vastuvĂ”tja) â ainult sĂ”numite vastuvĂ”tmine SMS-keskusest.
Transreceiver (vastu- ja edastaja) â SĂ”numite vahetus SMS-keskuse ja kasutaja vahel.
Struktuur

SÔnumi pikkus
Ăks SMS-sĂ”num vĂ”ib sisaldada 70 kirillitsatĂ€hte ja mitte rohkem kui 157 ladina tĂ€hte + 3 UDH. Kui saata SMS-i, millel on rohkem tĂ€hemĂ€rke, jagatakse see mitmeks segmentiks ja ĂŒhendatakse vastuvĂ”tvas seadmes. Segmenteerimise korral vĂ€henevad tĂ€hemĂ€rkide arv sĂ”numi pĂ€iste tĂ”ttu, milles on mĂ€rgitud sĂ”numi osa. SeetĂ”ttu, kui saata suur SMS-sĂ”num, sisaldab see maksimaalselt 153 ladina tĂ€hte vĂ”i 67 mittetĂŒĂŒpilist tĂ€hte.
Data Coding Scheme
Siiski nĂ”uavad sĂ”numi edastamiseks sĂŒmbolid kodeerimist. SMPP protokollis vastutab kodeerimise eest spetsiaalne vĂ€li â Data Coding Scheme ehk DCS. See vĂ€li nĂ€itab, kuidas sĂ”numeid tuleb tuvastada. Lisaks sisaldab DCS vĂ€li:
- sĂŒmbolite komplekti, mis mÀÀrab kodeerimise;
- sÔnumi klass;
- automaatse kustutamise taotlemise pÀrast lugemist;
- sÔnumi tihendamise mÀrge;
- laiaulatusliku sÔnumi keel;
Standardne 7-bitine alfabet (GSM 03.38). See on vĂ€lja töötatud GSM-i sĂ”numite sĂŒsteemi jaoks. Selline kodeerimine sobib inglise ja mitmete ladina keelte jaoks. Iga sĂŒmbol koosneb 7 bitist ja kodeeritakse oktetina.
UTF-16 (GSM UCS2) Puuduvaid sĂŒmboleid 7-bitise alfabeedi jaoks on arendatud UTF-16 kodeering, mis lisab tĂ€iendavad sĂŒmbolid (sealhulgas ka kirillitsat) sĂ”numi suuruse vĂ€hendamise arvel 160-lt 70-le. See kodeerimistĂŒĂŒp kordab peaaegu tĂ€ielikult Unicode'i.
Kasutaja mÀÀratud 8-bitised andmed. Nendeks on KOI8-R ja Windows-1251. Kuigi selline lahenduse nĂ€ib olevat mĂ”istlikum vĂ”rreldes sama UTF-16-ga, tekib pĂ”hjendatud kĂŒsimus ĂŒhilduvuse osas erinevates seadmetes. Kuna sel juhul peavad mĂ”lemad seadmed olema eelnevalt seadistatud.
SÔnumi klass
- Class0, vÔi flash sÔnum, mis jÀÀb telefoni mÀlu jÀrgi kasutaja soovile;
- Class1, vÔi need, mis salvestatakse telefoni mÀllu;
- Class1, vÔi need, mis salvestatakse telefoni mÀllu;
- Class2, peab tagama, et sÔnum salvestatakse mobiilterminalis, vastasel juhul peab see edastama SMS-keskusele teate, et salvestamine ei ole vÔimalik;
- Class3 â sel juhul peab telefon edastama teate, et sĂ”num vĂ”ib olla salvestatud, sĂ”ltumata seadme mĂ€lust. Selline sĂ”numi tĂŒĂŒp eeldab, et sĂ”num on jĂ”udnud adressaadini;
SĂ”numi tĂŒĂŒp
Silent message (SMS0) SĂ”numi tĂŒĂŒp, millel ei ole sisu. Selline SMS tuleb ilma teavitamiseta ja ei kuvata seadme ekraanil.
PDU
Iga PDU operatsioon on paaris ja koosneb pĂ€ringust ja vastusest. NĂ€iteks: kĂ€sk, mis ĂŒtleb ĂŒhenduse loomise kohta (bind_transmitter / bind_transmitter_resp), vĂ”i selle kohta, et sĂ”num on edastatud (deliver_sm / deliver_sm_resp).

Iga pdu pakett koosneb kahest osast â pealkiri (header) ja sisu (body). Pealkirja struktuur on igas pdu paketis sama: command length tĂ€hendab paketi pikkust, id on paketi nimi ja kĂ€sk status nĂ€itab, kas sĂ”num on edastatud edukalt vĂ”i vea tĂ”ttu.
Lisaparameetrid TLV
TLV (Tag Length Value) ehk lisavÀljad. Selliseid parameetreid kasutatakse protokolli funktsioonide laiendamiseks ning need ei ole kohustuslikud. Antud vÀli viiakse lisanÀitajana pdu vÀlja lÔppu. NÀiteks TLV dest_addr_np_information abil on vÔimalik korraldada teabe edastamine numbri porteerimise kohta.
Ton ja Npi
TON (Type of Number) parameeter teavitab SMSC-d aadressimise formaadist ja vĂ”rgu tĂŒĂŒbist.
NPI (Numbering Plan Identification) parameeter, mis mÀÀrab numbrite planeeringu.

SÔnumi allika aadress ehk alfa nimi
Telefonile saadetavad sĂ”numid jagunevad kahte liiki: digitaalsed ja tĂ€htedega. Digitaalsed vĂ”ivad olla pikad (sarnased telefoninumbriga) ja lĂŒhikesed. MĂ”nikord on operaatoritel piirangud neutraalsete nimede saatmiseks, nĂ€iteks Infosms, Alert jne. MĂ”ned operaatorid ei luba edastust, kui nimi ei ole registreeritud nende vĂ”rgus. Kuid see on pigem operaatori spetsiifika.
Saatmise etapid
![]()
SMS-SUBMIT â see on sĂ”numi MO FSM (lĂŒhi sĂ”num mobiilterminalilt) edastamine
SMS-SUBMIT REPORT â kinnitus, et sĂ”num on edastatud SMSC-le
SRI SM (SendRoutingInfo) â SMSC saab HLR-ilt teavet MSC / VLR asukoha kohta
SRI SM RESP â vastus HLR-ilt abonendi asukoha kohta
MT-FSM â pĂ€rast asukoha saamist saadetakse sĂ”num, kasutades operatsiooni âEdasta lĂŒhisĂ”numâ
MT-FSM ACK â vastus SMSC-lt, et sĂ”num on saadetud
SMS-STATUS REPORT â SMSC saadab sĂ”numi kohaletoimetamise staatuse.
SÔnumi kohaletoimetamise staatus
SMS-STATUS REPORT vÔib vÔtta mitmeid vÀÀrtusi:
DELIVRD sÔnum on edukalt kohaletoimetatud
REJECTD â sĂ”num on tagasi lĂŒkatud SMS-keskusest
EXPIRED â sĂ”num on eemaldatud saatmisjĂ€rjekorrast pĂ€rast TTL-i (sĂ”numi eluea) lĂ”ppu
UNDELIV â muud kohaletoimetamise juhtumid
UNKNOWN- pole saadud vastust edastamise kohta.
Erisused edastamises
MĂ”nikord on pĂ”hjused, miks SMS sĂ”numid ei kohaldu abonendile. Nende pĂ”hjuste tagajĂ€rjeks on vigade ilmnemine. Vead tagastatakse PDUs_sms_resp. KĂ”ik vead jagunevad ajutiseks (Temporary) ja pĂŒsivaks (Permanent).
NĂ€iteks vĂ”ib ajutiste hulka kuuluda absent_subscriber abonent on mitte kĂ€ttesaadav vĂ”i mitte vĂ”rgus, samas kui alalistena â abonent ei eksisteeri. SĂ”numite edastamise poliitika kujuneb sĂ”ltuvalt tekkivatest vigadest.
Kui abonent oli kÔne ajal ja sai vea MT handset is busy, saab sÔnumit uuesti saata mÔne minuti pÀrast, kuid kui abonent on sÔnumite vastuvÔtu teenuse blokeerinud, ei ole korduv edastamine mÔttekas. Vigade nimekirja leiate SMSC lehtedelt, nÀiteks nagu .
Allikas: habr.com
