Sms service
Overview
문자 전송 서비스 구현 방법 소개.
GSM
GSM 7 bit
SMS 메시지는 한번에 최대 160 byte 만 전송할 수 있다. 하지만 표현되는 문자의 범위가 다르다.
흔히들 ASCII code를 알고 있다. 하지만, 이는 컴퓨터 통신에서 사용되는 하나의 데이터 표현 규약 일 뿐이다. GSM SMS 통신에서는 사용하는 규약이 다르다.
GSM 에서는 GSM 7 bit 라는 규약을 사용한다. 그리고 GSM 을 이용해서 정확한 SMS을 전송하기 위해서는 전송하는 문자가 GSM 7 bit에 포함되는 문자여야 한다.
사실, 보다 근본적으로 살펴보면 SMS가 전달하는 것은 메시지가 아니라 데이터이다. 그리고, 송/수신되는 0과 1의 데이터를 GSM 7 bit 테이블 표에 의해 표현하는 것이다. 즉, 이 뜻은 GSM 7 bit 에 포함된 글자만 전송된다는 것이 아니라는 뜻이다.
다만, 통신사 내부 구현 방식에 의해서 내부적으로 메시지가 Encode/Decode 될 수가 있다. 그런데, Encode/Decode 되는 과정에서, GSM 표준을 벗어나는 글자(한글, 한자, 일본어)들은 오류가 발생할 수 있다. 이렇게 메시지 상에서 오류가 발생하게 되면 수신시 ??? 등으로 표시된다.(TDC에는 ??? 혹은 ㅁㅁㅁ 로 나타났음.)
- GSM 7 bit
|
|
SMS Segment
일반 SMS는 한번에 최대 160 character(GSM 7 bits characters)만 전송할 수 있다.
그러나, 실제 사용하는 휴대폰으로 얼마든지 160 character(GSM 7 bits characters) 이상의 데이터를 전송할 수 있는 것을 확인할 수 있다. 하지만 이는 반은 맞고 반은 틀린 내용이다.
내부적으로 단편화(Segmentation)가 일어나게 된다.<ref>http://help.cardboardfish.com/?q=ConcatenatedAndLongSMS</ref>
휴대폰에서 한번에 160 character(GSM 7 bits characters) 이상의 데이터를 전송하게 되면 내부적으로 이를 여러개의 SMS 으로 분할한 뒤, 전송하게 되는 것이다. 참고로, 요즘의 휴대폰으로는 이를 확인하기가 어렵다. 이를 확인하기 위해서는 GSM 모듈단의 접근이 필요하다.
그리고, 메시지 단편화가 발생되게 되면, 48 bits(6 bytes)의 추가 헤더 정보를 포함해야 하기 때문에 메시지 하나에 포함 가능한 데이터의 크기는 153 characters(GSM 7 bits characters) 줄어들게 된다. 실제 전송되는 SMS 메시지 갯수를 확인하기 위해서는 다음의 공식을 이용하면 된다.
- SMS Segment Count
Nc = Total number of characters in message Nx = Characters from extended GSM table (|^{}[]~\ and euro) L = Message length in 7-bit characters M = Number of messages L = Nc + Nx L > 160: M = L / 153 [rounded up] L <= 160: M = 1
- GSM 7 bit Extension
GSM 7 bit Basic 에 있는 캐릭터들은 1바이트로 표현이 가능하다. 하지만 Extension 에 있는 문자들을 표현하기 위해서는 2 바이트가 필요하다.
주요 서비스 사
Korea
- SK
- KT
- LG
Denmark
- TDC
Study
- SMS
- SMS wiki
- Why text messages are limited to 160 characters?
- GSM SMS specification(GSM 03.40, 3GPP TS 23.040)
- GSM SMS character set(GSM 03.38, 3GPP 23.038)
References
<references />