giới thiệu sip

49
Mục lục CHƯƠNG 1: GIỚI THIỆU SIP...............................3 1.1 SIP LÀ GÌ ?......................................3 1.2 SIP ADDRESSING (ĐỊA CHỈ CỦA SIP).................3 1.2.1 User Agents :................................ 4 1.2.2 Registrar.................................... 4 1.2.3 Location Service.............................5 1.2.4 Proxy Server................................. 5 1.2.5 Forking...................................... 7 1.2.6 Redirect Server..............................9 1.2.7 Back-to-Back User Agents (B2BUA)............10 CHƯƠNG 2: CÁCH HOẠT ĐỘNG CỦA GIAO THỨC SIP............11 2.1 MÔ HÌNH HOẠT ĐỘNG CỦA SIP.......................11 2.1.1 SIP Responses...............................11 2.2 SIP Requests....................................12 2.2.1 REGISTER.................................... 13 2.2.2 INVITE...................................... 14 2.2.3 ACK......................................... 16 2.2.4 CANCEL...................................... 17 2.2.5 Options..................................... 18 CHƯƠNG 3: SIP MESSAGE.................................19 3.1 Start line......................................20 3.2 Header field....................................22 3.2.1 From........................................ 23 3.2.2 To.......................................... 23 3.2.3 Call-ID..................................... 23 3.2.4 Via......................................... 23 3.2.5 Contact..................................... 25 1

Upload: dinh-nham

Post on 28-Dec-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Giới Thiệu Sip

Mục lục

CHƯƠNG 1: GIỚI THIỆU SIP..................................................................................3

1.1 SIP LÀ GÌ ?......................................................................................................3

1.2 SIP ADDRESSING (ĐỊA CHỈ CỦA SIP)........................................................3

1.2.1 User Agents :..............................................................................................4

1.2.2 Registrar.....................................................................................................4

1.2.3 Location Service........................................................................................5

1.2.4 Proxy Server...............................................................................................5

1.2.5 Forking.......................................................................................................7

1.2.6 Redirect Server...........................................................................................9

1.2.7 Back-to-Back User Agents (B2BUA)......................................................10

CHƯƠNG 2: CÁCH HOẠT ĐỘNG CỦA GIAO THỨC SIP.................................11

2.1 MÔ HÌNH HOẠT ĐỘNG CỦA SIP..............................................................11

2.1.1 SIP Responses..........................................................................................11

2.2 SIP Requests...................................................................................................12

2.2.1 REGISTER..............................................................................................13

2.2.2 INVITE....................................................................................................14

2.2.3 ACK.........................................................................................................16

2.2.4 CANCEL..................................................................................................17

2.2.5 Options.....................................................................................................18

CHƯƠNG 3: SIP MESSAGE...................................................................................19

3.1 Start line..........................................................................................................20

3.2 Header field.....................................................................................................22

3.2.1 From.........................................................................................................23

3.2.2 To.............................................................................................................23

3.2.3 Call-ID.....................................................................................................23

3.2.4 Via............................................................................................................23

3.2.5 Contact.....................................................................................................25

3.2.6 Record-Route và Route............................................................................26

3.2.7 CSeq.........................................................................................................27

3.2.8 Max-Forwards..........................................................................................28

3.3 SIP Message Body..........................................................................................28

1

Page 2: Giới Thiệu Sip

3.3.1 Content-Type...........................................................................................29

3.3.2 Content-Length........................................................................................29

3.3.3 Content-Encoding....................................................................................29

3.4 Mối quan hệ giữa Call, Dialog, Transaction và Message...............................30

CHƯƠNG 4: CẤU TRÚC GIAO THỨC SIP..........................................................32

CHƯƠNG 5: XÂY DỰNG SIP STACK DÙNG JAIN SIP.....................................34

5.1 JAIN SIP LÀ GÌ ?...........................................................................................34

5.2 Các bước xây dựng 1 Sip Stack......................................................................34

5.2.1 Các phần mềm và gói phụ thuộc..............................................................34

5.2.2 Sip Client.................................................................................................34

5.2.3 Sip Proxy..................................................................................................39

2

Page 3: Giới Thiệu Sip

CHƯƠNG 1: GIỚI THIỆU SIP

1.1 SIP LÀ GÌ ?

SIP là viết tắt của cụm từ “Session Initiation Protocal”, là một giao thức truyền tín

hiệu ở tầng  ứng dụng  (application-level) và được định nghĩa bởi IETF. SIP được

sử dụng để tạo và quản lý các session thông qua mạng IP. Thuật ngữ “Session” là

một phiên làm việc trong quá trình trao đổi media (voice, video,….).

SIP làm việc cùng với một vài các giao thức khác trong tầng ứng dụng để

nhận dạng và truyền session media. Sự nhận dạng và thỏa thuận về media được thực

hiện với Session Description Protocol (SDP).  Đối với việc truyền các media stream

(voice, video), SIP sử dụng Real-time Transport Protocol (RTP) hay Secure Real-

time Transport Protocol (SRTP). Còn bảo mật trong quá trình truyền các thông điệp

thì được mã hóa bởi Transport Layer Security (TLS).

SDP được sử dụng để miêu tả về các media session nhằm mục đích thông

báo, mời gọi và thỏa thuận tham số dành cho 1 session.  Do đó, để tạo ra một

session, một  SIP message luôn mang theo SDP mà cho phép các bên tham gia đồng

ý thiết lập một vài các thông số cần thiết để trao đổi media, cũng như loại media,

địa chỉ truyền tải,…

1.2 SIP ADDRESSING (ĐỊA CHỈ CỦA SIP)

Các thành phần của SIP:

Các thành phần của SIP bao gồm :

User Agents (UAs)

Registras

Proxies

Back-to-Back User Agents (B2BUSs)

1.2.1 User Agents :

Một SIP User Agent (UA) bao gồm 2 thành phần : User Agent Client (UAC) và User Agent Server (UAS).

3

Page 4: Giới Thiệu Sip

Nhiệm vụ của UAC : tạo ra các SIP request (yêu cầu) gởi cho UAS và thu

nhận các response (phản hồi) được gởi từ UAS .

Nhiệm vụ của UAS : nhận các SIP request  được gởi từ UAC và tạo ra các

response gởi cho UAC. 

Hình 1. 1 Các thành phần UA

 *Lưu ý : SIP độc lập với media session. SIP không dính líu với bất cứ loại media

session nào mà cần được thực hiện. Ví dụ, nếu bạn muốn tăng cường 1 tính năng

nào đó cho media thì bạn phải bổ sung thành phần đó và tích hợp nó với user

interface, còn chính SIP User Agent vẫn không thay đổi.

SIP UA là bộ phận quan trọng của 1 ứng dụng về truyền media.  SIP UA

được thực hiện trong nhiều cách khác nhau, có thể là:

Một phần mềm chạy trên PC.

Một ứng dụng trên mobile phone.

Một trạng thái nào đó trong network server : gởi phản hồi tự động khi có yêu

cầu, tự động gởi media  chúc mừng sinh nhật,….

1.2.2 Registrar

Registrar là một server mà chấp nhận các registration request (các yêu cầu

được đăng ký) từ các UA. UA cung cấp vị trí hiện tại của nó với 1 SIP Message

truyền đến Registrar Server. 1 SIP UA cần được đăng ký trước khi nó có thể nhận

cuộc gọi. Khi registrar nhận registration request, nó đưa những thông tin mà nó

nhận được vào trong 1 cơ sở dữ liệu được gọi là Location Service.

Tức là, Registrar là 1 SIP endpoint mà nhận các registration request và đưa

các thông tin nó nhận được trong request này vào location service để xử lý.

4

Page 5: Giới Thiệu Sip

1.2.3 Location Service

 Location Service là một cơ sở dữ liệu mà chứa một tập danh sách ánh xạ

giữa Adresses of Record (AORs – địa chỉ công khai dành công UA) và Contact

Addresses (địa chỉ để xác định tên domain cũng như vị trí của người dùng).

Khi Registrar nhận một registration request từ một UA, registrar sẽ đưa

thông tin nó nhận được vào Location Service. Location service cũng được liên hệ

với Proxy Servcers chỉ ra domain chính xác để lấy về thông tin vị trí có thể thực

hiện được cuộc gọi đến người dùng.      

Hình 1. 2 Ví dụ về Location Service

1.2.4 Proxy Server

Chức năng của Proxy Server trong Internet :

Một số hãng và công ty sử dụng proxy với mục đích: Giúp nhiều máy tính

truy cập Internet thông qua một máy tính với tài khoản truy cập nhất định, máy tính

này được gọi là Proxy server. Chỉ duy nhất máy Proxy này cần modem và account

truy cập internet, các máy client (các máy trực thuộc) muốn truy cập internet qua

máy này chỉ cần nối mạng LAN tới máy Proxy và truy cập địa chỉ yêu cầu. Những

yêu cầu của người sử dụng sẽ qua trung gian proxy server thay thế cho server thật

sự mà người sử dụng cần giao tiếp, tại điểm trung gian này công ty kiểm soát được

mọi giao tiếp từ trong công ty ra ngoài internet và từ internet vào máy của công ty.

5

Page 6: Giới Thiệu Sip

Sử dụng Proxy, công ty có thể cấm nhân viên truy cập những địa chỉ web không cho

phép, cải thiện tốc độ truy cập nhờ sự lưu trữ cục bộ các trang web trong bộ nhớ của

proxy server và giấu định danh địa chỉ của mạng nội bộ gây khó khăn cho việc thâm

nhập từ bên ngoài vào các máy của công ty.

Đối với các nhà cung cấp dịch vụ đường truyền internet: Do internet có

nhiều lượng thông tin mà theo quan điểm của từng quốc gia, từng chủng tộc hay địa

phương mà các nhà cung cấp dịch vụ internet khu vực đó sẽ phối hợp sử dụng

proxy với kỹ thuật tường lửa để tạo ra một bộ lọc gọi là firewall proxy nhằm ngăn

chặn các thông tin độc hại hoặc trái thuần phong mỹ tục đối với quốc gia, chủng tộc

hay địa phương đó. Địa chỉ các website mà khách hàng yêu cầu truy cập sẽ được lọc

tại bộ lọc này, nếu địa chỉ không bị cấm thì yêu cầu của khách hàng tiếp tục được

gửi đi, tới các DNS server của các nhà cung cấp dịch vụ. Firewall proxy sẽ lọc tất cả

các thông tin từ internet gửi vào máy của khách hàng và ngược lại.

Chức năng của Proxy Server trong SIP:

Tương tự như chức năng của Proxy Server trong Internet, Proxy Server trong

SIP là một thực thể trung gian, vai trò chính của proxy là định tuyến, nghĩa là bảo

đảm một request được gởi đi đến người dùng. Proxy Server có thể được dùng  để

kiểm tra, thống kê, tìm đường truyền kế tiếp, chính sách bắt buộc nào đó,….

Có nhiều loại Proxy khác nhau trong SIP, nhưng 2 loại Proxy thường được nhắc

đến là : outbound proxy và inbound proxy.

Outbound Proxy : Outbound Proxy giúp đỡ các UA để định tuyến các

request đi ra từ các UA. Các UA thường được cấu hình truyền các request

của nó đến một outbound proxy.

Inbound Proxy : giúp định tuyến các request đi ra từ proxy này trực tiếp đến

UA yêu cầu. Khi 1 inbound proxy nhận một request yêu cầu gởi đến 1 user,

inbound proxy sẽ gởi đến Location Service để xác định contact address của

user đó, sau đó gởi trực tiếp đến user. 

6

Page 7: Giới Thiệu Sip

Hình 1. 3 Proxy Server

1.2.5 Forking

Forking của SIP request có nghĩa là nhiều session media có thể được thực

hiện từ 1 request duy nhất. Đây là 1 tính năng mạnh mẽ của SIP.

Với SIP Forking, bạn có thể đăng ký 1 Address of Record mà có nhiều Contact

Adress trong location service.

Ví dụ:

               

Address of Record Contact Address

Sip: [email protected] Sip:[email protected]

Sip: [email protected] Sip:[email protected]

Sip: [email protected] Sip: [email protected]

.. …

Khi có 1 request gởi đến inbound proxy để thực hiện cuộc gọi đến John, thì

proxy này tìm thấy các vị trí khác nhau này và đưa ra 1 thuật toán để cố gắng liên

lạc với John ở các vị trí khác nhau. Có 2 thuật toán được sử dụng :

Sequential search (tìm tuần tự) : proxy cố gắng tìm lần lượt từng vị trí, vị trí

này xong đến vị trí khác.

7

Page 8: Giới Thiệu Sip

Parallel search (tìm song song) : proxy sẽ tìm tất cả các vị trí cùng lúc.

Hình 1. 4 Sequential search (tìm tuần tự)

8

Page 9: Giới Thiệu Sip

Hình 1. 5 Parallel search (tìm song song)

1.2.6 Redirect Server

Redirect Server là UAS mà nhận các request từ User Agent Clients và tự

động tạo ra các responses gởi đến UAC. Các reponses này luôn luôn hướng dẫn

UAC tạo ra request liên lạc với 1 tập các địa chỉ thay thế.

Hình 1. 6 Ví dụ về Redirect Server

9

Page 10: Giới Thiệu Sip

1.2.7 Back-to-Back User Agents (B2BUA)

Một B2BUA là một thực thể vật lý (là một server), nhận 1 request, sau đó

tính toán lại request và gởi nó đi dưới dạng 1 request mới. Các Response phản hồi

lại request cũng được tính toán lại và gởi đi theo hướng ngược lại. Nó quản lý từ lúc

bắt đầu cho đến khi kết thúc.

B2BUA được sử dụng để cung cấp những tính năng nâng cao, ví dụ dịch vụ

nặc danh, ẩn thông tin người gọi….

10

Page 11: Giới Thiệu Sip

CHƯƠNG 2: CÁCH HOẠT ĐỘNG CỦA GIAO THỨC SIP

2.1  MÔ HÌNH HOẠT ĐỘNG CỦA SIP

SIP hoạt động dựa trên sự trao đổi các SIP Messages. SIP Message gồm 2

phần là SIP Request và SIP Response. 1 SIP Request cùng với tất cả SIP Response

kết hợp với nó được gọi là 1 transaction. Cũng tương tự như HTTP, khi bạn kết nối

1 web site, trình duyệt của bạn gởi đi 1 HTTP request bao gồm địa chỉ của trang

web mà bạn muốn nhìn thấy. Server chứa website nhận được request và tạo ra 1

response bao gồm nội dung của trang web và hiển thị trên trình duyệt.

SIP requests bắt đầu từ 1 User Agent Client (UAC) đến 1 User Agent Server

(UAS), SIP responses cũng tương tự nhưng theo cách ngược lại từ UAS đến UAC.

Hình 2. 1 Mô hình hoạt động của SIP

2.1.1 SIP Responses

1 Response là 1 mã trạng thái có 3 chữ số. Số đầu tiên định nghĩa loại

response, số đầu tiên là 1 đó là provisonal response, các số khác được gọi chung là

final response.

               

Giá trị Ý nghĩa Miêu tả

1xx Provisional Request đã nhận được. Tiếp tục xử lý request

2xx Success  Request đã được xử lý thành công.

11

Page 12: Giới Thiệu Sip

3xx Redirection Redirection được gởi đi khi 1 session được chuyển đến 1

địa chỉ khác.

4xx Client Error Reuqest chứa cú pháp lỗi và không được xử lý ở phía

server.

5xx Server Error Server bị lỗi không xử lý được các request hợp lệ.

6xx Global Failure Request không được xử lý ở bất cứ server nào.

Chữ x đại diện cho 1 con số nào đó từ 0-> 9. Ví dụ : 100, 202,301,…

Không giống như HTTP, trong SIP, 1 request có nhiều response. Bất kỳ

request nào cũng phải có ít nhất 1 final repsonse và có thể có nhiều provisional

responses.

Hình 2. 2 SIP Responses

2.2 SIP Requests

Có 6 loại SIP Request thông dụng : REGISTER, INVITE, ACK, CANCEL,

BYE, OPTIONS.

12

Page 13: Giới Thiệu Sip

2.2.1 REGISTER

Register request được sử dụng bởi 1 User Agent để thực hiện thủ tục đăng ký. UAC

xây dựng một Register request bao gồm các thông tin sau:

Address of Record (AOR) được biểu diễn dưới dạng 1 SIP URI trong trường

đầu đề To.

Ví dụ :

To : sip:[email protected]

To: John Wales <sip:[email protected]>

Vị trí của người dùng (Contact Address) được biễu diễn dưới dạng 1 SIP

URI trong trường đầu đề Contact.

Ví dụ:

Contact: Sip:[email protected]

Contact: John Wales < Sip:[email protected]>

Ví dụ : John Wales muốn đăng ký để thực hiện trao đổi media. John phải

cung cấp địa chỉ vị trí của mình và gởi đến registrar server để đăng ký. Địa chỉ của

Registrar server cũng được biểu diễn dưới dạng SIP URI như

sip:registrar.university.com.vn

Trong mô hình trên Registrar kết hợp với location service trên cùng 1 server.

Khi đăng ký thành công 1 response phản hồi mã trạng thái 200 OK.

Sự lưu trữ trên Location Server có thời gian tồn tại nhất định, nếu bạn muốn

được lưu trữ theo ý muốn bạn sử dụng trường tiêu đề Expires trong Request

Register. Trường Expires được sử dụng trong tất cả các Request để chỉ ra khoảng

thời gian mà request hay message content là hợp lệ.

Ví dụ:

Expires : 60 (kể từ lúc đăng ký đến 60 giây)

13

Page 14: Giới Thiệu Sip

Expires: 15 Sep 2013 00:00:00 GMT (hạn dùng là 15 tháng 9 năm 2013)

Hình 2. 3 Ví dụ về đăng ký SIP

2.2.2 INVITE

Một UAC tạo ra 1 INVITE Request để khởi tạo 1 session với một UAS.

Request này có thể được gởi trực tiếp từ UAC đến UAS hay phải qua 1 hay nhiều

proxy mà giúp định tuyến request này.

Một khi UAS nhận được request, nó tạo ra một vài provision response để

thông báo tuyến trình của cuộc gọi. Ví dụ, reponse có mã trạng thái 180 chỉ ra đang

thông báo cho bên được gọi. Nếu bên được gọi đã nhận được, 1 final response có

mã trạng thái 200 OK được tạo ra và phản hồi đến người gọi.

Lưu ý, SIP chỉ truyền tín hiệu giữa bên gọi và bên được gọi, còn việc trao đổi

media stream đó là nhiệm vụ của Real-time Transport Protocol (RTP) và Sesson

Description Protocol (SDP) – các bạn đừng quá lo lắng, RTP và SDP không quá

khó hiểu, chúng ta sẽ tìm hiểu nó trong những chương sau. SIP Request sẽ dính kèm

theo SDP, SDP này được gọi là “SDP offer” . Ví dụ, bạn muốn trao đổi voice hay

video, bên gọi và bên được gọi phải có cùng codecs, bên gọi và bên được gọi cũng

14

Page 15: Giới Thiệu Sip

phải cung cấp địa chỉ IP, Port để trao đổi media stream. Codec, IP, Port được miêu

tả trong SDP, sau đó RTP có trách nhiệm truyền các media stream.

Ví dụ, Alice muốn thực hiện voice chat đến John, các thông số được kèm theo trong

SDP:

Media types : voice.

Codec : Adaptive Multirate – AMR, Pulse Code Modulation -PCM

IP và Port của Alice để thực hiện voice : 23.17.32.16:4000.

1 final response 200 OK được phản hồi nếu John nhận được thành công, trong

response này cũng chứa 1 SDP của John, SDP này được gọi là “SDP anwser” bao

gồm các thông số sau:

Media types : voice

Codec : PCM (John không có AMR)

IP và Port của John để thực hiện voice là : 45.23.2.5:3000.

Hình 2. 4 Bản tin INVITE trong SIP

Một INVITE request cũng có thể được gởi đi khi một cuộc đối thoại đang

được thực hiện, trong trường hợp này bạn có thể xem INVITE request mới này là 1

re-INVITE. Thông thường re-INVITE được sử dụng để chỉnh sửa hay bổ sung các

thông số của 1 session đang tồn tại. Ví dụ, Alice đang voice chat với John, trong lúc

15

Page 16: Giới Thiệu Sip

này Alice muốn John mở webcam để thấy mặt nhau. Trong trường hợp này, Alice

phải gởi 1 INVITE mới trong một cuộc đối thoại đang tồn tại để bổ sung vào SDP

thành phần video. SDP thay đổi như sau :

Media types : voice và video

Codecs dành cho voice : AMR

Codecs dành cho video : H.261

IP và Port của Alice để thực hiện voice : 23.17.32.16:4000.

IP và Port của Alice để thực hiện video : 23.17.32.16:4001.

2.2.3 ACK

ACK Request được sử dụng để xác nhận rằng UAC đã nhận được final

response từ 1 INVITE request. Tức là, sau khi UAC nhận được final response, nó sẽ

tự tạo ra 1 request khác để thông báo với UAS rằng UAC đã nhận được final

response, request này được gọi là ACK.  

Hình 2. 5 Bản tin ACK trong SIP

16

Page 17: Giới Thiệu Sip

2.2.4 CANCEL

1 UAC tạo ra 1 CANCEL request để hủy bỏ 1 request đang chờ xử lý. Ví dụ,

Alice gọi John, vì thế UA của Alice tạo ra 1 INVITE requset. Khi INVITE được

nhận bởi UA của John, nó gởi 180 provisional response và bắt đầu thông báo đến

John. John không tiếp nhận cuộc gọi này trong khi Alice vẫn chờ và Alice quyết

định gác máy. Để gác máy, Alice đã gởi 1 CANCEL request đến John. Khi

CANCEL request này được tiếp nhận bởi UA của John, UA sẽ dừng chuông báo và

cuộc gọi được hủy bỏ. UA của John tạo ra 2 response phản hồi CANCEL request :

200 OK response (dành cho CANCEL request) và 487 “Request terminated”

response (dành cho INVITE request).

Hình 2. 6 Bản tin CANCEL trong SIP

BYE Request được sử dụng để kết thúc 1 media session đang được thực

hiện. BYE Chỉ được gởi bởi các UA đang tham gia trong media session. Ví dụ,

Alice và John đang thực hiện voice chat với nhau, một lúc sau Alice (hoặc John)

muốn kết thúc ,cô ấy gởi 1 BYE Request để kết thúc cuộc trò cuộc này.

2.2.5 Options

OPTIONS Request được sử dụng để truy vấn về tính năng thực hiện session

media của 1 UA hay Server , đồng thời khám phá những tính năng có sẵn của nó.

17

Page 18: Giới Thiệu Sip

OPTIONS được sử dụng khi tìm hiểu các thông tin về phương thức hổ trợ, codec,

….

Hình 2. 7 Bản tin OPTIONS trong SIP

18

Page 19: Giới Thiệu Sip

CHƯƠNG 3: SIP MESSAGE

SIP là giao thức dựa trên ký tự. Có nghĩa là thông tin được trao đổi bên trong

giao thức được mã hóa dưới dạng chuỗi hay ký tự. SIP messages được chia thành

nhiều dòng ký tự riêng biệt được gọi là line. Mỗi Line là 1 chuỗi các ký tự nối liền

nhau và ngăn cách với line khác bởi 2 ký tự Carriage Return (phím xuống dòng)

và Line Feed (tín hiệu xuống dòng).

Có 2 loại SIP messages : requests và responses. Cả hai loại đều có 1 Start

line, 1 hay nhiều header fields (trường tiêu đề), một empty line – chỉ ra kết thúc của

header fields, và 1 message body.

Hình 3. 1 SIP message

 Header fields bao gồm : field name và field value, ngăn cách nhau bởi dấu 2

chấm và kết thúc bằng ký tự xuống dòng.

Ví dụ :

To : sip:[email protected]

Contact: Sip:[email protected]

19

Page 20: Giới Thiệu Sip

Message body không bắt buộc phải có, chúng được sử dụng để chứa một vài

loại thông tin khác như thông tin SDP,…

3.1 Start line

Trong SIP requests, start line được gọi là request line, nó chứa : tên loại

request (INVITE, BYE, CANCEL,…), Request-URI và protocol version (phiên bản

giao thức SIP) tất cả được tách biệt bằng khoảng trắng. Request-URI là địa chỉ của

user hay server mà request này sẽ gởi đến.

Tên loại request <khoảng trắng> Request-URI <khoảng trắng> Protocol

version

Ví dụ : INVITE sip:[email protected] SIP 2.0

Trong đó:

Loại request là INVITE

Request-URI : sip:[email protected]

protocol version : SIP 2.0

Trong SIP response, start line được gọi là status line (dòng trạng thái), nó bao

gồm : protocol version, status code và một cụm từ diễn đạt status code – reason

phrase. Mỗi thành phần cách nhau bằng 1 ký tự khoảng trắng.

Protocol-version <khoảng trắng> status-code <khoảng trắng> reason phrase

Vi dụ : SIP 2.0 180 Ringing

Trong đó:

Protocol-version : SIP 2.0

Status –code : 180

Reason phrase : Ringing

Dưới đây là 1 bảng miêu tả status code và reason phrase thường thấy  trong SIP

20

Page 21: Giới Thiệu Sip

Status

code

Reason Phrase Status

code

Reason Phrase

100 Trying 302 Moved Temporarily

180 Ringing 305 Use Proxy

181 Call is being forwarded 380 Alternative Service

182 Queued 400 Bad Request

183 Session Progress 401 Unauthorized

200 OK 402 Payment Required

300 Multiole choices 403 Forbidden

301 Moved permanently 404 Not found

405 Method not allowed 485 Ambiguous

406 Not acceptable 486 Busy here

407 Proxy authentication required 487 Request terminated

408 Request time-out 488 Not acceptable here

410 Gone 491 Request pending

413 Reques entity too large 493 undesirable

414 Request-URI too large 500 Internal Server error

415 Unsupported media type 501 Not implemented

416 Unsupported URI scheme 502 Bed gateway

420 Bad extension 503 Service unavailable

412 Extension required 504 Server time-out

423 Interval too brief 505 SIP version not supported

480 Temporarily not available 513 Message too large

481 Call leg/transaction does not

exist

600 Busy everywhere

482 Loop detected 603 Decline

483 Too many hops 604 Does not exist anywhere

484 Address incomplete 606 Not acceptable

21

Page 22: Giới Thiệu Sip

3.2 Header field

Header field được bắt đầu sau start line trong requests và responses, chúng

cung cấp thông tin về request hay response hoặc message body mà nó chứa. Mỗi

header field bao gồm 1 filename và 1 field value tách biệt nhau bởi dấu : .

Fieldname:fieldvalue

Thứ tự trước sau của các header field trong SIP message không quan trọng.

Ví dụ:

To : sip:[email protected]

Contact: Sip:[email protected]

Hay Contact trước , To sau đều được cả

Contact: Sip:[email protected]

To : sip:[email protected]

Nếu 1 header field có nhiều field value khác nhau thì các field value này

được tách biệt nhau bằng dấu phẩy và thứ tự của chúng rất quan trọng.

Ví dụ :

Route: sip:proxy1.ocean.com , sip:proxy2.ocean.com ,

sip:proxy3.ocean.com

Header fields có thể chứa nhiều tham số (parameter), mỗi tham số bao gồm

tên tham số và giá trị tham số được tách biệt nhau bằng dấu bằng =,tham số này

cách biệt tham số khác hoặc field value bằng dấu chấm phẩy ; .

Fieldname:fieldvalue;parametername = parametervalue

Ví dụ:

From: sip:[email protected];tag=34522549

Về 1 số header field quan trọng.

22

Page 23: Giới Thiệu Sip

3.2.1 From

From header field chỉ ra địa chỉ của người gọi biễu diễn dưới dạng SIP URI,

được lưu giữ trong location service dưới dạng Address of Record(AOR).

Ví dụ : From: sip:[email protected] ,

From: John Wales <sip:[email protected]>

From header field cũng chứa tham số bắt buộc tag. Tham số tag này được sử

dụng cho mục đích nhận biết 1 dialog ( cuối phần này chúng tôi sẽ giải thích về

Dialog, Call và Transaction).

Ví dụ : From: sip:[email protected];tag=34522549

3.2.2 To

To header field là 1 header field yêu cầu phải có trong mỗi SIP message,

được sử dụng để chỉ ra địa chỉ AOR của người nhận.

Ví dụ: To: sip:[email protected] , To: John Wales <sip:[email protected]>

To header field cũng có tham số tag nhưng không bắt buộc, giá trị của tham

số tag của To header được sử dụng nhận dạng 1 dialog.

Ví dụ : To: sip:[email protected];tag=34522549

3.2.3 Call-ID

Call-ID header field bắt buộc phải có trong tất cả SIP requests và responses.

Nó là một phần của Dialog được sử dụng để nhận dạng Call giữa 2 UA. Call-ID

được tạo ra bởi UA dưới dạng 1 chuỗi kết hợp với tên host hay địa chỉ IP của UA

cách biệt nhau bằng dấu @.

Ví dụ : Call-ID: [email protected]

3.2.4 Via

Via header field  ghi lại tất cả địa chỉ host hoặc IP của UA và proxy mà 1

request đi qua, để bắt buộc 1 response trả về cũng phải đi con đường này theo chiều

ngược lại với request. Mỗi khi request đi qua 1 proxy sẽ tạo ra 1 Via địa chỉ proxy

23

Page 24: Giới Thiệu Sip

này vào message. Còn response sao chép tất cả Via của request, mỗi khi response đi

qua 1 proxy sẽ xóa giá trị Via đầu tiên trong message. 

Via header field bao gồm 2 trường:

Trường sent-protocol : chứa giao thức trao đổi gởi message.

Ví dụ : SIP/2.0/UDP , SIP/2.0/TCP,…

Trường sent-by : chứa tên host hoặc địa chỉ IP và port nếu có. 

 Các tham số dành cho Via:

Received : bổ sung đến Via nếu  UA hay proxy mà request đi qua có địa chỉ

IP chỉ là địa chỉ mạng cục bộ. Lúc này, received sẽ chứa địa chỉ IP của NAT

hay firewall proxy, tức là địa chỉ toàn cầu (Internet).

                Ví dụ: Via: SIP/2.0/TCP 192.168.1.2; received=12.4.5.50.

Trong đó, 192.168.1.2 là địa chỉ mạng cục bộ nên received chứa địa chỉ IP

của NAT.

Branch : được tính toán từ hàm băm của Request-URI, To, From , Call-ID và

CSeq để nhận biết 1 transaction (cuối phần này chúng tôi sẽ giải thích dialog,

call và transaction).

Ví dụ: Via: SIP/2.0/UDP 5.4.3.2:5060; branch= z9hG4bKl740ws

24

Page 25: Giới Thiệu Sip

Hình 3. 2 1 ví Message via SIP

3.2.5 Contact

Contach header field được tạo ra bởi UA, và cung cấp một SIP URI để có thể

liên lạc trực tiếp giữa các UA dành cho các request tương lai nhưng phải cùng 1

dialog với request đầu tiên. Điều này có nghĩa, các request tương lai  trong 1 dialog

được gởi trực tiếp đến peer UA bởi địa chỉ trong Contact header field.

Ví dụ : Contact: sip:[email protected]

25

Page 26: Giới Thiệu Sip

Hình 3. 3 1 ví Message Contact SIP

3.2.6 Record-Route và Route

  Record-Route header field chứa danh sách các firewall proxy dưới dạng SIP URI

mà request đầu tiên đi qua, được sử dụng để bắt buộc tất cả các request trong tương

lai phải đi qua các firewall proxy có trong danh sách này.

 Firewall Proxy không cho phép liên lạc trực tiếp các UA hay các thiết bị

được bảo vệ bởi nó, bắt buộc sự liên lạc phải thông qua nó. Do đó, trong trường hợp

này  Contact header field không thể hoạt động được.

Đối với các request kế tiếp, nội dung của Record-Route trong request đầu

tiên sẽ được sao chép lại vào Route header field của request kế tiếp thuộc cùng 1

dialog. Route hoạt động như Record-Route, chỉ khác là Record-Route ghi lại địa chỉ

của các Firewall proxy mỗi khi request đi qua nên nội dung của nó luôn được cập

nhật, còn nội dung của Route không bao giờ được thay đổi trong các request tiếp

theo. 

26

Page 27: Giới Thiệu Sip

Hình 3. 4 Record-Route

3.2.7 CSeq

CSeq header field là 1 header field bắt buộc trong mỗi request. CSeq chứa số

nguyên (gọi là CSeq number) và kiểu request, có sự phân biệt chữ hoa và chữ

thường. CSeq number được khởi tạo ở thời điểm bắt đầu 1 call và được tăng thêm 1

cho mỗi request mới thuộc cùng 1 dialog, ngoại trừ CANCEL và ACK request.

CSeq number được sử dụng để phân biệt 1 request trước đó được truyền lại hay 1

request mới. Kiểu request trong CSeq thể hiện mối tương quan giữa các request và

response trong cùng 1 transaction.

27

Page 28: Giới Thiệu Sip

Hình 3. 5 Hình biểu diễn CSeq

3.2.8 Max-Forwards

Max-Forwards header field chứa 1 số nguyên dương,  được sử dụng để chỉ ra

số bước truyền lớn nhất mà 1 SIP request có thể đi qua. Giá trị của Max –Forwards

sẽ giảm đi mỗi khi request đi qua 1 proxy. Khi proxy nhận request có Max-

Forwards là 0, request bị loại bỏ và gởi 1 reponse “483 Too Many Hops” đến người

gởi.

Ví dụ:  Max-Forwards : 70

3.3 SIP Message Body

SIP requests và responses có thể chứa nhiều message body. Message body

thường là 1 SDP chứa các đối tượng: text, image, application, voice, video,..

Message body được chuyển đổi qua lại giữa các UA. Các proxy không được

thêm, xóa, sửa message body.

28

Page 29: Giới Thiệu Sip

Để tăng khả năng của message body, một số Sip header field được sử dụng:

Content-Type, Content-Length, Content-Encoding.

3.3.1 Content-Type

Content-Type header field được sử dụng để chỉ ra kiểu media trong message

body. Kiểu media có định dạng type/sub-type, nếu header field này không được

miêu tả thì mặc định là application/sdp.  

 

                Một số Content-Type thông dụng trong Sip Request và Response :

Content-Type Use

application/sdp SDP dính kèm trong INVITE, ACK hay UPDATE

request

application/xml+dialog XML dialog

application/xml+conf XML conference info

Application/cpim CPIM

text/plain Plain text

text/html HTML text

multipart/mixed Chứa nhiều đối tượng

3.3.2 Content-Length

Content-Length được sử dụng để chỉ ra số các octet (octet là khối dữ liệu có

kích thước 8 bit) trong message body. Content-Length:0 chỉ không có message

body.

Ví dụ : Content-Length: 349

3.3.3 Content-Encoding

  Content-Encoding header field được sử dụng để chỉ ra lược đồ mã hóa được

áp dụng cho message body. Điều này cho phép UAS xác định lược đồ giải mã cần

thiết để hiểu được message body.

Ví dụ: Content-Encoding: gzip

29

Page 30: Giới Thiệu Sip

Hình 3. 6 Content-Encoding

3.4 Mối quan hệ giữa Call, Dialog, Transaction và Message

Message : là chuỗi ký tự riêng lẽ được trao đổi giữa 1 server và 1 client. Có 2

loại message : Request và Response.

Transaction : xảy ra giữa client và server, bao gồm tất cả các message từ

request đầu tiên được gởi từ client cho đến final response được gởi từ server.

Nếu request là INVITE và final request không phải 2xx, thì ACK cũng thuộc

cùng 1 transaction. Ngược lại, ACK dành cho 2xx response là 1 transaction

tách biệt.

Dialog : là mối quan hệ peer-to-peer giữa 2 UA tồn tại 1 thời gian nào đó. 1

dialog được nhận dạng bởi Call-ID, tag của From header field (trong request)

và tag của To header field (trong response).

Call : bao gồm tất cả Dialog có liên quan. 1 call có thể gọi là 1 session.

30

Page 31: Giới Thiệu Sip

Hình 3. 7 Mối quan hệ giữa Call, Dialog, Transaction và Message

31

Page 32: Giới Thiệu Sip

CHƯƠNG 4: CẤU TRÚC GIAO THỨC SIP

Giao thức SIP hoạt động dưới dạng một tập hợp các bước xử lý độc lập riêng

lẽ nhau, những bước xử lý này được gọi là Layer (lớp). Chúng ta đã từng biết qua

một vài các giao thức nổi tiếng cũng hoạt động theo mô hình Layer như bộ giao

thức TCP/IP. Tuy nhiên, SIP cũng chỉ là 1 giao thức nằm trong bộ giao thức

TCP/IP, để tránh sự nhầm lẫn với các Layer của TCP/IP nên các Layer của SIP

chúng ta tạm đặt là sublayer (lớp con) , ví dụ Transport layer của SIP thành

Transport sublayer để phân biệt Transport layer của TCP/IP và Transport layer của

SIP.

Các Sublayer của giao thức SIP:

SIP Syntax and encoding : là layer thấp nhất được định nghĩa trong SIP. Nó

là một tập các quy tắc mà định nghĩa về sự định dạng và cấu trúc của mỗi

SIP Message. Nói đơn giản là nó cho các thực thể hiểu và biên dịch các SIP

message. Ví dụ, khi UA nhận được 1 SIP Message, thì UA cần phải biết sự

khác nhau giữa các loại message, các tham số bắt đầu và kết thúc của mỗi

header,... Đó là nhiệm vụ của Syntax and encodeing sublayer.

SIP transport sublayer: nó định nghĩa phía client gởi request và nhận

response như thế nào và phía server nhận request và gởi response như thế

nào thông qua mạng. Tất cả các thực thể SIP đều phải có transport sublayer.

Nó có hai thành phần: phía client gọi là client transport, và phía server gọi là

server transport.

SIP transaction sublayer: là bộ phận chủ yếu của SIP. 1 Transaction được

định nghĩa là một request được gởi từ client đến server và tất cả các reponse

được kết hợp với request này. Nhiệm vụ của transaction sublayer là quản lý

sự truyền lại của tất cả các response liên quan đến request, và thời gian chờ

đợi. Chỉ UA và stateful porxy (chúng ta sẽ tìm hiểu trong phần sau) có

transaction layer. Nó có 2 thành phần: phía client gọi là client transaction và

phía server gọi là server transaction.

32

Page 33: Giới Thiệu Sip

SIP core sublayer: đó là tất cả các thực thể của SIP : UAC, UAS, registrar,

stateful proxy (chúng ta sẽ tìm hiểu trong phần sau), stateless proxy.

33

Page 34: Giới Thiệu Sip

CHƯƠNG 5: XÂY DỰNG SIP STACK DÙNG JAIN SIP

5.1 JAIN SIP LÀ GÌ ?

JAIN SIP là Java API Specification dành để phát triển SIP trong môi trường

J2SE. JAIN SIP API là low-level API và  cung cấp cho người phát triển ứng dụng

các tính năng sau:

Xây dựng và phân tích SIP Message.

Gởi và nhận SIP Message ở  transaction sublayer.

Gởi và nhận SIP Message ở  transport sublayer.

  Ngoài ra, JAIN SIP API cũng cung cấp tính năng cho SIP Dialog làm cho

người viết ứng dụng dễ dàng truy cập và xử lý SIP Dialog.

5.2 Các bước xây dựng 1 Sip Stack

5.2.1 Các phần mềm và gói phụ thuộc

Trình gỡ rối dùng để thực hiện chương trình là Netbeans phiên bản IDE 8.0

Có thể download Netbeans tại địa chỉ: https://netbeans.org/downloads/

JAIN SIP mã nguồn mở

Link downloand: https://jsip.java.net/

5.2.2 Sip Client

Sip Client có các tính năng sau:

Kết nối 2 peer (máy tính, phone,..)  thông qua mạng Internet.

Thực hiện voice chat giữa 2 peer.

5.2.2.1Giao diện phần mềm Sip Client

34

Page 35: Giới Thiệu Sip

Hình 5. 1 Giao diện Sip Client

Sip port : port thực hiện kết nối dành cho giao thức SIP.

Voice Port : Port thực hiện kết nối để trao đổi Audio.

Button Connect : thực hiện khởi động sẵn sàng kết nối.

Button Disconnect : ngắt kết nối mạng.

Label Initialize : hiển thị thông tin địa chỉ IP và Port của peer. Địa chỉ này

dùng để kết nối 2 peer.

Lable Status : hiển thị trạng thái kết nối.

Destination : là địa chỉ IP mà peer gởi INVITE Request.

Button Yes :

phía client gởi INVITE request ở Client.

phía Server chấp nhận thực hiện voice chat.

Button No:

Phía client hủy bỏ khi đang gởi INVITE, hoặc kết thúc voice chat.

Phía server không chấp nhận thực hiện voice chat, hoặc kết thúc việc

đang thực hiện voice chat.

Tracer : hiển thị nội dung Request và Response.

35

Page 36: Giới Thiệu Sip

5.2.2.2Các trạng thái

Chúng ta định nghĩa một số trạng thái để thể hiện quá trình chuyển tiếp từ

trạng thái này sang trạng thái khác. Ví dụ, khi peer đang ở giao đoạn sẵn sàng chờ

kết nối - chúng ta đinh nghĩa trạng thái này IDLE. Khi peer đang ở trạng thái IDLE

– client bấm button YES để gởi INVITE , thì client từ trạng thái IDLE chuyển sang

trạng thái WAIT-PRO, còn Server chuyển sang trạng thái RINGING,…

Các trạng thái : IDLE, WAIT_PROV, WAIT_FINAL, ,

WAIT_ACK  ,  RINGING ,ESTABLISHED .

   

36

Page 37: Giới Thiệu Sip

            

Trạng thái Định nghĩa Vào trạng thái Chuyển sang trạng

thái

IDLE HelloPhone sẽ đi

vào trạng thái này

khi user bấm vào

button Connect,

thể hiện trạng thái

sẵn sàng.

-client hoặc

server bấm vào

button No để kết

thúc cuộc gọi.

- Client bấm

button No hủy bỏ

sự chờ đợi phản

hồi từ server.

-client bấm button

YES, client chuyển

sang trạng thái

WAIT_PROV.

-Server nhận được

INVITE , chuyển sang

trạng thái RINGING.

WAIT_PROV HelloPhone phía

client đi vào trạng

thái này khi client

gởi 1 INVITE và

chỉ chuyển sang

trạng thái khác

khi client nhận

được Provisonal

hay Final

Response

Client bấm

button YES khi

đang ở trạng thái

IDLE.

-Client nhận được

Provisonal  Response,

chuyển sang trạng thái

WAIT_FINAL.

-Client nhận được

Final Response, client

gởi ACK request,

chuyển sang trạng thái

ESTABLISHED và

bắt đầu truyền và nhận

media.

WAIT_FINAL HelloPhone phía

client đi vào trạng

thái này, khi

client nhận 1

Provisonal

response và được

chuyển trạng thái

Client đang ở

trạng thái

WAIT_PROV thì

nhận được 1

Provisional

Response.

-Client nhận được

Final Response (200

OK), client gởi ACK

request, chuyển sang

trạng thái

ESTABLISHED và

bắt đầu truyền và nhận

37

Page 38: Giới Thiệu Sip

khi client nhận

được Final

Response

media.

- Server không chấp

nhận cuộc gọi, tạo ra

“486 Busy response”.

Client chuyển sang

trạng thái IDLE.

-Client bấm button

NO để hủy bỏ cuộc

gọi và CANCEL

request được tạo ra.

HelloPhone trở về

trạng thái IDLE

ESTABLISHED Client và Server

phải cùng ở trạng

thái này để thực

hiện cuộc gọi.

- Client nhận

được Final

Response và gởi

đi ACK

Message.

-Server nhận

được ACK

Message.

- client hoặc server kết

thúc cuộc gọi. Cient

và Server trở về trạng

thái IDLE.

RINGING Server đang ở

trạng thái IDLE,

nhận được 1

INVITE request.

Server gởi đi 180

Provisional

Response. Lưu ý,

trong trạng thái

này Server chưa

Server nhận được

1 INVITE và gởi

đi Provisonal

Response.

-Server chấp nhận

cuộc gọi và tạo ra 200

OK response. Server

chuyển sang trạng thái

WAIT_ACK.

- Server không chấp

nhận cuôc gọi và tạo

ra 486 final response.

Server chyển sang

38

Page 39: Giới Thiệu Sip

chấp nhận cuộc

gọi.

trạng thái IDLE.

-Server nhận được

CANCEL reuqest và

gởi đi 487 response.

Server chuyển sang

trạng thái IDLE.

WAIT_ACK Server đang ở

trạng thái

RINGING và đợi

ACK message để

chuyển sang trạng

thái

ESTABLISTED

Server đang ở

trạng thái

RINGING và

chấp nhận cuộc

gọi, tạo ra 200

OK response.

- Server nhận được

ACK request và

chuyển sang trạng thái

ESTABLISHED.

5.2.3 Sip Proxy

5.2.3.1 Giao diện phần mềm

39

Page 40: Giới Thiệu Sip

Hình 5. 2 Giao diện Sip Proxy

5.2.3.2 Tính năng

Xây dựng 1 Sip proxy server đơn giản , proxy này có các tính năng sau:

Bao gồm Sip registrar và location service.

Registrar khá đơn giản, nhiệm vụ nhận REGISTER request để đăng ký và

thông tin được cập nhật vào location service.

Chỉ thực hiện tính năng trao đổi riêng lẽ giữa hai peer.

Intant Messaging đơn giản có tính năng chat bằng ký tự giữa 2 peer bởi

sử dụng MESSAGE request.

Tính năng gọi điện giữa 2 client.

40