Phát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng AdhocPhát triển bộ tiện ích APE Testbed hỗ trợ kiểm thử mạng di dộng Adhoc
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Trang 2HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
LUẬN VĂN TH C SĨ Ỹ THUẬT
NGƯỜI HƯỚNG DẪN KHOA HỌC : TS LÊ TRUNG QUÂN
TP HỒ CHÍ MINH – Năm 2016
Trang 3i
LỜI CA OAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi
Các số liệu, kết quả nêu trong luận văn là trung thực và chƣa từng đƣợc ai công bố trong bất kỳ công trình nào khác
Tp HCM, ngày 01 tháng 09 năm 2016 Học viên thực hiện luận văn
Trần Danh Hưng
Trang 4ii
LỜI CẢ ƠN
Tôi xin trân trọng cảm ơn thầy Lê Trung Quân, giáo viên hướng dẫn của tôi, người đã chỉ bảo, hướng dẫn, và động viên tôi trong suốt quá trình thực hiện luận văn này Nhờ sự hướng dẫn tận tình của thầy mà tôi mới có thể vượt qua những khó khăn về chuyên môn trong quá trình thực hiện luận văn
Tôi cũng xin gửi lời cảm ơn đến quý thầy cô trường Học viện Công nghệ Bưu chính Viễn thông đã tạo điều kiện học tập và truyền đạt nhiều kiến thức quý báu trong quá trình học cao học
Xin cảm ơn các bạn trong lớp Cao học Hệ thống thông tin M14CQIS01-N, đặc biệt là ban cán sự lớp, đã đồng hành và hỗ trợ tôi trong suốt quá trình học
Cuối cùng tôi cũng xin cảm ơn gia đình và đồng nghiệp tôi đã giúp đỡ tôi trong quá trình thực hiện luận văn này
Tp HCM, ngày 01 tháng 09 năm 2016 Học viên thực hiện luận văn
Trần Danh Hưng
Trang 5iii
MỤC LỤC
LỜI CAM ĐOAN i
LỜI CẢM ƠN ii
MỤC LỤC iii
DANH MỤC CÁC KÍ HIỆU, CÁC CHỮ VIẾT TẮT v
DANH MỤC CÁC BẢNG vi
DANH MỤC CÁC HÌNH vii
CHƯƠNG 1 - TỔNG QUAN T NH H NH NGHI N C U APE TESTBED V MỤC TI U LUẬN VĂN 1
1.1 Tổng quan 1
1.1.1 Mạng di động Adhoc (MANET) 1
1.1.2 APE testbed 3
1.1.3 So sánh APE testbed và các công cụ hỗ trợ kiểm thử mạng MANET khác 4 1.1.4 Tình hình nghiên cứu/phát triển của APE testbed 6
1.2 Mục tiêu của luận văn 7
1.3 Tóm tắt phương pháp luận, các kết quả đạt được 7
1.4 Phạm vi, giới hạn của đề tài 7
1.5 Cấu trúc của Luận văn 8
CHƯƠNG 2 - Thực hiện cập nhật bộ công cụ APE testbed 9
2.1 Phân tích APE testbed 9
2.1.1 Cấu trúc của APE testbed 9
2.1.2 Các thành phần cần được cập nhật 11
2.1.3 Phân tích Kernel patches 13
2.1.3.1 MacKill 15
2.1.3.2 Wireless driver hook 16
2.1.4 Các giao thức định tuyến 18
Trang 6iv
2.2 Tiến hành cập nhật APE testbed 19
2.2.1 Cập nhật MacKill 19
2.2.2 Cập nhật Wireless driver hook 22
2.2.2.1 Nguyên tắc chung 22
2.2.2.2 ath9k 22
2.2.2.3 rt2800usb 29
2.2.2.4 Phương pháp mới không cần driver hook 30
2.2.3 Cập nhật các giao thức định tuyến 33
CHƯƠNG 3 - Đánh giá kết quả 34
3.1 Cập nhật ath9k 34
3.1.1 Cập nhật mã nguồn 34
3.1.2 Đánh giá 35
3.2 Cập nhật các giao thức định tuyến 37
3.2.1 Cập nhật mã nguồn 37
3.2.2 Đánh giá 39
3.2.3 Đánh giá tổng quan 40
CHƯƠNG 4 - Kết luận 41
DANH MỤC T I LIỆU THAM KHẢO 42
PHỤ LỤC 43
Trang 7v
DANH MỤC CÁC KÍ HIỆU, CÁC CHỮ VIẾT TẮT
MANET Mobile ad-hoc network Mạng di động Ad-hoc
AODV Ad hoc On-Demand Distance Vector
Routing
Định tuyến Adhoc dựa trên vector khoảng cách khi cần
DSR Dynamic Source Routing Định tuyến nguồn động
OLSR Optimized Link State Routing
SNR Signal-to-noise ratio Tỉ số tín hiệu trên nhiễu
MAC address Media access control address Địa chỉ điều khiển truy cập thiết bị
Trang 8vi
DANH MỤC CÁC BẢNG
Bảng 2.1: So sánh các bộ công cụ kiểm thử mạng di động adhoc 5Bảng 3.1: So sánh thông tin từ tài liệu APE testbed và thực tế 18Bảng 4.1: Danh sách các API cần thay thế 37
Trang 9vii
DANH MỤC CÁC HÌNH
Hình 1.1: Sơ đồ mạng di động adhoc 1
Hình 1.2: Sơ đồ hoạt động của bộ công cụ APE testbed 3
Hình 3.1: Danh sách file trong thư mục dist 9
Hình 3.2: Danh sách file dưới thư mục kernel 10
Hình 3.3: Danh sách file dưới thư mục src 11
Hình 3.4: Các patch cho kernel 14
Hình 3.5: Cấu trúc của MacKill 15
Hình 3.6: Cấu trúc của driver hook 16
Hình 3.7: Cấu trúc của MacKill và cách MacKill xử lý 19
Hình 3.8: So sánh sk_buff giữa 2 kernel version 20
Hình 3.9: Minh họa cấu trúc của driver ath9k 23
Hình 3.10: Danh sách file trong ath9k 24
Hình 3.11: Danh sách các kernel module và quan hệ trong ath9k 24
Hình 4.1: Kết quả build sau khi cập nhật ath9k 35
Hình 4.2: Kết quả cập nhật cho ath9k 36
Trang 101
CHƯƠNG 1 - T NG QUAN T NH H NH NGHI N C U
APE TESTBED V ỤC TI U LUẬN VĂN
bị trong mạng có thể di chuyển được Khác với mạng không dây thường gặp với các thiết bị đều kết nối trực tiếp với một Wifi router ở trung tâm, trong mạng di động ad-hoc các thiết bị không có trung tâm mà thay vào đó chúng kết nối lẫn nhau với vai trò bình đẳng Khi một thiết bị di chuyển, nó sẽ thường xuyên thay đổi dường kết nối (đến các thiết bị gần hơn trong lúc nó di chuyển)
H nh 1.1: S ng i ng a h
Mạng di động Adhoc có thể được sử dụng trong những trường hợp sau 4]:
Trang 112
- Vùng bị thiên tai, hạ tầng mạng đã bị phá hủy
- Tại khu vực công trường đang xây dựng
- Trong gia đình/công sở (dùng như mạng WLAN)
- Mạng cảm biến (Sensor networks) nối các loại cảm biến trên cơ thể người hoặc trong hệ thống nhà thông minh
…
Ngoài ra, mạng di động Ad-hoc còn có một biến thể khác gọi là VANET (Vehicular ad hoc network) Ban đầu VANET là mạng MANET cho các phương tiện giao thông Nhưng ngày nay VANET đã phát triển thành một lĩnh vực độc lập
và ngày càng được quan tâm 5]
Tuy có nhiều ưu điểm, nhưng mạng MANET vẫn còn vấp phải nhiều thách thức Một nghiên cứu 10] cho rằng mạng MANET cần giải quyết các thách thức về:
Trang 131.1.3 So sánh APE testbed và các công cụ hỗ trợ kiểm thử mạng MANET khác
Hiện nay các công cụ cho kiểm thử và đánh giá mạng MANET đã và đang được triển khai trên thế giới gồm có:
APE testbed (Adhoc Protocol Evaluation testbed)
Emulab (vừa là tên hệ thống testbed thực tế vửa là tên phần mềm)
ManetLab
mLab
Dưới đây là bảng so sánh giữa các bộ công cụ này
(Chú ý: Server và Client nhắc tới trong bảng là các thành phần của mỗi bộ công cụ, chứ bản thân mạng di động Adhoc không có quan hệ Server-Client)
Trang 14x86 Chỉ hỗ trợ
card mạng OriNOCO và WaveLAN
2005 (version 0.5)
AODV-UU Mad-hoc AODV OLSR
DSR LUNAR TORA
Emulab [7] Server: FreeBSD
Client: FreeBSD
Linux WindowsXP
liên tục cho tới nay (trên git server)
không có thông tin
ManetLab
[8]
OS X 10.7 hoặc mới hơn
Máy tính Apple (Mac)
Card mạng trên các máy Mac
2013 không có thông
tin
mLab [9] Server: Debian
Client: any Linux
x86 ARM (chỉ hỗ trợ 3 loại thiết bị là CerfCube, iPAQ và Zaurus)
- 2006
(version 1.0)
không có thông tin
Hầu hết các công cụ trên đều không còn được tiếp tục phát triển nữa (có thể
là do thiếu nguồn tài trợ như APE testbed), ngoại trừ Emulad Nhưng Emulab chỉ được sử dụng cho bản thân hệ thống Emulab, người dùng khó có thể sử dụng nó để xây dựng hệ thống kiểm thử khác
Trang 15 Người dùng có thể lựa chọn những protocol cần sử dụng khi build
Cho ph p kiểm thử một mạng di động ad-hoc một cách tự động với các kịch bản (script) chọn trước Người sử dụng có thể dùng các kịch bản có s n hoặc
tự xây dựng kịch bản theo ý mình
Có k m theo công cụ để tổng hợp các thông số kết quả của ph p kiểm thử và phân tích dựa trên những tiêu chí:
o Sự thay đổi đường truyền
o Số lượng nút trung gian (khi ping giữa các nút)
o Tính tối ưu của đường đi
o Tỉ lệ thành công của các lệnh Ping giữa các nút
1.1.4 Tình hình nghiên cứu/phát triển của APE testbed
APE testbed được phát triển trong dự án APE project của Khoa Hệ thống Máy tính (Department of Computer Systems) thuộc đại học Uppsala, Thụy Điển với tài trợ từ Erricson [5]
APE testbed được chính thức phát hành 5 phiên bản từ 0.1 đến 0.5 trong giai đoạn từ 2001 – 2005
Năm 2002 các tác giả đã thử nghiệm thành công sử dụng APE testbed cho một hệ thống thực gồm 37 nút, và báo cáo điều này trong hội nghị WCNC 2002 [11]
Năm 2005, APE được sử dụng và đánh giá trong một luận văn của đại học Uppsala nghiên cứu các phương pháp đánh giá mạng Adhoc 12] Trong nghiên cứu
Trang 16- Các driver Wifi mới
Cụ thể là driver ath9k của hãng Atheros và rt2800usb của Realtek
1.3 T tắt hư ng h u n ết u t ư
Tóm tắt phương pháp thực hiện luận văn:
- Nghiên cứu cấu trúc của APE Testbed
o Cấu trúc
o Cách hoạt động
o Các thành phần nào cần được port lên môi trường mới
- Tìm hiểu những phần nào của APE Testbed cần được cập nhật để hỗ trợ Linux kernel mới, và những phần nào không cần
- Nghiên cứu cấu trúc của Linux kernel mới và các driver Wireless ath9k
và rt2800usb
- Tiến hành port các phần đó
o Chứng minh bằng thực nghiệm
1.4 Ph vi gi i h n a t i
- Hệ điều hành: Linux (do hiện tại APE testbed chỉ hỗ trợ Linux)
- Cập nhật các driver: mục tiêu chính là ath9k và rt2800usb (các driver cũ trong APE testbed sẽ bị bỏ qua)
Trang 17Chương 3: Đánh giá kết quả
Chương 4: Kết luận
Trang 189
CHƯƠNG 2 - THỰC HIỆN CẬP NHẬT
BỘ CÔNG CỤ APE TESTBED
2.1 Phân tích APE testbed
2.1.1 Cấu trúc của APE testbed
Gói APE testbed gồm 2 phần chính: APE binary distribution và APE source
code
APE binary distribution: là gói APE đã được build và có thể sử dụng ngay
APE source code: gói source code của APE, bao gồm
o /dist: chứa source code để build một Linux distribution hoàn chỉnh
(bằng buildroot, là một công cụ hỗ trợ build Linux)
H nh 2.1: Danh s h fi tr ng thư ist
o /doc: chứa tài liệu hướng dẫn chính thức của APE testbed dưới định
dạng TeX (có Makefile để chuyển thành dạng pdf và một số định dạng khác)
o /kernel: chứa mã nguồn các thành phần liên quan đến kernel, cụ thể
là:
ape-config: config file chứa các config cần cho APE testbed
(có nhiều version cho Linux 2.4 – 2.6)
Trang 1910
orinoco-0.15rc2-kismet: driver cho các card Wifi ORiNOCO
wlags49_cs-7.18-linux-2.6: driver cho các card Wifi
ORiNOCO dùng cổng PCI, cung cấp bởi nhà sản xuất
patches: các patches cho kernel và các driver wifi để có thể sử
dụng APE testbed Trong đó chứa các thay đổi cần để APE testbed móc nối tới WiFi driver và lấy dữ liệu cần thiết (tạm gọi là các Driver hook)
H nh 2.2: Danh s h fi ư i thư rn
o /src: chứa mã nguồn của các thành phần còn lại của APE testbed
(không liên quan đến kernel)
analysis: chứa các Analysis Tools, thực tế là các perl script có
tác dụng phân tích log xuất ra từ APE testbed
apeview: một công cụ để xem kết quả phân tích log (từ Analysis Tools) dưới dạng đồ họa
aodv-uu-0.9.1: một mã nguồn cho giao thức định tuyến AODV (Ad hoc On-Demand Distance Vector) trong MANET
dsr-uu-0.1: một mã nguồn cho giao thức định tuyến DSR (Dynamic Source Routing) trong MANET
mackill: một công cụ để chặn kết nối dựa vào địa chỉ MAC (cần patch tương ứng trong kernel để có thể sử dụng)
Trang 2011
runtime: Các công cụ hỗ trợ cho quá trình hoạt động của APE testbed, ví dụ nhƣ start_test thực hiện chạy APE scenario, spyd thực hiện việc thu thập dữ liệu …
scenarios: các kịch bản cho APE testbed
tools: các công cụ khác (thực ra hiện tại chỉ có một)
H nh 2.3: Danh s h fi ư i thư sr
2.1.2 Các thành phần cần được cập nhật
Dựa vào những thông tin trên, có thể đi đến kết luận những phần sau cần đƣợc cập nhật mới:
/dist: cập nhật buildroot mới và kernel Linux mới
/doc: chỉ cần cập nhật thông tin
/kernel: đây là phần quan trọng nhất cần đƣợc cập nhật, vì nó gắn liền
với Linux kernel cũ (2.4 và 2.6) nên không sử dụng đƣợc nữa
/src: các công cụ trong phần này phần lớn là cho user space, nên lẽ ra
không cần cập nhật gì Nhƣng trong đó có các mã nguồn giao thức định tuyến (aodv-uu, dsr-uu, madhoc) cần đƣợc cập nhật vì chúng là kernel module, cũng gắn với kernel
Trang 2112
Ngoài ra, APE testbed còn hỗ trợ một số giao thức định tuyến khác là OLSR, LUNAR, TORA Các giao thức định tuyến này không được để k m với bộ mã nguồn APE, mà để sử dụng người dùng phải download từ nơi khác và thêm vào APE Các giao thức định tuyến ngoài này cũng cần được cập nhật
Trang 2213
2.1.3 Phân tích Kernel patches
Nhƣ đã giới thiệu ở mục 3.1.1, mã nguồn APE về kernel có 4 phần:
o ape-config
o orinoco-0.15rc2-kismet
o wlags49_cs-7.18-linux-2.6
o patches
Trong đó 2 driver orinoco-0.15rc2-kismet và wlags49_cs-7.18-linux-2.6 chỉ
là reference driver, nên ta có thể loại bỏ
Thƣ mục patches là quan trọng nhất, chứa các patch files cho Linux kernel
để hỗ trợ APE Testbed
Trang 2314
H nh 2.4: Các patch cho kernel
Trang 2415
2.1.3.1 MacKill Công cụ này gồm 2 phần:
- /src/mackill/mackill.c: một kernel module, là phần chính của công cụ MacKill, nhận các MAC address từ người dùng thông qua một procfs
/proc/net/mackill
- /kernel/patches/mackill*.patch: p Linux kernel loại bỏ các gói có MAC address trùng với danh sách trong mackill kernel module
+ /* APE MAC-filter BEGIN */
+ if (mac_kill && (*mac_kill)(skb)) { + kfree_skb(skb);
/proc/net/mackill Nhận gói
Linux kernel + APE/kernel/patches/mackill*.patch
APE./src/mackill/mackill.c
H nh 2.5: C u tr a a i
Trang 2516
…
+ /* Do superspy collection of statistics */
+#if (LINUX_VERSION_CODE >= VERSION(1,3,0))
+ char *srcaddr = skb->mac.raw + MAC_ADDR_SIZE;
2.1.3.2 Wireless driver hook
Phần này nghiên cứu về các thay đổi trong Wifi driver mà APE đã thực hiện
để lấy được thông tin cần thiết (tạm gọi là driver hook) Mục đích là để hiểu những
gì cần làm cho một Wifi driver mới
Do APE hỗ trợ một vài Wifi driver nên ta chỉ tìm hiểu một driver tiêu biểu
là wavelan2 (Ghi chú: WaveLAN là tên sản phẩm Wifi trước khi đổi tên thành ORiNOCO)
H nh 2.6: C u tr a riv r h
Trang 2617
Trong mã nguồn trên, APE cần lấy ra 3 thông tin:
- MAC address: lấy từ skb buffer (tuy nhiên cấu trúc skb buffer nay đã thay đổi nên không còn chứa MAC address nữa)
+#if (LINUX_VERSION_CODE >= VERSION(1,3,0)) + char *srcaddr = skb->mac.raw + MAC_ADDR_SIZE;
+#else + char *srcaddr = skb->data + MAX_ADDR_SIZE;
+#endif
- stats[1] và stats[0], lấy từ hàm hcf_get_data(), tương ứng với mức nhiễu
và mức tín hiệu sóng Wifi
status = hcf_get_data(lp->hcfCtx, HFS_Q_INFO, stats, 2);
Đây là một hàm trong hcf library của Lucent, và không có mã nguồn Tuy nhiên theo một ghi chú trong header của driver thì hàm này sẽ trả về mức tín hiệu sóng và mức nhiễu (signal and noise level) với input lả HFS_Q_INFO
Trang 27B ng 2.1: S s nh thông tin từ t i iệu APE t st v thự tế
Thông tin từ tài liệu Thực tế Các giao thức có s n
(trong bộ mã nguồn)
AODV-UU LUNAR
AODV-UU DSR-UU Madhoc AODV Các giao thức ngoài Madhoc AODV
Kernel AODV IMEP/TORA OLSR DSR
Trang 28Để lấy MAC address của máy gửi, MacKill đọc skb, là một sk_buff struct
(http://www.linuxfoundation.org/collaborate/workgroups/networking/sk_buff, 2012) , sk_buff đây là một cấu trúc dữ liệu lớn chứa thông tin điều khiển cần thiết
để cho các gói
+ /* APE MAC-filter BEGIN */
+ if (mac_kill && (*mac_kill)(skb)) { + kfree_skb(skb);
/proc/net/mackill Nhận gói
Linux kernel + APE/kernel/patches/mackill*.patch
APE./src/mackill/mackill.c
H nh 2.7: C u tr a a i v h a i x ý
Trang 2920
“All network-related queues and buffers in the kernel use a common data structure, struct sk_buff This is a large struct containing all the control information required for the packet (datagram, cell, whatever).”
Tuy nhiên, cấu trúc này đã bị thay đổi qua các lần cập nhật của Linux kernel
struct sk_buff { /* These two members must be first */ struct sk_buff *next;
struct sk_buff *prev;
sk_buff_data_t mac_header;
… atomic_t users;
unsigned int truesize;
};
struct sk_buff {
/* These two members must be first */
struct sk_buff * next; /* Next buffer */
struct sk_buff * prev; /* Previous */
struct sk_buff_head * list; /* List */
struct sock *sk; /* Socket */
struct timeval stamp; /* Time */
struct net_device *dev; /* Device */
/* Link layer header */
union
{
struct ethhdr *ethernet;
unsigned char *raw;
Trang 30Ngoài ra, còn có một cách khác là thay thế hoàn toàn MacKill bằng một công
cụ khác có chức năng filter MAC address tương đương:
- iptables
- ipfirewall
…
Cuối cùng thì giải pháp dùng iptables được chọn, vì:
- Hỗ trợ rộng rãi trên mọi Linux kernel và distribution
- Không cần bận tâm về sự thay đổi trong Linux kernel, nên không cần cập nhật như MacKill
Ghi chú: Do iptables chỉ hỗ trợ IPv4, nên với IPv6 cần phải dùng ip6tables
Trang 3122
2.2.2 Cập nhật Wireless driver hook
Mục tiêu của luận văn là hỗ trợ 2 driver Wireless lớn là ath9k và rt2800usb 2.2.2.1 Nguyên tắc chung
Nhƣ đã phân tích ở mục 3.1.3.2, APE testbed cần các thông tin sau từ driver (cho mỗi gói nhận đƣợc) qua /proc/net/superspy:
- MAC address của máy gửi
- Mức nhiễu (noise level)
- Mức tín hiệu (signal level)
- Ngoài ra thì còn có thông tin khác là số hiệu gói, và thời điểm gói tới, nhƣng các thông tin này có thể dễ dàng tính toán bằng phần mềm
Mục đích là để cho quá trình hoạt động, APE testbed sẽ lọc các thông tin này (dựa trên MAC address), để biết đƣợc khả năng truyền/nhận tín hiệu đến từng máy trong mạng, từ đó dự đoán khoảng cách đến các máy khác
2.2.2.2 ath9k
Đây là một driver cho các card WiFi hỗ trợ chuẩn 802.11b, 802.11g, và 802.11n sử dụng chipset Atheros, đƣợc phát triển bởi cộng động Linux
Tuy nhiên, ath9k phụ thuộc vào một số module khác:
Trong danh sách trên, ath9k gồm 3 module nhỏ:
Trang 32H nh 2.9: Minh họa u tr a riv r ath9
(Nguồn: VipinM và Srikanth S, 2010)
“cfg80211 [12], mac80211 and ath9k are in kernel space and the applications for control and management are in the user space The user space application makes use of the nl80211 [13] calls to interact with cfg80211 which in turn communicates with mac80211 The controls are initiated from a user space application and are in turn transferred through system calls.”
Cấu trúc thƣ mục:
Driver ath9k nằm trong Linux kernel, ở vị trí drivers/net/wireless/ath/ath9k/