Tìm kiếm nguồn

Một phần của tài liệu đồ án công nghệ thông tin Tìm hiểu và xây dựng ứng dụng P P theo kién trúc Kademlia (Trang 52)

Một khi người dùng quyết định tải về một file, peer hoạt động như client bắt đầu một vòng của OVERNET_SEARCH kiểu 2 cho hàm băm của nội dung file; bản thân các peer trả về trong danh sách các peer nằm trong OVERNET_SEARCH_NEXT gửi các gói tim OVERNET_SEARCH_INFO (kiểu 0: không có cây tìm kiếm) cho cùng hàm băm, và luc đó các trả lời OVERNET_SEARCH_RESULT sẽ trả về k-object với một danh sách thẻ được tạo ra từ mọt thẻ meta của kiểu 02 (EDONKEY_MTAG_STRING), tên “loc”, và giá trị “http://ip_addr:port” hoặc “http://filehash:ip_addr:port” tùy thuộc vào có hay không có firewall.

Vì vậy, nếu client tìm kiếm “hoang tuan anh”: Node tìm kiếm Node nhận yêu cầu OVERNET_SEARCH(MD4(hoang)) OVERNET_SEARCH_NEXT(danh sách các peer) có Kểm tra xem node nhận có trong danh sách trả về không?

OVERNET_SEARCH_RESULT(MD4(hoang), MD4(filei), MetaTagList(attr(filei))) OVERNET_SEA RCH_INFO(MD 4(hoang), srchfilter( 'tuan',’anh ’), 0, 100) OVERNET_SEARCH_END(MD4(paolo), nsent, navailable)

Hình 3.2.4.2.1: Một phiên tìm kiếm dữ liệu

Một khi người quyết định tải một file (ví dụ file j), để lấy thông tin:

Hình 3.2.4.2.1: Một phiên tìm kiếm file

Và danh sách MetaTag trong trường hợp này được tạo ra bởi một thẻ đơn kiểu “string”, tên “loc” và giá trị “http://...”.

01 00 00 00: danh sách có một thẻ

02: kiểu thẻ 2, EDONKEY_MTAG_STRING (một cặp <string name, string value>) 03 00: chuỗi theo sau có 3 ký tự:

6c 6f 63: 'loc'

39 00: một chuỗi 0x39 (57) ký tự tiếp theo

...: "http://24352535278...:210.216.190.41.198:7527"

Các ví dụ về tìm kiếm được đặc tả trong gói tin OVERNET_SEARCH_INFO sau khi thiết lập byte tham số :

/* OP AND(OP AND(OP AND ("file", Type="audio"), Size>=1234), Size<=5678) */ unsigned char sf1[] = {

EDONKEY_SEARCH_BOOL, EDONKEY_SEARCH_AND,

EDONKEY_SEARCH_BOOL, EDONKEY_SEARCH_AND,

EDONKEY_SEARCH_BOOL, EDONKEY_SEARCH_AND, EDONKEY_SEARCH_NAME, /* = 01 */

4, 0, /* độ dài chuỗi 4 byte*/ 'f', 'i', 'l', 'e', /* từ khóa "file" */ EDONKEY_SEARCH_META, /* = 02 */

05, 00, /* độ dài chuỗi 5 byte */ 'a', 'u', 'd', 'i', 'o', /* giá trị là "audio" */ 1, 0, /* tên thẻ chiếm 1 byte*/ EDONKEY_STAG_TYPE, /* = 03 */

EDONKEY_SEARCH_LIMIT, /* = 03, thẻ giới hạn */ 0xd2, 0x04, 0x00, 0x00, /* giới hạn: 0x4d2 = 1234 */ EDONKEY_SEARCH_MIN, /* = 01, thẻ nhỏ nhất */ 1, 0, /* tên thẻ chiếm 1 byte*/ EDONKEY_STAG_SIZE, /* = 02 */

EDONKEY_SEARCH_LIMIT, /* = 03, thẻ giới hạn*/ 0x2e, 0x16, 0x00, 0x00, /* giới hạn 0x162e = 5678 */

Node tìm

kiếm OVERNET_SEARCH(MD4(filej)) Node nhận yêu cầu

OVERNET_SEARCH_NEXT(danh sách các peer)

có Kểm tra xem node nhận có trong danh sách trả về không?

OVERNET_SEARCH_RESULT(MD4(filej), RelHASH, MetaTagList(attr(fileN))) OVERNET_SEA RCH_INFO(MD 4(filej)) OVERNET_SEARCH_END(MD4(filej), nsent, navailable)

EDONKEY_SEARCH_MAX, /* = 01, thẻ lớn nhất */ 1, 0, /* tên thẻ chiếm 1 byte*/ EDONKEY_STAG_SIZE /* = 02 */

};

/* OP AND(OP AND(OP AND ("filename", Format="txt"), Size>=1), Size<=5678) */ unsigned char sf2[] = { EDONKEY_SEARCH_BOOL, EDONKEY_SEARCH_AND, EDONKEY_SEARCH_BOOL, EDONKEY_SEARCH_AND, EDONKEY_SEARCH_BOOL, EDONKEY_SEARCH_AND, EDONKEY_SEARCH_NAME, 8, 0,

'f', 'i', 'l', 'e', 'n', 'a', 'm', 'e', EDONKEY_SEARCH_META, 3, 0, 't', 'x', 't', 1, 0, EDONKEY_STAG_FORMAT, EDONKEY_SEARCH_LIMIT, 0x01, 0x00, 0x00, 0x00, EDONKEY_SEARCH_MIN, 1, 0, EDONKEY_STAG_SIZE, EDONKEY_SEARCH_LIMIT, 0x2e, 0x16, 0x00, 0x00, EDONKEY_SEARCH_MAX, 1, 0, EDONKEY_STAG_SIZE };

Một phần của tài liệu đồ án công nghệ thông tin Tìm hiểu và xây dựng ứng dụng P P theo kién trúc Kademlia (Trang 52)

Tải bản đầy đủ (DOC)

(59 trang)
w