1.5. Truyền thông thời gian thực
1.5.3. Giao thức khởi tạo phiên SIP
Giao thức khởi tạo phiên SIP (Session Initiation Protocol), tương tự HTTP (HyperText Transfer Protocol) , là một giao thức điều khiển lời gọi và báo hiệu tầng ứng dụng dựa trên văn bản. SIP được sử dụng để tạo, sửa đổi, và kết thúc các phiên SIP. Giao thức này hỗ trợ cả truyền thông đơn phát (unicast) và đa phát (multicast). Vì SIP dựa trên văn bản nên dễ cài đặt, triển khai.
1. Các thành phần SIP
Hai thành phần chính trong SIP là SIP servers và SIP user agents.
SIP Servers
Có ba loại SIP servers: proxy, registrar, and redirect. Mỗi loại thực hiện một chức năng khác nhau, như được chỉ ra trong Bảng 1.1. Chức năng cụ thể quyết định các yêu cầu SIP (SIP requests) được xử lý.
Bảng 1.1. SIP Servers
SIP Server Chức năng
Proxy server Hoạt động trung gian giữa một SIP user agent client và một SIP user agent server. Proxy server thực hiện các chức năng của SIP user agent client hoặc của SIP user agent server, tùy thuộc vào hướng của truyền thông giữa client và server. Một proxy server có thể sửa SIP request trước khi chuyển tiếp nó hoặc đơn giản chỉ chuyển tiếp SIP request.
Registrar server Nhận các yêu cầu REGISTER, mỗi yêu cầu chứa cả địa chỉ IP và địa chỉ SIP — hay URL — của user agent. Điều này cho phép registrar server biết được vị trí của các user agents.
Redirect server Chấp nhận khởi tạo, dưới dạng một yêu cầu SIP INVITE, của một phiên SIP từ một user agent gọi, nhận địa chỉ SIP đúng của user agent được gọi, và trả lời user agent gọi với địa chỉ đúng. Sau đó, user agent gọi sẽ sử dụng địa chỉ SIP đúng để khởi tạo phiên SIP với user agent được gọi.
SIP servers — proxy, registrar, and redirect — có thể được phát triển như các ứng dụng riêng biệt hoặc một ứng dụng duy nhất tích hợp các chức năng của cả ba servers.
SIP User Agents
Bảng 1.2 đưa ra các dạng SIP user agents và chức năng của chúng.
Bảng 1.2. SIP User Agents
SIP User Agent Chức năng
User agent client Khởi tạo SIP requests User agent server Nhận SIP requests
2. Luồng sự kiện cuộc gọi SIP
Luồng sự kiện cho các phiên SIP phụ thuộc vào liệu phiên được thiết lập trực tiếp giữa các SIP user agents hay có một SIP server (proxy, registrar, or redirect) nằm giữa các SIP user agents.
Hình 1.10 thể hiện luồng sự kiện của một phiên gọi trực tiếp giữa hai user agents, với thứ tự sự kiện được để trong ngoặc đơn. Đầu tiên, user agent A gửi một thông điệp INVITE nhằm khởi tạo lời gọi. User agent B trả lời bằng thông báo Trying (100), thể hiện rằng yêu cầu lời gọi đang được xử lý. Tiếp đó, user agent B trả lời bằng thông báo OK (200), thể hiện rằng yêu cầu lời gọi đã được chấp nhận. User agent A gửi thông báo ACK tới user agent B, thể hiện rằng nó đã nhận được OK của user agent B. Các thông báo trên được sử dụng để thiết lập cuộc gọi. Sau khi cuộc gọi được thiết lập, dữ liệu thời gian thực được đóng gói trong các gói RTP và gửi giữa agent A và user agent B. Một trong hai user agent có thể kết thúc truyền thông thời gian thực bằng cách gửi thông báo BYE đến user agent kia, thể hiện rằng nó muốn kết thúc cuộc gọi. Khi nhận được thông báo BYE, user agent gửi thông báo OK đến đối tác rồi kết thúc phiên giao dịch.
Hình 1.10. Luồng sự kiện một phiên SIP trực tiếp giữa các user agent
Hình 1.11 thể hiện luồng sự kiện của một phiên SIP có proxy server trên đường đi giữa hai user agents. Proxy server hoạt động như điểm truyền thơng trung gian, đóng vai trị cả user server và user agent. Khi đóng vai trị user server, proxy nhận các yêu cầu SIP và chuyển tiếp nó đến user agent đích. Khi đóng vai trị user agent, proxy nhận các trả lời SIP và chuyển tiếp chúng đến user agent đích.
Hình 1.12 mơ tả luồng sự kiện của một phiên SIP giữa một user agent và một registrar server. Registrar server chấp nhận yêu cầu REGISTER từ user agent, thể hiện địa chỉ mà user agent có thể đến được. Một registrar server thường được đặt với một proxy server hoặc một redirect server.
Hình 1.12. Luồng sự kiện một phiên SIP với Registrar Server.
Hình 1.13 mơ tả luồng sự kiện của một phiên SIP với một redirect server giữa hai user agents. User agent A gửi INVITE để khởi tạo cuộc gọi. Redirect server trả lời với thông báo Moved (302), thể hiện rằng user agent B hiện thời đã duy chuyển đến địa chỉ mới. User agent A trả lời bằng thơng báo ACK. Sau đó, user agent A gửi INVITE trực tiếp đến user agent B.
3. Ví dụ kiến trúc SIP
Để minh họa truyền thông giữa các thành phần SIP, Hình 1.14 đưa ra một ví dụ về kiến trúc SIP.
Hình 1.14. Một kiến trúc SIP
A. Datum Corporation có hai SIP proxy servers để chuyển các yêu cầu SIP giữa hai domains trong công ty. SIP proxy server kết nối đến firewall quản lý tất cả các thông báo được gửi vào từ bên ngồi. Ví dụ, một thơng báo SIP INVITE được gửi từ một SIP client của A. Datum Corporation tới một SIP client của Fabrikam, Inc. sẽ được gửi tới SIP proxy server của Fabrikam, Inc. SIP proxy server sau đó chuyển tiếp SIP INVITE đến SIP client đích, hoặc một SIP IP phone, trong domain của SIP proxy server của Fabrikam, Inc.
4. Giao thức SIP
Thông báo SIP dựa trên định dạng của thơng báo Internet chuẩn. Thơng báo SIP có thể là request hay response. Mỗi thơng báo SIP có ba phần, như trong Bảng 1.3.
Bảng 1.3. Các phần của thông báo SIP
Phần thông báo
SIP Miêu tả
Start line Nội dung tùy thuộc vào thông báo là request hay response. Trong cả hai loại thông báo, start line chứa Phiên bản SIP. Start line của thông báo request chứa Phương thức SIP và Địa chỉ SIP hoặc URI đích. Start line của thơng báo response chứa Mã trạng thái SIP Response và Nội dung trả lời xác định response của request.
Headers Chứa kiểu header và các biến tương ứng.
Message body Chứa thông tin được cung cấp bởi Giao thức Miêu tả Phiên – SDP (Session Description Protocol), như miêu tả dung lượng đa phương tiện cho phiên SIP.
SIP xác định các giá trị của start line và các headers. Giao thức Miêu tả Phiên (SDP) xác định giá trị nội dung thông báo.
Start Line
Cú pháp của start line phụ thuộc vào thông báo là request hay response. Bảng 1.4 chỉ ra các cú pháp này.
Bảng 1.4. Cú pháp của Start Line
Start Line Cú pháp
Request Phương thức SIP, URI đích, Phiên bản SIP
Response Phiên bản SIP, Mã trạng thái SIP response, Nội dung trả lời
Phương thức SIP
Mục đầu tiên trong start line của thông báo request là Phương thức SIP, một lệnh báo hiệu. Các phương thức SIP được liệt kê trong Bảng 1.5.
Bảng 1.5. Các phƣơng thức SIP và chức năng của chúng
Phương thức
SIP Chức năng
INVITE Yêu cầu khởi tạo phiên SIP. INVITE được gửi từ user agent gửi tới user agent nhận.
ACK User agent nhận đã chấp nhận cuộc phiên giao dịch. ACK được gửi từ user agent gửi tới user agent nhận.
OPTIONS User agent gửi yêu cầu user agent nhận thông báo các dung lượng của nó.
BYE Yêu cầu kết thúc phiên. BYE có thể được gửi bởi user agent gửi hoặc user agent nhận. Khi nhận được BYE, user agent không cần thiết phải trả lời.
CANCEL Hủy bỏ các yêu cầu treo.
REGISTER User agent gửi đăng ký vị trí hiện tại của nó với registrar server.
SUBSCRIBE User agent gửi yêu cầu cập nhật thông tin hiện tại của user agent nhận.
NOTIFY Thông báo trạng thái cho đối tác.
MESSAGE Được sử dụng để gửi thơng báo.
URI đích
Mục thứ hai trong start line của thông báo request là URI đích, chứa URL của user agent nhận. Thông thường, URL là SIP URL. Một SIP URL có thể có nhiều định dạng khác nhau. Một số định dạng được cho trong Bảng 1.6.
Bảng 1.6. Một số định dạng của SIP URL
Định dạng SIP URL Giải thích
sip:user@reskit.com SIP URL cơ bản. Mặc định
giao thức truyền thông được sử dụng là UDP.
sip:user@reskit.com;transport=TCP SIP URL cơ bản với giao thức truyền thông là TCP.
sip:user@172.16.20.54 SIP URL với một địa chỉ IP.
sip:+1-425-707-9796@reskit.com;user=phone SIP URL với một số điện thoại toàn cầu.
sip:marketing@reskit.com;maddr=225.0.2.1;ttl=64 SIP URL với một địa chỉ đa phát (multicast address). Giá trị TTL (time-to-live) được đặt về 64 (0-255). Giá trị TTL phải được thiết lập khi sử dụng địa chỉ đa phát và giao thức truyền thông UDP.
Phiên bản SIP
Mục cuối cùng trong start line của thông báo request và mục đầu tiên trong start line của thông báo response là Phiên bản SIP, hiện tại chúng có giá trị là 2.0.
Mã trạng thái SIP Response
Có sáu loại mã trạng thái khác nhau: informational, success, redirection, client error, server error, and global failures. Số bên trái nhất của mã biểu thị loại mã trạng thái như được thể hiện trong Bảng 1.7.
Bảng 1.7. Các mã trạng thái SIP Response Mã trạng thái Loại Response Miêu tả
1xx Informational Đã nhận được yêu cầu và đang xử lý. 2xx Success Yêu cầu đã được hiểu và được chấp nhận.
3xx Redirection Cần thực hiện những hành động khác nữa để hoàn thành yêu cầu.
4xx Client Error Cú pháp của yêu cầu không đúng hoặc server không chấp nhận yêu cầu.
5xx Server Error Server nhận được u cầu nhưng khơng thể xử lý nó. 6xx Global
Failures
Server nhận được yêu cầu nhưng không thể xử lý nó và yêu cầu có thể cũng hỏng trên các server khác. Do vậy, yêu cầu không được chuyển tiếp.
Nội dung trả lời
Mọi SIP response đều có phiên bản SIP là 2.0. Các mã trạng thái và nội dung của nó được thể hiện trong Bảng 1.8.
Bảng 1.8. Nội dung SIP Response
Mã trạng
thái Loại Response Nội dung
100 Informational Đang kết nối
180 Informational Đang rung
181 Informational Cuộc gọi được chuyển
182 Informational Chờ
300 Redirection Nhiều lựa chọn
301 Redirection Đã chuyển vị trí vĩnh viễn 302 Redirection Tạm thời chuyển vị trí
303 Redirection Xét đích khác
305 Redirection Sử dụng proxy
380 Redirection Thay đổi dịch vụ
400 Client Error Yêu cầu sai
401 Client Error Không được xác thực 402 Client Error Yêu cầu trả phí
403 Client Error Bị cấm
404 Client Error Khơng tìm thấy
405 Client Error Phương thức trái phép 406 Client Error Không thể chấp nhận được 407 Client Error Yêu cầu xác thực proxy 408 Client Error Request timeout
409 Client Error Xung đột
410 Client Error Khơng cịn client 411 Client Error Yêu cầu chiều dài
413 Client Error Kích thước yêu cầu quá lớn 414 Client Error URI của yêu cầu quá lớn
415 Client Error Kiểu phương tiện không được hỗ trợ
480 Client Error Tạm thời không liên lạc được 481 Client Error Giao tác không tồn tại
482 Client Error Phát hiện vòng
483 Client Error Quá nhiều chặng
484 Client Error Địa chỉ không đầy đủ
485 Client Error Nhập nhằng
486 Client Error Bận
500 Server Error Lỗi bên trong server 501 Server Error Không được cài đặt
502 Server Error Gateway sai
503 Server Error Không tồn tại dịch vụ 504 Server Error Gateway time-out
505 Server Error Phiên bản SIP không được hỗ trợ 600 Global Failures Bận mọi nơi
603 Global Failures Sụp đổ
604 Global Failures Không tồn tại bất kỳ đâu 606 Global Failures Không thể chấp nhận
SIP Headers
Trong mỗi thông báo SIP, sau start line là một hoặc nhiều headers. Các header có mặt trong thơng báo tùy thuộc vào thông báo là response hay request.
Như được trình bày trong Bảng 1.9, có bốn loại headers: general, request, response, và entity. Headers kiểu general có thể được sử dụng trong cả thông báo request và thông báo response.
Bảng 1.9. SIP Headers
General Request Response Entity
Accept Authorization Allow Content-encoding
Accept- encoding
Contact Proxy-authenticate Content-length
Accept- language
Hide Retry-after Content-type
Call-ID Max-forwards Server
Contact Organization Unsupported
Cseq Priority Warning
Date Proxy- authorization WWW-authenticate Encryption Proxy-require Expires Route From Require Record-route Response-key
Time stamp Subject
To User-agent
Via