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ị CT và AS
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