BlogLộ trình chuyên gia OpenSIPS: từ nền tảng SIP đến B2BUA và vận hành production
Bố cục bài viết
Trang này
Ngày tạo
15/09/2026
Cập nhật
Lượt xem
4
Đọc
4m
Giai đoạn 0 — Nền tảng SIP (2-3 tuần)
- Cấu trúc bản tin SIP: start-line, header bắt buộc (Via, From, To, Call-ID, CSeq, Contact, Max-Forwards), body SDP.
- Toàn bộ method thông dụng và vai trò từng cái: REGISTER, INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, UPDATE, PRACK, REFER, SUBSCRIBE/NOTIFY, MESSAGE, PUBLISH — không chỉ biết tên mà phải vẽ được call flow từng cái.
- Transaction (client/server transaction, 3 loại: INVITE, non-INVITE, ACK riêng biệt) và Dialog (dialog-forming vs không).
- Response code theo nhóm: 1xx provisional, 2xx success, 3xx redirect, 4xx/5xx/6xx failure — ý nghĩa từng nhóm trong xử lý routing.
- Thực hành: bắt gói Wireshark cho từng method ở trên, tự vẽ lại flow.
Giai đoạn 1 — Kiến trúc lõi + Cấu hình OpenSIPS (4-6 tuần)
Kiến trúc runtime
- Process model (multi-process, không multi-thread), shared memory (SHM) vs private memory (PKG), tại sao ảnh hưởng đến cách viết config an toàn.
Cấu trúc file cấu hình (opensips.cfg)
- Global parameters:
listen,children,log_level,auto_aliases,disable_tcp… - Module loading:
loadmodule+modparamcho từng module. - Các khối route và thứ tự thực thi thật sự:
route{}(main),failure_route{}(khi nhánh forward thất bại),branch_route{}(khi tạo thêm nhánh forking),onreply_route{}(xử lý response trước khi về lại client),event_route{}(sự kiện nội bộ, MI, clustering). - Pseudo-variables (
$var,$avp,$ru,$fu,$tu…) — ngôn ngữ thao tác dữ liệu thật của script.
Module lõi bắt buộc và cách chúng ánh xạ với method ở Giai đoạn 0
tm(transaction management) — nền cho mọi xử lý INVITE/non-INVITE có trạng thái.sl(stateless reply) — trả lời nhanh không cần transaction, dùng cho OPTIONS keepalive.rr(record-route) — bắt buộc nếu muốn OpenSIPS nằm trong đường đi của BYE/re-INVITE sau này.usrloc+registrar— xử lý REGISTER, lưu AOR-Contact.auth/auth_db— xác thực digest cho REGISTER và INVITE.dialog— theo dõi vòng đời dialog, cần cho xử lý BYE và tính cước theo thời lượng thật.acc— ghi CDR (Call Detail Record).permissions— kiểm soát ai được gọi đi đâu.
Dự án tay: dựng registrar + proxy hoàn chỉnh, xử lý đúng cả REGISTER (có auth), INVITE/ACK/BYE/CANCEL (có record-route + dialog + acc), OPTIONS (keepalive stateless).
Giai đoạn 2 — Định tuyến nâng cao, NAT/Media, và B2BUA (5-6 tuần)
NAT & Media
nathelper, phân biệt NAT tầng signaling (OpenSIPS xử lý) vs NAT tầng media/RTP (cần relay riêng).- RTPengine — media relay chuẩn hiện nay, transcoding, SRTP.
Định tuyến nâng cao
dispatcher(load balancing tới nhiều gateway),drouting(định tuyến động theo prefix/LCR), failover.- TLS cho signaling, SRTP cho media.
B2BUA — mảng kiến thức riêng biệt, khác hẳn proxy thuần
- Khái niệm: Proxy chỉ chuyển tiếp, giữ một dialog; B2BUA là OpenSIPS đóng vai UA thật ở cả hai đầu (Leg A/UAS với caller, Leg B/UAC với callee), hai Call-ID độc lập — cho phép sửa SDP, giữ máy, chuyển cuộc gọi.
- Kiến trúc 2 tầng:
b2b_entities(tầng thấp — UAS/UAC cơ bản) +b2b_logic(tầng logic — kịch bản dịch vụ như transfer, anonymize, bridge). - Khi nào bắt buộc cần B2BUA thay vì proxy: xử lý REFER (call transfer thật), ẩn danh người gọi, IVR/voicemail tương tác, kiểm soát billing real-time, anonymize/topology hiding sâu.
- Hàm chính cần nắm:
b2b_init_request(),b2b_server_new()/b2b_client_new(),b2b_bridge()/b2b_bridge_request(),b2b_pass_request(),b2b_handle_reply().
Presence & Dialplan
- Module
presencexử lý SUBSCRIBE/NOTIFY/PUBLISH riêng biệt, không đi qua route INVITE. dialplancho chuẩn hoá số điện thoại trước khi định tuyến.
Dự án tay: mở rộng hệ thống Giai đoạn 1 — thêm NAT traversal + RTPengine, thêm 2 gateway với dispatcher/failover, và một kịch bản B2BUA đơn giản (ví dụ: ẩn số người gọi khi gọi ra ngoài).
Giai đoạn 3 — Vận hành production: HA, hiệu năng, bảo mật (4-6 tuần)
clusterer— replicate usrloc/dialog giữa nhiều node, đạt HA thật (active-active, không chỉ active-passive).- Performance tuning: số worker process, async I/O, kích thước SHM/PKG.
- Bảo mật vận hành:
pike(chống flood), rate limiting, chống toll fraud. - Monitoring:
opensips-cli, event interface, tích hợp Prometheus/Grafana.
Giai đoạn 4 — Thương mại hoá năng lực (song song từ tháng thứ 4-5)
- Chứng chỉ OCP (OpenSIPS Certified Professional).
- Đóng góp GitHub OpenSIPS (bug report, sửa doc, module nhỏ).
- Xây portfolio: 2-3 dự án tay ở trên là bằng chứng năng lực khi phỏng vấn.
Lưu ý quan trọng
Lộ trình này đưa người học tới mức đủ năng lực làm việc thực tế ở vị trí VoIP/SIP engineer cấp junior-to-mid sau 6-12 tháng nghiêm túc. Để lên mức chuyên gia thật sự (world-class) còn cần thêm 3-5 năm kinh nghiệm xử lý traffic thật, đọc source code khi tài liệu không đủ, và được phản biện bởi người có kinh nghiệm hơn — không có shortcut tự học nào thay thế được giai đoạn này.