Chương 11: Các thành phần của hệ thống SIP Xét trên quan điểm Client / Server, các thành phần chính của một hệ thống SIP bao gồm (Hình 4.1): Đầu cuối SIP (UAC/UAS). Proxy server. Location server. Redirect server. Registrar server. Hình 4.1. Cấu trúc của hệ thống SIP User Agent là thiết bị đầu cuối trong mạng SIP, nó có thể là m ột máy điện thoại SIP hay một máy tính chạy phần mềm đầu cuối SIP. UA có thể khởi tạo, thay đổi hay giải phóng cuộc gọi. Trong đó phân biệt hai loại UA: UAC (User Agent Client) và UAS (User Agent Server). UAC là một thực thể thực hiện việc khởi tạo một cuộc gọi còn UAS là một thực thể thực hiện việc nhận cuộc gọi. Nhưng cả UAC và UAS đều có thể giải phóng cuộc gọi. Proxy Server là phần mềm trung gian hoạt động cả như Server và cả như Client để thực hiện các yêu cầu thay thế cho các đầu cuối khác. Tất cả các y êu cầu được xử lý tại chỗ bởi Proxy Server (nếu có thể) hoặc nó chuyển đến cho các máy chủ khác. Trong trường hợp Proxy Server không trực tiếp đáp ứng các yêu c ầu này thì Proxy Server sẽ thực hiện khâu chuyển đổi hoặc dịch sang khuôn dạng thích hợp trước khi chuyển đi. Location Server là phần mềm định vị thuê bao, cung cấp thông tin về những vị trí có thể của phía bị gọi cho các phần mềm Proxy Server và Redirect Server. Redirect Server là phần mềm nhận yêu cầu SIP và chuyển đổi địa chỉ SIP sang một số địa chỉ khác v à gửi lại những địa chỉ này cho đầu cuối. Không giống như Proxy Server, Redirect Server không bao gi ờ hoạt động như một đầu cuối, tức là không gửi đi bất cứ một yêu cầu nào. Redirect Server cũng không thực hiện việc chấp nhận hay huỷ cuộc gọi. Registrar Server là phần mềm nhận các yêu cầu đăng ký Register. Trong nhi ều trường hợp Registrar Server đảm nhiệm luôn một số chức năng an ninh như xác nhận người sử dụng. Thông thường Registrar Server được cài đặt cùng với Proxy hoặc Redirect Server hoặc cung cấp dịch vụ định vị thuê bao. Mỗi lần đầu cuối được bật l ên (thí dụ máy điện thoại hoặc phần mềm SIP) thì đầu cuối lại đăng ký với Server. Nếu đầu cuối cần thông báo với Server về địa điểm của mình thì bản tin Register được gửi đi. Nói chung các đầu cuối đều thực hiện việc đăng ký lại một cách định kỳ. 4.1.3. Khái quát về hoạt động của SIP Trong hội thoại SIP, mỗi bên tham gia (bên chủ gọi và bên bị gọi) được gắn một địa chỉ SIP hay còn gọi là SIP URL. Người sử dụng phải đăng ký vị trí của họ với SIP Server. Để tạo một cuộc gọi SIP, phía chủ gọi định vị tới máy phục vụ thích ứng và sau đó gửi một yêu cầu SIP. Hoạt động SIP thường xuyên nhất là lời mời các thành viên tham gia hội thoại. Thành phần Register đóng vai trò ti ếp nhận các yêu cầu đăng ký từ UA và lưu trữ các thông tin này tại một dịch vụ phi SIP (Non-SIP). 4.1.3.1. Địa chỉ SIP Các đối tượng được đánh địa chỉ bởi SIP là các người sử dụng tạicác trạm, những người sử dụng này dược định danh bằng một SIP URL. SIP URL có dạng user@host. Phần user là một tên của người sử dụng hay t ên của một máy điện thoại. Phần host có thể là m ột tên miền hoặc một địa chỉ mạng. SIP URL được dùng trong các bản tin SIP để thông báovề nơi g ửi (From), đích hiện thời (Request URI) và nơi nhận cuối cùng (To) c ủa một yêu cầu SIP và chỉ rõ địa chỉ gián tiếp. Một SIP URL có thể gắn vào một trang Web hoặc những siêu liên kết (Hyperlink) khác để thông báo rằng người dùng hoặc dịch vụ có thể gọi thông qua SIP. Một địa chỉ SIP URL có thể chỉ rõ một cá nhân (có thể được định vị tại một trong các hệ thống đầu cuối), người khả dụng đầu tiên từ một nhóm các cá nhân hoặc toàn bộ một nhóm. Ví dụ, khuôn dạng địa chỉ: sip: sales@example.com nói chung là không đủ để quyết định mục đích của người gọi. 4.1.3.2. Quá trình định vị tới máy chủ SIP Khi một Client muốn gửi đi một yêu cầu, Client sẽ gửi bản tin yêu cầu đó tới SIP Proxy Server (như trong HTTP), hoặc tới địa chỉ IP và cổng tương ứng trong địa chỉ của yêu cầu SIP (Request- URI). Tr ường hợp đầu, yêu cầu được gửi tới SIP Proxy Server không phụ thuộc vào địa chỉ của yêu cầu đó là như thế nào. Với trường hợp sau, Client phải xác định giao thức, cổng và địa chỉ IP của Server mà yêu cầu được gửi đến. Một Client thực hiện các bước tiếp theo để có được những thông tin này. Tại mỗi bước, trừ các trạng thái khác, Client cố gắng liên lạc với Server theo số cổng được chỉ ra trong địa chỉ yêu cầu SIP (Request-URI). Nếu không có số cổng nào chỉ ra trong Request-URI, Client sẽ sử dụng địa chỉ cổng mặc định là 5060. N ếu Request-URI chỉ rõ là sử dụng giaothức TCP hay UDP, Client sẽ làm việc với Server theo giaothức đó. Nếu không có giaothức nào được chỉ ra thì Client cố gắng dùng giaothức UDP (nếu không hỗ trợ TCP) hoặc sử dụng giaothức TCP cho hoạt động của mình (chỉ được hỗ trợ TCP mà không được hỗ trợ UDP). Client cố gắng tìm một hay nhiều địa chỉ cho SIP Server bằng việc truy vấn DNS (Domain Name System) theo các thủ tục sau: 1) Nếu địa chỉ Host trong địa chỉ Request-URI là một địa chỉ IP thì Client làm việc với Server bằng địa chỉ được đưa ra. N ếu đó không phải là một địa chỉ IP, Client thực hiện bước tiếp theo. 2) Client đưa ra câu hỏi tới DNS Server về bản ghi địa chỉ cho địa chỉ Host trong địa chỉ Request -URI. DSN sẽ trả về một bản ghi danh sách các địa chỉ. Lúc đó việc lựa chọn một trong các địa chỉ này là tùy ý. Còn nếu DNS Server không đư a ra bản ghi địa chỉ, Client sẽ kết thúc hoạt động, có ngh ĩa nó không thực hiện được việc định vị máy chủ. Nhờ bản ghi địa chỉ, sự lựa chọn tiếp theo cho giaothức mạng của Client có nhiều khả năng thành công hơn. Một quá trình th ực hiện thành công là quá trình có một bản ghi chứa trong ph ần trả lời và Server làm việc ở một trong những địa chỉ chứa trong trả lời đó. 4.1.3.3. Giao dịch SIP Khi có địa chỉ IP của SIP Server thì yêu cầu sẽ được gửi đi theo t ầng vận chuyển giaothức TDP hay UDP. Client gửi một hoặc nhiều yêu cầu SIP đến máy chủ đó và nhận lại một hoặc nhiều các phúc đáp từ máy chủ. Một yêu cầu cùng với các phúc đáp được tạo ra bởi y êu cầu đó tạo thành một giao dịch SIP. Tất cả các phúc đáp cho một y êu cầu mang cùng các giá trị trong các trường: Call – ID, Cseq, To, và From. Yêu cầu ACK xác định sự nhận một phúc đáp INVITE không là một phần của giao dịch vì nó có th ể di chuyển giữa một tập các host khác nhau. Mỗi cuộc gọi trong SIP được định danh bởi một trường định danh cuộc gọi (Call-ID). M ột yêu cầu phải cần có thông tin gửi đi từ đâu (From) và tới đâ u (To). Trường From và To đều có cấu trúc theo khuôn dạng SIP-URL. Trường CSeq lưu trữ thông tin về phương thức sử dụng trong phiên, trường CSeq có dạng: CSeq = “CSeq”: “DIGIT Method” Trong đó DIGIT là số nguyên không dấu 32 bit. N ếu một giaothứcđiều khiển luồng tin cậy được sử dụng, yêu c ầu vàcác phúc đáp trong một giao dịch đơn lẻ được mang trên cùng k ết nối. Một vài yêu cầu SIP từ cùng máy khách đến cùng máy ch ủ có thể sử dụng cùng kết nối hoặc có thể sử dụng một kết nối mới cho mỗi yêu cầu. Nếu một client gửi yêu cầu thông qua một giaothức datagram đơn hướng như UDP th ì các UA thu sẽ định hướng phúc đáp theo thông tin chứa trong các trường mào đầu Via. Mỗi proxy server trong tuyến chuyển tiếp của yêu cầu chuyển tiếp phúc đáp sử dụng các trường mào đầu Via này. 4.1.3.4. Lời mời SIP Một lời mời SIP thành công gồm hai yêu cầu INVITE và ACK. Yêu c ầu INVITE thực hiện lời mời một thành viên tham gia h ội thoại. Khi phía bị gọi đồng ý tham gia, phía chủ gọi xác nhận đ ã nhận một bản tin đáp ứng bằng cách gửi đi một yêu cầu ACK. Nếu phía chủ gọi không muốn mời thành viên tham gia cuộc gọi nữa nó sẽ gửi yêu cầu BYE thay cho ACK. Thông điệp INVITE chứa thành phần mô tả phiên (SDP) và ph ương thức tiến hành trao đổi ứng với phiên đó. Với các phiên đa h ướng, phần mô tả phiên liệt kê kiểu và khuôn dạng của các phương tiện (Media) để phân phối cho phiên hội thoại. Với một phiên đơn hướng, phần mô tả phiên liệt kê kiểu và khuôn dạng của các phương tiện mà phía chủ gọi muốn sử dụng và nơi những dữ liệu muốn gửi đi. Trường hợp máy phục vụ ủy quyền (Proxy Server): Proxy Server (PS) tiếp nhận lời mời INVITE. PS tra cứu thông tin ở dịch vụ định vị ngoài SIP. PS nhận thông tin để tạo ra địa chỉ chính xác. PS tạo lại INVITE trong trường Request URI và chuyển tiếp. UAS thông báo bị gọi. PS nhận đáp ứng chấp nhận 200 OK từ UAS. PS trả về kết quả thành công cho chủ gọi. Chủ gọi gửi thông báo xác nhận ACK. Yêu cầu xác nhận được chuyển tiếp qua PS. Chú ý: Một ACK có thể được gửi trực tiếp đến User được gọi qua Proxy. Tất cả các yêu cầu và đáp ứng phải có cùng Call-ID. Trường hợp máy phục vụ gián tiếp (Redirect Server): PS tiếp nhận lời mời INVITE. Liên lạc với dịch vụ định vị. Trả lời địa chỉ chủ gọi. Chủ gọi gửi thông báo xác nhận ACK đến PS. Chủ gọi tạo một yêu cầu mới cùng một Call-ID nhưng có CSeq cao h ơn tới địa chỉ trả lời bởi Server đầu tiên. Bị gọi gửi đáp ứng chấp nhận 200 OK. Chủ gọi gửi thông báo xác nhận ACK. 4.1.3.5. Định vị người dùng Một đối tượng bị gọi có thể di chuyển giữa một số các hệ thống đầu cuối khác nhau theo thời gian. Một máy chủ định vị cũng có thể sử dụng một hay nhiều giaothức khác nhau để xác định hệ thống đầu cuối m à tại đó một người sử dụng có thể liên l ạc. Một máy chủ định vị có thể đưa ra một vài vị trí vì người sử dụng được đăng nhập vào tại một vài host đồng thời hoặc bởi vì máy ch ủ định vị lỗi. Máy chủ SIP kết hợp các kết quả để đưa ra một danh sách các vị trí. Đối với từng kiểu SIP Server th ì hoạt động sau khi nhận được danh sách các vị trí khác nhau là khác nhau. Một SIP Redirect Server s ẽ trả lại danh sách địa chỉ cho Client với các mào đầu Contact. Một SIP proxy server có thể thử lần lượt hoặc song song các địa chỉ cho đến khi cuộc gọi thành công (phúc đáp 2xx) hoặc bên bị gọi từ chối cuộc gọi (phúc đáp 6xx). Nếu một proxy server chuyển tiếp một yêu cầu SIP, nó phải bổ sung địa chỉ của nó v ào vị trí bắt đầu của danh sách các trạm chuyển tiếp được ghi trong các mào đầu Via. Dấu vết Via đảm bảo rằng các trả lời có thể đi theo cùng tuyến đó theo hướng ngược lại, việc đảm bảo hoạt động chính xác nhờ tuân theo các tường lửa và tránh l ặp lại yêu cầu. Ở hướng phúc đáp, mỗi host phải xoá bỏ Via của nó, do đó thông tin định tuyến nội bộ được che khuất đối với phía bị gọi vàcác mạng bên ngoài. 4.1.3.6. Thay đổi một phiên hiện tại Trong một vài trường hợp, cần phải thay đổi các thông số của phiên hội thoại hiện tại. Việc đó được thực hiện bởi việc phát lại các yêu cầu INVITE. Các yêu cầu INVITE đó có cùng trường Call-ID nhưng có trường mào đầu và trường bản tin khác với yêu c ầu ban đầu để mang thông tin mới. Các bản tin INVITE đó phải có chỉ số CSeq cao hơn các yêu cầu trước. Ví dụ: có hai thành viên đang hội thoại và muốn có thêm một người thứ ba tham gia. Một trong hai thành viên sẽ mời thành viên thứ ba tham gia với một địa chỉ đa hướng (Multicast) mới và đồng thời gửi một bản tin INVITE đến th ành viên thứ hai với trường miêu tả phiên đa hướng nhưng có tr ường Call-ID cũ. . dụng giao thức TCP hay UDP, Client sẽ làm việc với Server theo giao thức đó. Nếu không có giao thức nào được chỉ ra thì Client cố gắng dùng giao thức UDP. N ếu một giao thức điều khiển luồng tin cậy được sử dụng, yêu c ầu và các phúc đáp trong một giao dịch đơn lẻ được mang trên cùng k ết nối. Một vài yêu