Thứ Năm, 7 tháng 8, 2014

[JAIN SIP] Chương 7 : Session Description Protocol (SDP)

Chương 7 : Session Description Protocol (SDP)
SDP là 1 chuẩn định dạng để miêu tả các tham số khởi tạo media session trong mạng SIP. IETF MMUSIC working group đã công bố giao thức này vào tháng 4-1998 và sau đó công bố bản sửa đổi theo chuẩn RFC 4566 vào tháng 7-2006.
Giả sử, A và B muốn thực hiện voice chat trong mạng SIP. Nhiệm vụ của giao thức SIP là kết nối 2 thiết bị của A và B để chuẩn bị thực hiện tính năng voice  được miêu tả trong SDP, còn việc thực hiện voice là giao thức RTP.  Như vậy, nhiệm vụ của SDP chỉ là miêu tả. Vậy miêu tả như thế nào thì chúng ta hãy bắt đầu tìm hiểu về nó.
I. Tổng quan SDP:
SDP được miêu tả dưới dạng chuỗi ký tự. Một SDP message bao gồm nhiều line (dòng), mỗi line được định nghĩa dưới dạng:
Trong đó:
+  <character> : là 1 ký tự riêng lẽ.
+  <value> : là chuỗi giá trị được gán cho <character> và do người dùng định nghĩa.
Ví dụ:
Một SDP message được phân thành 3 nhóm thông tin:
- Session-level description : chứa các line mà miêu tả các đặc điểm dành cho Session.
- Time description: chứa các line chỉ ra các khía cạnh về thời gian của session.
- Media description: chứa các line miêu tả các loại media khác nhau trong session.
Mỗi SDP message chứa : 1 Session-level , 1 Time-level và ích nhất một Media-level.
* Chi tiết 1 vài line thông dụng trong SDP:
a. origin ( o-line) :
o-line nhận dạng session và người khởi tạo, bao gồm các tham số sau:
- username: tên của người khởi tạo, tham số này không cần thiết vì đã có trong From header, chúng ta có thể thiết lập giá trị nó bằng “-”.
- session id: một chuỗi số duy nhất để xác định một session, là 1 Network Time Protocol (NTP) timestamp (dựa trên thời gian hay số ngẩu nhiên để bảo đảm duy nhất).
- version: cũng là 1 NTP timestamp, để chỉ ra sự thay đổi của phiên bản.
- network-type: luôn là IN, để chỉ là INTERNET.
- address-type: là IP4 hoặc IP6
- address: địa chỉ IP của người gởi.
Ví dụ:
Trong đó:
- username : thanhnguyen.
- session id : 2890844526.
- version : 2890842807.
- netword-type : in.
- address-type : ip4.
- addres : 169.147.16.55
b. Session Name (s-line):
- Trong trường hợp là multicast, s = “tên session”.
- Trường hợp là unicast, tên session không có ý nghĩa, nên thiết lập là rỗng “-”.  
c. Connection Information (c-line):
Chứa thông tin về địa chỉ kết nối.
- network-type : luôn là IN để chỉ INTERNET.
- address-type: IP4 hoặc IP6
- connection-address : địa chỉ IP
Ví dụ:
Trong đó :
- netword-type : IN
- address-type : IP4
- connection-address : 160.168.124.12
d. Time line (t-line):
Chứa thời gian bắt đầu hay kết thúc của session. Giá trị của start-time và stop-time được cung cấp theo định dạng NTP.
ví dụ:
Trong đó :
- start-time : 1280656800  
- stop-time : 1281265200
Nếu stop-time bằng 0 thì session là “unbounded” tức là được tiến hành vô thời hạn. Nếu start-time và stop-time bằng 0 thì session là “permenent”, tức là được tiến hành vĩnh cửu. Trong 2 trường hợp này, session đều được kết thúc bất cứ lúc nào bởi người khởi tạo.
e. Media và Transport (m-line):
m-line chứa thông tin về 1 media. 1 SDP có thể chứa nhiều m-line, ngụ ý là session có thể thực hiện 1 vài media khác nhau. m-line có định dạng như sau:
- media: miêu tả các kiểu media, các kiểu media được hổ trợ là: audio, video, application, data, control, message, image,..
- port: cổng mà người gởi mong đợi nhận được các gói media.
- transport-media: phương thức được sử dụng để truyền media, như: RTP/AVP, UDP, TCP, MSRT/TCP,…
- media-formats: mỗi transport media kèm theo 1 định dạng riêng lẽ .
Giao thức RTP/AVP được sử dụng phổ biến để truyền tải media stream (audio,video). Mỗi định dạng media trong RTP/AVP được tượng trưng bằng 1 con số tương ứng với kiểu truyền tải media, được gọi là payload type number. Payload time number có 2 kiểu : static và dynamic. Static có giá trị từ 0->95, dyanamic từ 96->127. Mỗi giá trị của static đều định nghĩa sẵn theo 1 chuẩn nhất định nên chúng ta có thể không cần sử dụng a-line để bổ sung thông tin cho payload type. Ngược lại, nếu là dynamic, bắt buộc chúng ta phải sử dụng a-line để định nghĩa bổ sung thông tin cho payload type. Bạn tham khảo RTP/AVP ở địa chỉ: http://en.wikipedia.org/wiki/RTP_audio_video_profile.
Ví dụ 1:  
Trong đó:
- media :audio.
- port:40000.
- transport-media:RTP/AVP.
- format media :0, tức là payload type number = 0, nghĩa là kiểu payload là PCMU, clock rate 8000, dành audio.
Ví dụ 2:  
- Payload type number = 28, nghĩa là kiểu payload là NV, clock rate 9000, dành cho video.
Ví dụ 3:  
- Payload type number = 96, nghĩa là dynamic, bắt buộc phải có thuộc tính a-line bổ sung thêm tính năng cho payload type, chọn kiểu payload là L8 và clock rate 8000.
Ví dụ 4:  
- Payload type number=102, nghĩa là dynamic, bắt buộc có thuộc tính a-line, chọn kiểu payload là VP8, clock rate 90000.
f. Bandwidth (b-line):
b-line đưa ra đề xuất bandwidth được sử dụng cho RTP session (audio, video). Nếu b-line không được sử dụng thì số lượng bandwidth được cấp phát cho RTP session bằng 5% bandwidth của session. Nếu muốn trao đổi audia hoặc video nhanh hơn trong 1 session thì chúng ta có thể thiết lập lại giá trị b-line.
- modifier : có 2 giá trị CTAS
Ví dụ: trong giao tiếp audio, thiết lập bandwidth tối đa dành cho audio stream là 64 kilobits/s, bandwidth dành cho audio của người gởi là 800 bps, bandwidth dành cho người nhận là 2400 bps.
h. Attributes (a-line):
a-line được sử dụng để mở rộng SDP. Chúng có thể được định nghĩa dưới dạng các thuộc tính dành cho “session-level”, “media-level” hay cả hai.
Một vài các thuộc tính quan trọng thường được sử dụng:
Lưu ý: Khi sử dụng m-line không khai báo 4 thuộc tính ( sendrecv ,recvonly, sendonly, inactive ) thì sendrecv là mặc định.
II. Ví dụ về sự miêu tả Session của SDP:
SDP có thể được sử dụng để miêu tả nhiều loại session khác nhau. Chúng tôi sẽ trình bày 4 ví dụ tiêu biểu sự miêu tả Session của SDP .
1. Voice và Video:
Sử dụng SDP để miêu tả chức năng voice và video trong Session dựa trên giao thức RTP. SDP message cho biết những Payload type nào sẽ được sử dụng. Trong ví dụ này, chúng ta sử dụng payload type = 0 là PCMU codec dành cho audio, và payload type=31 là H.261 codec dành cho video. Chi tiết SDP như sau:
2. Text:
Sử dụng SDP để miêu tả text (như chat) được sử dụng trong session có thể sử dụng RTP chỉ ra payload type dành cho text.
Ví dụ:
Ở đây, chúng ta thấy payload type là dynamic có giá trị là 98 được sử dụng với T.140 để miêu tả nội dung của text session.
3. Message Session Relay Protocol (MSRP):
MSRP là giao thức được sử dụng để truyền các đối tượng message dựa trên SIP. MSRP có cú pháp tương tự như những giao thức dựa trên ký tự khác như SIP, HTTP,…Mỗi message là 1 request hoặc 1 response, mỗi message chứa các header và 1 body có thể chứa bất cứ dữ liệu nào kể cả thông tin nhị phân. MSRP khá đơn giản, chỉ có 2 header là path và content-type cần được định nghĩa trong SDP.
MSRP có thể được sử dụng với SIP session để gởi:
- Message theo mô hình one-to-one hay one-to-many.
- Tập tin đính kèm.
- Hình ảnh muốn chia sẻ.
a. Các header của MSRP :
- path: cho biết MSRP URI (MSRP URI : là địa chỉ được định dạng theo giao thức MSRP) của UA chứa trong SDP. 1 MSRP URI gồm 4 phần :
+ Tên giao thức (msrp hay msrps).
+ Địa chỉ IP (hay host) và port người gởi.
+ session_id : chuỗi ký tự số để nhận dạng session.
+ Phương thức chuyển tải.
Cú pháp :
Ví dụ:  
Trong đó:
+  msrp : là tên giao thức
+  host : niit.com
+  port : 7654
+  session_id: jshA7weztas
+ transport : tcp
Lưu ý:. MSRP bảo đảm rằng luôn luôn có 1 response được phản hồi đến request trong cùng kết nối. Do đó, MSRP chỉ chấp nhận các giao thức truyền tải đáng tin cậy, như TCP.
- accept-types: cho biết kiểu media được sử dụng. Có 2 loại: wrapper types (như message/cpim) hay simple types (như text/plain).
b. MSRP session được miêu tả trong SDP:
SDP sử dụng c-line và m-line để miêu tả 1 MSRP session với các yêu cầu sau:
- c-line: địa chỉ trong line này phải giống địa chỉ IP hay host trong path header của MSRP.
- m-line:
+  transport-media phải là “tcp/msrp”.
+  media phải là “message”.
+  port phải giống port trong path header của MSRP.
Ví dụ: SDP miêu tả MSRP session:
4. TCP :
Media được miêu tả trong SDP cũng có thể được truyền tải dưới dạng 1 data stream sử dụng giao thức TCP. m-line trong SDP được sử dụng để miêu tả giao thức TCP và hai  a-line định nghĩa hai thuộc tính kèm theo để miêu tả như thế nào và khi nào thủ tục cài đặt kết nối TCP được thực hiện.
Hai thuộc tính được định nghĩa kèm theo trong a-line :
- setup: cho biết trong các endpoint ( endpoint : đại diện chung cho bên nhận và bên gởi) được kết nối, endpoint nào được khởi tạo thiết lập kết nối TCP với các giá trị theo sau:
- Connection: cho biết là “new” hay “existing”. “new” là tạo ra sự kết nối mới, “existing” là sử dụng 1 kết nối đã tồn tại.
Ví dụ:
III. Mô hình Offer/Answer của SDP :
Như chúng ta đã biết, SDP sử dụng trong môi trường mạng, bắt buộc cũng phải tuân thủ theo 1 khuôn mẫu định nghĩa chung dành cho nó, do đó các bên giao tiếp với nhau cũng tuân theo 1 tiêu chuẩn dành riêng, chuẩn dành cho các bên giao tiếp được gọi là mô hình Offer/Answer. Trong đó, bên gởi SDP gọi là SDP offer, bên nhận SDP là SDP answer.
SDP offer được dính kèm trong INVITE request của UAC, còn SDP answer được dính kèm trong response phản hổi của UAS. Như vậy, khi nhắc đến bên gởi thì các bạn hiểu là UAC, còn bên nhận là UAS.
SDP offer chứa:
- Tập các media stream muốn sử dụng.
- Các đặc tính về media stream được miêu tả trong m-line và các tham số định dạng.
- Địa chỉ IP và port của người gởi.
- Các tham số bổ sung (nếu cần) giúp cho khả năng truyền tải media.
SDP answer chứa các thông tin sau:
- Bên nhận có chấp nhận Media stream hay không ?
- Các đặc tính media stream được sử dụng cho session.
- Địa chỉ IP và port của người nhận.
Khi người gởi nhận SDP answer từ người nhận, nếu trong SDP answer chấp nhận ít nhất 1 media,thì cả hai bên tìm trong SDP nếu có những codec tương ứng, cả hai bắt đầu giao tiếp media.
Một số ví dụ về các kiểu media theo mô hình Offer/Answer :
1. Voice/Video:
Ví dụ, KhangDang muốn thực hiện voice và video với ThanhNguyen, audio stream có payload type là 0  , video stream sử dụng MPEG có payload type là 31.
SDP offer của KhangDang:
ThanhNguyen chỉ muốn thực hiện tính năng voice, không thực hiện video nên SDP answer của ThanhNguyen như sau:
Port dành cho video được thiết lập bằng 0, để chứng tỏ không thực hiện tính năng video. Khi KhangDang muốn dừng audio, anh ấy cần gởi 1 reINVITE đến ThanhNguyen kèm theo 1 SDP với thuộc tính a=sendonly dành cho audio stream:
Khi KhangDang muốn thực hiện lại tính năng audio, KhangDang cũng phải gởi lại 1 reINVITE và thay đổi thuộc tính sendonly thành sendrecv.
2. MSRP
KhangDang muốn sử dụng giao thức MSRP để gởi message (message : chứa ký tự và hình ảnh, không phải SIP message)  đến ThanhNguyen. Kiểu media được sử dụng là: text/plain và image/jpeg.
KhangDang thiết lập địa chỉ MSRP trong thuộc tính path. SDP offer của KhangDang như sau:

ThanhNguyen không hổ trợ định dạng jpeg, nên SDP answer của ThanhNguyen như sau:
3. TCP
Khi sử dụng truyền tải dựa trên TCP, sự kết nối được thực hiện dựa trên sự trao đổi các giá trị của thuộc tính “connection” và “setup”.
Theo sau là các ví dụ về cách sử dụng thuộc tính “setup” (để sự miêu tả ngắn gọn nên những line chính trong SDP được bỏ qua, chỉ hiển thị m-line, c-line và a-line).
a. Passive/Active:
SDP Offerer có địa chỉ IP 169.178.11.20 phát tín hiệu sẵn sàng dành cho T.38 fax session ở port 54111:
SDP Answer có địa chỉ 169.178.11.22 nhận và phản hồi lại :
Như vậy, Endpoint ở địa chỉ 169.178.11.22 sẽ khởi tạo 1 kết nối TCP đến địa chỉ 169.178.11.20 với port 54111.
b. Actpass/Passive :
SDP offerer có địa chỉ IP là 169.178.11.20 phát tín hiệu sẵn sàng dành cho T.38 fax session ở port 54111 và offerer này cũng muốn khởi tạo 1 kết nối TCP:
 SDP Answer có địa chỉ 169.178.11.22 nhận và phản hồi lại :
Như vậy, Endpoint có IP 169.178.11.20 khởi tạo kết nối TCP đến IP 169.178.11.22 với port là 54321 vì SDP Answer có giá trị passive.

Không có nhận xét nào:

Đăng nhận xét