Chương 12:
Các loại bản tin SIP
SIP là giao thức dạng Text sử dụng bộ ký tự ISO 10646 trong
mã hoá UTF-8 (RFC 2279). Điều này tạo cho SIP tính linh hoạt,
mở rộng và dễ thực thi các ngôn ngữ lập trình cấp cao như Java,
Tol, Perl. Cú pháp c
ủa SIP gần giống với giao thức HTTP, nó cho
phép dùng lại mã và đơn giản hóa sự liên kết của các máy phục vụ
SIP với các máy phục vụ Web. Tuy nhiên, SIP không phải là một
dạng mở rộng của HTTP. Khác với HTTP, SIP có thể sử dụng giao
thức UDP.
Bản tin SIP được chia làm hai loại: Bản tin yêu cầu từ Client
tới Server và bản tin đáp ứng từ Server trả lời cho Client:
SIP-message = Request/ Response
4.1.4.1. B
ản tin yêu cầu (Request)
Bản tin Request có khuôn dạng gồm hai phần cơ bản: Request-
line và ph
ần mào đầu-header (với 3 loại header):
Request=Request-line*(General-header/Request-header/ Entity-
header)
CLRF
[message-body]
Trong đó thành phần Request-line chứa tên phương thức, một
Request – URI và số phiên bản của giao thức. Các thành phần
được ngăn
cách với nhau bằng một khoảng trắng (SP). Cũng như
các dòng khác, dòng khởi đầu được kết thúc bằng một ký tự xuống
dòng (CRLF).
Request-line = Method SP Request-URI SP SIP-
Version
Trong đó:
Method (Phương thức SIP): SIP định nghĩa 6 phương thức
cơ bản như trong bảng 4.2.
Request-URI: Trường Request-URI có khuôn dạng theo SIP
URL. Nó thông báo cho User hoặc dịch vụ về địa chỉ hiện
tại. Khác với trường “To”, Request-URI có thể được ghi lại
bởi Proxy (trường hợp máy phục vụ ủy quyền).
SIP Version: Phiên bản SIP là các bản SIP được đưa ra các
l
ần khác nhau. Cả hai bản tin Request và Response đều
chứa phiên bản của SIP được sử dụng SIP Version. Hiện tại
phiên bản SIP là 2.0.
Bảng 4.2. Các phương thức SIP
INVITE
Mời thành viên tham gia hội thoại.
ACK
Yêu cầu xác nhận đã nhận được đáp ứng
chập nhận (OK) cho yêu cầu INVITE.
OPTIONS
Hỏi khả năng của máy phục vụ SIP.
BYE
Yêu cầu giải phóng cuộc gọi
CANCEL
Hủy bỏ yêu cầu sắp được thực hiện với
cùng giá trị trong các trường Call_ID,
From, To, Cseq của yêu cầu đó bằng cách
ngừng quá trình tìm kiếm báo hiệu.
REGISTER
Đăng ký danh sách địa chỉ liên hệ của
người dùng với máy phục vụ.
4.1.4.2. Bản tin phúc đáp (Response)
Sau khi nhận và thông dịch một bản tin yêu cầu, phía nhận
thực hiện trả lời bằng một bản tin phúc đáp.
Khuôn d
ạng bản tin cũng gồm hai phần cơ bản: Status-line và
ph
ần mào đầu header (với 3 loại header):
Response = Status-line *(General-header/ Response-header/ Entity-
header)
CLRF
[message-body]
Trong đó thành phần Status-line có cấu trúc sau: (SP là ký tự
phân cách):
Status-line = SIP-Version SP status-code SP Reason-
phrase
SIP Version: Cũng giống như trong bản tin Request.
Status-code và Reason-phrase: Status-code là một mã kết
quả nguyên gồm 3 digit, chỉ ra kết quả của việc cố gắng
thực hiện và mức độ thỏa mãn yêu cầu. Reason-Phrase thì
dùng
để đưa ra một lời giải thích ngắn cho Status-code.
Status-code m
ục đích là để sử dụng cho Server còn Reason-
phrase là dùng cho User. Client không th
ể yêu cầu hiển thị
hay kiểm tra Reason-phrase.
Status-code g
ồm 3 digit. Digit đầu tiên định nghĩa loại đáp
ứng, hai digit sau không có vai trò phân loại. SIP 2.0 định nghĩa 6
giá trị của digit đầu tiên như sau:
Bảng 4.3. Các mã trạng thái SIP
1xx
Tìm kiếm, báo hiệu, sắp hàng đợi
2xx
Thành công
3xx
Chuyển tiếp yêu cầu
4xx
Lỗi phía người dùng
5xx
Lỗi phía Server
6xx
Lỗi chung: đường dây đang bận, từ
chối,….
Mã đáp ứng SIP có thể mở rộng được. Các ứng dụng SIP
không yêu cầu phải hiểu rõ về ý nghĩa của tất cả mã đáp ứng được
đă
ng ký mà chỉ cần hiểu các loại mã đáp ứng, ý nghĩa của digit đầu
tiên.
4.1.4.3. Cấu trúc bản tin SIP
Cả hai loại bản tin trên đều sử dụng chung một định dạng cơ
bản được quy định trong RFC 2822 với cấu trúc gồm một dòng
kh
ởi đầu (start – line), một số trường tiêu đề và một phần thân bản
tin tuỳ chọn (hình 4.2). Cấu trúc này được tóm tắt như sau:
generic-message = start-line
*message-header
CRLF
[ message-body ]
Với
start-line = Request-Line / Status-Line
Hình 4.2. Cấu trúc bản tin SIP
Trong đó, dòng bắt đầu, các dòng tiêu đề hay các dòng trắng
phải được kết thúc bằng một ký tự xuống dòng (CRLF) và phải lưu
ý rằng dòng trắng vẫn phải có để ngăn cách phần tiêu đề và phần
thân của bản tin ngay cả khi phần thân bản tin là rỗng.
Start line: Mỗi bản tin SIP được bắt đầu với một Start Line,
Start Line v
ận chuyển loại bản tin (phương thức trong các
Request, và mã đáp ứng trong các bản tin đáp ứng) và phiên
b
ản của giao thức. Start line có thể là Request-Line (trong
các request) ho
ặc là Status-Line (trong các response).
Headers: Các trường Hearder của SIP được sử dụng để vận
chuyển các thuộc tính của bản tin và để thay đổi ý nghĩa của
bản tin. Chúng tương tự như các trường tiêu để của bản tin
HTTP theo cả cú pháp và ngữ nghĩa (thực tế có một vài tiêu
đề được mượn từ HTTP) cho nên chúng luôn có khuôn
d
ạng như sau: <Name>:< Value>.
Thứ tự các trường tiêu đề khác tên là không quan trọng
(nhưng các tiêu đề mà được sử dụng để định tuyến bởi các
proxy sẽ được đặt trước). Thứ tự các tiêu đề có cùng tên là
quan tr
ọng.
Tiêu đề bản tin bao gồm bốn loại:
– Tiêu đề chung.
– Tiêu đề Request.
– Tiêu đề Response.
– Tiêu đề thực thể.