Năm 1998, nhóm làm việc của IETF được tập hợp để thiết kế một cơ chế giao vận tin cậy để truyền báo hiệu điều khiển cuộc gọi trên mạng Internet. Kết quả là Sigtran đã được ra đời cho phép truyền các bản tin SS7 trên mạng IP. Vấn đề chính mà Sigtran cần giải quyết chính mà TCP chưa đáp ứng được đó là:
Head of line blocking: Vấn đề xảy ra khi gửi các bản tin độc lập trên kết nối TCP đã được thiết lập thì các bản tin được nhận sau bị làm trễ và lưu trong bộ đệm của tầng giao vận của phía nhận tới khi các bản tin trước đó bị mất được truyền lại và tới đích. Mà ở đó, các bản tin sau thường thiết lập các cuộc gọi độc lập. Như vậy, trễ ở các bản tin sau là nguyên nhân sinh ra timeout trong điều khiển cuộc gọi gây ra lỗi không mong muốn trong quá trình điều khiển cuộc gọi.
Multihoming: Khi một trạm với nhiều đường truy cập Internet với mục đích dự phòng, không muốn đợi để định tuyến trong khi mạng bị tắc nghẽn để truyền tin với trạm ngang hàng với nó. Với báo hiệu cuộc gọi, trễ này là không thể chấp nhận được khi có nhiều đường đã có. Do TCP chỉ gắn một đường kết nối giữa hai đầu cuối nên sẽ không thể giải quyết được vấn đề này.
Cân nhắc những vấn đề này, Sigtran được thiết kế như là một giao thức tầng giao vận mới cho phép mang báo hiệu cuộc gọi trên mạng IP. Đồng thời, IETF mở rộng phạm vi của nhóm thiết kế từ một nhóm nhỏ đến một nhóm chuyên trách để thiết kế
một giao thức giao vận có thể phục vụ nhiều mục đích và hoạt động tốt với nhiều ứng dụng. Và khi đó SCTP ra đời với các đặc tính sau:
Multistreaming: SCTP hỗ trợ đa luồng (stream) bản tin độc lập với nhau trên một liên kết SCTP. Mỗi bản tin được gửi trên đó được gán cho một luồng riêng. Tất cả dữ liệu trong một luồng được nhận theo thứ tự với dữ liệu khác trong luồng. Dữ liệu trong các luồng khác nhau thì không có đặc tính này. Do vậy, SCTP cung cấp cơ chế cho phép việc nhận dữ liệu có thứ tự một cách cục bộ. Như vậy là nó đã giải quyết được vấn đề head-of-line blocking. Ứng dụng của đa luồng (multistreaming) có thể hỗ trợ các ứng dụng liên quan tới hợp kênh dữ liệu như thoại, văn bản, video trên một đường truyền giữa hai đầu cuối thay vì mở nhiều kết nối TCP cho mỗi luồng.
Multihoming: giữa hai đầu cuối trong quá trình thiết lập liên kết có thể xác định liên kết đa điểm. Việc có nhiều giao diện cho phép dữ liệu được tự động gửi theo nhiều địa chỉ khác nhau khi có lỗi xảy ra. Điều này là hoàn toàn không thể thực hiện được ở TCP vì nó gắn kết một đầu cuối với một giao diện nhất định. Nếu như có lỗi xảy ra, tất cả các kết nối được gắn với giao diện đó vần có thời gian timeout và được hủy bỏ. Và sau đó, ứng dụng là phải thiết lập lại các kết nối khác.
Message Orientation: Trong TCP, dữ liệu được gửi giữa hai đầu cuối là luồng các byte. Nếu cần thiết, ứng dụng phải làm chức năng định dạng khung (frame) cho bản tin. Ở SCTP, bản tin được giữ nguyên định dạng. Tức là nếu tầng ứng dụng phía phát gửi bản tin 100 byte đi thì phía thu cũng nhận được đúng 100 byte. UDP cũng cung cấp dịch vụ hướng bản tin nhưng không có độ tin cậy cao như SCTP.
Un-ordered Service: Đối với TCP, tất cả các bản tin được nhận tin cậy đúng theo thứ tự được gửi. Còn với SCTP, giao thức này cung cấp cơ chế nhận tin không có thứ tự (giữa các luồng song song với nhau). Ở UDP cũng cấp dịch vụ này nhưng không có độ tin cậy như SCTP.
Extensibility: Gói TCP bị giới hạn bởi 40 byte trường Option. Trái lại, gói SCTP được mở rộng thông qua việc sử dụng trường TLV (Tag-Length- Value).
Heartbeat/Keep-alive: SCTP có một tùy chọn cho phép xác định thời gian sống của bản tin. Nó cho phép ứng dụng truyền tin xác định khoảng thời gian mà bản tin còn có ích. Nếu thời gian này hết hạn trước khi được truyền tin cậy tới phía nhận, thì thực thể SCTP gửi có thể dừng việc cố gửi bản tin
hay hủy bỏ bản tin. Kiểu tin cậy này gọi là “tin cậy cục bộ”. Điều này rất hữu ích như trong truyền tin di động hay ở các game online. Việc này sẽ giúp tiết kiệm băng thông đường truyền chống tắc nghẽn.
Syn cookie: SCTP sử dụng bắt tay bốn bước bới việc sử dụng cookie có dấu hiệu định trước. Phía nhận của bản tin thiết lâpk liên kết SCTP mới duy trì trạng thái no-state (không được cấp tài nguyên) cho tới khi phía khởi tạo chứng thực được đó là IP của đối tượng yêu cầu kết nối. Cơ chế này cho phép chống lại tấn công từ chối dịch vụ bằng cách SYN flooding.
Stronger checksum: SCTP cung cấp 32 bit kiểm tra tổng với khả năng phát hiện lỗi tốt hơn 16 bit ở TCP hay UDP.
Advanced TCP services: các dịch vụ mới của TCP như SACK (RFC 2018), Appropriate Byte Counting Byte Counting (RFC 3465) và Explicit Congestion Notificaion (RFC3168) đã được tích hợp sẵn trong SCTP.
Services/Features SCTP TCP UDP
Hướng liên kết Có Có Không
Song công Có Có Có
Tin cậy Có Có Không
Tin cậy cục bộ optional Không Không Nhận dữ liệu có thứ tự Có Có Không Nhận dữ liệu không có thứ tự Có no Có Điều khiển luồng Có Có Không Điều khiển tắc nghẽn Có Có Không Cơ chế ECN Có Có Không Selective ACKs Có Tùy chọn Không Hướng bản tin Có no Có Tìm lại đường MTU Có Có Không Phân mảnh PDU tầng ứng
dụng Có Có
Không Bọc các PDU tầng ứng dụng Có Có Không
Đa luồng Có Không Không Multihoming Có Không Không Chống tấn công tràn SYN Có Không Không Kêt nối half-closed Không Có Không Kiểm tra dữ liệu tới đích Có Có Không Giả tiều đề cho checksum Không
(sử dụng vtags) Có Có Trạng thái đợi vtags 4-tuple Không
SCTP là giao thức hướng kết nối giống như TCP và cũng có việc bắt tay để thiết lập và hủy kết nối. Tuy vậy, việc bắt tay của SCTP khác so với TCP.
Hình 10. Thiết lập kết nối SCTP
1) Server sẵn sàng chấp nhận một association đến. Việc này được thực hiện thông qua lời gọi hàm socket, bind, listen và được gọi là passive open.
2) Client thiết lập một active open bằng cách gọi hàm connect hay gửi một bản tin yêu cầu mở một association. Khi đó, SCTP client sẽ gửi bản tin INIT thông báo với server danh sách địa chỉ IP của nó, số hiệu thứ tự, tag thiết lập để xác định tất cả các gói là trong một association, số luồng mà client yêu cầu, số luồng vào mà nó hỗ trợ.
3) Server xác nhận bản tin INIT của client với bản tin INIT-ACK chứa danh sách địa chỉ IP, số thứ tự thiết lập, tag thiết lập, số luồng mà nó hỗ trợ và một cookie trạng thái. Cookie trạng thái chứa tất cả các trạng thái mà server xác nhận association là hợp lệ và được gán số để cho việc xác thực này.
4) Client gửi lại cookie trạng thái của server với bản tin COOKIE-ECHO. Bản tin này chứa dữ liệu người dùng gắn kèm.
5) Server xác nhận rằng cookie là hợp lệ và association được thiết lập với bản tin COOKIE-ACK. Bản tin này cũng chứa dữ liệu người dùng.
Hủy association
Không giống như TCP, SCTP không cho phép “half-closed” association. Khi một đầu cuối ngừng thì đầu cuối kia cũng phải dừng gửi dữ liệu mới. Phía nhận yêu cầu hủy kết nối gửi nốt dữ liệu đã được xếp hàng trước khi hủy kết nối. SCTP không có trạng thái TIME_WAIT như TCP mà sử dụng tag để làm việc này. Tất cả các chunk được tag hóa với tag gửi trong chunk INIT, một chunk từ một kết nối cũ sẽ được nhận với tag sai. Như vậy, SCTP sử dụng việc xác nhận giá trị tag trong TIME_WAIT.
Hình 11. Hủy kết nối SCTP
Các trạng thái trong kết nối SCTP được biểu diễn bằng lược đồ sau: