Các Chunk, tạo nên thành phần còn lại của gói tin – hình 2.2. Trong hình 2.2, Chunk đầu tiên thì có màu xanh lá, và khối chunk cuối cùng được đánh dấu màu đỏ. Cũng trong minh hoạ trên, mỗi Chunk thì được định dạng với 1 trường Chunk Type, 1 trường Flag, 1 trường Length và 1 trường Value. Trong gói tin SCTP, mỗi chunk có định dạng giống nhau, nhưng trên mỗi chunk nội dung có thể khác nhau. Mỗi Chunk hoặc phải kết thúc hoặc được thêm đến 32 bits cho phần kế tiếp.
2.1.4.2.a Chunk type:
8 Byte (256 bit) của trường Chunk Type thì đại diện cho các loại Chunk. RFC4960 đã định nghĩa một danh sách Chunk và hiện nay có 15 loại đã được xác định, trong đó có 14 chunk điều khiển và một Chunk dữ liệu (xem bảng 2.2).
2.1.4.2.b. Chunk Flags:
8 bits được hiểu khác nhau tuỳ thuộc vào kiểu chunk. Bất kỳ những Chunk flag không được xác định thì đều được thiết lập là 0. Giá trị đại diện cho kích cỡ của chunk trong đơn vị byte, gồm các trường Chunk Type, Chunk Flags, Chunk Length và Chunk Value. Do đó, nếu chiều dài trường Chunk value là 0, thì chiều dải của trường sẽ được thiết lập là 4. Khi đó trường Chunk length sẽ không tính thêm bất kỳ Chunk nào khác.
2.1.4.2.c. Chunk Length: [13]
Là một số nguyên 16bit kiểu Unsigned và lưu trữ chiều dài của trunk trong byte. Trường này không bao gồm độ dài của bộ đệm (Padding).
2.1.4.2.d. Chunk value: [13]
Đây là một trường có độ dài thay đổi chứa dữ liệu sẽ được truyền đi. Kiểu dữ liệu mà nó mang phụ thuộc vào loại Chunk.
Value Abbreviation Description
0 DATA Payload data
1 INIT Initiation
2 INIT ACK initiation acknowledgement
3 SACK Selective acknowledgement
4 HEARTBEAT Heartbeat request
5 HEARTBEAT ACK Heartbeat acknowledgement
6 ABORT Abort
7 SHUTDOWN shutdown
8 SHUTDOWN ACK Shutdown acknowledgement
9 ERROR Operation error
10 COOKIE ECHO State cookie
11 COOKIE ACK Cookie acknowledgement
12 ECNE Explicit congestion notification echo (reserved)
13 CWR Congestion window reduced (reserved)
14 SHUTDOWN
COMPLETE shutdown complete
63 IETF-defined chunk extensions
… …
255 IETF-defined chunk extensions
Bảng 2.2 - Các loại trong Chunk Type (RFC4960)
2.2.3. Mô tả các Chunk trong SCTP [13] [19]
Tùy thuộc vào giá trị của các loại Chunk, chúng ta có thể miêu tả chúng như sau:
2.2.3.a. Chunk Dữ liệu (Data Chunk)
Chunk này mang dữ liệu người dùng cùng với thông tin như TSN (truyền trình tự số), SSN (nhiều dòng có thể được truyền như là một phần của một Association duy nhất) vv. Trường này được mô tả tương tự SN (sequence) trong TCP, ngoại trừ việc nó đã chuyển đến những Chunk từ phần tiêu đề.
2.2.3.b. INIT Chunk
Chunk này tương ứng với segment SYN trong TCP trong việc khởi tạo các phân đoạn. Nội dung chứa trong thẻ khởi tạo, được dùng như một thẻ xác minh trong tất cả các segment khác được gửi bởi người nhận INIT. Số lượng các dòng inbound và outbound trong một Association cũng được trao đổi trong việc gửi các Chunk này. Đoạn Chunk INIT cũng chứa window size nhận được giới thiệu cùng với một hoặc nhiều IP sẽ được sử dụng trong các Association hỗ trợ Multihoming. ISN (Initial Sequence Number) cũng là một thành phần của chunk INIT.
2.2.3.c. INIT ACK Chunk
Chunk này dùng để phản hồi Chunk INIT. Chunk này định dạng tương tự như Chunk INIT ngoại trừ việc nó chứa tình trạng Cookie, được tạo bởi
người gửi Chunk INIT ACK. Điều này sẽ hạn chế được các cuộc tấn công DoS (Denial – Of – Services).
2.2.3.d. SACK Chunk
Đây là Chunk ghi nhận chọn lọc (Selective Acknowledgement Chunk). Chunk này được sử dụng để xác nhận dữ liệu mà TSN của dữ liệu nhận được có thể hoặc không thể có trong một trình tự. Để chỉ ra dữ liệu nhận được không tuần tự, Chunk này có một khối GAP ACK, trong đó dựa trên số GAP ACK bắt đầu và số GAP ACK kết thúc thì sẽ chỉ ra các khối TSNs đã nhận được. Chunk này chặn TSN trùng lặp để cho người gửi biết được những chunk trùng lặp nhận được.
2.2.3.e. HEARTBEAT Chunk
Chunk heartbeat thường được gửi để phát hiện đích có thể liên kết. Điều này thường gồm các thông tin vể người gửi tại thời điểm heartbeat được gửi.
2.2.3.f. HEARTBEAT ACK Chunk
Chunk heartbeat ACK sẽ gửi để phản hồi với Chunk heartbeat. Nó luôn gửi đến địa chỉ nguồn của gói thông tin chứa chunk heartbeat.
2.2.3.g. ABORT Chunk
Những Chunk Abort sẽ đột ngột gửi lệnh đóng đến một Association. Nó cũng chứa mã lỗi các Association biết do tại sao bị ngắt. Chunk dữ liệu không được kèm với Chunh Abort.
2.2.3.h. Shutdown Chunk
Lệnh ngắt được gửi đến một SCTP Association. Nó cũng chứa các TSN Ack tích lũy, với những TSN cuối được nhận theo thứ tự trước khi kết thúc.
2.2.3.i. Shutdown ACK Chunk
SHUTDOWN Ack sẽ gửi để phản hồi một Chunk Shutdown.
2.2.3.j. Shutdown Complete Chunk.
Shutdown complete dùng để xác nhận khi nhận được các đoạn Shutdown Ack Chunk. Điều này sẽ được gửi vào cuối quá trình ngắt kết nối.
2.2.3.k. ERROR Chunk
Chunk Error được gửi để chỉ đến Endpoint ngang với nó trong trạng thái lỗi. Có thể có nhiều điều kiện dẫn đến lỗi chẳng hạn: không công nhận tham số, bên ngoài kết nối, không thể khôi phục địa chỉ, v.v.
2.2.3.l. COOKIE ECHO Chunk
Chunk này được sử dụng trong việc khởi tạo một Association. Điểm cuối ngang hàng muốn khởi tạo một Asscociation thì gửi đoạn chunk này. Tiến trình khởi tạo này sẽ hoàn thành phía client. Chunk này sẽ được gửi trước bất kỳ Chunk dữ liệu có thể truyền đi.
2.2.3.m. COOKIE ACK Chunk
Chunk Cookie ACK thì được gửi để phản hồi đến Chunk Cookie Echo. Một lần nữa, Chunk này phải được gửi đi trước khi gửi bất kỳ Chunk dữ liệu nào.
Module cơ bản của SCTP thì được định dạng mỏng và có nhiều mở rộng hơn. Các gói tin có thể được trộn với Chunk Control và Chunk Data với Chunk Control luôn được đặt trước các khối Chunk Data. Trong TCP số thứ tự cũng được sử dụng trong những segment chỉ với thông tin điều khiển. Trong SCTP chỉ những chunk data (màu đỏ trong hình 2) thì được đánh số bởi một TSN (Transmission Sequence Number – chuỗi truyền dẫn số), tương ứng như số thứ tự trong TCP.
Tiếp theo, vì có thể có nhiều stream trong một Association SCTP nên mỗi một Stream thì được xác định bởi một Stream nhận dạng (SI – 16 bit). Để phân biệt giữa các Chunk data thuộc cùng một stream, mỗi chunk data trong mỗi stream thì được đánh số thứ tự một Stream Sequence Number (SSN – số thứ tự dòng).
2.2. Các Đặc tính của giao thức SCTP 2.2.1. Các đặc tính cơ bản:
2.2.1.a. Đa luồng (Multistreaming): [12]
SCTP hỗ trợ đa luồng, các bản tin độc lập với nhau trên một liên kết SCTP. Mỗi bản tin khi 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ác đặc tính này. Do vậy, SCTP cung cấp cơ chế cho phép nhận dữ liệu một cách cục bộ.
Hình 2.3 – mô tả đặc tính Đa luồng
SCTP hỗ trợ nhiều dòng dữ liệu trong một Association. Để tạo ra sự độc lập trong trong việc truyền và phân phối dữ liệu, hai bộ số thứ tự được sử dụng: duy nhất một chuỗi TSN cho mỗi chunk dữ liệu và duy nhất một SSN để xác định một chunk dữ liệu trong một dòng cụ thể.
2.2.1.b. Multihoming: [12]
SCTP hỗ trợ đa đích. Trong giai đoạn thiết lập một SCTP Association, hai bên có thể bao gồm một hoặc nhiều địa chỉ IP như là một phần của Association. Hiện nay, đặc tính sử dụng IP động giữa các Association cũng được cung cấp. Chỉ có một đường giữa một cặp địa chỉ IP được đặt là đường chính thức cho phép liên kết giữa hai điểm. Bằng cách sử dụng các tính năng của multihoming, xác suất của các khối dữ liệu đã được truyền đi, đến các điểm đích sẽ được tăng lên.
Việc có nhiều giao diện kết nối cho phép dữ liệu được tự động gửi theo nhiều đường dẫn khác nhau khi có lỗi xảy ra.
Hình 2.4 – mô tả đặc tính Đa đích
2.2.1.c. Message Orientaion: [13]
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 100 byte. UDP cũng cung cấp dịch vụ này nhưng không có độ tin cậy cao như SCTP.
2.2.1.d. Un-ordered Service: [13]
Đối với TCP, tất cả các bản tin được nhận độ tin cậy theo đúng 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 cung cấp dịch vụ này nhưng có độ tin cậy kém hơn.
2.2.1.e. Extensibility: [13]
Gói TCP bị giới hạn bởi 40 byte 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).
2.2.1.f. Heartbeat: [13]
SCTP có một tuỳ chọn cho phép xác định khoảng 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 truyền được 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 hoặc huỷ 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 có ích như trong việc truyền tin di động hay game online. Việc này giúp tiết kiệm băng thông cho đường truyền và tránh tắc nghẽn.
2.2.1.g. Syn cookie: [13]
SCTP sử dụng cơ chế 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ập 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 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 kiểu từ chối dịch vụ bằng SYN Flooding.
2.2.1.h. Strong checksum: [13]
SCTP cung cấp 32 bit kiểm tra với khả năng phát hiện lỗi tốt hơn 16 bit ở TCP hoặc UDP.
2.2.1.i. Dịch vụ TCP nâng cao:
Tích hợp sẵn các dịch vụ mới của TCP như: SACK (RFC 2018), Appropriate byte counting (RFC 3465) và Explicit Congestion notification (RFC3168).
2.2.2. Mở rộng: [11]
SCTP định nghĩa bộ timer ngắn hơn nhiều so với của TCP.
SCTP có khả năng tự điều chỉnh tốc độ (rate-adaptive) tuỳ theo tình trạng của mạng hiện tại.
SCTP cung cấp chức năng bundling, cho phép một gói tin SCTP có thể bao gồm nhiều đoạn dữ liệu, mỗi đoạn có thể bao gồm một bản tin báo hiệu hoàn chỉnh.
SCTP cũng hỗ trợ chức năng phân tách dữ liệu, cho phép chia nhỏ bản tin báo hiệu thành nhiều bản tin SCTP cho phù hợp với các PDU bên dưới.
Ngoài ra SCTP cũng bao gồm các cơ chế checksums, sequence number và cơ chế lựa chọn phát lại dữ liệu. Thêm vào đó nó còn được trang bị các giải thuật điều khiển tránh tắc nghẽn khác để làm giảm thiểu sự mất mát dữ liệu trong các mạng không ổn định như mạng IP. SCTP cải tiến các phương thức dùng lỗi để tránh phát lại những dữ liệu không cần thiết. Các phương thức bảo mật trong SCTP cho phép các trạm đầu cuối liên kết với nhau để tránh hiện tượng SYN-flooding và để loại bỏ những gói dữ liệu cũ hoặc không cần đến nữa.
Bất kỳ ứng dụng nào chạy trên giao thức TCP đều có thể chuyển qua chạy trên giao thức SCTP.
Vậy liệu SCTP thực sự có ưu điểm hơn so với giao thức TCP/UDP đang sử dụng hiện tại không?
Để tiếp tục tìm hiểu về những đặc tính cũng như dịch vụ nổi trội mà giao thức SCTP mang lại so với giao thức TCP/UDP và để trả lời câu hỏi trên. Chúng ta sẽ tiếp tục tìm hiểu thông qua các đặc tính nổi trội của giao thức SCTP trong mục sau.
2.3.1 So sánh các Đặc tính/Dịch vụ của SCTP – TCP/UDP.
2.3.1.a/ Danh sách các đặc tính mà các giao thức SCTP, TCP, UDP hỗ trợ. [12]
Dịch vụ / Đặc Tính SCTP TCP UDP
Message-Oriented yes no Yes
Byte-Oriented no yes No
Connection-Oriented yes yes no
Full Duplex yes yes yes
Reliable data transfe yes yes no Partially-Reliable data
transfer opt no no
Ordered data delivery yes yes no Unordered delivery yes no yes
Flow control yes yes no
Congestion Control yes yes no
ECN Capable yes yes no
Selective Acknowledgments yes opt no Path MTU discovery yes yes no Application PDU
fragmentation yes yes no
Application PDU bundling yes yes No
Multistreaming yes no No
Multihoming yes no No
SYN flooding attack
prevention yes no n/a
Allows half-closed state no yes n/a Reach-ability check yes opt No Pseudo-header for checksum no yes Yes
Time wait state no yes n/a
Authentication opt opt no
CRC based checksum yes no no Bảng 2.3 – So sánh đặc tính SCTP vs TCP/UDP
Bằng cách nhìn vào bảng trên, có thể dễ dàng thấy được lợi ích của SCTP trên TCP và UDP. Đó có phải là thế hệ tiếp theo của giso thức TCP/UDP? Điều này có thể đạt được rất dễ dàng, khi mà SCTP thực sự mạnh mẽ và có thể cung cấp vô số lợi ích cho hướng kết nối truyền thông.
SCTP cải thiện bằng cách tích hợp mỗi một thành phần của các giao thức TCP và UDP. Nhưng các nhà thiết kế SCTP không dừng lại ở đó. Đã có hai khái niệm mới được thêm vào đó là: đa đích (multi-homing) và đa luồng (multi-streaming).
2.3.1.b/ Đa đích: Cải tiến mạnh mẽ những thất bại (thời gian chờ).[10]
Trong giao thức TCP, các kết nối thực hiện giữa 2 đầu với cú pháp <Địa chỉ IP, port> và pháp <Địa chỉ IP, port>. Nếu một máy có là đa đích, thì bạn chỉ có thể chọn 1 và chỉ một IP cho mỗi đầu. Vì thế, nếu một giao diện bị tắt, thì kết nối cũng kết thúc theo.
Với SCTP, bạn sẽ có 1 danh sách các địa chỉ IP cho các Endpoint mà bạn muốn. Nếu máy vẫn có thể truy cập đến bất cứ địa chỉ nào, thì kết nối vẫn tồn tại.
Một SCTP – Endpoint cũng được gán 1 số cho port và có một hoặc nhiều hơn 1 địa chỉ IP.
2.3.1.c/ Đa luồng – giảm độ trễ [18]
Trong giao thức TCP, tất cả dữ liệu phải được gửi theo thứ tự; nếu mất phần đầu của dòng thì sẽ tạo ra độ trễ cho các dòng dữ liệu tiếp theo. Trong STCP, bạn có thể gửi đến 64K những stream độc lập, mỗi stream
có thứ tự độc lập. Việc mất một Stream thì không làm trì hoãn đến đến việc gửi với các stream khác. Tức là multi – streaming chặn và loại bỏ HOL (Head – of – line).
Ứng dụng đ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. Mỗi gói dữ liệu sử dụng hai số thứ tự khác nhau. TSN được sử dụng để
phát hiện các thông điệp bị mất, để đảm bảo độ truyền dữ liệu đáng tin cậy. SSN (stream sequence number) cùng với SID (stream identifier) sẽ xác định trình tự giao hàng trên máy nhận, nơi SSN không được thiết lập cho việc truyền có thứ tự.
Multi-streaming được phát triển với kiến thức nền tảng cụ thể về vấn đề hiện tại. Một ví dụ là, một số tập tin được gửi theo thứ tự trên một kết nối TCP duy nhất, có thể xảy ra rằng việc truyền tập tin kế tiếp bị chặn, bởi vì một phần của một tập tin đã gửi trước đó đã bị mất và được yêu cầu gửi lại. Các vấn đề phát sinh được gọi là Head of line blocking (HOL). Sự bất lợi này là do cơ chế giao thức chuyển vận tin và thêm sự chậm trễ không cần thiết. Cùng với trường hợp như trên SCTP sử dụng cơ chế MultiStreaming. Theo dõi thêm hình bên dưới để thấy cơ chế cũng như giải pháp của giao thức SCTP cho trường hợp này.
Hình 2.5 – Truyền dữ liệu TCP và SCTP.
2.3.2. Các đặc tính kèm theo của giao thức SCTP so với TCP/UDP 2.3.2.a/ Ranh giới thông điệp (Message boundaries) [12] 2.3.2.a/ Ranh giới thông điệp (Message boundaries) [12]
(with reliability* - với độ tin cậy) (*UDP: có Msg boundaries, không reliable. TCP: có reliable, không Msg boundaries) – dễ dàng mã hoá
Dữ liệu của những gói tin TCP được gửi lại theo cách phù hợp. (ranh