1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu về SCTP và đánh giá thử nghiệm

82 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 82
Dung lượng 2,19 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Khi một ứng dụng trên host A muốn bắt đầu một kết nối với host B, nó gọi thủ tục ASSOCIATE SCTP API và tất cả các cấu trúc dữ liệu cần thiết được khởi tạo để hình thành nên chunk INIT.

Trang 1

LỜI CẢM ƠN

Để hoàn thành luận văn này, tôi đã nhận được sự tin tưởng và chỉ bảo rất nhiều từ thầy PGS.TS Ngô Hồng Sơn, Bộ môn Truyền thông và Mạng máy tính – Viện Công nghệ thông tin và Truyền thông – Đại học Bách Khoa Hà Nội

Trước hết tôi xin gửi lời cảm ơn sâu sắc đến PGS.TS Ngô Hồng Sơn đã dành thời gian và tâm huyết hướng dẫn, giúp đỡ tôi hoàn thành Luận văn tốt nghiệp này

Tôi cũng xin gửi lời cảm ơn đến gia đình và bạn bè đã động viên tôi rất nhiều trong thời gian làm luận văn, cảm ơn ban lãnh đạo công ty Hyperlogy đã tạo điều kiện thuận lợi trong việc cung cấp thiết bị và thực hiện các thí nghiệm trong luận văn Nhân đây tôi cũng xin gửi lời cảm ơn đến quý thầy cô Viện Công nghệ thông tin và Truyền thông đã tạo rất nhiều điều kiện để tôi học tập và tích lũy kiến thức trong thời gian theo đuổi khóa học tại trường

Một lần nữa tôi gửi lời cảm ơn chân thành đến tất cả quý thầy cô Viện Công nghệ thông tin và Truyền thông – Đại học Bách Khoa Hà Nội cùng gia đình, bạn bè và ban lãnh đạo công ty Hyperlogy đã giúp đỡ tôi hoàn thành luận văn này

Trang 2

DANH MỤC CÁC TỪ VIẾT TẮT:

HTTP Hyper Text Transfer Protocol Giao thức truyền siêu văn bản

IETF Internet Engineering Task Force Nhóm đặc trách kỹ thuật Internet

của đường truyền

luận

thực

A_rwnd Advertised receiver window

credit

Bộ đệm để nhận dữ liệu mà đầu thu quảng bá cho đầu gửi

Protocol

Giao thức truyền thông theo luồng có điều khiển

Trang 3

SCTPLIB Siemens SCTP library Thư viện SCTP của Siemens

SSTHRESH Slow Start Threshold

Giá trị ngưỡng (đơn vị byte) trong SCTP để xác định tắc nghẽn là ở giai đoạn “khởi đầu chậm” hay “tránh tắc nghẽn”

TCP Transmission Control Protocol Giao thức truyền thông có điều

khiển

TSN Transmission Sequence Number Số thứ tự truyền

client trong SIP

server trong SIP

dùng

URL Uniform Resource Identifiers Dạng địa chỉ để tham chiếu đến

tài nguyên trên Internet

Internet

Trang 4

DANH MỤC BẢNG:

Bảng 2-1: So sánh các đặc tính của SCTP với TCP và UDP 31 Bảng 3-1: Số liệu thông lượng HTTP trong điều kiện thường và điều kiện mất gói 10%, với lớp transport là TCP và SCTP 60 Bảng 3-2: So sánh hiệu quả của SIP với giao thức transport lần lượt là UDP và

SCTP trong điều kiện chỉ có một phiên kết nối mạng ở tình trạng bình thường 68

Trang 5

DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ:

Hình 2-1: Định dạng gói tin SCTP Theo sau tiêu đề tổng quát là một hay nhiều các

chunk chứa đựng thông tin điều khiển hay thông tin dữ liệu 14

Hình 2-2: Định dạng của một chunk SCTP 15

Hình 2-3: Thiết lập và kết thúc một kết nối SCTP sử dụng kĩ thuật cookie trong cơ chế bắt tay 4 bước để thiết lập một kết nối Giai đoạn kết thúc kết nối là cơ chế bắt tay 3 bước [15] 18

Hình 2-4 : Các giai đoạn trong quá trình hoạt động của một kết nối SCTP 21

Hình 2-5: Các host dạng multihomed A1 và A2 là hai địa chỉ IP của đầu cuối A B1 và B2 là hai địa chỉ IP của đầu cuối B 23

Hình 2-6: Kỹ thuật heartbeat SCTP 25

Hình 2-7: Nhiều luồng trong kết nối SCTP Các luồng ở đây là luồng dữ liệu logical một chiều mà các đầu cuối đã thỏa thuận với nhau trong quá trình thiết lập kết nối25 Hình 2-8: Mô phỏng sự kiện nghẽn HoL của các luồng riêng rẽ bên đầu nhận 26

Hình 2-9: Mô phỏng multi-streaming Gói tin mất trên một luồng không ảnh hưởng đến luồng khác 27

Hình 3-1: Lab dùng để kiểm tra hiệu suất SCTP trong mạng thực tế 37

Hình 3-2: Mô hình hoạt động của lksctp bên trong nhân Linux 37

Hình 3-3: Lab hiển thị các chức năng cơ bản của SCTP 39

Hình 3-4 : Tiêu đề tổng quát của SCTP 40

Hình 3-5: Định dạng các chunk dữ liệu SCTP 41

Hình 3-6: Lab hiển thị chức năng tin cậy của SCTP khi mạng ở trạng thái quá tải 41 Hình 3-7: Các chunk SACK 43

Hình 3-8: Các chunk dữ liệu được truyền lại 43

Hình 3-9 : Lab hiển thị sự độc lập giữa các luồng SCTP 44

Trang 6

Hình 3-10 : Sự độc lập của các luồng SCTP 45 Hình 3-11: Lab thể hiện chức năng multi-homming 47 Hình 3-12: Kết quả mô phỏng multi-homming 48 Hình 3-13: Lab thể hiện ưu điểm của SCTP so với TCP trong môi trường mạng

không ổn định 49 Hình 3-14: Thời gian ứng dụng truyền dữ liệu với lớp transport là SCTP và TCP

trong điều kiện bình thường 51 Hình 3-15: Thời gian ứng dụng truyền dữ liệu với lớp transport là SCTP và TCP khi

tỉ lệ mất gói 10% 52 Hình 3-16 : So sánh thời gian truyền cũng một lượng dữ liệu giữa TCP và SCTP 52 Hình 3-17: So sánh TCP đa kết nối và SCTP đa luồng với tỉ lệ mất gói thay đổi từ 0% đến 5% 53 Hình 3-18: Việc truyền nhiều luồng SCTP trong điều kiện không có mất gói 54 Hình 3-19: Hạn chế được vấn đề HoL sử dụng nhiều luồng SCTP với tỉ lệ mất gói 10% 55 Hình 3-20 : Trang web với 4 kết nối TCP từ client 56 Hình 3-21: Trang web với 10 kết nối TCP từ client 56 Hình 3-22 : Kiến trúc Lab thí nghiệm HTTP với SCTP làm giao thức lớp transport 57 Hình 3-23: Minh họa kết quả thu được với kết nối sctp 1 luồng từ httperf đến đến thttpd để truyền tập tin có dung lượng 10K Byte và tỉ lệ mất gói là 10% 60 Hình 3-24: So sánh thông lượng http với lớp transport là TCP và SCTP trong điều kiện thường 60 Hình 3-25: So sánh thông lượng http với lớp transport là TCP và SCTP trong điều kiện tỉ lệ mất gói là 10% 61

Trang 7

Hình 3-26: Chồng giao thức multimedia trên Internet H323 hoạt động trên TCP, SIP hoạt động trên TCP, UDP hay SCTP, còn RTP hoạt động trên UDP 63 Hình 3-27: Kiến trúc chủ chốt của SIP bao gồm agent người dùng, server (server proxy và server chuyển hướng) và dịch vụ xác định địa chỉ 64 Hình 3-28: Server đăng kí SIP theo dõi vị trí hiện tại của người dùng SIP 65 Hình 3-29 : Lab thực nghiệm SIP với giao thức transport là SCTP và UDP 67 Hình 3-30: So sánh hiệu quả của SIP với giao thức transport lần lượt là UDP và

SCTP trong điều kiện có nhiều phiên kết nối mạng và mạng ở tình trạng mất gói 70

Trang 8

MỤC LỤC:

LỜI CẢM ƠN 1

DANH MỤC CÁC TỪ VIẾT TẮT: 2

DANH MỤC BẢNG: 4

DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ: 5

DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ: 5

LỜI NÓI ĐẦU 11

I MỞ ĐẦU 12

1.1 Giới thiệu về SCTP 12

1.2 Các vấn đề quan trọng được giải quyết trong luận văn 13

II TỔNG QUAN 14

2.1 Cơ bản về SCTP 14

2.2 Các giai đoạn (pha) trong một kết nối SCTP 15

2.2.1 Thiết lập kết nối 15

2.2.2 Truyền dữ liệu 18

2.2.3 Kết thúc kết nối 19

2.2.3.1 Kết thúc kết nối đúng qui trình 19

2.2.3.2 Hủy kết nối nữa chừng 20

2.3 Các đặc tính nổi bật của SCTP so với TCP 22

2.3.1 Những đặc tính chung 22

2.3.2 Multi-homing 23

2.3.3 Multi-streaming 25

2.3.4 Điều khiển luồng 28

Trang 9

2.3.6 Bảo mật 30

2.3.7 So sánh giữa SCTP với TCP/UDP 31

2.4 Các vấn đề còn tồn tại trong SCTP 32

2.4.1 Phù hợp với các yêu cầu về độ tin cậy của báo hiệu SS7 32

2.4.2 Hiệu suất SCTP trong môi trường không dây 32

2.4.3 Cấu hình lại địa chỉ tự động 32

2.5 Giới thiệu về LKSCTP và tình trạng hiện tại 33

2.5.1 Giới thiệu về dự án LKSCTP 33

2.5.2 Tình trạng hiện tại của LKSCTP [16], [19], [20] 34

2.6 Kết luận 34

III THIẾT KẾ VÀ THỰC THI CÁC MÔ PHỎNG 36

3.1 Các đặc tính cơ bản của SCTP 38

3.1.1 Trường hợp một: định dạng gói tin SCTP 39

3.1.2 Trường hợp hai: các chunk thứ tự bên trong một luồng SCTP 41

3.1.3 Trường hợp ba: sự độc lập của các luồng SCTP 44

3.1.4 Trường hợp bốn: khả năng chịu lỗi với multi-homming 45

3.2 Đánh giá SCTP so với TCP và UDP 49

3.2.1 Trường hợp 1: So sánh hiệu suất giữa SCTP và TCP với một kết nối TCP 49

3.2.2 Trường hợp 2: So sánh hiệu suất giữa SCTP và TCP với nhiều kết nối TCP 53

3.2.3 Trường hợp 3: giải quyết vấn đề HOL gặp phải ở TCP 53

3.3 Đánh giá các ứng dụng với SCTP đóng vai trò lớp transport 55

3.3.1 Ứng dụng HTTP với SCTP 56

Trang 10

3.3.2 Ứng dụng SIP với SCTP 61

3.3.2.1 Giới thiệu về SIP 61

3.3.2.2 Kiến trúc SIP [17] 63

3.3.2.3 Thực hiện Lab 65

IV KẾT LUẬN 71

TÀI LIỆU THAM KHẢO 73

PHỤ LỤC 75

Trang 11

LỜI NÓI ĐẦU

Hiện nay nhu cầu truyền dữ liệu thời gian thực và đảm bảo các yếu tố an toàn đang rất được quan tâm Các giao thức đang hoạt động ở lớp ứng dụng như TCP và UDP ngày càng bộc lộ những nhược điểm về khả năng an toàn, giám sát tắc nghẽn, khả năng chịu lỗi… Hiện tại tổ chức IETF đang phát triển giao thức vận chuyển đa mục đích thế hệ mới, gọi là SCTP (streaming control transport protocol)

Giao thức này còn mới, đang được cộng đồng khoa học phát triển và hoàn thiện về hoạt động, ứng dụng, hiệu suất…Việc nghiên cứu, đánh giá và ứng dụng giao thức này đang trở thành nhu cầu bức thiết, nhất là cho Internet thế hệ sau

Mục tiêu của luận văn này là nghiên cứu, đánh giá và phân tích thực nghiệm tính hiệu quả khi áp dụng giao thức lớp transport mới - SCTP trong việc truyền dữ liệu

so với các giao thức TCP, UDP, đặc biệt là trong các ứng dụng dữ liệu thời gian thực như SIP

Trang 12

I MỞ ĐẦU

1.1 Giới thiệu về SCTP

Stream Control Transport Protocol (SCTP) được IETF phát triển với mục đích ban đầu là giao thức truyền thông tin cậy thuộc lớp transport để truyền dữ liệu báo hiệu SS7 trên mạng IP Bên cạnh đó SCTP còn có các đặc tính tiên tiến mà TCP hay UDP không cung cấp, cho phép nó có thể được sử dụng rộng rãi hơn là chỉ trong các ứng dụng báo hiệu [4]

Như với TCP, SCTP là giao thức truyền thông tin cậy với các cơ chế điều khiển tắc nghẽn và điều khiển luồng Nó cũng là giao thức hướng kết nối với việc thiết lập phiên làm việc trước khi truyền dữ liệu và cơ chế ACK SCTP còn cải thiện một cách toàn diện khả năng bảo mật với cơ chế bắt tay 4 bước, giảm thiểu các nguy cơ

bị tấn công từ chối dịch vụ DoS Bên cạnh đó để tăng tốc độ truyền dữ liệu, nó có

cơ chế truyền tin mà không quan tâm đến thứ tự gói tin như UDP Nó cũng bao gồm

kĩ thuật heartbeat để theo dõi trạng thái của các đầu cuối và các sự cố kết nối một

cách nhanh chóng

Đặc biệt tính năng multi-homing của SCTP giúp đầu cuối tăng cường khả năng chịu lỗi Tính năng đa luồng (multi-streaming) hay còn gọi là “thứ tự từng phần” cung cấp khả năng truyền dữ liệu tốc độ cao, giảm được trì hoãn trên đường truyền, giải quyết được vấn đề nghẽn HoL (Head-of-Blocking) mà giao thức TCP gặp phải [4] Nhiều tổ chức và dự án khác nhau đang nghiên cứu và phát triển SCTP như dự án KAME SCTP với mục đích phát triển các plug-in SCTP cho Apple MAC, dự án SCTP Kernel Implementation phát triển các phiên bản ứng dụng web apache2 và Mozilla có hỗ trợ SCTP nên nền tảng FreeBSD Dự án của Salvatore Loreto cũng cung cấp tài liệu và mã nguồn để chạy SIP với lớp transport là SCTP Còn các nhà nghiên cứu tại PEL (Protocol Engineer Laboratory) cũng đang tập trung phát triển

và cải thiện SCTP Trên site của họ chúng ta có thể tìm thấy nhiều công cụ GNU/Linux được tích hợp SCTP như firefox, modun ns2-sctp hay tcpdum hỗ trợ

Trang 13

SCTP cần phải được tìm hiểu sâu sắc, cải tiến hơn nữa để có thể áp dụng phổ biến vào thực tế [16]

1.2 Các vấn đề quan trọng được giải quyết trong luận văn

Luận văn này đề cập đến đặc tính kĩ thuật của SCTP, đánh giá và phân tích hiệu quả của SCTP ở lớp transport

Trước hết luận văn sẽ trình bày các đặc tính quan trọng và những ưu điểm

của SCTP so với TCP/UDP, giải thích tại sao SCTP có thể thay thể được TCP/UDP

 Định nghĩa kiến trúc và kịch bản các thí nghiệm để thể hiện và chứng minh các đặc tính nổi bật của SCTP

 Định nghĩa các thông số để đánh giá hiệu suất và các tham số mô tả môi trường mạng thực tế để đo đạc và thấy được các ưu điểm của SCTP so với TCP/UDP

 Triển khai các thực nghiệm sử dụng Ubuntu, lskctp và NS2

 Thực hiện các kịch bản kiểm tra và phân tích kết quả

 Đề xuất các công việc cần nghiên cứu hơn nữa trong tương lai

Trang 14

II TỔNG QUAN

Trong phần này chúng ta sẽ phân tích chi tiết về SCTP bao gồm định dạng gói tin, các giai đoạn cần thiết trong một kết nối (gọi là một association), các đặc tính cũng như ưu điểm của SCTP so với TCP Chúng ta cũng giải thích tính cần thiết của SCTP so với TCP/UDP và nguyên nhân cộng đồng mạng hiện đang rất quan tâm đến nó (cả trong nghiên cứu và phát triển) Cuối cùng, chúng ta giới thiệu sơ lược

tình hình phát triển SCTP hiện tại để hiểu rõ vấn đề hơn và dự án lksctp, dự án này

cho phép kernel Linux hỗ trợ SCTP ở lớp transport.[1]

2.1 Cơ bản về SCTP

Phần này đề cấp đến định dạng gói tin SCTP và các giai đoạn trong vòng đời một kết nối SCTP (associatioin) [2], [15]

Hình 2-1: Định dạng gói tin SCTP Theo sau tiêu đề tổng quát là một hay nhiều các chunk chứa đựng

thông tin điều khiển hay thông tin dữ liệu

TCP cung cấp dịch vụ truyền dữ liệu là các luồng byte (byte-stream), trong khi đó SCTP truyền dữ liệu theo hướng thông điệp (message-oriented) Các gói tin SCTP luôn bắt đầu với một tiêu đề chung, có dung lượng 12 byte, kiến trúc tối thiểu phải cung cấp ba chức năng sau:

Trang 15

 Port nguồn và port đích: cùng với địa chỉ IP trong tiêu đề IP, số port là giá trị

16 bit, được dùng để xác định một kết nối mà một gói tin thuộc vào

 Các thẻ kiểm tra (verification tag-Vtags): Trường Vtags 32 bit đảm bảo gói tin thuộc vào một kết nối hiện thời, giá trị này được trao đổi giữa các đầu cuối khi thiết lập kết nối Đây cũng là cơ chế bảo vệ chống lại các tấn công của hacker

 Kiểm lỗi (checksum): giá trị 32 bit này dùng để đảm bảo tính toàn vẹn của toàn bộ gói tin, nó sẽ bảo vệ gói tin tốt hơn so với trường checksum 16 bit của TCP hay UDP

Phần còn lại của một gói SCTP bao gồm một hay nhiều chunk, chunk ở đây là một hay nhiều khối chứa đựng thông tin điều khiển hay dữ liệu Định dạng này khác với các gói tin TCP và UDP, chúng chỉ chứa đựng thông tin điều khiển trong phần tiêu

đề và chỉ có duy nhất một trường dữ liệu tùy chọn

Hình 2-2: Định dạng của một chunk SCTP

2.2 Các giai đoạn (pha) trong một kết nối SCTP

Giống như TCP, SCTP là một giao thức hướng kết nối (connection-oriented) và một kết nối SCTP có ba giai đoạn: thiết lập kết nối, truyền dữ liệu và kết thúc kết nối

2.2.1 Thiết lập kết nối

SCTP sử dụng bắt tay 4 bước (4-way handshake), trong đó sử dụng kỹ thuật cookie

để thiết lập một kết nối nhằm ngăn ngừa các tấn công SYN Nếu một host A khởi tạo một kết nối với host B, các tiến trình theo thứ tự sau đây sẽ phải xảy ra: [2],[8]

Trang 16

 Khi một ứng dụng trên host A muốn bắt đầu một kết nối với host B, nó gọi thủ tục ASSOCIATE (SCTP API) và tất cả các cấu trúc dữ liệu cần thiết được khởi tạo để hình thành nên chunk INIT Chunk INIT này được gửi đến một địa chỉ lớp transport (là tổ hợp giữa địa chỉ IP và port dịch vụ) của host

B Cùng lúc này một bộ đếm thời gian cũng được kích hoạt để host A lặp lại việc gửi chunk INIT này khi hết hạn thời gian chờ để nhận chunk INT-ACK

từ host B Nếu sau một số lần gửi đã thiết lập trước các chunk INIT mà không có chunk INT-ACK nào được nhận thì một lỗi được thông báo đến ứng dụng bên trên là host B không thể kết nối được Sau khi host A gửi chunk INIT đầu tiên, nó chuyển sang trạng thái COOKIE-WAIT

 Thông thường khi host B nhận được thông điệp yêu cầu thiết lập (chunk INIT), nó đang ở trạng thái CLOSED Nó sẽ phân tích dữ liệu chứa trong chunk đó, từ đó sinh ra tất cả các giá trị cần thiết cho việc hình thành một kết nối, đồng thời nó cũng tạo ra một mã băm an toàn từ những giá trị này và một khóa bí mật (theo thuật toán MD5 hay SHA1) Sau đó những giá trị này được đặt trong một cái gọi là COOKIE cùng với mã chứng thực nguồn gốc thông điệp (MAC – Message Authentication Code) và được trả về cho host

A thông qua chunk INIT-ACK Chỉ có host B mới có thể kiểm tra được thông tin trong COOKIE này Cookie này giúp kiểm tra host A là hợp pháp hay không Tại thời điểm này, host B vẫn trong trạng thái CLOSE và không phân bổ bất kì tài nguyên bộ nhớ hay CPU để duy trì tình trạng hiện thời của yêu cầu kết nối từ host A Chúng ta chú ý một điều rằng trong giai đoạn thiết lập kết nối của TCP, tại thời điểm này, nó vẫn dành tài nguyên để duy trì trạng thái này, làm cho nó dễ bị tấn công dạng SYN

 Khi host A nhận được thông điệp INIT-ACK ở trạng thái COOKIE-WAIT,

nó sẽ dừng bộ đếm thời gian của mình lại và tạo ra chunk COOKIE-ECHO

Nó sẽ đặt vào chunk này COOKIE của host B từ chunk INIT-ACK nhận được và phản hồi trở lại host A Cùng lúc này nó cũng bật bộ đếm thời gian

để lặp lại việc gửi chunk COOKIE-ECHO cho đến khi nhận được một chunk

Trang 17

COOKIE-ACK từ host B Sau khi gửi chunk COOKIE-ECHO đầu tiên, nó chuyển sang trạng thái COOKIE-ECHOED Nếu sau khi gửi một số lần đã được thiết lập trước các chunk COOKIE-ECHO mà không nhận được chunk COOKIE-ACK nào thì một thông báo được gửi đến ứng dụng bên trên là host B không thể kết nối được Như tên gọi của nó, chunk này dùng để phúc đáp lại các COOKIE mà host B đã gửi Chunk này có thể bắt đầu mang dữ liệu cho host A và ứng dụng ở host B có thể chấp nhận dữ liệu hay hủy nó Sau khi nhận được một chunk COOKIE-ACK từ host B, host A chuyển sang trạng thái “đã thiết lập kết nối” (ESTABLISHED)

 Khi host B nhận được chunk COOKIE-ECHO (có chứa một tham số là cấu trúc dữ liệu COOKIE) Host B sẽ mở dữ liệu được chứa trong COOKIE này

và sử dụng lại MAC để kiểm tra xem có phải nó là nơi xuất phát của COOKIE này Nếu MAC tính toán đúng thì đó là một COOKIE mà host B

đã tạo ra trước đây và các giá trị dữ liệu chứa trong COOKIE được sử dụng

để khởi tạo một kết nối SCTP Host B sẽ gửi một chunk COOKIE-ACK đến host A (có thể gửi kèm chunk dữ liệu trong chunk COOKIE-ACK này) và chuyển sang trạng thái “đã thiết lập” (ESTABLISHED)

 Sau khi host A nhận được chunk COOKIE-ACK , host A chuyển sang trạng thái “đã thiết lập” (ESTABLISHED) Chú ý là chunk COOKIE-ECHO có thể kết hợp với chunk dữ liệu

Trang 18

Hình 2-3: Thiết lập và kết thúc một kết nối SCTP sử dụng kĩ thuật cookie trong cơ chế bắt tay 4 bước để

thiết lập một kết nối Giai đoạn kết thúc kết nối là cơ chế bắt tay 3 bước *15+

Không giống như các dịch vụ kiểu luồng các byte (byte-stream) ở TCP SCTP bảo toàn được tính toàn vẹn của các thông điệp từ lớp ứng dụng Điều này cũng tương

tự cho UDP Khi một ứng dụng có một thông điệp lớn hơn giá trị MTU của đường

đi đến đích, SCTP sẽ phân mảnh thông điệp thành nhiều chunk dữ liệu để có thể gửi được trong các gói tin riêng rẽ

Trang 19

SCTP gán cùng một số thứ tự luồng - Stream Sequence Number (SSN) cho tất cả các chunk dữ liệu thuộc cùng một thông điệp từ một ứng dụng đưa xuống dưới Điều này giúp bên nhận trong quá trình lắp ráp thông điệp trở lại

2.2.3 Kết thúc kết nối

Vì một vài nguyên nhân nào đó, cả hai phía (host A hay host B) có thể quyết định chấm dứt một kết nối SCTP tại bất kì thời điểm nào trong thực tế (miễn là chúng không đang ở trạng thái CLOSE) Có hai khả năng là chấm dứt kết nối một cách đúng qui trình để đảm bảo không mất mát dữ liệu hay chấm dứt kết nối nửa chừng

mà không quan tâm đến bên đối tác đang kết nối tới

2.2.3.1 Kết thúc kết nối đúng qui trình

Như mô tả ở hình 2-3, giai đoạn kết thúc một kết nối theo cơ chế bắt tay ba bước,

cơ chế này không cho phép đóng kết nối nửa chừng - tức là một đầu cuối kết thúc kết nối trong khi đầu còn lại tiếp tục gửi dữ liệu

Khi nhận được thủ tục SHUTDOWN từ một tiến trình ứng dụng người dùng, kết nối SCTP sẽ không chấp nhận dữ liệu từ tiến trình này nữa và bắt đầu gửi một chunk SHUTDOWN ngay khi xác nhận tất cả dữ liệu đã được nhận hoàn chỉnh Quá trình này được đảm bảo với một bộ đếm thời gian để lặp lại việc gửi chunk SHUTDOWN vì chunk này có thể bị mất trên đường truyền

Khi đầu cuối bên kia nhận được chunk SHUTDOWN, nó sẽ phản hồi bằng chunk SHUTDOWN-ACK ngay sau khi tất cả dữ liệu của nó được xác nhận (cũng được bảo đảm với bộ đếm thời gian)

Khi đầu cuối bên này (bên khởi tạo tiến trình chấm dứt kết nối) nhận được chunk SHUTDOWN-ACK, nó sẽ ngừng bộ đếm thời gian, gửi đi một chunk SHUTDOWN COMPLETE và tất cả dữ liệu vẫn còn thuộc kết nối này sẽ bị loại bỏ,

nó chuyển sang trạng thái CLOSED

Đầu cuối bên kia khi nhận được chunk SHUTDOWN COMPLETE sẽ loại bỏ tất cả

dữ liệu liên quan đến kết nối này và chuyển sang trạng thái CLOSED Nếu chunk

Trang 20

SHUTDOWN COMPLETE bị mất trên đường truyền thì nó sẽ lặp lại việc gửi chunk SHUTDOWN-ACK cho đến khi bộ đếm lỗi vượt qua giới hạn đã cấu hình trước, khi đó một lỗi về đầu cuố bên kia không thể kết nối được thông báo

2.2.3.2 Hủy kết nối nữa chừng

Một đầu cuối cũng có thể quyết định chấm dứt kết nối hiện có mà không quan tâm đến dữ liệu còn đang trên đường truyền có được xác nhận hay chưa Nó sẽ gửi một chunk ABORT đến đầu cuối bên kia Chú ý là trong gói tin gửi đi, bên gửi phải điền vào trường Verification Tag của phía đầu cuối nhận và không được đính kèm bất kì chunk dữ liệu nào trong chunk ABORT này Sau khi gửi chunk ABORT, nó sẽ chấm dứt kết nối ngay lập trúc

Tại phía đầu nhận chunk ABORT, nếu chunk này chứa giá trị tag chính xác, nó sẽ không phản hồi cho chunk này nhưng sẽ đánh giá tính hợp lệ của chunk và loại bỏ kết nối hiện có Nó cũng thông báo việc hủy kết nối lên các lớp ứng dụng phía trên Hình 2.4 mô tả các giai đoạn và trạng thái của SCTP khi được dùng làm lớp transport trong các ứng dụng mạng

Trang 21

Hình 2-4 : Các giai đoạn trong quá trình hoạt động của một kết nối SCTP

Trang 22

2.3 Các đặc tính nổi bật của SCTP so với TCP

2.3.1 Những đặc tính chung

Như với TCP, SCTP là giao thức truyền thông tin cậy với kỹ thuật điều khiển tắc nghẽn và điều khiển luồng, nó cũng là giao thức hướng kết nối với cơ chế báo nhận ACK có chọn lọc Phần này đề cập đến hai chức năng vượt trội của SCTP mà không chúng ta không thể tìm thấy trong TCP, đó là multihoming và multi-streaming Hơn nữa cơ chế điều khiển tắc nghẽn của SCTP cũng có một số khác biệt so với TCP, vốn dựa trên kỹ thuật “cửa sổ trượt”, kỹ thuật mà TCP đã ứng dụng từ lâu Tính năng bảo mật cũng được cung cấp trong SCTP qua kỹ thuật thiết lập kết nối bắt tay bốn bước [8]

SCTP hoạt động ở hai cấp độ

- Bên trong một kết nối, việc truyền tin cậy các đơn vị dữ liệu được đảm bảo

bằng một mã tổng kiểm (checksum), số thứ tự và kỹ thuật truyền lại có chọn lọc

- Cấp độ thứ hai đề cập đến kĩ thuật phân phối dữ liệu linh hoạt dựa trên một

khái niệm mới là các luồng dữ liệu độc lập bên trong một kết nối Các chunk thuộc một hay nhiều luồng có thể được đóng gói và truyền đi trong cùng một gói SCTP nhưng không được lớn hơn giá trị MTU của đường đi hiện tại

SCTP đánh số tất cả các chunk dữ liệu tại đầu gửi bằng các TSN (Transport Sequence Nunber) để giúp ích cho việc phát hiện lỗi và trùng lắp dữ liệụ Các thông báo xác nhận được phát đi từ đầu cuối nhận đến đầu cuối phát cũng dựa trên những

số thứ tự này

Việc truyền lại được điều khiển bằng bộ đếm thời gian Chu kì của bộ đếm là kết quả của việc liên tục đo đạc giá trị RTT (round trip time) Khi thời hạn của một bộ đếm thời gian (tại thời diểm này cơ chế điều khiển tắc nghẽn vẫn cho phép truyền

dữ liệu) hết hiệu lực thì tất cả các chunk dữ liệu chưa được xác nhận sẽ được truyền lại và thời hạn của bộ đếm được khởi tạo lại với giá trị gấp đôi ban đầu

Trang 23

Khi đầu cuối nhận phát hiện sự thiếu hụt một hay nhiều chunk trong chuỗi các chunk dữ liệu thì nó xác nhận mỗi gói tin SCTP nhận được bằng cách gởi chunk điều khiển SACK để thông báo tất cả các chunk còn thiếu Khi đầu gửi liên tục nhận được bốn chunk SACK để thông báo thiếu sót cho cùng một chunk dữ liệu thì chunk dữ liệu này được truyền lại ngay lập tức (gọi là cơ chế truyền lại nhanh) Hầu hết các hệ điều hành hiện đại đều hỗ trợ kỹ thuật tương tự như thế này trong TCP

2.3.2 Multi-homing

Các hệ thống quan trọng luôn có khả năng dự phòng tài nguyên ở nhiều cấp độ khác nhau để đảm bảo cung cấp các dịch vụ liên tục, cho dù có sự cố xảy ra hay không Như mô tả trong hình 2-5, một host multi-homing có thể được truy xuất bằng nhiều địa chỉ IP Đây chính là khả năng dự phòng mà lớp mạng cung cấp, khi kết nối ở địa chỉ IP chính bị sự cố, host đích vẫn có thể nhận dữ liệu thông qua giao diện thay thế [15]

Hình 2-5: Các host dạng multihomed A1 và A2 là hai địa chỉ IP của đầu cuối A B1 và B2 là hai địa chỉ IP

của đầu cuối B

SCTP đã tận dụng ưu điểm này để cung cấp khả năng dự phòng cho lớp transport Một đầu cuối SCTP multi-homing có thể liên kết với nhiều địa chỉ IP khi nó khởi tạo một kết nối Hiện tại SCTP chỉ mới sử dụng tính năng multi-homing cho mục đích dự phòng, chưa áp dụng để cân bằng tải

Nếu một client là multi-homing thì nó sẽ thông báo cho server tất cả các địa chỉ IP của nó trong phần tham số địa chỉ của chunk INIT Như thế client cũng chỉ cẩn biết một địa chỉ IP của server bởi vì server cũng cung cấp tất cả các địa chỉ IP của nó cho client qua chunk INIT-ACK SCTP có khả năng xử lý cả địa chỉ IPv4 và IPv6

Trang 24

Mỗi tiến trình SCTP xem mỗi địa chỉ IP của đối tác của nó như một “đường đi” hướng đến đầu cuối đó

Nếu không có địa chỉ IP rõ ràng nào chứa trong chunk INT hay INIT-ACK thì địa chỉ IP nguồn của gói tin IP mang dữ liệu SCTP được sử dụng Điều này giúp cho các ứng dụng SCTP dễ dàng hơn khi NAT được sử dụng ở các biên mạng Để thuận lợi hơn nữa, có một tính năng không bắt buộc được giới thiệu trong RFC2960, cho phép sử dụng tên máy thay cho địa chỉ IP

SCTP theo dõi khả năng truy xuất của mỗi địa chỉ IP tại host đích qua hai cơ chế :

ACKs của các chunk dữ liệu và các chunk heartbeat, hertbeat là chunk điều khiển

được dùng để truy vấn theo chu kì trạng thái của host đích Trong một kết nối, mỗi tiến trình SCTP sẽ giám sát tất cả các đường đi đến phía đối tác của nó, các chunk

hearbeat được gửi qua tất cả các đường mạng mà hiện tại chưa được dùng để truyền các chunk dữ liệu Đầu nhận thông điệp heartbeat sẽ báo nhận bằng thông điệp heartbeat_ack như ở hình 2.6 [8]

Mỗi đường đi được gán một trạng thái là “kích hoạt” hay “không kích hoạt” Một đường đi ở trạng thái kích hoạt nếu nó được sử dụng gần đây để truyền ít nhất một gói tin SCTP và gói tin này được xác nhận từ phía đầu cuối bên kia Nếu việc truyền dẫn trên một đường nào đó bị thất bại liên tục thì đường đó được chuyển

thành trạng thái “không kích hoạt” Nếu số lần các chunk heartbeat không được

phản hồi trong một khoản thời gian nào đó hay số lần truyền lại trên một kết nối vượt quá một giới hạn đã được cấu hình trước thì đầu cuối bên kia bị coi là không thể kết nối đến được và kết nối sẽ được chấm dứt

Theo RFC2960, nếu chunk dữ liệu hay chunk heartbeat bị trễ hạn (timeout) sáu lần liên tiếp thì bên gửi kết luận rằng đích tới là không thể truy xuất được nữa và nó tự động chọn một địa chỉ IP đích khác để thay thế

Tại thời điểm thiết lập kết nối, một địa chỉ IP trong danh sách địa chỉ trả về được lựa chọn như là đường mạng chính Mặc định, các chunk dữ liệu được truyền trên đường mạng chính này Tuy nhiên việc truyền lại có thể xảy ra ở một đường mạng

Trang 25

khác nếu nó sẵn sàng Để hỗ trợ việc đo đạc độ trễ của một chu trình đường đi (round trip), các chunk SACK nên được gửi đến địa chỉ nguồn của gói tin IP đã mang chunk dữ liệu

Người sử dụng SCTP có thể được thông báo về tình trạng của các đường truyền (tình trạng và các thông số) theo có nhu cầu hay đường mạng chính thay đổi Họ cũng có thể can thiệp một tiến trình SCTP để sử dụng một đường mạng mới

Hình 2-6: Kỹ thuật heartbeat SCTP

2.3.3 Multi-streaming

Hình 2-7: Nhiều luồng trong kết nối SCTP Các luồng ở đây là luồng dữ liệu logical một chiều mà các đầu

cuối đã thỏa thuận với nhau trong quá trình thiết lập kết nối

Trang 26

Đa luồng (multi-streaming) là một dịch vụ mới của SCTP ở lớp transport Đây là sự phân chia dữ liệu về mặt logical trong một kết nối SCTP sử dụng số thứ tự luồng - stream sequence number (SSNs) để bảo toàn thứ tự của dữ liệu và tính tin cậy của mỗi chunk dữ liệu trong mỗi luồng Tuy nhiên, không cần đảm bảo thứ tự dữ liệu giữa các luồng Hướng tiếp cận này tránh được vấn đề nghẽn đầu dòng (HoL - head-of-line) gặp phải ở TCP, nghĩa là các segment đã được truyền thành công phải chờ trong hàng đợi của bên nhận cho tới khi bên gửi truyền lại các segment đã bị mất trước đó Hình 2.8 minh họa phương thức SCTP giải quyết đề nghẽn đầu dòng

Hình 2-8: Mô phỏng sự kiện nghẽn HoL của các luồng riêng rẽ bên đầu nhận

Trang 27

Trong SCTP, nếu dữ liệu của luồng thứ nhất bị mất thì chỉ luồng thứ nhất bị chặn lại tại phía đầu nhận trong khi chờ đợi truyền lại Tại đầu cuối SCTP đang nhận dữ liệu, dữ liệu của các luồng không bị mất sẽ ngay lập tức được chuyển đến lớp ứng dụng SCTP có thể truyền dữ liệu cho các ứng dụng có thứ tự cũng như không có thứ tự Cả hai loại này đều có thể được truyền bên trong một luồng Các dữ liệu không có thứ tự sẽ được truyền lên ứng dụng lớp trên ngay sau khi nhận được Còn đối với dữ liệu có thứ tự, sẽ có trì hoãn do quá trình sắp xếp và lắp ráp lại các chunk trước khi chuyển lên ứng dụng bên trên Trong một kết nối, để có thể xắp xếp thứ tự các chunk, SCTP duy trì hai hàng đợi cho mỗi luồng dữ liệu là hàng đợi gửi và hàng đợi nhận [2] , [15]

Như mô phỏng ở hình dưới, khi thông điệp với TSN=3 đến node nhận, đầu nhận biết rằng thông điệp TSN=2 bị mất Tuy nhiên nó cũng nhận thấy rằng thông điệp TSN=3 là gói tin kế tiếp thuộc luồng id=0 Vì thế, nó chuyển gói tin lên ứng dụng

mà không chờ nhận thông điệp TSN=2, vốn thuộc luồng id=1 Đối với TCP, node nhận sẽ không chuyển thông điệp TSN=3 cho đến khi nó nhận được thông điệp TSN=2 Với cơ chế này SCTP đã tránh được vấn đề nghẽn đầu dòng [21]

Hình 2-9: Mô phỏng multi-streaming Gói tin mất trên một luồng không ảnh hưởng đến luồng khác

Trang 28

2.3.4 Điều khiển luồng

Trong khi SCTP quản lý thứ tự và phân phối các gói tin độc lập theo từng luồng thì

nó quản lý việc điều khiển tắc nghẽn dựa trên từng đích tới và điều khiển luồng dựa vào từng kết nối

Tương tự như với TCP, SCTP sử dụng kỹ thuật điều khiển tắc nghẽn và luồng dựa trên cửa sổ đầu cuối-đầu cuối (end-to-end window) Đầu cuối nhận có thể điều khiển tốc độ gửi dữ liệu bằng cách xác định kích thước cửa sổ theo đơn vị byte (gọi

là cửa sổ đầu cuối nhận) và trả về cho đầu cuối gửi giá trị này cùng với tất cả các chunk SACK

Đầu cuối gửi tự nó cũng giữ một biến là cửa sổ tắc nghẽn – crwd (Congestion

Window) để kiểm soát giá trị lớn nhất các byte có thể gửi đi (tức là lượng byte có thể gửi trước khi nhận được phản hồi từ đầu cuối nhận) Bên nhận phải phản hồi các chunk dữ liệu nhận được, đầu cuối nhận có thể chờ một khoản thời gian nhất định (thường là 200 ms) để gửi phản hồi Nếu một lượng lớn gói tin SCTP được nhận trong khoản thời gian này thì một chunk SACK được trả về phía đầu cuối gửi để xác nhận cho các gói tin SCTP chứa dữ liệu được nhận trong một giây [2], [8]

Mặc định là tất cả các truyền dẫn được thực hiện trên một địa chỉ đã được lựa chọn trước từ một tập các địa chỉ đích, gọi là địa chỉ chính Việc truyền lại có thể được thực hiện trên một đường mạng khác, do đó nếu một đường mạng bị quá tải th việc truyền lại không ảnh hưởng đến nó (trừ khi do kiến trúc mạng có một điểm đang bị quá tải mà việc truyền lại cũng đi qua điểm đó) Với một số kiến trúc mạng nhất định, điều này sẽ có tác động tích cực đến toàn bộ băng thông Nhưng các bản tin phản hồi nên được trả về cho các địa chỉ transport, nơi đã xuất phát dữ liệu lúc ban đầu

Nếu đường mạng hiện tại có một số lượng lớn các hỏng hóc hay số lỗi vượt quá giới hạn đã được cấu hình trước SCTP sẽ thông báo cho các tiến trình ứng dụng bên trên rằng đường đi chính không hoạt động được nữa và các ứng dụng có thể chọn một đường mạng chính khác để truyền dữ liệu

Trang 29

2.3.5 Điều khiển tắc nghẽn

Về cơ bản, điều khiển tắc nghẽn trong SCTP dựa vào kỹ thuật đã được chứng minh

và sử dụng trong TCP Tuy nhiên có một vài khác biệt giữa TCP và SCTP [8]

- SCTP kết hợp chặt chẽ với thuật toán truyền lại nhanh chóng dựa trên các

báo cáo SACK, tương tự như cơ chế SACK TCP Nhưng SCTP không có giai đoạn phục hồi nhanh một cách rõ ràng SCTP đạt được sự tự động phục hồi nhanh dựa vào việc sử dụng SACK

- Như với TCP, SCTP có hai phương thức là khởi đầu chậm và tránh tắc

nghẽn (Slow Start và Congestion Avoidance) Mỗi phương thức được xác định bằng một tập các biến điều khiển tắc nghẽn cho những đường mạng cụ thể Vì vậy có thể đường mạng chính đang ở phương thức tránh tắc nghẽn thì các đường mạng dự phòng khác vẫn đang ở chế độ “khởi đầu chậm” Để thành công trong việc chuyển giao và phản hồi các dữ liệu, biến cửa sổ tắc

nghẽn (cwnd) tăng đều đặn, và một khi nó vượt qua giới hạn nhất định (gọi là

ngưỡng “khởi đầu chậm” - SSTRESH) thì phương thức chuyển từ “khởi đầu chậm” sang “tránh tắc nghẽn” Nói chung ở phương thức “khởi đầu chậm”

thì cwnd tăng nhanh hơn (khoản một MTU trên mỗi SACK nhận được) và ở

phương thức “ tránh tắc nghẽn” th nó chỉ tăng khoản một MTU trên mỗi RTT (Round Trip Time) Các sự kiện kích hoạt việc truyền lại (hết thời gian chờ đợi hay truyền lại nhanh) là nguyên nhân dẫn tới SSTRESH bị giảm

mạnh và khởi tạo lại giá trị cwnd (trong đó một lần trễ sẽ thiết lập một ngưỡng “khởi đầu chậm” mới với cwnd = MTU và một lần “truyền lại nhanh” sẽ thiết lập cwnd = SSTRESH) [15]

- Vì giá trị MTU của đường đi cũng là một biến quan trọng (ảnh hưởng đến

việc kiểm soát tắc nghẽn) nên STCP có một tham số để ước lượng giá trị MTU cho mỗi đường đi

- So sánh với TCP, việc sử dụng SACK là bắt buộc trong SCTP, cho phép

SCTP phản ứng nhanh chóng hơn trong trường hợp có nhiều mất mác từ một

Trang 30

cửa sổ dữ liệu Điều này tránh được việc lãng phí thời gian ở giai đoạn “khởi đầu chậm” khi mà có nhiều segment dữ liệu bị mất, vì thế SCTP sẽ tiết kiệm được băng thông và gia tăng thông lượng truyền

- Trong quá trình SCTP tránh tắc nghẽn, cwnd chỉ có thể được tăng lên khi cwnd đầy đủ được sử dụng, hạn chế này không tồn tại trong TCP và việc tăng giá trị cwnd chủ yếu dựa vào số byte đã được báo nhận, còn trong TCP thì nó dựa vào số lượng thông báo báo nhận Trong SCTP, giá trị cwnd được

khởi tạo bằng hai lần giá trị MTU đường truyền

- TCP bắt đầu quá trình truyền lại nhanh sau khi nhận được nhận được ba

thông điệp báo nhận DupsACK cho cùng một segment còn SCTP thì bắt đầu truyền sau khi nhận bốn thông điệp DupsACK [2]

2.3.6 Bảo mật

SCTP xác định hai mục tiêu bảo mật, thứ nhất là khả năng sẵn sàng truyền dữ liệu một cách tin cậy và chính xác, thứ hai là tính toàn vẹn thông tin từ đầu cuối đến đầu cuối

- Đảm bảo các dịch vụ luôn sẵn sàng: một trong những mối đe dọa phổ biến

nhất cho mục tiêu này là bị tấn công DoS thông qua việc làm ngập lụt host đích với các yêu cầu thiết lập kết nối (ví dụ như tấn công SYN trong TCP) Bản chất của vấn đề này các host bị tấn công phải duy trì một cách vô ích các thông tin trạng thái kết nối cho các kết nối trong trạng thái chờ đợi, điều này dẫn tới bộ nhớ hệ thống sẽ bị cạn kiệt và hệ thống không còn khả năng phục

vụ các kết nối hợp lệ khác Như trong hình 2.3, SCTP có thể hạn chế nguy cơ

bị tấn công DoS bằng cách sử dụng trình tự bắt tay bốn bước và kĩ thuật

cookie để tránh việc duy trì thông tin trạng thái cho các kết nối nửa vời

(không hoàn chỉnh) [2]

- Đảm bảo tính toàn vẹn cho thông tin truyền từ đầu cuối đến đầu cuối: nếu

mục tiêu của kẻ tấn công là phá vỡ tính toàn vẹn và bảo mật của dữ liệu trên

Trang 31

trường hợp này, SCTP có thể được dùng với IPSec hay TLS để bảo vệ tính bí mật và toàn vẹn

2.3.7 So sánh giữa SCTP với TCP/UDP

Để có cái nhìn tổng quan, một so sánh tóm tắt các đặc điểm và dịch vụ của SCTP với TCP và UDP được trình bày ở bảng sau: [15]

Bảng 2-1: So sánh các đặc tính của SCTP với TCP và UDP

Trang 32

2.4 Các vấn đề còn tồn tại trong SCTP

Mặc dù SCTP có nhiều ưu điểm so với TCP và UDP nhưng nó chưa được sử dụng rộng rãi ở thời điểm hiện tại Một trong những nguyên nhân ở đây là SCTP vẫn còn tồn tại một vài vấn đề cần giải quyết Phần này trình bày ba vấn đề chủ yếu mà SCTP cần được khắc phục trong tương lai [2], [8], [15]

2.4.1 Phù hợp với các yêu cầu về độ tin cậy của báo hiệu SS7

Một mạng báo hiệu SS7 có những yêu cầu nghiêm ngặt về độ tin cậy và hiện nay chưa có kết quả triển khai nào đủ lớn để kiểm chứng các tiêu chuẩn SCTP hiện tại phù hợp với những yêu cầu này Một vài yêu cầu chủ yếu được tóm tắt dưới đây (theo khuyến nghị Q.706 của ITU-T):

- Thời gian cần thiết để chuyển sang một liên kết khác khi liên kết đang dùng

bị sự cố phải ít hơn 800 ms

- Dịch vụ liên lạc giữa hai điểm báo hiệu phải luôn sẵn sàng với tỉ lệ

99,9988% hay thời gian ngừng phục vụ tối đa là 10 phút trên một năm

2.4.2 Hiệu suất SCTP trong môi trường không dây

Cơ chế điều khiển tắc nghẽn và truyền lại của SCTP chủ yếu dựa trên các kỹ thuật

đã được dùng trong TCP Chúng vốn dĩ được thiết kế chỉ cho môi trường có dây, mặc định tất cả các dữ liệu bị mất gây ra bởi tắc nghẽn hay bởi vì RTT thay đổi chậm và từ từ Tuy nhiên các mạng di động không dây có tỉ lệ lỗi bít (bit error rates) cao hơn mạng có dây Vấn đề này làm SCTP chậm đi một cách không cần thiết và kết quả là thông lượng SCTP trở nên nghèo nàn

2.4.3 Cấu hình lại địa chỉ tự động

Việc thêm hay gỡ bỏ các giao diện tự động cung cấp một phương pháp tuyệt vời để điều chỉnh các giao diện trong một kết nối khi một đầu cuối của kết nối muốn thông báo cho đầu còn lại rằng một địa chỉ IP mới sẽ tham gia vào kết nối hay một địa chỉ

IP hiện tại sẽ không hoạt động nữa Điều này rất có ý nghĩa đối với các ứng dụng

Trang 33

quan trọng hay môi trường di động, nhằm hỗ trợ việc cấu hình lại các dịch vụ mà không làm gián đoạn việc truyền dữ liệu Tuy nhiên tùy chọn này cần phải định nghĩa một loại chunk mới và các kiểu tham số mới, hiện nay nó vẫn còn trong giai đoạn phát thảo của IETF

2.5 Giới thiệu về LKSCTP và tình trạng hiện tại

2.5.1 Giới thiệu về dự án LKSCTP

Dự án Linux Kernel Stream Control Transmission Protocol (lksctp) tập trung vào việc triển khai SCTP trên nhân (kernel) Linux Mục đích chính của dự án này là cung cấp cho người dùng biết được tình trạng của việc triển khai SCTP và các mở rộng khác nhau của nó Cùng với nỗ lức liên tục phát triển giao thức, dự án này cũng hướng tới việc phổ biến thông tin về SCTP và khuyến khích cho việc triển khai SCTP trong thực tế [1]

Thật sự thì việc hiện thực SCTP trong thực tế bao gồm dự án thư viện SCTP của Siemens (Siemens SCTP libarary - SCTPLIB) và lksctp (Randall’s SCTP Kernel)

Cả hai đều dự định triển khai trong nhân Linux với nỗ lực ban đầu là tập trung vào các RFC và phát triển API Tại thời điểm viết luận văn này, việc triển khai SCTP

gần đây nhất là trên nhân Linux 2.6 với sctplib-1.0.8 được công bố vào tháng một năm 2009 và lksctp-2.6.26-1.0.9 [21]

SCTPLIB được thiết kế để chạy trong không gian người dùng, trong khi đó lksctp được thiết kế để hoạt động trong không gian kernel

Tuy nhiên việc triển khai SCTP mức độ không gian người dùng có hiệu suất thấp và thiếu linh hoạt, tất cả các thông điệp đều phải xử lý ở không gian người dùng nên cần nhiều bộ nhớ để chuyển các gói tin qua lại giữa không gian người dùng và không gian kernel Hơn nữa các ứng dụng chỉ quan tâm đến các thông điệp dữ liệu SCTP hơn là các thông điệp điều khiển, bởi vậy việc xử lý tất cả thông điệp ở không gian người dùng là không hiệu quả Một bất lợi nữa của kiến trúc này là không thể có nhiều hơn một tiến trình SCTP trên một host, vì thế cần một modun trung gian để cho phép nhiều tiến trình SCTP sử dụng dịch vụ của SCTPLIB,

Trang 34

modun trung gian này gọi là SCTPD Điều này làm phức tạp hoạt động và tiêu tốn nhiều tài nguyên hệ thống hơn

Vì thế, từ khi bắt tay vào nghiên cứu, bộ phận R&D của Motorolal, Cisco và Nortel

đã phát triển lksctp hoạt động ở mức độ không gian kernel Với nhiều ưu điểm hơn SCTPLIB, luận văn này sử dụng lksctp để tiến hành các thí nghiệm, đo đạc, phân

tích và đánh giá SCTP

2.5.2 Tình trạng hiện tại của LKSCTP [16], [19], [20]

- Vẫn đang phát triển để hoàn thiện các chức năng của SCTP, chưa tập trung

nhiều vào hiệu suất như TCP đã làm

- Không nhiều các ứng dụng sử dụng lksctp để hỗ trợ SCTP như là giao thức

lớp transport

- Theo SCTP mailing-list: SCTP không công khai định nghĩa hay yêu cầu bất

kì thuật toán truyền dẫn multi-stream nào, các ứng dụng sẽ thực hiện điều này

Các ưu điểm chỉ có ở SCTP mà không tồn tại ở TCP

- Thiết lập kết nối theo trình tự bắt tay bốn bước nhằm giảm các nguy cơ bị

tấn công DoS

Trang 35

- Dịch vụ phân mảnh, không theo thứ tự để bảo đạm toàn vẹn thông điệp

- Multi-streaming, không phải là một luồng có thứ tự mà là nhiều luồng 64K

độc lập

- Multi-homing, không là một mà là một tập các địa chỉ IP cho một đầu cuối

- Luôn theo dõi trạng thái hoạt động và khả năng kết nối được của các đầu

cuối

Trang 36

III THIẾT KẾ VÀ THỰC THI CÁC MÔ PHỎNG

Như các yêu cầu mà của luận văn đặt ra ở phần trên, ở đây chúng ta phải định nghĩa một vài kịch bản để thấy rõ được các khía cạnh của SCTP: các chức năng cơ bản của SCTP, đánh giá hoạt động SCTP, TCP và UDP trong cùng điều kiện mạng như nhau, so sánh hiệu suất của SCTP so với TCP qua các ưu điểm như multi-homing

và multi-streaming Cuối cùng là xem xét các ứng dụng trong đó TCP và SCTP lần lượt đóng vai trò là giao thức ở lớp transport

Mô phỏng thực nghiệm được định nghĩa với 3 máy tính Ba máy tính được cài

Ubuntu, lksctp phải được cài đặt trên hai máy đầu cuối, ban đầu gói ứng dụng iperf

phiên bản 2.0.8 hỗ trợ SCTP dự định được dùng làm ứng dụng nguồn và đích để gửi

và nhận dữ liệu, tuy nhiên ứng dụng này chỉ cung cấp một luồng dữ liệu cho một kết nối SCTP, không tốt hơn so với TCP, thậm chí là kém hơn TCP [18] Để nhận dạng các chức năng cơ bản của SCTP và multi-streaming thì chúng ta sẽ dùng câu

lệnh sctp_test, đây là lệnh được tích hợp sẵn trong lksctp để kiểm tra các chức năng

của SCTP có hoạt động chính xác hay không

Tuy nhiên câu lệnh sctp_test [1] chỉ thể hiện sự độc lập giữa các luồng SCTP trong

một kết nối, nó chỉ gửi và nhận một lượng nhỏ dữ liệu, nó không thể được dùng để sinh ra một lượng lớn dữ liệu nhằm kiểm tra hiệu suất của SCTP Như đã đề cập ở

phần giới thiệu về lksctp, có rất ít ứng dụng sử dụng lksctp để hỗ trợ SCTP, vì thế

hai ứng dụng được phát triển để kiểm tra hiệu suất của SCTP với TCP [7] Một ứng dụng chạy với SCTP và ứng dụng c n lại chạy với TCP Những ứng dụng này có thể phát sinh cùng một lượng lớn dữ liệu để gửi từ server và nhận tại client

Máy tính ở giữa được cài đặt gói ứng dụng netem [5] để tạo ra các yếu tố thực cho

mạng như trễ đường truyền, mất gói tin, trùng lặp gói tin, lỗi gói tin… và gói ứng

dụng bridge [6] được sử dụng để kết hợp hai card mạng thành một bridge bên trong netem

Công cụ dùng để bắt gói tin được sử dụng trong kịch bản bản này là ứng dụng quen

thuộc mã nguồn mở - wireshark [24]

Trang 37

Hình 3-1: Lab dùng để kiểm tra hiệu suất SCTP trong mạng thực tế

Để kích hoạt SCTP trong một hệ thống, chúng ta phải thực hiện hai yêu cầu sau:

- Hệ điều hành phải hỗ trợ SCTP

- Các ứng dụng phải hỗ trợ SCTP tại lớp transport

lksctp được triển khai như một modun bên trong nhân Linux Lksctp cung cấp một

tập các socket API cho SCTP Khi một ứng dụng cần liên lạc với các ứng dụng khác

sử dụng SCTP, nó sẽ gọi API lksctp, các ứng dụng lớp trên như iperf chỉ cần gọi API lksctp

Hình 3-2: Mô hình hoạt động của lksctp bên trong nhân Linux

Trang 38

Để kiểm tra chức năng multi-homing chúng ta sẽ dùng modun sctp trên NS2 phiên

bản 2.34 [10] Chúng ta cũng sẽ so sánh đồng thời hiệu suất giữa SCTP, TCP và UDP trên NS2

Cũng với mô hình hệ thống mạng thực trên hình 3-1, chúng ta sẽ kiểm tra hiệu suất

của http với SCTP và TCP lần lượt đóng vai trò là giao thức lớp transport Ở đây luận văn dùng hai ứng dụng mã nguồn mở là thttpd, [13] đóng vai trò là server web,

đây là ứng dụng tương đối đơn giản, nhỏ gọn và làm server web rất tốt, ứng dụng

phía client là httperf [14] Nó rất hữu ích khi dùng để sinh ra lưu lượng http, do đó

nó được sử dụng rộng rãi để làm các thực nghiệm Hai chương trình ứng dụng này

được Elvis Plutzenreuter [12] điều chỉnh trên cơ sở sử dụng API lksctp để hỗ trợ SCTP trong luận văn của anh ấy Chương trình httpd được chạy trên máy tính ở một

đầu cuối và truyền các file có kích thước khác nhau trong điều kiện mạng bình

thường và điều kiện mạng đang bị quá tải, đầu còn lại chạy chương trình httperf để

nhận các file

3.1 Các đặc tính cơ bản của SCTP

Để có thể đạt được mục tiêu này, chúng ta sẽ dùng một ứng dụng có hỗ trợ SCTP để phát ra dữ liệu, sau đó sẽ bắt các gói tin SCTP, hiển thị thứ tự các chunk dữ liệu bên trong một luồng SCTP sử dụng tham số “số thứ tự luồng - SSN” Định dạng của gói tin, chunk dữ liệu và chunk điều khiển cũng được thể hiện trong trường hợp này Cài đặt một công cụ nằm trên đường truyền giữa hai đầu cuối để tạo ra những chướng ngại nhằm mô phỏng môi trường mạng trong thực tế khi các gói tin phải sắp xếp lại khi vượt qua nó Đối với các chunk (hay gói tin) trong cùng một luồng mà phải được sắp xếp lại, SCTP sẽ truyền lại các chunk bị mất thứ tự (bị mất) Kịch bản này cũng được dùng để kiểm tra tính tin cậy của giao thức SCTP

Multi-streaming và multi-homing là hai tính năng quan trọng và nổi bật nhất của SCTP so với TCP/UDP, kịch bản này sẽ kiểm tra tính độc lập giữa các luồng SCTP bên trong một kết nối sử dụng tham số nhận dạng luồng (SI – Stream Identifier) Hai chunk liên tiếp trong cùng một luồng sẽ có cùng giá trị SI và có số thứ tự luồng

Trang 39

(SSN – Stream Sequence Number) là liên tiếp nhau Và hai luồng khác nhau trong cùng một kết nối sẽ có giá trị SI khác nhau

Hơn nữa kịch bản này cũng xem xét khả năng chịu lỗi của SCTP với hai đầu cuối

sử dụng nhiều giao diện mạng và nhiều đường truyền khác nhau để truyền dữ liệu Khi đường truyền chính hay giao diện mạng đang sử dụng bị lỗi thì dữ liệu sẽ được truyền trên đường đường phụ mà không làm gián đoạn dịch vụ ở lớp trên

3.1.1 Trường hợp một: định dạng gói tin SCTP

Trường hợp này hiển thị định dạng gói tin SCTP do chương trình wireshark bắt

được trên luồng dữ liệu SCTP giữa hai đầu cuối [15]

Hình 3-3: Lab hiển thị các chức năng cơ bản của SCTP

Cấu hình lab

- Hai PC chạy hệ điều hành Ubuntu và có tích hợp lksctp, được kết nối trực

tiếp với nhau, PC nguồn gọi là server, PC đích gọi là client

- Kích hoạt modun SCTP sử dụng câu lệnh: modprobe –a sctp

- Dùng lệnh sctp_test để truyền luồng dữ liệu từ server đến client như sau

Server: $./sctp_test –H server_ipaddress –P server_port –l

Client: $./sctp_test –H server_ipaddress –P server_port –h client_address –

P client_port –s

- Dùng wireshark để bắt các gói tin

Trang 40

Các bước thực thiện

- Bắt các gói tin tại card mạng của server và client

- Xem xét tiêu đề lớp transport, kiểm tra tiêu đề tổng quát của SCTP

- Xem xét các chunk dữ liệu SCTP, kiểm tra định dạng của chunk

Kết quả

- Các gói tin đã được bắt

- Định dạng tiêu đề tổng quát của SCTP và các chunk dữ liệu được phân tích

như hình 3-4

Hình 3-4 : Tiêu đề tổng quát của SCTP

Định dạng các chunk dữ liệu SCTP được phân tích ở hình 3-5

Ngày đăng: 28/02/2021, 00:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w