III. THIẾT KẾ VÀ THỰC THI CÁC MÔ PHỎNG
3.3.1. Ứng dụng HTTP với SCTP
Mục đích của Lab này là so sánh hiệu suất của ứng dụng web với lớp transport lần lượt là SCTP và TCP. Điều quan trọng ở đây là chúng ta cần hiểu cách thức client http tải các thông tin từ một trang web. Với HTTP 1.0, đầu tiên client sẽ khởi tạo một kết nối TCP và tải mã HTML dùng để mô tả trang web, sau đó nó sẽ mở các kết nối riêng biệt khác để tải h nh ảnh và các thông tin. Như minh họa ở hình 3-20, điều này tương đương với tổng cộng bốn kết nối, còn trên hình 3-21 tương đương với mười kết nối [11]
Như vậy cách xử lý của HTTP 1.0 sẽ tạo ra sự quá tải khi các trang web không chỉ chứa thông tin text mà còn nhiều thông tin phụ trợ khác.
HTTP 1.1 cố gắng giải quyết vấn đề này bằng cách giảm đến mức thấp nhất số kết nối TCP cần sử dụng. Thực tế nó có thể sử dụng cái gọi là những kết nối “liên tục” để thực hiện điều này. Trên những kết nối “liên tục” này, thuật ngữ đường ống (pipeline) được sử dụng, cho phép các client HTTP phát ra nhiều yêu cầu mà không cần chờ phản hồi từ các yêu cầu khác. Điều này có thể cải thiện đáng kể hiệu suất của HTTP với giao thức lớp transport là TCP. Giải pháp này dường như là rất tốt nhưng nó thiếu nhiều yếu tố quan trọng.
Với HTTP 1.0, vì mỗi URL sử dụng các kết nối TCP riêng biệt khác nhau nên các yêu cầu có thể được phân tách với nhau một cách dễ dàng. Còn trong HTTP 1.1 thì với việc sử dụng đường ống, tính năng phân tách này không thể sử dụng được nữa. Vì thế trình duyệt web tại client phải xử lý vấn đề bất đồng bộ giữa các phản hồi và những vấn đề tương tự như thế.
HTTP không giới hạn giao thức TCP là giao thức lớp transport duy nhất cho nó. Bất kì giao thức lớp mạng hay giao thức lớp network nào có khả năng cung cấp các kết nối tin cậy đều có thể được HTTP sử dung. SCTP là một giao thức tin cậy lớp transport như thế.
Lab này dùng để kiểm tra liệu chức năng đa luồng (multi-streaming) của SCTP có thể được dùng để tăng cường thông lượng cho HTTP hay không. Liệu hiệu suất của SCTP là thích hợp hay tốt hơn TCP khi được sử dụng làm giao thức lớp transport cho HTTP và chức năng multi-streaming của SCTP có tác động đến HTTP như thế nào trong điều kiện có nhiều gói tin bị hủy.
Cấu hình:
- Ta sử dụng thttpd làm web server, đây là một ứng dụng web server nhanh, nhỏ gọn và đơn giản. Nó có nhiều ưu điểm khi phát sinh ra dữ liệu http, do đó được sử dụng rộng rãi trong các lab. Chương trình này được biên dịch và chạy trên máy nguồn 192.168.70.44
- Ứng dụng httperf đóng vai trò web client, được biên dịch và chạy trên máy đích 192.168.70.13.
- Như các lab trước, hai máy nguồn và đích chạy hệ điều hành Ubuntu và được tích hợp modun lksctp. Máy tính giữa đóng vai trò bridge kết nối hai máy
nguồn và đích cũng như dùng đề mô phỏng những điều kiện của hệ thống mạng trong thực tế với ứng dụng netem. Cả hai ứng dụng web client và
server đã được điều chỉnh để hỗ trợ SCTP theo tham khảo từ luận văn cao học của Elvis Plutzenreuter. [12]
- Tại web server ta chuẩn bị các tập tin với dung lượng lần lượt là 100Byte, 1K Byte, 10K Byte, 100K Byte để truyền đến web client qua HTTP
Các bước thực hiện:
- Thực hiện với http trên nền TCP
Kích hoạt ứng dụng web server thttpd tại máy nguồn, đầu tiên chúng ta thử nghiệm với giao thức TCP ở lớp transport dưới điều kiện thường:
$httpd –p 80
Tại client dùng httperf để lần lượt kết nối đến server và tương ứng với mỗi kết nối, client sẽ nhận các file với dung lượng khác nhau ở trên.
$httperf –port 80 –server 192.168.70.44
Ghi lại kết quả thông lượng mà phía httperf trả về
Dùng netem để thiết lập mạng ở chế độ mất gói 10% giữa client và server và lần lượt thực hiện việc truyền các file với httperf như ở trên
Ghi lại các kết quả thông lượng trong trường hợp này.
- Thực nghiệm http trên nền SCTP
Kích hoạt thttpd đã cải tiến tại máy nguồn, ở đây ta phải điều chỉnh chương trình httpd gốc để nó có thể hỗ trợ sctp. Trong lab này có hai dạng thttpd là thttpd một luồng và thttpd đa luồng
$httpd –p 81 (cổng 81 dùng cho SCTP một luồng) $httpd –p 82 (cổng 82 dùng cho SCTP đa luồng)
Tại client ta cũng dùng httperf cải tiến có hỗ trợ sctp lần lượt kết nối đến server và tương ứng với mỗi trường hợp sctp 1 luồng, sctp 10 luồng và sctp 100 luồng ta thực hiện việc truyền các file kích thước khác nhau như đã đề cập ở trên từ web server đến web client
$httperf –port 80 –server 192.168.70.44 –num-streams 1
$httperf –port 80 –server 192.168.70.44 –num-streams 10
$httperf –port 80 –server 192.168.70.44 –num-streams 100
Ghi lại kết quả thông lượng mà phía httperf trả về
Dùng netem để thiết lập mạng ở chế độ mất gói 10% giữa client và server và lần lượt thực hiện việc truyền các file với httperf như ở trên
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 thttpd để truyền tập tin có dung lượng 10K Byte và tỉ lệ mất gói là 10%
Các kết quả từ các thực nghiệm trên biểu diễn ở bảng 3-1:
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
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
100 byte 1 KB 10 KB 100 KB 100 byte 1 KB 10 KB 100 KB
TCP 136.2 409.1 2134 5494 TCP 3.3 9.6 40.3 56.5
SCTP-1 74.3 235.6 916.2 3688 SCTP-1 1.6 6.2 38.6 86.6
SCTP-10 345.4 1064 2359 5734 SCTP-10 14.7 39.2 78.1 91.5
SCTP-100 790.8 2028 5292 6718.5 SCTP-100 27.3 62.4 93.7 98
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%
Bản chất SCTP đa luồng trong thực nghiệm này có khác đôi chút với lý thuyết, đó là việc việc truyền đồng thời 10 hay 100 tập tin đồng thời từ server đến client. Từ những số liệu trên ta thấy SCTP đa luồng có thể cải thiện hiệu suất rất tốt cho HTTP khi so sánh với TCP hay SCTP một luồng vì nó giải quyết được vấn đề nghẽn HoL. Hơn nữa TCP có hiệu suất tốt hơn SCTP một luồng vì nếu dùng SCTP một luồng sẽ dẫn tới việc quá tải thông tin điều khiển. Và một vấn đề quan trọng ở đây là việc chọn bao nhiều luồng cho SCTP là đủ trong điều kiện mạng không ở trạng thái bình thường, đặc biệt là khi truyền các file lớn. Ta thấy rằng 10 luồng là một lựa chọn tốt cho hầu hết các trường hợp.