3.6.1. Giới thiệu chương trình, cài đặt và thực hiện mô phỏng
Chương trình được cải tiến từ chương trình Demo của NICE. a) Yêu cầu:
- Hệ điều hành linux (ở đây dùng ubuntu)
- ctags: http://prdownloads.sourceforge.net/ctags/ctags-5.8.tar.gz
- nice: http://www.cs.umd.edu/projects/nice/dls/nice.trustsim.extended.tgz
b) Cài đặt:
Cài đặt ctags: giải nén ctags-5.8.tar.gz và thực hiện các lệnh: cd ctags-5.8
-58- ./configure
make
sudo make install
Cài đặt nice.trustsim.extended: Giải nén nice.trustsim.extended.tgz và thực hiện lệnh:
cd nice.trustsim.extended make
Kết quả là:
gcc -Wall -g -DDEBUG -c context.c gcc -Wall -g -DDEBUG -c event.c gcc -Wall -g -DDEBUG -c history.c gcc -Wall -g -DDEBUG -c link.c gcc -Wall -g -DDEBUG -c main.c gcc -Wall -g -DDEBUG -c node.c gcc -Wall -g -DDEBUG -c pqueue.c gcc -Wall -g -DDEBUG -c query.c gcc -Wall -g -DDEBUG -c toposerver.c gcc -Wall -g -DDEBUG -c truststore.c gcc -Wall -g -DDEBUG -c unittest.c
gcc -o hiertrust context.o event.o history.o link.o main.o node.o pqueue.o query.o toposerver.o truststore.o -lm
Sau khi make chương trình tạo ra file thực thi hiertrust cùng các file có đuôi .o tương ứng theo các file .c mã nguồn.
c) Mô tả các file chương trình:
Chức năng chính của các file chương trình
File Chức năng
main.c Thực hiện các chức năng của chương trình event.h
event.c
Định nghĩa cấu trúc sự kiện (event) cùng các thủ tục khác: Tạo sự kiện
Giải phóng sự kiện node.h,
node.c
Định nghĩa các khối blocks, cookieQueryInfo, node và các thủ tục khác.
Lưu trữ các thông tin của node: lịch sử giao dịch, vị trí các node tin cậy khác, các thông tin cho các node khác có các hàm chính:
-59- In trạng thái kết thúc của node
Giải phóng tất cả tài nguyên Lưu trữ các blocks của một node Đếm số blocks lưu trữ của một node
Loại bỏ các blocks đang lưu trữ của một node Cho một node tham gia
query.h, query.c
Định nghĩa cấu trúc lấy và kiểm tra truy vấn cùng các hàm và thủ tục khác có liên quan.
Lưu trữ các thông tin quảng cáo dùng để phát hiện các node mới có các chức năng chính:
Thêm các node vào truy vấn
Lấy danh sách các node thông báo
Đánh dấu trong truy vấn các node đã được thăm Kiểm tra node đã được thăm chưa
pqueue.h, pqueue.c
Định nghĩa các cấu trúc về khóa, dữ liệu, độ dài và kích cỡ dữ liệu, hàng đợi cùng các thủ tục khac.
Tạo hàng đợi lưu trữ theo cây nhị phân đầy đủ với đỉnh cha luôn nhỏ hơn các đỉnh con, chỉ số bắt đầu từ 1
Thêm dữ liệu vào pqueue Kiểm tra pqueue rỗng context.h,
context.c
Định nghĩa cấu trúc biến ngữ cảnh
Khởi tạo các giá trị ban đầu cho các tham số trong mô phỏng. history.h,
history.c
Định nghĩa cấu trúc lịch sử giao dịch.
Lưu trữ lịch sử giao dịch của các node có các chức năng chính: Giải phóng dữ liệu
Cập nhập dữ liệu Thêm dữ liệu
Thêm dữ liệu với các node tin cậy Loại các node giao dịch
Lấy giao dịch lớn nhất
Giải phóng dữ liệu vùng đệm khi in. link.h,
link.c
Mô phỏng liên kết có các chức năng chính: Tạo độ trễ liên kết Kiểm tra độ trễ Lập lịch biểu độ trễ toposerver. h, toposerver. c
Định nghĩa cấu trúc toposerver mạng,
Lưu trữ định danh của các node để mô tả topo của mạng có các chức năng chính:
Giải phóng các node Thêm node
Lấy node
-60- trustore.c cậy và các hàm khác có liên quan.
Lưu trữ giá trị tin cậy của các node có các chức năng chính: Thêm giá trị tin cậy
Kiểm tra giá trị tin cậy Đếm các giá trị tin cậy Tìm kiếm giá trị tin cậy Xóa giá trị tin cậy Tạo giá trị tin cậy Lưu trũ vào cookie Kiểm tra độ tin cậy
unittest.c Thực hiện thủ tục kiểm tra cấu trúc lưu trữ cookies100
00
Lưu trữ cấu hình của hệ thống dùng với tham số -config
Các chức năng chính và mô phỏng trong main.c:
parse_args(context * ctx, int argc, char * argv[]):
Đọc và kiểm tra các tham số dòng lệnh, nếu hợp lệ thì chạy tiếp chương trình, nếu không hợp lệ thì thông báo cho người dùng. Các tham số :
-l : log data[stdout] -L : log NO data[off]
-s seed : randomseed[%ld] -config f : sử dụng file config f
- read_config(context * ctx)
Đọc tham số cấu hình từ dòng lệnh đưa vào biến ngữ cảnh ctx
Nếu file config không có thì chạy stubconfig(ctx) <hàm khởi tạo cấu hình hệ thống mặc định>
Tiếp theo kiểm tra có ghi log file và ghi ra đâu (stdout mặc định). Đọc file config nhập vào từ dòng lệnh.
- stubconfig(context * ctx)
Tạo cấu hình mặc định cho hệ thống vào biến ngữ cảnh ctx Cấu hình mặc định cho hệ thống:
-61- Các sự kiện node_join() được tạo ra nếu node được tạo thành công
- init(context * ctx)
Khởi tạo hệ thống, seed một số ngẫu nhiên, tạo một topo server gắn với biến ngữ cảnh hệ thống.
- printstats(context *ctx)
In ra thống kê hiện thời có bao nhiêu lỗi
- newround(context * ctx)
Tạo vòng mới
- heartbeat(context *ctx, event *e, double t)
In ra thống kê mỗi nhịp, sau đó tạo lịch mới
- cleanup(context * ctx)
- Đặt mọi giá trị về vị trí ban đầu (hoàn thành) - Lập sự kiện mới dạng khởi thủy.
- main()
- Tạo biến ngữ cảnh
- Đọc và kiểm tra các tham số dòng lệnh - Đọc file config.
- Khởi tạo hệ thống
- Chạy mô phỏng. Mặc định chương trình chạy một vòng mô phỏng.
- Kết thúc chương trình giải phóng bộ nhớ do các tham số chiếm trong quá trình chạy chương trình.
3.6.2. Chạy chương trình:
Sau khi vào cửa sổ lệnh (Terminal) và chuyển đến thư mục chứa các file chương trình và biên dịch chương trình thành công, để chạy chương trình ta sử dụng file cấu hình, gõ lệnh:
./hiertrust –config cookies10000
File cookies10000 có các cấu trúc config như sau: COOKIES 1
-62- NODES 10000 good=1.0 want=10 have=11 state=11 sleep=0
NODES 10000 good=0.1 want=10 have=11 state=11 sleep=0
Kết quả chạy lệnh ./hiertrust -config cookies10000 sẽ hiển thị các kết quả tính toán ra màn hình. Để có được kết quả theo ý thì cần lọc và ghi ra một file cụ thể trên đĩa để tiện cho quá trình phân tích.
Khi thay thế file cookies10000 bằng một file khác có cấu hình cụ thể, thì khi chạy lại chương trình sẽ cho kết quả khác.
3.6.3. Các kết quả mô phỏng
Trong quá trình mô phỏng, tôi chọn cấu hình cho các file với các thông số như sau:
COOKIES 1 HEARTBEAT 0.1 MAXRULE 1 BACKOFF 0.5
NODES 1000 good=1.0 want=100 have=101 state=80 sleep=0 NODES xxxx good=0.2 want=100 have=101 state=80 sleep=0
ở đây xxxx là số các node xấu (lấy giá trị tin cậy của cookie là 0.2). Số các node này thay đổi theo các file được chọn.
Mô phỏng được tiến hành trên các file cấu hình được đặt tên là badnode- 0, badnode-1000, badnode-2000, badnode-10000 và badnode-20000 với số node xấu thay đổi tương ứng là 0, 1000, 2000, 10000 và 20000. Các tham số khác giữ nguyên, trừ file badnode-0 giới hạn số các truy vấn tối đa cho mỗi node là 20 để ổn định cho việc so sánh với các trường hợp khác.
-63- Hình 3.1 cho biết tỉ lệ phát hiện các tương tác (gửi truy vấn theo các cookie) của các node xấu (đường cong có dấu *) so với tổng số các tương tác của các node (bao gồm cả node xấu và node tốt - đường cong có dấu ) tham gia giao dịch. Thời gian phân tích của mô phỏng là 5 phút. Trong kết quả thu được ta thấy khả năng phát hiện các nút xấu tại lân cận phút thứ 2 của mô phỏng là thấp nhất (thể hiện qua hiệu-khoảng cách của 2 đường cong), nhưng sau đó khả năng phát hiện đã ổn định và tỉ lệ đã tương đối cân bằng giữa các node xấu bị phát hiện so với tổng số các node tham gia. Điều này có thể giải thích là lúc đầu khi mà nhóm hợp tác giữa các node tốt chưa hình thành hoặc ít thì khả năng phát hiện node xấu là thấp. Khi nhóm này mở rộng và phát triển thì khả năng phát hiện tăng lên và đạt đến độ ổn định tương đối, đồng thời các truy vấn giảm đáng kể và cũng ổn định (dần về với số các tương tác của các node tốt), thể hiện qua đồ thị là khoảng cách giữa tổng số các tương tác và số tương tác của chỉ mình các node tốt.
-64-
3.6.3.2. Tỉ lệ phát hiện các free-rider
Hình 3.4 minh họa tổng hợp kết quả về khả năng phát hiện các node xấu tương ứng với cấu hình số lượng các node xấu tham gia là 1000, 2000, 10000 và 20000.
-65- Hình 3.5 minh họa tỉ lệ phát hiện các node xấu. Tỉ lệ này được lấy bằng tỉ số giữa các tương tác của các node xấu phát hiện được chia cho tổng số các tương tác của các node tham gia. Tại lân cận của phút thứ 2 cho tỉ lệ thấp nhất. Lí do là tổng số các tương tác của các node ở đây lớn nhất (mẫu lớn nhất), trong khi số các tương tác phát hiện được ở thời điểm này là thấp (tử số nhỏ nhất), từ đó kết quả của phép chia là nhỏ nhất.
Bắt đầu từ những phút sau phút thứ 2 thì tỉ lệ này là tăng dần, ổn định và gần với nhau. Số các tương tác của các node xấu phát hiện được gần với tổng số các tương tác của node tham gia, và vì vậy tỉ lệ này tiến dần tới 1, đạt kết quả cao nhất vào khoảng trên 90%. Có được kết quả này là do trong mạng tại thời điểm này đã hình thành và mở rộng các nhóm hợp tác thiết thực là các node tốt. Các node tốt sau khi phát hiện ra các node xấu thì ngăn chặn các node xấu chuyển các truy vấn và sau đó “tỉa” các node xấu này ra khỏi hệ thống. Vì vậy trong các đồ thị thì tổng số các tương tác của các node tham gia giao dịch sẽ giảm dần, và giảm về số các tương tác của các node xấu bị phát hiện. Số các tương tác tổng cộng cao hơn (đường cong nằm phía trên) là do có các tương tác của các node tốt cùng tham gia.
-66-
3.6.3.3. Băng thông khi có free-rider
Theo định nghĩa băng thông (bandwidth) trên mạng thì băng thông là đại lượng đặc trưng cho tốc độ truyền dữ liệu từ điểm này tới điểm khác trong một khoảng thời gian (thường tính bằng đơn vị của bit/giây). Chẳng hạn một modem làm việc ở tốc độ 56 kbs có hai băng thông làm việc ở 28 kbs.
Trong một mạng nếu số lượng các truy vấn tham gia nhiều thì các truy vấn này sẽ ảnh hưởng đến tốc độ truyền dữ liệu trên mạng (có sự chia sẻ đường truyền giữa các ứng dụng), điều đó có nghĩa là băng thông bị hạn chế và ảnh hưởng đến hiệu năng của mạng.
Trong NICE, các node tốt cùng với các nhóm cộng tác sẽ ngăn chặn việc gửi các truy vấn của các node xấu, từ đó cải thiện được hiệu năng và băng thông của mạng.
Hình 3.6 trong thí nghiệm mô phỏng thể hiện tổng số các tương tác của toàn bộ các node tham gia giao dịch trong mạng (bao gồm cả các node tốt và xấu). Mô phỏng làm trên cấu hình trong đó các node nguy hiểm được lấy là 1000, 2000, 10000 và 20000. Mỗi đường cong thể hiện tổng số các tương tác (bao gồm cả các node tốt và node xấu) tương ứng với số các node xấu cho trong cấu hình của tệp mô phỏng. Rõ ràng số các tương tác này giảm nhanh và càng về
-67- sau (tính từ phút thứ 3 trở đi) càng ổn định ở mức thấp. Điều này tạo điều kiện rất nhiều cho việc cải thiện băng thông của toàn mạng. Các ứng dụng truy cập dữ liệu, download/upload sẽ được cải thiện nhiều về tốc độ,…
-68-
Kết luận và hướng nghiên cứu
Các ứng dụng của mạng ngang hàng ngày càng phát triển. Việc ngăn chặn các ảnh hưởng làm giảm hiệu năng và băng thông của mạng là cần thiết nhằm cải thiện chất lượng của toàn mạng.
Bài viết đã nghiên cứu về các vấn đề tin cậy và đề xuất một khía cạnh là làm thế nào để đảm bảo công bằng trong các ứng dụng cộng tác ngang hàng dựa trên khái niệm tin cậy. Đóng góp chính của bài viết này là một đề xuất giải thuật định giá tin cậy dựa theo cookie, qua đó phát hiện được các trường hợp giả mạo, các truy vấn của các node nguy hiểm, từ đó hạn chế sự chiếm dụng băng thông đường truyền, tạo điều kiện nâng cao tốc độ của đường truyền. Cũng từ sự phát hiện các node nguy hiểm mà có thể ưu tiên cho các node tốt trong vấn đề truy cập và chia sẻ tài nguyên, từ đó đảm bảo công bằng trong các ứng dụng cộng tác. Giải thuật này có thể áp dụng trong môi trường cộng tác của mạng ngang hàng. Giải thuật là thiết thực, hạn chế sự biến đổi của các cuộc tấn công bởi những người sử dụng xấu.
Hướng nghiên cứu tiếp theo của đề tài: Củng cố và mở rộng ứng dụng của giải thuật dựa trên khái niệm tin cậy và cookie, đồng thời kiểm định qua ứng dụng cụ thể trong môi trường thực, để có thể áp dụng được tốt hơn trong việc đảm bảo công bằng cho các ứng dụng cộng tác trong mạng ngang hàng.
Mặc dù đã rất cố gắng, xong do năng lực còn hạn chế nên bài viết không tránh khỏi những thiếu sót. Rất mong nhận được sự đóng góp quí báu của quý Thầy, Cô và các bạn đồng nghiệp cũng như những ai quan tâm tới bài viết.
-69-
Tài liệu tham khảo
Tiếng Anh
[1] Alfarez Abdul-Rahman & Stephen Hailes, “A Distributed Trust Model”, pp. 1-9.
[2] Dinesh C. Verma (2005), Legitimate Applications of Peer to Peer Networks. Wiley-InterScience, pp. 1-17, 37-54.
[3] Jing Zhao, Ping Zhang and Guohong Cao, “On Cooperative Caching inWireless P2P Networks”, pp. 1-3.
[4] Karl Aberer, Zoran Despotovic, “Managing Trust in a Peer-2-Peer Information System”, pp.1-3.
[5] Lik Mui, Mojdeh Mohtashemi, Ari Halberstadt, “A Computational Model of Trust and Reputation”, pp. 1-5.
[6] Nicolas C. Liebau, Vasilios Darlagiannis, Oliver Heckmann, "Accounting in Peer-to-Peer-Systems”, pp. 11-13.
[7] Ralf Steinmetz (2003), Peer-to-Peer Systems and Applications, pp.38-43
[8] Rob Sherwood, Seungjoon Lee, Bobby Bhattacharjee, “Cooperative Peer Groups in NICE”, pp. 1-11.
[9] The Gnutella Protocol Specification v0.4
Document Revision 1.2. http://www.clip2.com; protocols@clip2.com [10] http://www.pgp.com.
[11] http://www.bittorrent.com.
Tiếng Việt
[12] Hồ Sĩ Đàm (2007), Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Giáo dục.
[13] PGS.TS Hồ Sĩ Đàm: Bài giảng môn Cấu trúc dữ liệu & giải thuật.
[14] Đinh Mạnh Tường (2001), Cấu trúc dữ liệu và thuật toán, nhà xuất bản Khoa học và Kỹ thuật Hà Nội, tr. 5-22.