CHƯƠNG III. GIAO THỨC SMPP

Một phần của tài liệu nghiên cứu giao thức smpp và phát triển các dịch vụ tin nhắn sms (Trang 26 - 67)

SMPP (Short Message Peer to Peer) là một giao thức dùng để chuyển (transfer) các gói tin ngắn (short message) ra bên ngoài mạng Mobile, thông qua trung tâm dịch vụ tin ngắn (SMSC- Short Message Service Centre). Đồng thời một bên (không phải phía mobile) xem xét và nhận các gói tin được gọi là các thực thể tin ngắn mở rộng (ESMEs- External Short Message Entities).

Giao thức SMPP không trực tiếp quy định cách truyền tin trên mạng mà nó truyền tin trên cơ sở là giao thức TCP/IP. Do đó liên kết giữa tổng đài dịch vụ tin ngắn và thực thể tin ngắn mở rộng thực tế là liên kết theo chuẩn TCP/IP.

Hình 3.1. Giao thức SMPP trong mạng di động

Giao thức SMPP:

1. Thiết lập một quá trình trao đổi gói tin ngắn (short message) giữa ESME (External Short Message Entity) và SMSC (Short Message Service Centre – Trung tâm dịch vụ gói tin ngắn)

2. Dữ liệu của ESME phải được trao đổi với SMSC trong suốt quá trình hoạt động của giao thức SMPP.

3.1.1. Hoạt động của giao thức SMPP.

ESME: External Short Message Entity SMSC: Short Message Service Centre.

Để trao đổi các Message giữa ESME và SMSC thông qua giao thức SMPP thì có thể phân ra làm 3 quá trình cụ thể sau:

1. Các message được gửi từ ESME tới SMSC. (SMPP như là một Transmitter)

2. Các message được gửi từ SMSC đến ESME. (SMPP như là một Receiver)

3. Các message được gửi từ SMSC đến ESME và ngược lại. (SMPP như là một Transceiver)

Hình 3.2. Hoạt động của giao thức SMPP

3.1.2. Phiên làm việc của SMPP.

Một phiên làm việc của giao thức SMPP giữa SMSC (Short Message Service Centre) và ESME (External Short Message Entity) được bắt đầu bằng việc ESME thiết lập kết nối với SMSC rồi gửi tới giao thức SMPP, yêu cầu mở phiên làm việc SMPP. ESME sẽ xem sét và nhận message đã được yêu cầu để thiết lập hai quá trình kết nối mạng và hai phiên làm việc của SMPP (Transmitter và Receiver).

Trong suốt phiên làm việc của SMPP, ESME sẽ gửi hàng loạt các yêu cầu tới SMSC và nhận lại những câu trả lời phù hợp với mỗi request từ SMSC. Tương tự như vậy phía SMSC cũng gửi các yêu cầu tới ESME nhưng phải phù hợp với các câu trả lời.

Một phiên làm việc của SMPP có thể được xác định trong các phạm vi các trạng thái dưới đây:

OPEN (Khi kết nối và trong khi chờ đợi đóng kết nối: Connected and Bind pending): Một ESME đã thiết lập kết nối tới SMSC nhưng vẫn chưa đưa ra yêu cầu kết nối (Bin).

BOUND_TX: Khi một ESME đã kết nối nó sẽ yêu cầu nối kết (to bind) như là một ESME Transmitter (được gọi là bin_transmitter PDU) và nhận được câu trả lời từ SMSC cho những yêu cầu nối kết của nó.

Khi đó ESME đã nối kết như một transmitter (máy phát), có thể gửi các short message tới một SMSC rồi chuyển tới trạm Mobile hoặc ESME khác. ESME đó có thể thay thế, xem xét hoặc loại bỏ short message trước.

BOUND_RX: Một ESME đã kết nối sẽ yêu cầu nối kết như một ESME Receiver (được gọi là bind_receiver PDU) và nhận trả lời từ SMSC cho những yêu cầu nối kết của nó.

Khi đó ESME đã nối kết như là một receiver (máy thu) có thể nhận các short message tử một SMSC, có thể bắt nguồn từ một trạm Mobile hoặc từ ESME khác hoặc từ chính SMSC

BOUND_TRX: Một ESME đã kết nối sẽ yêu cầu nối kết như một ESME transceiver ( còn được gọi là một bind_transceiver PDU) và nhận một câu trả lời từ SMSC cho yêu cầu của nó.

Một ESME đã nối kết như một transceiver hỗ trợ toàn bộ một quá trình hoạt động bởi một ESME transmitter và một ESME receiver. Bởi vậy một ESME đã nối kết như một transceiver có thể gửi các short message tới một SMSC rồi gửi tới một trạm Mobile hoặc ESME khác. ESME cũng có thể nhận các short message từ một SMSC, có thể bắt nguồn từ một trạm Mobile hoặc từ ESME khác hoặc từ chính SMSC .

CLOSE (tháo và ngắt kết nối): một ESME tháo và ngắt kết nối với SMSC và SMSC cũng tháo và ngắt kết nối với ESME.

*Outbind:

Mục đích của sự hoạt động của outbind là cho phép SMSC phát tín hiệu cho một ESME có thể bắt đầu một yêu cầu bind_receiver tới SMSC.

Một phiên làm việc SMPP giữa một SMSC và một ESME có thể được bắt đầu bằng việc SMSC thiết lập một kết nối mạng với ESME. Khi một quá trình kết nối mạng được thiết lập thì SMSC sẽ nối kết với ESME và đưa ra một yêu cầu outbind. ESME sẽ trả lời cho yêu cầu bind_receiver, và SMSC sẽ hồi âm với một

bind_receiver_resp. Nếu ESME không chấp nhận phiên làm việc của outbind (chẳng hạn do hệ thống hoặc mật khẩu bị lỗi) thì ESME có thể ngắt kết nối mạng.

Một phiên làm việc của SMPP khi được thiết lập thì đặc điểm cơ bản nhất của phiên đó chính là một phiên receiver SMPP thông thường.

Hình 3.3. Phiên làm việc của SMPP (adsbygoogle = window.adsbygoogle || []).push({});

3.1.3. SMPP PDUs (SMPP Protocal Data Units - Các bộ dữ liệu giao thức SMPP)

Bảng dưới đây liệt kê tập hợp bộ dữ liệu giao thức SMPP (SMPP PDU) và các trường hợp mà các PDU có thể được dùng:

Tên SMPP PDU Trạng thái của phiên SMPP yêu cầu Được đưa ra từ phái ESME Được đưa ra từ phía SMSC

Bind_transmitter OPEN Yes No

Bind_transmitter_resp OPEN No Yes

Bind_receiver OPEN Yes No

Bind_receiver_resp OPEN No Yes

Bind_transceiver OPEN Yes No

Bind_transceiver_resp OPEN No Yes

Outbind OPEN No Yes

Unbind BOUND_TX BOUND_RX BOUND_TRX Yes Yes Yes Yes Yes Yes unbind_resp BOUND_TX BOUND_RX Yes Yes Yes Yes

Tên SMPP PDU Trạng thái của phiên SMPP yêu cầu Được đưa ra từ phái ESME Được đưa ra từ phía SMSC

BOUND_TRX Yes Yes

submit_sm BOUND_TX BOUND_TRX Yes Yes No No submit_sm_resp BOUND_TX BOUND_TRX No No Yes Yes submit_sm_multi BOUND_TX BOUND_TRX Yes Yes No No submit_sm_multi_resp BOUND_TX BOUND_TRX No No Yes Yes data_sm BOUND_TX BOUND_RX BOUND_TRX Yes Yes Yes Yes Yes Yes data_sm_resp BOUND_TX BOUND_RX BOUND_TRX Yes Yes Yes Yes Yes Yes deliver_sm BOUND_RX BOUND_TRX No No Yes Yes deliver_sm_resp BOUND_RX BOUND_TRX Yes Yes No No query_sm BOUND_TX BOUND_TRX Yes Yes No No query_sm_resp BOUND_TX BOUND_TRX No No Yes Yes cancel_sm BOUND_TX BOUND_TRX Yes Yes No No

Tên SMPP PDU Trạng thái của phiên SMPP yêu cầu Được đưa ra từ phái ESME Được đưa ra từ phía SMSC BOUND_TRX No Yes

replace_sm BOUND_TX Yes No

replace_sm_resp BOUND_TX No Yes

enquire_link BOUND_TX BOUND_RX BOUND_TRX Yes Yes Yes Yes Yes Yes enquire_link_resp BOUND_TX BOUND_RX BOUND_TRX Yes Yes Yes Yes Yes Yes alert_notification BOUND_RX BOUND_TRX No No Yes Yes generic_nack BOUND_TX BOUND_RX BOUND_TRX Yes Yes Yes Yes Yes Yes 3.1.4. Kết nối tầng mạng SMPP

Nằm phía dưới tầng giao vận, giữa SMSC và ESME có thể được dựa trên quá trình kết nối mạng của giao thức TCP/IP hoặc X.25

SMPP là một giao thức hoạt động ở tầng ứng dụng và nó không hỗ trợ các chức năng của tầng giao vận. Bởi vậy quá trình kết nối ở phía dưới tầng mạng cung cấp một quá trình truyền dữ liệu đáng tin cậy từ vị trí này đến vị trí khác (point to point), bao gồm quá trình mã hóa gói tin, cửa sổ, điều khiển quá trình chảy tràn (flow) và quản lý lỗi.

Như vậy tại tầng SMPP thì ESME và SMSC đều coi sự kết nối như là một quá trình truyền đáng tin cậy để quản lý các quá trình trao và nhận các SMPP PDU. Hình vẽ dưới sẽ cung cấp giao diện SMPP cơ bản thực hiện quá trình trao đổi thông tin giữa SMSC và ESME:

Hình 3.4. Quá trình trao đổi thông tin giữa ESME và SMSC

3.1.5. SMPP messages gửi từ ESME đến SMSC:

Một ESME gửi một short message tới SMSC phải được kết nối tới SMSC như là một ESME transmitter hoặc như là một ESME transceiver. Chẳng hạn SMPP gửi các bộ giao dữ liệu giao thức (PDUs-Protocol Data Units) có thể gửi từ một ESME transmitter tới SMSC, bao gồm:

• submit_sm •data_sm

Hơn nữa để xem xét các message từ phía SMSC thì ESME có thể thực hiện các hoạt động dưới đây của SMPP sử dụng các từ đặc tả của message đã được gửi trả lại bởi SMSC trong message ACK:

query_sm - Query the SMSC for the status of a previously submitted message. • cancel_sm - Cancel delivery of a previously submitted message.

replace_sm - Replace a previously submitted message.

3.1.5.1. SMPP messages phản hồi từ SMSC đến ESME:

Bộ dữ liệu của giao thức SMPP trả lời một messge từ SMSC bảo gồm định danh của message (phải được gán tên duy nhất liên quan đến đặc điểm của message) và trạng thái để báo cho ESME biết rằng message đã được submit có giá trị hay không còn giá trị. Trong một số trường hợp SMSC sẽ trả về mọt trạng thái lỗi thích hợp: (adsbygoogle = window.adsbygoogle || []).push({});

submit_sm_resp • data_sm_resp • query_sm_resp

cancel_sm_resp

replace_sm_resp

3.1.5.2. Trình tự của một phiên làm việc điển hình của SMPP - ESME transmitter:

Sơ đồ dưới đây mô tả một trình tự yêu cầu/trả lời SMPP (SMPP request/response) giữa một SMSC và một ESME như một trạm phát (transmitter).

• Sự trao đổi của các PDU yêu cầu/trả lời (request/response) SMPP giữa một ESME transmitter và SMSC có thể sảy ra đồng thời hoặc không đồng thời như hình dưới. Bởi vậy, nếu ESME muốn gửi nhiều yêu cầu tới SMSC mà không cần cùng một lúc thì sẽ chờ các PDU trả lời.

• Hàng loạt các yêu cầu SMPP liên tiếp được đưa ra không đồng thời cùng một lúc của một ESME (như số thứ tự trong ngoặc đơn của hình dưới) phải được sinh ra ngay sau khi có các câu trả lời từ phía SMSC.

• Các câu trả lời SMPP sẽ được trả về từ phía SMSC theo đúng trình tự các yêu cầu đã nhận được từ phía ESME. Tuy nhiên điều này thì không bắt buộc trong SMPP và ESME có khả năng quản lý trình tự các câu trả lời mà nó nhận được.

• ESME sẽ trả về các câu trả lời SMPP tới SMSC theo đúng trình tự mà nó đã nhận được yêu cầu ban đầu.

Hình 3.5. Trình tự một SMPP request/response của một ESME Transmiter

3.1.6. SMPP message gửi từ SMSC tới ESME :

SMSC chuyển một tin ngắn tới ESME, trong trường hợp này ESME phải được kết nối với SMSC như là một ESME Receiver hoặc một ESME Transceiver.

Ứng dụng điển hình của ESME là hoạt động như một SMPP receiver, bao gồm: • Một cổng email lấy tin được tạo ra bởi trạm mobile rồi chuyển ra ngoài hộp email Internet.

• Phía SMSC có thể cũng gửi một “deliver receipt” (xác nhận đã chuyển) tới ESME, xác nhận này sẽ chứa trạng thái deliver (chuyển) của tin ngắn được chuyển lần trước.

Các ví dụ về bộ dữ liệu giao thức của tin nhắn SMPP được gửi từ một SMSC tới tới một ESME receiver bao gồm :

• data_sm

3.1.6.1. SMPP Message phản hồi từ ESME tới SMSC

Các câu trả lời SMPP PDU từ ESME receiver phải được duy trì trong quá trình giải quyết các PDU bằng các từ định danh (chứa trong tham số parameter) được gửi bởi SMSC. Các câu trả lời cũng phải bao gồm các trạng thái dòng lệnh để báo cho phía SMSC biết được rằng các tin đã gửi tới ESME có giá trị (chẳng hạn như đã được ESME chấp nhân) hoặc không có giá trị. Trong trường hợp các tin nhắn gửi không có giá trị thì ESME sẽ trả về trạng thái lỗi SMPP tương ứng.

Các câu trả lời SMPP có thể được gửi từ ESME tới SMSC bao gồm:

• deliver_sm_resp • data_sm_resp

3.1.6.2. Trình tự phiên làm việc của SMPP - ESME Receiver

Sơ đồ dưới đây mô tả một trình tự yêu cầu/trả lời SMPP (SMPP request/response) giữa một SMSC và một ESME như một trạm thu (Receiver).

• Sự trao đổi của các PDU yêu cầu/trả lời (request/response) SMPP giữa một ESME transmitter và SMSC có thể sảy ra đồng thời hoặc không đồng thời như hình dưới. Bởi vậy, SMSC có thể gửi nhiều yêu cầu deliver_sm tới ESME mà không cần cùng một lúc thì sẽ chờ các PDU trả lời.

• Hàng loạt các yêu cầu SMPP liên tiếp được đưa ra không cùng một lúc bởi SMSC (như thứ tự của các số trong ngoặc đơn của hình dưới) phải được sinh ra ngay sau khi có các câu trả lời từ phía ESME.

• Phía ESME luôn trả về các câu trả lời SMPP tới SMSC theo đúng trình tự các yêu cầu ban đầu mà nó đã nhận được từ phía SMSC. Tuy nhiên điều này thì không bắt buộc trong SMPP và SMSC có khả năng quản lý trình tự các câu trả lời mà nó nhận được.

• Các câu trả lời SMPP sẽ được trả về từ phía SMSC theo đúng trình tự các yêu cầu đã nhận được từ phía ESME. Tuy nhiên điều này thì không bắt buộc trong SMPP và ESME có khả năng quản lý trình tự các câu trả lời mà nó nhận được.

Hình 3.5. Trình tự một SMPP request/response của một ESME Receiver

3.2. Kiểu và định dạng SMPP PDU (Short Message Peer to Peer Protocal Data Unit)

3.2.1. Các kiểu của SMPP PDU:

Dưới đây là các định nghĩa về kiểu dữ liệu SMPP PDU mà các kiểu dữ liệu này được sử dụng để xác định trong các tham số SMPP: (adsbygoogle = window.adsbygoogle || []).push({});

• Kiểu Interger: là số mang giá trị không dấu, được định nghĩa như là một số octets. Số octets luôn được chuyển thành MSB(Most Significant Byte-Byte quan trọng nhất) (Big Endian)đầu tiên.

• Kiểu C-Octets string: là một chuỗi các các ký tự ASCII được kết thúc bởi ký tự NULL.

• Kiểu C-Octets string(Decimal): là một chuỗi các ký tự ASCII, mỗi ký tự biểu diễn một số thập phân từ 0 dến 9 và kết thúc bởi ký tự NULL.

• Kiểu C-Octets string(Hex): là một chuỗi các ký tự ASCII, mỗi ký tự biểu diễn một số hexadecimal (hệ thập lục phân-hệ đếm 16) và kết thúc bởi ký tự NULL.

• Kiểu Octet string : là một dãy gồm tám số và không nhất thiết phải kết thúc bằng ký tự NULL.

Sau đây là chú thích về kích thước của các trường tham số SMPP, các kiểu này thì được sử dụng thường xuyên, một số thì tùy chọn còn một số là bắt buộc:

Kích thước Kiểu Mô tả

4 Interger Trường Interger có kích thước cố định, trong trường hợp này thì là một số có 32 bit (4 octets).

Var Max 16

C-Octet String

Xâu này có chiều dài thay đổi được từ 1 đến 15 ký tự ASCII, theo sau là một octet mà kết thúc bởi ký tự NULL. Một xâu rỗng thì được mã hóa như là một octet chứa ký tự NULL (0x00).

Fix 1 hoặc 17

C-Octet String

Chiều dài của xâu này là cố định, có 2 khả năng: trường hợp thứ nhất là có một octet chứa ký tự NULL, trường hợp thứ 2 là chứa một số cố định các ký tự và được kết thúc bởi ký tự NULL(trong trường hợp này thì sẽ có 16 ký tự và một ký tự NULL).

Var 0 đến 254

Octet String

Giá trị của Octet string có thể thay đổi được(trong trường hợp này nó có thể thay đổi từ 0 đến 254 octet)

3.2.2. Định dạng SMPP PDU (Bộ dữ liệu giao thức SMPP):

Thông thường, gói dữ liệu SMPP PDU bao gồm một phần đầu (header) PDU và một phần thân (Body) PDU như bảng dưới đây:

SMPP PDU

PDU Header (bắt buộc) PDU body (tùy

chọn) Command length Command id Command status Sequence number PDU body

4 octets Length=( Command Length value – 4) octets

SMPP PDU header là phần bắt buộc đối với mọi bộ dữ liệu giao thức SMPP (SMPP PDU) và luôn luôn có mặt trong bộ dữ liệu giao thức SMPP. Ngược lại phần

PDU body có thể có hoặc không trong các bộ dữ liệu giao thưc SMPP.

Định dạng trong mỗi bộ dữ liệu giao thức SMPP sẽ được mô tả chi tiết trong phần 3.3 (Mô tả chi tiết các bộ dữ liệu SMPP PDU).

3.2.2.1.Cách sắp xếp SMPP PDU H E A D E R

Trường thướcKích Kiểu Mô tả

Command_length 4 Interger Trường Command_length xác định tổng chiều dài các octet của gói tin SMPP PDU kể cả trường

length. (adsbygoogle = window.adsbygoogle || []).push({});

Command_id 4 Interger Trường Command_id sẽ xác định một SMPP PDU cụ thể, chẳng hạn submit_sm, query_sm, ...

Một lệnh duy nhất cho phép mỗi SMPP yêu cầu PDU trong khoảng 0x00000000 đến 0x000001FF.

Một lệnh duy nhất cho phép mỗi SMPP trả lời PDU trong khoảng 0x80000000 đến 0x800001FF.

Lưu ý rằng mỗi một lệnh yêu cầu SMPP sẽ tương ứng với một lệnh trả lời SMPP.

Command_status 4 Interger Trường Command_status sẽ cho biết một yêu cầu SMPP là thành công hay thất bại. Nó chỉ liên quan trong câu trả lời của SMPP tới PDU và nó phải chứa giá trị NULL trong một yêu cầu SMPP đối với PDU.

phép SMPP yêu cầu và trả lời được kết hợp với nhau trong các mục đích tương quan.

Sử dụng số hiệu tuần tự này đối với những message tương quan cho phép các SMPP PDU trao đổi trạng thái không đồng bộ.

Nhiệm vụ của số tuần tự là khởi tạo SMPP PDU. Số tuần tự sẽ tăng đều đặn sau mỗi lần SMPP yêu cầu PDU và phải được duy trì cùng với việc SMPP trả lời PDU.

Số tuần tự có thể thay đổi từ 0x00000001 đến 0x7FFFFFFF B O D

Một phần của tài liệu nghiên cứu giao thức smpp và phát triển các dịch vụ tin nhắn sms (Trang 26 - 67)