2.4.3.1 Payload Data (DATA)
Chunk DATA là chunk chứa dữ liệu của người dùng. Có cấu trúc như sau:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 0 | Reserved|U|B|E| Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TSN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Stream Identifier S | Stream Sequence Number n | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Protocol Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / User Data (seq n of Stream S) / \ \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Hình 2. 7 Cấu trúc chunk DATA
Cấu trúc của chunk DATA gồm có 3 loại cờ điều khiển:
Cờ U (Unordered): nếu cờ này được gán giá trị bằng 1 có nghĩa đây là một chunk DATA gửi không đúng thứ tự. Nếu một bản tin gửi không đúng thứ tự bị phân mảnh, thì mỗi mảnh của bản tin đều phải có bit của cờ U được gán bằng 1.
27
Các cờ B và E: Đây là 2 cờ dùng cho việc phân mảnh dữ liệu. Cờ B (Beginning) nếu được gán bằng 1 sẽ báo hiệu đây là mảnh đầu tiên của một bản tin bị phân mảnh. Ngược lại, cờ E (Ending) khi được gán giá trị sẽ báo hiệu đây là mảnh cuối cùng của một bản tin.
Nếu cả 2 cờ B và E cùng được gán bằng 1 thì có nghĩa đây không phải là một bản tin bị phân mảnh.
Trường Length: Có độ dài 16 bits, cho biết độ dài của chunk DATA.
Trường TSN: Có độ dài 32 bits, cho biết số thứ tự của chunk DATA.
Trường Stream Identifier: Có độ dài 16 bits, cho biết số hiệu của luồng đang truyền dữ liệu.
Trường Stream Sequence Number: Có độ dài 16 bits, cho biết số thứ tự của bản tin trong một luồng truyền tải.
Trường Payload Protocol Identifier: Có độ dài 32 bits, cho biết thông tin của giao thức tầng trên sử dụng SCTP. Giúp SCTP có thể chuyển bản tin đến cho đúng giao thức hoặc ứng dụng cần thiết.
Trường User Data: Có độ dài thay đổi, là dữ liệu của người dùng gửi đi trong chunk DATA.
2.4.3.2 Selective Acknowledgement (SACK)
Chunk này được sử dụng để gửi đi nhằm biên nhận cho các chunk DATA mà thiết bị đầu cuối được nhận. Chunk này gồm có các trường : Cumulative TSN Ack, Advertised Receiver Window Credit (a_rwnd), Number of Gap ack blocks, Number of Duplicate TSNs.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 3 |Chunk Flags | Chunk Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Cumulative TSN Ack | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertised Receiver Window Credit (a_rwnd) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Number of Gap Ack Blocks = N | Number of Duplicate TSNs = X | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Gap Ack Block #1 Start | Gap Ack Block #1 End | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28
/ / \ ... \ / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Gap Ack Block #N Start | Gap Ack Block #N End | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Duplicate TSN 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / \ ... \ / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Duplicate TSN X | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Hình 2. 8 Cấu trúc chunk SACK
Các giá trị của trường Chunk flags sẽ được gán bằng 0 khi truyền và được bên nhận bỏ qua.
Trường Cumulative TSN ACK: Có độ dài 32 bits, cho biết số thứ tự biên nhận của chunk, có giá trị là số thứ tự của chunk DATA cuối cùng trước khi xảy ra mất gói.
Trường Advertised Receiver Window Credit (a_rwnd): Có độ dài 32 bits, cho biết khoảng trống bộ đệm dùng để nhận gói tin của thiết bị gửi SCTP.
Trường Number of Gap Ack Block: Có độ dài 16 bits, cho biết số lượng các đoạn bị mất biên nhận của chunk SACK này.
Trường Number of Duplicate TSNs: Có độ dài 16 bits, cho biết số lượng các bản tin có số thứ tự trùng lặp mà thiết bị đầu cuối nhận được.
Các trường Gap Ack Blocks, Duplicate TSN lần lượt dùng để chỉ rõ vị trí các đoạn bị mất biên nhận cũng như các giá trị số thứ tự bị trùng lặp.
2.4.3.3 Heartbeat Request (HEARTBEAT)
Một thiết bị đầu cuối sẽ gửi chunk này đến bên nhận để thăm dò khả năng kết nối đến một địa chỉ đích cụ thể được xác định trong liên kết hiện tại.
Chunk HEARTBEAT bao gồm các trường Type (Type của HEARTBEAT có giá trị bằng 4), Flags, Length và Heartbeat Information.
29
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 4 | Chunk Flags | Heartbeat Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Heartbeat Information TLV (Variable-Length) / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Hình 2. 9 Cấu trúc chunk HEARTBEAT
Trường Flags: có độ dài 8 bits, được gán giá trị bằng 0 trong lúc truyền và được bên nhận bỏ qua.
Trường Length: có độ dài 16 bits, là kích cỡ của chunk tính bằng byte, bao gồm cả phần tiêu đề và phần thông tin.
Trường Heartbeat Information: có độ dài thay đổi, mang thông tin của bên gửi HEARTBEAT, thông tin về thời gian và địa chỉ mà chunk hearbeat được gửi. Các thông tin này sẽ được sử dụng để đánh giá tình trạng của liên kết.
2.4.3.4 Heartbeat acknowledgement (HEARTBEAT ACK)
Có cấu trúc tương tự với chunk HEARTBEAT, dùng để phản hồi lại chunk HEARTBEAT, mang các thông tin đáp ứng các yêu cầu của chunk HEARTBEAT.
Chunk HEARTBEAT ACK luôn được gửi tới đúng địa chỉ IP nguồn mà từ đó chunk HEARTBEAT được gửi đi.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 5 | Chunk Flags | Heartbeat Ack Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ \ / Heartbeat Information TLV (Variable-Length) / \ \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30