1. Tổng quan
Trong lĩnh vực VoIP (Voice over IP), giao thức SIP (Session Initiation Protocol) là một trong những thành phần cốt lõi, đóng vai trò thiết lập, quản lý và kết thúc cuộc gọi qua mạng IP. Khi làm việc với hệ thống tổng đài như Asterisk, bạn sẽ bắt gặp hai cái tên quen thuộc: chan_sip (SIP cổ điển) và PJSIP (một module mới hơn, hiện đại hơn). Cả hai đều dùng SIP làm nền tảng, nhưng cách triển khai và khả năng mở rộng lại có sự khác biệt đáng kể.
Bài viết này sẽ giúp bạn phân biệt rõ ràng giữa chan_sip và PJSIP, từ đó có thể đưa ra lựa chọn phù hợp cho hệ thống VoIP của mình.
2. SIP là gì?
SIP (Session Initiation Protocol) là một giao thức tín hiệu dùng để thiết lập, duy trì và kết thúc các cuộc gọi thoại, video qua mạng IP. SIP không xử lý việc truyền tải âm thanh/video, mà chỉ là công cụ “bắt đầu và điều phối” các phiên truyền thông.
Trong Asterisk, SIP được triển khai qua 2 module chính:
- chan_sip: Module SIP cũ, mặc định trong các phiên bản Asterisk trước đây.
- PJSIP (chan_pjsip): Module mới, sử dụng thư viện PJSUA (PJSIP stack), được phát triển để thay thế chan_sip với nhiều tính năng vượt trội.
So sánh chi tiết giữa PJSIP và chan_sip
Tiêu chí | chan_sip (SIP cũ) | PJSIP (SIP mới) |
---|---|---|
Thư viện nền tảng | SIP stack do Digium tự viết | Dựa trên thư viện PJSIP (open-source, đa nền tảng) |
Hiệu suất xử lý | Thấp hơn | Tối ưu tốt hơn, hỗ trợ nhiều luồng (multi-thread) |
Khả năng mở rộng | Hạn chế | Tốt hơn, thích hợp cho hệ thống lớn |
Cấu hình | Đơn giản hơn | Cấu hình chi tiết, nhưng phức tạp hơn |
Hỗ trợ tính năng | Giới hạn | Hỗ trợ nhiều tính năng nâng cao: TLS, WebRTC, IPv6, Outbound registration |
Quản lý người dùng | Một người dùng = một cấu hình | Phân tách rõ: endpoint, aor, auth… dễ tùy biến |
Tình trạng bảo trì | Đã ngừng phát triển | Được hỗ trợ và cập nhật thường xuyên |
Phù hợp với hệ thống | Nhỏ gọn, đơn giản | Doanh nghiệp, hệ thống lớn, yêu cầu phức tạp |
Ví dụ minh họa cấu hình
2.1. chan_sip (SIP cũ) – cấu hình đơn giản:
[sipuser]
type=friend
host=dynamic
secret=123456
context=from-internal
2.2. PJSIP – cấu hình chi tiết hơn:
[endpoint-sipuser]
type=endpoint
transport=transport-udp
aors=sipuser
auth=sipuser_auth
context=from-internal
[aor-sipuser]
type=aor
max_contacts=1
[auth-sipuser]
type=auth
auth_type=userpass
username=sipuser
password=123456
Sơ đồ ASCII mô tả kiến trúc PJSIP
+----------------+ +----------------+ +----------------+
| ENDPOINT | ---> | AOR | <--> | CONTACT |
+----------------+ +----------------+ +----------------+
| ↑
v |
+----------------+ +--------------+
| AUTH | | TRANSPORT(s) |
+----------------+ +--------------+
- Endpoint: đại diện cho thiết bị đầu cuối (phone, softphone…)
- AOR (Address of Record): ánh xạ địa chỉ SIP tới danh sách contact
- AUTH: thông tin xác thực người dùng
- TRANSPORT: loại giao thức truyền tải (UDP, TCP, TLS…)
3. PJSIP có hỗ trợ thiết bị SIP cũ.
PJSIP hoàn toàn hỗ trợ các thiết bị IP Phone đời cũ sử dụng SIP, miễn là những thiết bị đó tuân thủ chuẩn SIP RFC 3261 – chuẩn giao thức SIP phổ biến nhất.
Các IP Phone “đời cũ” thường chỉ hỗ trợ SIP cơ bản qua giao thức UDP, không có các tính năng mới như TLS, WebRTC, hoặc IPv6. Tuy nhiên:
- PJSIP vẫn tương thích ngược (backward compatible) với SIP cơ bản.
- Chỉ cần cấu hình PJSIP tương ứng với năng lực thiết bị (thường là
transport=udp
,auth_type=userpass
, codec phù hợp…). - Các tính năng mới trong PJSIP không bắt buộc phải sử dụng — bạn có thể bỏ qua, hệ thống vẫn hoạt động với IP Phone cũ.
Ví dụ cấu hình PJSIP cho IP Phone đời cũ
Giả sử IP Phone cũ của bạn chỉ hỗ trợ:
- SIP over UDP
- Codec G711
- Không có SRTP, không có TLS
Bạn có thể cấu hình PJSIP như sau:
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
[endpoint-ipphone1]
type=endpoint
transport=transport-udp
aors=ipphone1
auth=ipphone1_auth
context=from-internal
disallow=all
allow=alaw,ulaw ; G711 codecs
[aor-ipphone1]
type=aor
max_contacts=1
[auth-ipphone1]
type=auth
auth_type=userpass
username=ipphone1
password=123456
Lưu ý khi kết nối với IP Phone cũ
- Chắc chắn điện thoại hỗ trợ UDP (vì nhiều thiết bị cũ không hỗ trợ TCP hoặc TLS).
- Chọn codec phù hợp, tránh cấu hình các codec nâng cao (Opus, VP8…) nếu thiết bị không hỗ trợ.
- Tắt các tính năng nâng cao của PJSIP nếu không cần (ví dụ disable TLS).
- Kiểm tra kỹ NAT, vì thiết bị cũ thường gặp vấn đề với NAT traversal.
5. Ưu điểm và Nhược điểm
PJSIP
Ưu điểm:
- Hiệu suất cao, hỗ trợ multi-thread.
- Mạnh mẽ, hỗ trợ nhiều tính năng nâng cao như:
- WebRTC
- TLS encryption
- Multiple endpoint per user
- Được cập nhật và hỗ trợ lâu dài.
Nhược điểm:
- Cấu hình phức tạp, khó làm quen với người mới.
- Khó debug hơn nếu không quen.
chan_sip
Ưu điểm:
- Cấu hình đơn giản, dễ tiếp cận.
- Phù hợp cho hệ thống nhỏ, ít thiết bị.
Nhược điểm:
- Đã lỗi thời, không còn được bảo trì.
- Hiệu suất thấp, dễ nghẽn trong môi trường nhiều kết nối.
Lời khuyên khi lựa chọn
- Nếu bạn là người mới, đang học hoặc xây dựng hệ thống nhỏ (vài extension): có thể bắt đầu với chan_sip để làm quen nhanh.
- Nếu bạn triển khai hệ thống VoIP cho doanh nghiệp, quy mô vừa và lớn, cần bảo mật, hiệu suất và khả năng mở rộng: hãy dùng PJSIP.
- PJSIP là xu hướng tương lai, vì vậy hãy đầu tư thời gian học và làm quen càng sớm càng tốt.
6. Kết luận
PJSIP và SIP (chan_sip) đều dựa trên cùng một giao thức SIP, nhưng cách triển khai, cấu trúc và khả năng lại rất khác biệt. Việc hiểu rõ sự khác nhau giữa hai module này sẽ giúp bạn đưa ra quyết định phù hợp với nhu cầu kỹ thuật, bảo trì, cũng như quy mô triển khai của hệ thống VoIP.
“Hãy chọn công cụ phù hợp với mục tiêu – đơn giản khi cần, mạnh mẽ khi đủ sức khai thác.”
Bạn có thể chia sẻ thêm trải nghiệm triển khai thực tế của mình dưới phần bình luận blog để giúp cộng đồng hiểu rõ hơn nhé!