SCTP (Stream Control Transmission Protocol)
1. Tổng quan
A. Định nghĩa
Là giao thức tầng giao vận (RFC 4960) bổ sung đồng thời cho các hạn chế của TCP và UDP, cung cấp cùng lúc hướng thông điệp + độ tin cậy + đa luồng (multi-streaming) + đa đường (multi-homing).
Trong thời gian dài, tầng giao vận chỉ có hai trục. Một là TCP đảm bảo thứ tự và độ tin cậy nhưng là luồng byte nên không có ranh giới thông điệp và một kết nối bị ràng buộc vào một chuỗi thứ tự duy nhất; hai là UDP nhanh nhưng không có độ tin cậy. SCTP lấy ưu điểm của cả hai, kết hợp "truyền tin cậy" với "xử lý theo đơn vị thông điệp", rồi bổ sung đa luồng và đa đường xuất phát từ yêu cầu của mạng viễn thông, được thiết kế như một giao thức thứ ba.
B. Bối cảnh ra đời và sự cần thiết
SCTP ban đầu xuất phát từ công việc SIGTRAN chuyển báo hiệu mạng điện thoại (SS7) sang mạng IP. Lưu lượng báo hiệu có đặc điểm mỗi tín hiệu là thông điệp độc lập, nhạy cảm với độ trễ và mất mát nên tính sẵn sàng cao là bắt buộc, nhưng nếu vận chuyển bằng TCP thì gặp hai bức tường. Một là chặn đầu hàng (HoL, Head-of-Line blocking) — chỉ cần một segment phía trước bị mất thì cả các thông điệp phía sau không liên quan cũng phải chờ; hai là điểm yếu đường đơn — kết nối bị gắn với một đường IP duy nhất nên khi đường đó đứt thì toàn bộ phiên chết. SCTP đặt nhiều chuỗi thứ tự độc lập (luồng) trong một kết nối để giảm HoL, và đăng ký nhiều IP cho kết nối để chuyển mạch ngay khi đường gặp sự cố, qua đó giải quyết tận gốc các hạn chế này.
2. Các đặc điểm chính
Bản sắc của SCTP hình thành từ bốn đặc điểm ăn khớp với nhau. Đa luồng là đặt nhiều luồng quản lý thứ tự độc lập với nhau trong một kết nối logic (association), khiến mất mát ở một luồng không chặn các luồng khác, giảm HoL blocking. Đa đường là một kết nối sở hữu nhiều địa chỉ IP ở cả hai đầu, khi đường chính gặp sự cố thì chuyển sang đường dự phòng để nâng cao tính sẵn sàng. Hướng thông điệp giữ nguyên ranh giới thông điệp mà ứng dụng gửi đi, loại bỏ gánh nặng tái hợp ở phía nhận. Thêm vào đó, nó cung cấp độ tin cậy và thứ tự theo từng luồng dựa trên xác nhận và truyền lại, và phòng thủ tấn công cạn kiệt tài nguyên bằng cookie khi thiết lập kết nối.
| Đặc điểm | Mô tả | Vấn đề được giải quyết |
|---|---|---|
| Đa luồng | Nhiều luồng độc lập trong một kết nối | Giảm HoL blocking |
| Đa đường | Sở hữu nhiều đường IP, chuyển mạch khi sự cố | Tính sẵn sàng của đường đơn |
| Hướng thông điệp | Giữ ranh giới thông điệp (TCP là luồng byte) | Gánh nặng tái hợp |
| Độ tin cậy·thứ tự | Xác nhận SACK·truyền lại, thứ tự theo luồng | Mất mát·đảo thứ tự |
| Bảo mật (cookie) | 4-way handshake + cookie | SYN Flooding |
3. Cấu trúc và hoạt động của giao thức
Trong khi TCP cấp phát tài nguyên trước bằng bắt tay 3 bước (3-way handshake), SCTP đưa vào cơ chế cookie trong bắt tay 4 bước (4-way handshake) để máy chủ không lưu trạng thái cho đến khi kết nối được xác lập. Khi nhận INIT, máy chủ không tạo trạng thái kết nối mà đưa thông tin cần thiết vào một cookie có chữ ký rồi trả về bằng INIT-ACK. Chỉ sau khi client gửi lại cookie đó bằng COOKIE-ECHO và tính hợp lệ được xác nhận thì máy chủ mới cấp phát tài nguyên, nên về mặt cấu trúc chống chịu tốt SYN Flooding — kiểu tấn công dội hàng loạt INIT với địa chỉ giả mạo.
sequenceDiagram
participant C as Client
participant S as Server
C->>S: INIT
S->>C: INIT-ACK (Cookie, không lưu trạng thái)
C->>S: COOKIE-ECHO
S->>C: COOKIE-ACK (thiết lập kết nối, cấp phát tài nguyên)
Đơn vị truyền là chunk; sau header chung, các chunk điều khiển (như INIT) và chunk dữ liệu được gói nhiều cái vào một gói tin. Chunk dữ liệu mang số luồng và số thứ tự (SSN) để quản lý thứ tự theo từng luồng.
| Thành phần | Nội dung |
|---|---|
| Association | Đơn vị kết nối (bao gồm đa luồng·đa đường) |
| Chunk | Header chung + gói chunk điều khiển/dữ liệu |
| 4-way handshake | INIT→INIT-ACK(cookie)→COOKIE-ECHO→COOKIE-ACK |
| Kiểm soát tắc nghẽn·luồng | Tương tự TCP (dựa trên SACK, quản lý theo từng đường) |
4. So sánh với TCP·UDP
Khác biệt giữa ba giao thức rốt cuộc là sự đánh đổi "đảm bảo cái gì và từ bỏ cái gì". UDP bỏ mọi đảm bảo để đạt tốc độ cao nhất, TCP có được độ tin cậy nhưng phải chấp nhận luồng byte, đường đơn và HoL. SCTP duy trì độ tin cậy trong khi có thêm ranh giới thông điệp, đa luồng và đa đường, nhưng tương ứng giao thức phức tạp hơn và thiếu sự hỗ trợ của thiết bị trung gian.
| Hạng mục | TCP | UDP | SCTP |
|---|---|---|---|
| Độ tin cậy | O | X | O |
| Ranh giới thông điệp | X | O | O |
| Đa luồng | X | X | O |
| Đa đường | X | X | O |
5. Các vấn đề cần cân nhắc và hàm ý
Từ góc độ Kỹ sư chuyên nghiệp (Professional Engineer), SCTP là trường hợp điển hình cho thấy "sự ưu việt kỹ thuật không đồng nghĩa với việc được phổ biến". Trong các lĩnh vực bắt buộc tính sẵn sàng cao và đa đường như Diameter của lõi 4G/5G, báo hiệu SS7 (SIGTRAN), kênh dữ liệu WebRTC, nó thực tế được dùng như tiêu chuẩn, nhưng trên Internet đa dụng thì lan rộng chậm. Trở ngại lớn nhất là thiết bị tường lửa và NAT không hỗ trợ, nhiều middlebox không biết số giao thức của SCTP nên chặn nó. Để đi vòng, cách đóng gói SCTP trên UDP (ví dụ: SCTP trên DTLS/UDP của WebRTC) đã trở thành giải pháp thực tiễn. Do đó khi triển khai, bên cạnh lợi thế kỹ thuật, bắt buộc phải kiểm chứng trước khả năng tương thích của middlebox trên đường đi, và nếu nhắm tới giảm HoL thì nên so sánh xem xét với các phương án thay thế như QUIC.
Tóm tắt một câu: SCTP là giao thức giao vận kết hợp độ tin cậy + hướng thông điệp + đa luồng·đa đường, ngăn SYN Flooding bằng bắt tay 4 bước dựa trên cookie và cung cấp giảm HoL blocking cùng tính sẵn sàng đa đường, nhưng việc NAT·tường lửa không hỗ trợ là hạn chế đối với sự phổ biến.