Trong phạm vi đề tài này, chúng tôi tập trung vào 03 ba thành phần cơ bản nhất của thiết bị định tuyến: i các giao thức tìm đường trong mạng ad-hoc và các phiên bản hiện thực trong Linux
Trang 1BÁO CÁO TỔNG KẾT ĐỀ TÀI KH&CN
Tên đề tài:
Phát triển thiết bị tìm đường không dây (Wireless Router) dựa trên nền tảng công nghệ mạng Mobile Ad-Hoc Networks (MANETs)
Mẫu R08 Ngày nhận hồ sơ
(Do CQ quản lý ghi)
Tham gia thực hiện
Họ và tên
Chịu trách
1 TS Lê Trung Quân Chủ nhiệm 01222501188 ltquan@hcmiu.edu.vn
2 TS Nguyễn Minh Sơn Tham gia,
Trang 3MỤC LỤC
TÓM TẮT 2
ABSTRACT 3
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT 4
DANH MỤC CÁC BẢNG 5
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ 6
CHƯƠNG 1 – GIỚI THIỆU ĐỀ TÀI 8
1.1 Tổng quan về đề tài 8
1.2 Nội dung nghiên cứu 9
1.3 Phương pháp nghiên cứu 10
1.4 Mục tiêu của đề tài 11
1.5 Nội dung báo cáo 12
CHƯƠNG 2 – NGHIÊN CỨU LÝ THUYẾT 13
2.1 Công nghệ mạng thông tin di động ad-hoc MANETs 13
2.2 Các giao thức định tuyến trong mạng MANETs 14
2.3 Kỹ thuật cập nhật bảng tìm đường và chuyển tiếp gói tin trong mạng Linux 21 2.4 Trình điều khiển thiết bị cho card mạng không dây trong Linux 39
CHƯƠNG 3 – THIẾT KẾ THIẾT BỊ TÌM ĐƯỜNG KHÔNG DÂY 42
3.1 Kiến trúc thiết bị tìm đường không dây 42
3.2 Cấu trúc các giao thức tìm đường sử dụng 43
3.3 Cấu trúc trình thiết bị sử dụng 51
CHƯƠNG 4 – KẾT QUẢ 57
4.1 Kiểm thử kết nối multihop với thiết bị định tuyến 57
4.2 Kiểm tra hoạt động trình điều khiển ath5k trong thiết bị định tuyến 60
CHƯƠNG 5 – KẾT LUẬN VÀ ĐỀ NGHỊ 67
5.1 Kết luận 67
5.2 Các kiến nghị sử dụng kết quả đã đạt được 67
TÀI LIỆU THAM KHẢO 68
PHỤ LỤC 69
1 Phụ lục sản phẩm 69
2 Phụ lục quản lý 70
Trang 4TÓM TẮT
Đề tài này tập trung vào việc xây dựng thiết bị định tuyến không dây thực sử dụng công nghệ di động ad-hoc, được cấu thành từ các máy tính để bàn PC hay máy tính xách tay, có gắn card mạng không dây, và chạy trên nền tảng hệ điều hành mã nguồn mở Linux Mục tiêu của chúng tôi là tạo ra được thiết bị định tuyến không dây ad-hoc, làm chủ công nghệ
để có thể triển khai các ứng dụng ad-hoc tại Việt Nam với giá thành hợp lý Trong phạm vi
đề tài này, chúng tôi tập trung vào 03 (ba) thành phần cơ bản nhất của thiết bị định tuyến: i) các giao thức tìm đường trong mạng ad-hoc và các phiên bản hiện thực trong Linux, ii) cơ
chế cập nhật bảng tìm đường và chuyển tiếp gói tin trong nhân (kernel) của hệ điều hành
Linux, và iii) trình điều khiển thiết bị cho card mạng không dây Một cách cụ thể hơn,
chúng tôi tập trung phân tích mã nguồn mở trên nền Linux của các phiên bản hiện thực các giao thức tìm đường aodv-uu (trình nền aodvd), olsr-unik (trình nền olsrd), và trình điều khiển thiết bị ath5k cho card mạng không dây wlan sử dụng atheros chipset, để trình bày cụ thể vấn đề tích hợp các giao thức tìm đường, tích hợp trình điều khiển thiết bị vào nhân hệ điều hành Linux, cũng như phân tích các dòng gởi (transmission path), dòng nhận (reception path), và chuyển tiếp (forwarding) gói tin qua thiết bị định tuyến Các cấu hình mạng thực sử dụng thiết bị định tuyến phát triển bởi chúng tôi đã được sử dụng để kiểm tra kết nối multihop trong mạng ad-hoc, cũng như xác thực tính đúng đắn trong việc phân tích
mã nguồn của chúng tôi Kết quả của đề tài này cũng sẽ được sử dụng trong dự án tiếp theo
của chúng tôi: “Nghiên cứu khả năng tích hợp mạng di động ad-hoc vào Internet“ Đây
là đề tài đã được Hội đồng xét duyệt của ĐHQG-HCM thông qua, và dự kiến được thực hiện trong thời gian 24 tháng (bắt đầu trong năm 2014)
Về kết quả, đề tài này đã đạt được hơn 100% các kết quả đã đăng ký Cụ thể, về công bố khoa học đã có 03 (ba) bài báo trong Hội nghị quốc tế được xuất bản trong đề tài này (đăng
ký 02 bài), về đào tạo mặc dù không đăng ký nhưng chúng tôi đã hướng dẫn 03 sinh viên Đại học bảo vệ thành công Luận Văn Tốt Nghiệp trong năm 2013, và 01 sinh viên Cao học chuẩn bị bảo vệ Luận Văn Tốt Nghiệp với nội dung liên quan đến đề tài
Trang 5ABSTRACT
This project concentrates on the development and implementation of wireless ad-hoc router used the mobile ad-hoc network technologies, built from PC/laptops attached wireless cards, and used the open-source Linux platform Our objective is to be able to create the wireless ad-hoc routers and to deploy ad-hoc applications in Vietnam at the reasonable cost In the scope of this project, we focus on the three basic components of the wireless
ad-hoc router: i) ad-hoc routing protocols and their implementations in Linux, ii) routing updates and packet forwarding in the Linux kernel, and iii) device drivers for wireless
cards In particular, we have focused on analyzing the open-source code on the Linux platform the implementation versions of ad-hoc routing protocol aodv-uu (aodvd daemon), olsr-unik (olsrd daemon), and ath5k device driver for wlan cards using Atheros chipsets, to understand how to integrate ad-hoc routing protocols and device drivers into the Linux kernel, as well as to analyze transmission path, reception path, and forwarding path of packets via the wireless ad-hoc router Real network topology using our developed wireless ad-hoc routers is used to test the multihop connections in ad-hoc networks, as well as for the verification of the correctness of our open-source code analysis Results from this
project will be used in our next/future project: “Internetworking mobile ad-hoc networks with the Internet“ This future project has been reviewed and accepted by VNUHCM
committee for the 24-month duration, and be intended to start within 2014
This project has also achieved over 100% the registered results In particular, there are 03 (three) papers published in the Proceedings of International Conferences (compared to the
no of registered papers: 02) Additionally, though there is no registration on the training results, we have also supervised 03 Bachelor students who have defended their Theses and passed with good results in 2013, and 01 Master student who will defend his Graduate Thesis in the near future (around the beginning of 2014)
Trang 6DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
AODV Ad-Hoc On-Demand Distance Vector Routing
DSDV Destination Sequence Distance Vector Routing
MID Multiple Interface Declaration
OLSR Optimized Link State Routing
Trang 7DANH MỤC CÁC BẢNG
BẢNG 1 Danh sách các cấu trúc dữ liệu, files và thư mục mã nguồn Linux tham khảo 25 BẢNG 2 Các cờ cho các tác vụ điều khiển fn_hash_insert() 34
Trang 8DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Hình 1 Một ứng dụng mạng MANET điển hình 8
Hình 2 Định dạng gói tin RREQ 15
Hình 3 Ví dụ quá trình tìm đường trong aodv 16
Hình 4 Ví dụ MPR trong olsr 17
Hình 5 Định dạng chung của các gói tin điều khiển olsr 18
Hình 6 Trao đổi gói tin HELLO giữa hai nốt láng giềng 19
Hình 7 Quá trình lựa chọn tập MPR Set 20
Hình 8 Quá trình trao đổi thông tin và cập nhật bảng tìm đường olsr 21
Hình 9 Giao tiếp giữa các giao thức và bảng tìm đường trong Linux 22
Hình 10 Thứ tự gọi hàm trong quá trình khởi động cơ chế tìm đường 26
Hình 11 Cơ chế gọi hàm với fib_netdev_event và fib_inetaddr_event 27
Hình 12 Cấu trúc và tổ chức bảng tìm đường trong Linux 30
Hình 13 Thứ tự tìm kiếm đường đi trên các bảng tìm đường 32
Hình 14 Sơ đồ các tác vụ luận lý hàm fn_hash_insert() 35
Hình 15 Sơ đồ gọi hàm trong fn_hash_insert() 36
Hình 16 Sơ đồ luận lý các tác vụ hàm fn_hash_delete() 37
Hình 17 Thao tác bảng tìm đường thông qua giao tiếp ioctl hoặc Netlink 38
Hình 18 Ví dụ sử dụng lệnh ip route monitor 39
Hình 19 Các tác vụ cơ bản của trình điều khiển card mạng không dây trong Linux 41
Hình 20 Kiến trúc thiết bị tìm đường không dây 42
Hình 21 Các netfilter hook trong linux cho giao thức IP 44
Hình 22 Cơ chế điều khiển gói tin trong giao thức AODV-UU 44
Hình 23 Cơ chế xử lý các gói điều khiển AODV-UU nhận được từ network driver 45
Hình 24 Cơ chế xử lý các gói tin điều khiển AODV-UU gởi đi 48
Hình 25 Tổng quan kiến trúc hiện thực olsrd 48
Hình 26 Cấu trúc socket parser 50
Hình 27 Cấu trúc plugin để thêm chức năng mới trong olsrd 51
Hình 28 Cấu hình callbacks của trình điều khiển thiết bị ath5k 52
Hình 29 Các gọi hàm của trình điều khiển ath5k để thay đổi mode hoạt động 53
Hình 30 Dòng nhận gói tin từ trình điều khiển ath5k đến mac80211 55
Hình 31 Dòng truyền gói tin từ mac80211 đến trình điều khiển ath5k 56
Hình 32 Mô hình mạng kiểm tra kết nối multihop dùng aodv-uu 57
Trang 9Hình 33 Xác lập ad-hoc mode của thiết bị định tuyến dùng iwconfig 58
Hình 34 Xác lập địa chỉ IP của thiết bị định tuyến dùng ifconfig 58
Hình 35 Thêm đường đi mới vào bảng định tuyến của thiết bị định tuyến A 58
Hình 36 Kết nối được thiết lập giữa hai thiết bị định tuyến được kiểm tra A và B 58
Hình 37 Thiết bị định tuyến A loại bỏ đường đi khỏi bảng tìm đường 59
Hình 38 Kết nối bị ngắt giữa hai thiết bị định tuyến A và B 59
Hình 39 Các đường đi mới được thêm vào bảng tìm đường của thiết bị định tuyến C 59
Hình 40 Kết nối multihop giữa thiết bị A và B được thiết lập lại qua thiết bị C 60
Hình 41 Menu cấu hình chế độ debugging/tracer cho trình điều khiển ath5k 61
Hình 42 Chế độ debugging được kích hoạt cho trình điều khiển ath5k 61
Hình 46 Dữ liệu log lại việc thay đổi chế mode hoạt động và xem với lệnh dmesg 62
Hình 44 Dòng nhận gói tin (reception path) 63
Hình 45 Dòng truyền gói tin (transmission path) 64
Hình 46 Trích xuất thông tin từ dòng nhận (RX Path) 65
Hình 50 Xác minh thông tin dòng nhận (RX Path) 65
Hình 48 Trích xuất thông tin từ dòng truyền (TX Path) 66
Hình 49 Xác minh thông tin dòng truyền (TX Path) 66
Trang 10CHƯƠNG 1 – GIỚI THIỆU ĐỀ TÀI 1.1 Tổng quan về đề tài
Mạng di động ad-hoc (MANET) đã thu hút được nhiều nghiên cứu sâu rộng từ nhiều năm qua nhờ đặc điểm đa chặng (multihop) và tự cấu hình (self-organized), dẫn đến việc mở ra một không gian ứng dụng mới Một mạng di động ad-hoc (MANET) được hình thành tự động bởi một tập hợp các nốt di động ad-hoc mà không cần bất kì cơ sở hạ tầng nào như mạng LAN không dây.Vì thế, ứng dụng chính của MANET là có thể thiết lập nhanh chóng các mạng không dây mà không cần cơ sở
hạ tầng đi kèm Dựa trên ưu điểm này, nó có thể được triển khai sâu rộng trong các ứng dụng công nghiệp, cứu hộ cứu nạn, hoặc quân sự Một vài ví dụ về ứng dụng đặc trưng của dạng mạng này như là cân bằng tải trong các lễ hội với số lượng người dùng mạng đột ngột tăng cao hoặc là hình thành nhanh chóng mạng liên lạc nội bộ giữa các nhóm cứu hộ trong các tình huống đặc biệt như
là động đất, cháy rừng, hoả hoạn…Hình 1 minh họa một ứng dụng mạng MANET điển hình
Event Area 01 Level_01 Highest Warning
(b) Hierarchical Topology Mapping
Fire
Fir e
Ex tin gu ish m
en t
Str an ge
Ob jec t
Event Area 02 Level_02 Lower Warning
(c) Top View of MANETs over Detected Event Areas
MANETs nodes
Sensors
Sensors Sensors
(a) Typical Applications: Firing Extinguishment and Strange Object Tracking
Hình 1 Một ứng dụng mạng MANET điển hình
Hình 1a là một ví dụ điển hình của mạng MANETs được thiết lập để cảnh báo hỏa hoạn hoặc sự xuất hiện của vật thể lạ Khi một sự kiện hình thành, các nốt phát hiện ra sẽ gửi thông tin về nốt
Trang 11nhận, nốt này sẽ hướng dẫn nhóm cứu hoả tiến vào khu vực cháy xác định nguồn gây cháy hoặc hướng dẫn các người lính theo dõi hoặc bắt giữ các đối tượng lạ Các nốt actor có nhiệm vụ tập trung dữ liệu, hướng dẫn các đối tượng di động (người lính), biểu diễn cho các MANET nốt, thâm nhập vào các vùng xảy sự kiện Ngoài ra, chúng còn đóng vai trò như là cầu nối để các nốt cảm ứng hoạt động với các đối tượng di động Ảnh ánh xạ cấu trúc liên kết mạng của loại ứng dụng đặc trưng này được thể hiện ở Hình 1b trong đó các đối tượng đi động là các nốt MANET, còn các actor là cầu nối trung gian để mạng cảm ứng không dây hoạt động với MANET Ảnh ánh xạ này thể hiện cấu trúc phân lớp trong đó MANET phủ lên trên mạng cảm biến không dây (WSN) Hình 1c thể hiện cái nhìn tổng quát của MANET trên toàn khu vực theo dõi sự kiện
Tuy nhiên, các nghiên cứu hiện nay về MANETs chủ yếu sử dụng các công cụ mô phỏng
(simulation/emulation) để phân tích và đánh giá kết quả Số lượng các nghiên cứu thực nghiệm
Do đó, hiện thực các thiết bị mạng MANET thường yêu cầu lập trình hệ thống ở cấp thấp, ví dụ như trình điều khiển thiết bị (device driver), truyền tải dữ liệu (packet forwarding), tìm đường (routing),…
Vì vậy, dự án này tiếp cận với việc thiết kế, hiện thực, và phát triển thiết bị mạng tìm đường không dây (Wireless Router), một thành phần cốt lõi trong mạng MANET Qua đó, mạng thử nghiệm MANET sẽ được triển khai để đánh giá thực nghiệm, vận hành hệ thống mạng Đây cũng
là tiền đề để phát triển các ứng dụng trên mạng MANET về sau Ngoài ra, việc hiện thực và phát triển Wireless Router trên nền hệ điều hành mã nguồn mở còn mang lại những lợi ích thiết thực cho cả người sử dụng đầu cuối và người phát triển hệ thống, ví dụ như các giảng viên và sinh viên Khoa CNTT Trường Đại học Quốc tế Cuối cùng, mạng MANET được triển khai sẽ có giá thành hợp lý, do các nốt mạng (Wireless Router) được thiết kế từ các PC/Laptop có gắn card mạng không dây nên sẽ rẻ hơn so với việc trang bị các Wireless Router chuyên dụng
1.2 Nội dung nghiên cứu
Đề tài này tập trung nghiên cứu các vấn đề liên quan đến:
Trang 12 Công nghệ mạng không dây Mobile Ad-Hoc Networks (MANETs)
Các giải thuật tìm đường trong mạng không dây MANETs
Công nghệ phát triển trình điều khiển thiết bị (device driver) cho các thiết bị card mạng không dây
Công nghệ phát triển thiết bị tìm đường không dây Wireless Router Sản phẩm cụ thể bao gồm việc nghiên cứu và phát triển thiết bị tìm đường không dây Wireless Router và phát triển hệ thống mạng MANET testbed dựa trên các thiết bị Wireless Router này
Nhằm làm chủ công nghệ, đề án đăt trọng tâm nghiên cứu và phát triển các phần mềm mã nguồn mở chạy trên nền hệ điều hành Linux, đặc biệt là các kỹ thuật được sử dụng trong Linux kernel để cập nhật bảng tìm đường (routing updates) và truyền tải dữ liệu (packet forwarding) Các kỹ thuật này sẽ được sử dụng để tích hợp và phát triển Wireless Router
Triển khai hệ thống mạng MANET testbed trong phòng máy để đánh giá sự vận hành của các Wireless Router
Phục vụ thí điểm cho công tác giảng dạy môn Computer Networks và Advanced Networking ở cả hai cấp bậc đào tạo Đại Học và Sau Đại Học tại Đại Học Quốc Tế: Việc tạo ra một môi trường mà chúng ta có thể cài đặt và vận hành Wireless Router trên đó tạo
ra điều kiện cho cả người phát triển hệ thống và người dùng cuối có cơ hội tiếp cận sâu hơn về hoạt động của mạng máy tính Thật vậy, giảng viên và sinh viên chuyên ngành CNTT có điều kiện để tìm hiểu hệ thống mạng dưới góc độ của người phát triển hệ thống
1.3 Phương pháp nghiên cứu
Nghiên cứu lý thuyết về công nghệ mạng Mobile Ad-hoc Networks (MANETs), và các
giải thuật tìm đường trong mạng MANETs theo nhiều cách tiếp cận khác nhau: i) tìm đường theo yêu cầu (re-active or on-demand routing), ii) tìm đường theo bảng (pro-active
or table routing), iii) tìm đường hỗn hợp (hybrid routing)
Nguyên cứu về các kỹ thuật cập nhật bảng tìm đường (routing updates) và truyền tải dữ
liệu (packet forwarding) được sử dụng trong nhân (kernel) của hệ điều hành Linux Tiếp
đó, hiện thực các giải thuật tìm đường trong mạng MANETs như là các chương trình nền
(daemons), liên kết với các cơ chế routing updates và packet forwarding trong nhân hệ
điều hành Linux
Trang 13 Nghiên cứu về quy trình phát triển và hiện thực trình điều khiển thiết bị (device driver) cho card mạng không dây trên nền tảng hệ điều hành mã nguồn mở Linux
Tích hợp các chức năng kể trên, bao gồm: i) MANET routing, ii) routing updates and
packet forwarding in Linux kernel, iii) device driver for wireless card, để tạo thành thiết bị
tìm đường không dây (Wireless Router) hoàn chỉnh
Hệ điều hành mã nguồn mở Linux được sử dụng trong quá trình phát triển và hiện thực Wireless Router vì các thư viện hàm cho các giao thức giao tiếp mạng đều được cung cấp miễn phí Điều này tạo điều kiện thuận lợi để dễ dàng hơn trong việc tích hợp các chức năng của Wireless Router vào Linux kernel, cũng như bảo trì thiết bị và hệ thống về sau Ngoài ra, việc cập nhật các chức năng mới của Wireless Router cũng dễ dàng hơn
Hiện nay, các công nghệ giao tiếp không dây như Wifi-IEEE 802.11, Bluetooth-IEEE 802.15.1, ZigBee-IEEE 802.15.4,…đang được sử dụng để hiện thực và triển khai mạng MANETs Trong phạm vi dự án này, công nghệ Wifi-IEEE 802.11 được chọn vì những lý do sau:
Wifi là một trong những công nghệ truy xuất đầu cuối không dây (wireless access
technology) phổ biến nhất hiện nay
Chuẩn wifi cũng cung cấp các dịch vụ truyền tải đa dữ liệu với chất lượng dịch vụ (quality
of service) khác nhau
Các thiết bị phần cứng phát triển theo chuẩn wifi rất phổ biến, phong phú va đa dạng
Do đó, trình điều khiển thiết bị (device driver) sẽ được nghiên cứu, phát triển và hiện thực cho các
card mạng không dây sử dụng chuẩn wifi-IEEE 802.11
1.4 Mục tiêu của đề tài
Nghiên cứu và phát triển các giải thuật tìm đường trong mạng không dây MANETs
Nghiên cứu cơ chế cập nhật bảng tìm đường (routing updates) và cơ chế truyền tải dữ liệu (packet forwarding) trong hệ điều hành Linux
Nghiên cứu và phát triển trình điều khiển thiết bị (device driver) cho card mạng không dây trong hệ điều hành Linux
Tích hợp và phát triển thiết bị tìm đường không dây (Wireless Router) dựa trên các giải thuật tìm đường trong mạng MANETs, sử dụng hệ điều hành Linux
Trang 141.5 Nội dung báo cáo
Chương 1 giới thiệu tổng quan, mục tiêu và các sản phẩm của đề tài Tổng quan lý thuyết liên quan đến công nghệ mạng thông tin di động ad-hoc (MANET), và các vấn đề nghiên cứu lý thuyết
sẽ được trình bày trong Chương 2 Chương 3 trình bày về kiến trúc của thiết bị tìm đường không dây (Wireless Router) Sản phẩm đề tài và kết quả được trình bày trong Chương 4 Chương 5 trình bày kết luận, địa chỉ ứng dụng, cũng như hướng phát triển của đề tài
Nghiên cứu này được tài trợ bởi Đại học Quốc gia Thành phố Hồ Chí Minh (VNU-HCM) trong đề
tài mã số B2012-28-11/HĐ-ĐHQT-QLKH
This research is funded by Vietnam National University HoChiMinh City (VNU-HCM) under
grant number B2012-28-11/HĐ-ĐHQT-QLKH
Trang 15CHƯƠNG 2 – NGHIÊN CỨU LÝ THUYẾT 2.1 Công nghệ mạng thông tin di động ad-hoc MANETs
Mobile Ad-hoc Network (MANET) là một công nghệ mạng không dây mới, là một trong những chủ đề nóng về mạng không dây đang được nghiên cứu hiện nay [1]-[2] MANET được thiết kế và triển khai trong các ứng dụng trong đó yêu cầu về hạ tầng mạng được triển khai nhanh chóng, bảo đảm giao tiếp giữa các thành viên trong hệ thống mạng với nhau, và giao tiếp với hệ thống thông tin bên ngoài MANET có một số đặc tính cơ bản như sau:
Infrastructureless MANET có thể được triển khai nhanh chóng, uyển chuyển mà
không cần đến hạ tầng mạng, ví dụ như không cần các trạm thu phát “Access Points” trong mạng Wifi, hay các trạm thu phát “Base Stations” trong mạng di động Cellular
Mobile Networks
Self-Oganized MANET có thể được triển khai một cách tự động, các nốt mạng sẽ tự dò tìm và thiết lập kết nối với nhau để bảo đảm giao tiếp, thông tin liên lạc
Multihop Kết nối giữa hai nốt mạng MANET có thế là trực tiếp – single hop (hai nốt
mạng ở trong vùng phủ song của nhau), có thể gián tiếp là gián tiếp – multihop (hai nốt
mạng không ở trong vùng phủ sóng của nhau, phải kết nối gián tiếp qua các nốt mạng trung gian khác)
Self-Healing Khi một kết nối giữa hai nốt mạng bị lỗi, hệ thống sẽ tự động dò tìm kết nối thay thế, bảo đảm vấn đề giao tiếp và thông tin liên lạc
Vì vậy, MANET có nhiều ứng dụng trong nhiều mặt của đời sống và xã hội Sau đây là một số ví
dụ cơ bản:
Triển khai hạ tầng mạng không dây nhanh chóng, bảo đảm vấn đề thông tin liên lạc trong các trường hợp cấp thiết như động đất, thiên tai, lũ lụt, cháy rừng, …
Triển khai hạ tầng mạng không dây tạm thời để bảo đảm vấn đề cân bằng tải
(load-balancing) khi số lượng thuê bao tăng đột biến tạm thời trong một khoảng thời gian
ngắn như hội chợ, triễn lãm
Triển khai hạ tầng mạng không dây, bảo đảm thông tin liên lạc giữa các thành viên trong cùng một nhóm, như liên lạc giữa các chiến sĩ bộ đội và phương tiện chiến đấu trên trận địa (ứng dụng trong quân đội), liên lạc giữa các lính chữa cháy (ứng dụng trong cứu hộ cứu nạn)
Trang 162.2 Các giao thức định tuyến trong mạng MANETs
Thiết kế một giải thuật tìm đường mới thường yêu cầu xem xét các ưu khuyết điểm của các giải pháp hiện có theo nhiều cách tiếp cận khác nhau Chúng tôi phân loại các giải thuật tìm đường hiện có trong mạng MANETs theo hai hướng:
Hoặc là dựa vào cơ chế tìm đường trong mạng MANETs: re-active, pro-active, hybrid
Hoặc là dựa vào kiến trúc mạng MANETs được tổ chức: flat, hierarchical
Trong giải thuật tìm đường theo bảng (pro-active or table-driven), mỗi nốt mạng sẽ cố gắng duy
trì việc cập nhật liên tục vào bảng tìm đường của nó thông tin đường đi đến tất cả các nốt mạng khác trong mạng Sau đó, định kỳ các nốt mạng sẽ trao đổi bảng tìm đường để duy trì tính nhất
quán và tối ưu về thông tin đường đi đến các nốt khác Vì vậy, ưu điểm của giải pháp pro-active
routing là thời gian thiết lập đường đi đến đích nhanh chóng Tuy nhiên, khuyết điểm của phương
pháp này là phí tổn về tài nguyên mạng như băng thông, do một số lượng lớn thông tin được truyền đi để cập nhật bảng tìm đường nếu kiến trúc mạng MANET có nhiều thay đồi (dynamic network topology) Một số giải thuật pro-active routing trong MANETs bao gồm destination-sequenced distance vector (DSDV) [6], optimized linked state routing (OLSR) [6]
Ngược lại, trong giải thuật tìm đường theo yêu cầu (re-active or on-demand), mỗi nốt mạng sẽ chỉ
thực hiện việc tìm đường đến nốt đích khi nốt này muốn gởi dữ liệu đến nốt đích Do đó, ưu điểm của phương pháp này là giảm phí tổn về tài nguyên mạng qua việc thông tin điều khiển để cập nhật tìm đường sẽ chỉ được gởi theo yêu cầu Tuy nhiên, thời gian thiết lập đường đi đến nốt đích
sẽ dài hơn Một số giải thuật re-active routing trong MANETs bao gồm ad-hoc on-demand distance vector (AODV) [6], dynamic source routing (DSR) [6]
Cuối cùng, trong giải thuật tìm đường hỗn hợp, mỗi nốt duy trì đồng thời thông tin tìm đường đến
tất cả các nốt khác trong cùng nhóm (a pro-active approach) và thông tin về các nhóm láng giềng (a re-active approach) Nếu nhóm đích thuộc một nhóm khác, re-active routing đầu tiên sẽ được
sử dụng để truyền dữ liệu đến nhóm mà nốt đích thuộc vào, sau đó pro-active routing sẽ được sử
dụng để truyền dữ liệu đến nốt đích
Do đặc điểm kỹ thuật, re-active routing và pro-active thường sử dụng kiến trúc mạng phẳng (flat) cho mạng MANET có kích thước vừa hoặc nhỏ Ngược lại, hybrid routing thường sử dụng kiến trúc mạng phân cấp (hierarchical) cho mạng MANET có kích thước lớn Một số giải thuật tìm
đường hỗn hợp trong MANETs bao gồm hybrid ad-hoc routing (HARP) Error! Reference source not found., zone routing protocol (ZRP) Error! Reference source not found
Trang 172.2.1 Giao Thức Tìm Đường Theo Yêu Cầu AODV
Ad-hoc On-demand Distance Vector (AODV) là một giao thức tìm đường theo yêu cầu trong mạng MANETs, tức là quá trình tìm đường tại một nốt chỉ được kích khởi khi có yêu cầu truyền gói tin đến đích AODV được phát triển từ giải thuật Bellman-Ford, nhưng có điều chỉnh để cập nhật đường đi khi các nốt di chuyển trong mạng Trong AODV, mỗi nốt đều duy trì một bảng tìm đường chứa thông tin nốt kế tiếp (next-hop) được sử dụng để gởi gói tin đến nốt đích Chỉ số tuần
tự (sequential number) được sử dụng để cập nhật thông tin đường đi mới nhất, cũng như tránh vòng lặp (loop) trong quá trình đường
Các gói tin điều khiển trong giao thức AODV bao gồm:
RREQ: Khi đường đi đến một nốt đích không có sẵn, một gói tin yêu cầu tìm đường (Route
Request-RREQ) được gởi đi trong toàn mạng để thực hiện quá trình tìm đường (route discovery) Hình 2 trình bày định dạng của gói tin RREQ
Hình 2 Định dạng gói tin RREQ RREP: Nếu một nốt nhận được gói tin RREQ, kiểm tra và nhận thấy hoặc chính nốt đó là nốt đích
trong gói tin, hoặc nốt đó có một đường đi đến nốt đích, nốt đó sẽ dùng gói tin hồi đáp (Route Reply-RREP) để thông báo đường đi đến nốt đích đến nốt nguồn
RERR: Khi một đường đi bị lỗi (down), mỗi nốt ở hai đầu của đường truyền (link) bị lỗi sẽ dùng
gói tin Route Error-RERR để thông báo các nốt khác trên đường đi về lỗi này
Quá trình tìm đường (Route discovery)
Quá trình tìm đường được khởi động tại nốt nguồn bằng cách tạo gói tin RREQ để gởi đi Đường
đi sẽ được thiết lập khi nốt nguồn nhận được gói tin hồi đáp RREP từ hoặc nốt đích hoặc các nốt trung gian khác có đường đi đến nốt đích Vì vậy, có khả năng là nốt nguồn sẽ nhận được nhiều
Trang 18số tuần tự (sequential number) cao nhất trong các gói tin RREP gởi trả lại, hoặc nếu chỉ số tuần tự bằng nhau, đường đi ngắn nhất sẽ được cập nhật
Đồng thời khi một nốt trung gian nhận được hoặc là gói tin RREQ, hoặc là gói tin RREP, thông tin về nốt trước đó gởi gói tin cũng được lưu lại, sử dụng để làm nốt kế tiếp (next-hop) tương ứng
để gởi gói tin hoặc đến nốt nguồn, hoặc đến nốt đích Hình 3 dưới đây minh họa quá trình tìm đường trong giao thức AODV
Xem xét mạng MANET như Hình 3a dưới đây Trong ví dụ này, nốt 1 muốn gởi gói tin đến nốt 7 Giả sử rằng trong bảng tìm đường (routing table) của tất cả các nốt, ngoại trừ nốt 6, chưa có đường đi đến nốt 7
(c)
(f)
Hình 3 Ví dụ quá trình tìm đường trong aodv
Nốt 1 sẽ gởi broadcast gói tin RREQ để thực hiện quá trình tìm đường như trong Hình 3b Nhận được gói tin RREQ, nốt 2 và nốt 4 kiểm tra bảng tìm đường và không có đường đi đến nốt 7 nên gia tăng hop-count và tiếp tục gởi broadcast gói tin RREQ như trong Hình 3c Trong trường hợp một nốt nhận được nhiều gói tin RREQ trùng nhau (duplicated RREQ), ví dụ như nốt 3 trong Hình 3c nhận được cùng RREQ gởi tới từ nốt 2 và nốt 4, hoặc nốt 6 trong Hình 3d nhận được RREQ gởi tới từ nốt 4 và nốt 5, các RREQ trùng nhau đến sau sẽ bị loại bỏ Gói tin RREQ cuối cùng đến được nốt 6 (biết đường đi đến nốt đích 7), nên nốt 6 sẽ gới trả lại gói tin hồi đáp RREP đến nốt nguồn 1 thông qua nốt 4 như trong Hình 3e, và nốt 4 sẽ tiếp tục chuyển (forward) gói tin RREP đến nốt nguồn 1
Kỹ thuận tìm kiếm “Expanding Ring Search”
Trong quá trình tìm đường, gói tin RREQ sẽ được gởi broadcast trong toàn mạng Điều này dẫn đến giải thuật tìm đường không thể áp dụng cho mạng MANET có số lượng nốt trong mạng lớn
Trang 19do hao tổn tài nguyên mạng cao Ngoài ra, nếu nốt đích nằm khá gần nốt nguồn, việc gởi broadcast gói tin RREQ trong toàn mạng là lãng phí Trong kỹ thuật tìm kiếm “Expanding Ring Search”, nốt nguồn gởi gói tin RREQ khởi động với trường time-to-live (TTL) bằng 1, nghĩa là chỉ tìm kiểm nốt đích trong các nốt láng giềng (neighbour node) Nếu nốt đích không tìm thấy, nốt nguồn sẽ gởi lại gói tin RREQ với TTL=2, và gia tăng TTL lên một trong mỗi vòng mà nốt đích không tìm thấy Thực tế sau 3 vòng mà nốt đích không tìm thấy, gói tin RREQ sẽ được gởi broadcast trong toàn bộ mạng
2.2.2 Giao Thức Tìm Đường Theo Bảng OLSR
Optimized Link State Routing (OLSR) là một giao thức tìm đường theo bảng (table-driven) được phát triển cho mạng MANET với trọng tâm giảm thiểu kích thước của gói tin điều khiển, cũng như giảm số lượng gói tin điều khiển được truyền trong mạng thông qua việc sử dụng các điểm chuyển tiếp (Multipoint Relays-MPR) Đối với một nốt mạng, các điểm chuyển tiếp MPR của nốt
đó được chọn chỉ trong số các nốt láng giềng trực tiếp (one-hop neighbor) của nốt đó sao cho khi một gói tin được gởi broadcast bởi nốt đó ra toàn mạng, chỉ riêng các điểm chuyển tiếp MPR của nốt đó bảo đảm gói tin sẽ gởi đến được tất cả các nốt ở khoảng cách 02 nốt tiếp theo (two-hop neighbor) Điều này sẽ giúp giảm được phí tổn gởi broadcast các gói tin điều khiển trong toàn mạng so với phương pháp flooding truyền thống Hình 4 dưới đây minh họa việc giảm phí tổn này So với tổng số lượng các gói tin được gởi broadcast rất nhiều trong Hình 4a, và rất nhiều gói tin được gởi trong số này là trùng lắp dẫn đến lãng phí, số lượng các gói tin được gởi trong Hình 4b được giảm thiểu đi rất nhiều nếu các điểm chuyển tiếp MPR (các nốt tô đen) được sử dụng
Hình 4 Ví dụ MPR trong olsr
Thông tin về kiến trúc mạng (network topology) trong giao thức OLSR được duy trì bằng cách trao đổi định kỳ các gói tin điều khiển để cập nhật thông tin về trạng thái đường truyền (link state) Hình 5 trình bày định dạng chung của gói tin điều khiển trong giao thức OLSR
Trang 20Hình 5 Định dạng chung của các gói tin điều khiển olsr
Trường kiểu gói tin (Message Type) trong Hình 5 xác định kiểu gói tin điều khiển tương ứng Dưới đây là thông tin về các gói tin điều khiển trong giao thức OLSR:
HELLO: được sử dụng để thực hiện các tác vụ như là kiểm tra đường truyền (link sensing), dò
tìm nốt láng giềng trực tiếp (neighbor detection), và lựa chọn các điểm chuyển tiếp MPR
Topology Control (TC): được sử dụng để cập nhật thông tin về kiến trúc mạng (network
topology) thông qua việc gởi các thông tin trạng thái đường (advertisement of link states) truyền trên toàn mạng
Multiple Interface Declaration (MID): được sử dụng để khai báo nhiều interface trên cùng một
nốt
2.2.2.1 Tìm nốt láng giềng (neighbor discovery) và lựa chọn điểm chuyển tiếp MPR
Tìm nốt láng giềng (neighbour discovery)
Việc xác định trạng thái các đường truyền (link) trong mạng MANET là một chiều (unidirectional) hoặc hai chiều (bidirectional) là cần thiết Trong giao thức OLSR, gói tin HELLO được gởi định kỳ để phục vụ việc tìm nốt láng giềng Khi một nốt nhận được gói tin HELLO từ
Trang 21một nốt láng giềng có gởi kèm theo địa chỉ của chính nốt đó, nốt đó cập nhật trạng thái đường truyền (link) đến nốt láng giềng gởi gói tin là hai chiều (bidirectional/symmetric) Hình 6 minh họa quá trình trao đổi gói tin HELLO giữa hai nốt láng giềng A và B
Hình 6 Trao đổi gói tin HELLO giữa hai nốt láng giềng Quá trình lựa chọn các điểm chuyển tiếp MPR
Thông tin mà một nốt nhận đươc trong quá trình tìm nốt láng giềng thông qua việc gởi/nhận định
kỳ các gói tin HELLO, cụ thể là các nốt láng giềng trực tiếp hai chiều (one-hop symmetric neighbor) và các nốt cách xa 2-hop (two-hop neighbor), sẽ được sử dụng để lựa chọn tập các điểm chuyển tiếp (MPR Set) Việc lựa chọn này sẽ chỉ lấy một số tối thiểu các nốt one-hop symmetric neighbors để đi đến được tất cả các nốt two-hop neighbors Hình 7 minh họa quá trình lựa chọn tập các nốt chuyển tiếp MPR Set
Thông tin kiến trúc mạng (network topology information)
Ngoài tập MPR Set, mỗi nốt trong mạng còn duy trì tập MS (MPR Selector) Set, bao gồm các nốt láng giềng trực tiếp khác đã chọn nốt đó làm điểm chuyển tiếp Thông tin về MS Set sẽ được chứa trong gói tin Topology Control (TC) và được gởi bởi tất cả các nốt trong mạng, hoặc định kỳ, hoặc khi có thay đổi trong tập MS Set do có thay đổi về trạng thái của đường truyền Tuy nhiên, các gói tin TC chỉ được gởi đi trong toàn mạng dùng các điểm chuyển tiếp MPRs Mỗi nốt trong mạng khi nhận được các gói tin TC sẽ trích ra các thông tin cần thiết để xây dựng kiến trúc mạng và tính toán, cập nhật bảng tìm đường (routing table) của chính nó
Trang 22Hình 7 Quá trình lựa chọn tập MPR Set 2.2.2.2 Tính toán đường đi (route calculation)
Mỗi nốt sẽ tính toán lại đường đi ngắn nhất mỗi khi có thay đổi thông tin trong các tập sau: tập các đường truyền (link set), tập các nốt láng giềng trực tiếp (one-hop neighbor), tập các nốt two-hop neighbor, kiến trúc mạng (topology set), và tập thông tin các giao tiếp mạng (multiple interface association information base) Thông tin về đường đi ngắn nhất mới nhất sau đó sẽ được cập nhật vào bảng tìm đường của mỗi nốt Hình 8 dưới đây minh họa quá trình trao đổi thông tin và cập nhật bảng tìm đường trong mạng MANET
Trang 23(a) (b) (c)
Hình 8 Quá trình trao đổi thông tin và cập nhật bảng tìm đường olsr
Hình 8a minh họa các tập MPR Set và MS Set của các nốt 1-7 xây dựng được trong kiến trúc mạng MANET gồm bảy nốt sau khi các nốt trong mạng đã trao đổi gói tin HELLO để có được thông tin về trạng thái đường truyền (link set), các nốt láng giềng trực tiếp (one-hop neighbor set),
và tập các nốt two-hop neighbor set Thông tin về MS Set sẽ được các nốt tiếp tục trao đổi với nhau thông qua việc gởi gói tin Topology Control (TC) để xây dựng kiến trúc mạng (network topology) ở mỗi nốt Hình 8b minh họa nốt 3 gởi broadcast gói tin TC đến các nốt láng giềng {2,
4, 5} nhưng chỉ có nốt 4 nằm trong MPR Set của nốt 3 là tiếp tục gởi tiếp broadcast gói tin TC của nốt 3 Quá trình re-broadcast gói tin TC của nốt 3 được tái tiếp tục chỉ với nốt 6, là nốt nằm trong MPR Set của nốt 4 Sau bước này, gói tin TC của nốt 3 đã được gởi đến tấc cả các nốt trên mạng Tương tự, trong Hình 8c, nốt 4 gởi broadcast gói tin TC đến các nốt láng giềng, và chỉ được re-broadcast bởi các nốt 3 và nốt 6 để gói tin TC đến được tất cả các nốt trong mạng Hình 8d minh họa gói tin TC của nốt 6 được gởi đến tất cả các nốt trong mạng
Khi mỗi nốt mạng nhận được các gói tin TC gởi đến từ tất cả các nốt khác trong mạng, ví dụ nốt 3 trong Hình 8e, thông tin về đường đi mới nhất sẽ được tính toán và cập nhật vào bảng tìm đường của nốt đó
2.3 Kỹ thuật cập nhật bảng tìm đường và chuyển tiếp gói tin trong mạng Linux
2.3.1 Nguồn cập nhật thông tin bảng tìm đường trong Linux
Trang 24Thông tin về đường đi có thể được cập nhật vào các bảng tìm đường (routing tables) trong nhân (kernel) của hệ điều hành Linux từ ba nguồn chính sau:
Cấu hình tĩnh dùng các lệnh như là ip route, route
Cấu hình động sử dụng các giao thức tìm đường (routing protocols) như là Border Gateway Protocol (BGP), Open Shortest Path First (OSPF), Ad-Hoc On-Demand Distance-Vector Routing (AODV), and Optimized Link-State Routing (OLSR) Những giao thức tìm đường này được hiện thực như là các quá trình (daemons) trong user-space
Các gói tin chuyển hướng ICMP (ICMP redirect messages) được nhận và xử lý bởi nhân Linux để cập nhật đường đi tối ưu
Trong phạm vi đề tài này, chúng tôi tập trung chủ yếu cho nguồn cấu hình động, tức là sử dụng các giao thức tìm đường trong mạng MANETs, như là AODV hay OLSR để cập nhật thông tin đường đi trong các bảng tìm đường trong nhân của hệ điều hành Linux Hình 9 dưới đây minh họa giao tiếp giữa các giao thức tìm đường trong user-space, và bảng tìm đường trong kernel-space của Linux
Hình 9 Giao tiếp giữa các giao thức và bảng tìm đường trong Linux
Mặc dầu các giao thức tìm đường hoạt động trong user-space, nhưng thông tin đường đi lại được cập nhật vào các bảng tìm đường trong nhân Linux Chính vì vậy mã nguồn khi hiện thực các giao
thức tìm đường cũng thường chia làm hai phần: i) phần độc lập với nền tảng hệ điều hành bên
Trang 25dưới, thông thường là phần về các cơ chế hoạt động của mỗi giao thức tìm đường, và ii) phần phụ
thuộc vào nền tảng hệ điều hành bên dưới, thông thường là phần về cập nhật thông tin đường đi vào các bảng tìm đường trong nhân hệ điều hành Đối với Linux, việc cập nhật thông tin tìm
đường có thể hiện thực dùng hoặc là giao tiếp truyền thống ioctl, hoặc là giao tiếp Netlink Giao tiếp Netlink có ưu điểm hơn so với giao tiếp ioctl ở chỗ cung cấp khả năng điều khiển hai chiều, ví
dụ như ngoài khả năng routing protocol daemons dùng Netlink để cập nhật thông tin đường đi vào
bảng tìm đường trong nhân hệ điều hành Linux như ioctl, khi nhân hệ điều hành Linux dò tìm
được những thay đổi trên card mạng NIC, nhân hệ điều hành Linux cũng có thể giao tiếp ngược lại
với ứng dụng trong user-space trên giao tiếp Netlink để có những tác vụ tương ứng
2.3.2 Cơ chế tìm đường hiện thực trong Linux
Phần này tập trung vào trình bày các nội dung sau:
Các cấu trúc dữ liệu chính được dùng trong hệ thống tìm đường trong Linux
Cơ chế tìm đường được khởi động như thế nào trong Linux? Các sự kiện nào (external events) hệ thống tìm đường cần để giữ thông tin tìm đường cập nhật?
Cấu trúc của bảng tìm đường (routing table), và cơ chế tìm đường (routing lookup)
2.3.2.1 Các cấu trúc dữ liệu chính (Main data structures)
Mã nguồn định tuyến (routing code) sử dụng một số lượng lớn các cấu trúc dữ liệu khác nhau, đồng thời các cấu trúc dữ liệu này tham khảo lẫn nhau Để hiểu được mã nguồn định tuyến hiện tại
và những cải tiến trong tương lai, điều quan trọng là tìm hiểu rõ các tham khảo lẫn nhau này Phần dưới đây trình bày và giải thích các cấu trúc dữ liệu chính được định nghĩa (defined) và sử dụng trong mã nguồn định tuyến của nhân hệ điều hành Linux Hình 12 trong Phần 2.3.2.3 về hoạt động của bảng tìm đường sẽ minh họa rõ hơn việc sử dụng của các cấu trúc dữ liệu này
struct fib_result
Cấu trúc được trả về bởi một tìm kiếm (lookup) trong bảng tìm đường Các nội dung không chỉ gồm nốt kế tiếp (next-hop), mà còn bao gồm các thông số cần thiết khác, ví dụ, chính sách định tuyến
struct fib_node
Một mục (entry) bảng tìm đường, là cấu trúc dữ liệu được sử dụng để lưu trữ các thông tin được tạo ra
Trang 26struct fn_zone
Một vùng (zone) biểu diễn cho một tập hợp các đường đi có cùng chiều dài mặt nạ mạng (netmask) Bởi vì netmask là một giá trị 32-bit (IPv4), do đo có 33 zone cho mỗi bảng tìm đường Như vậy, đường đi đến mạng con 10.0.1.0/24 và 10.0.2.0/24 sẽ đi vào 24-bit zone list (25th zone),
và tuyến đường đến 10.0.3.128/25 mạng con sẽ đi vào khu vực 25-bit zone list (26th zone)
struct fib_table
Cấu trúc dữ liệu của bảng tìm đường
struct fib_info
Một số thông số có thể được chia sẻ giữa các mục (entry) khác nhau trong bảng tìm đường Những
thông số này được lưu trữ trong cấu trúc dữ liệu fib_info Khi các thông số được sử dụng bởi một routing entry mới trùng với các thông số của các routing entries hiện hữu khác, cấu trúc fib_info
trong các routing entries hiện hữu này sẽ được chia sẻ cho routing entry mới
struct fib_alias
Các đường đi đến cùng mạng đích nhưng khác nhau về thông số, ví dụ như kiểu dịch vụ (type of
service-TOS) sử dụng trường fib_alias để phân biệt
struct fib_nh
Cấu trúc dữ liệu của nốt kế tiếp (next-hop) Nếu một đường đi được tạo ra với lệnh ip route, ví dụ như: ip route add 10.0.0.0/24 scope global nexthop via 192.168.1.1, nốt kế tiếp sẽ là 192.168.1.1
struct fn_hash
Chứa các con trỏ (pointers) tham khảo đến các đầu (head) của 33 danh sách fn_zone, và một danh
sách liên kết các vùng hoạt động (active zones) với nhau
Danh sách (Lists) và Bảng Băm (Hash Tables)
Hai cấu trúc dữ liệu tổng quan khác cũng được sử dụng bởi mã nguồn định tuyến trong bảng tìm đường, bao gồm:
hlist_head
hlist_node
Trang 27Bảng băm (hash table) được hiện thực với hai loại cấu trúc dữ liệu trên Đầu (head) của bảng băm
được định nghĩa là bởi hlist_head, và các phần tử được thêm vào bảng băm sử dụng cáu trúc dữ liệu hlist_node Thông tin chi tiết hơn về các cấu trúc dữ liệu này được định nghĩa trong file:
include/linux/list.h., bao gồm cả các hàm thao tác cơ bản như: add, remove, browse, …
Bảng 1 dưới đây trình bày tóm tắt phân bố của các cấu trúc dữ liệu, files, và thư mục mã nguồn trong nhân hệ điều hành Linux để tham khảo
BẢNG 1 Danh sách các cấu trúc dữ liệu, files và thư mục mã nguồn Linux tham khảo
1 /usr/src/linux-x.x.x/include/linux/in_route.h
2 /usr/src/linux-x.x.x/include/linux/route.h struct rtentry
3 /usr/src/linux-x.x.x/include/linux/mroute.h
4 /usr/src/linux-x.x.x/include/net/ip_fib.h struct fib_info, struct fib_result, struct
fib_table, struct fib_nh
5 /usr/src/linux-x.x.x/include/net/route.h struct rtable, struct ip_rt_acct, struct
rt_cache_stat
6 /usr/src/linux-x.x.x/include/net/dst.h struct dst_entry, struct dst_ops
7 /usr/src/linux-x.x.x/include/net/flow.h struct flowi
8 /usr/src/linux-x.x.x/include/net/inetpeer.h struct inet_peer
2.3.2.2 Quá trình khởi động hệ thống tìm đường (Routing subsystem initialization)
Quá trình khởi động hệ thống tìm đường bắt đầu với hàm ip_rt_init() được định nghĩa trong file
net/ipv4/route.c, và hàm ip_rt_init() được gọi trong hàm ip_init() trong file net/ipv4/ip_output.c
trong lúc khởi động (boot time) Khi hàm ip_rt_init() được gọi, mã nguồn định tuyến IPv4 sẽ khởi
động các cấu trúc dữ liệu và biến toàn cục Hình 10 dưới đây trình bày thứ tự gọi hàm trong quá trình khởi động cơ chế tìm đường Hai hàm quan trọng trong quá trình khởi động này bao gồm:
Trang 28Hình 10 Thứ tự gọi hàm trong quá trình khởi động cơ chế tìm đường
ip_fib_init
Khởi động các bảng tìm đường ngầm định (default routing tables) và đăng ký hai điều khiển
(handlers) với hai chuỗi thông báo (notification chains) tương ứng: i) điều khiển fib_netdev_event với chuỗi thông báo netdev_chain cho các sự kiện thay đổi trạng thái thiết bị mạng, ví dụ như card mạng; và ii) điều khiển fib_inetaddr_event với chuỗi thông báo inetaddr_chain cho các sự kiện
thay đổi trong cấu hình IP
devinet_init
Đăng ký các điều khiển tương ứng với các lệnh cấu hình địa chỉ và đường đi, ví dụ như ip route,
ip addr,… thông qua giao tiếp Netlink, cũng như tạo các thư mục /proc/sys/net/conf, /proc/sys/net/conf/default
Các bảng tìm đường (routing tables) được khởi động bằng cách gọi hàm fib_hash_init(), được hiện thực trong file net/ipv4/fib_hash.c Hàm fib_hash_init() được gọi từ hàm ip_fib_init() để khởi tạo các bảng tìm đường ip_fib_main_table và ip_fib_local_table, đồng thời cũng tạo ra vùng bộ nhớ
fn_hash_kmem được sử dụng để cấp cho các cấu trúc dữ liệu fib_node Ngoài ra, nếu chính sách
định tuyến (policy routing) được dùng (không nằm trong phạm vi đề tài này), policy routing sẽ
được khởi động bằng cách gọi hàm fib_rules_init() được hiện thực trong file net/ipv4/fib_rules.c Quá trình khởi động policy routing chỉ đăng ký điều khiển fib_rules_event vào chuỗi thông báo (notification chain) netdev_chain
Trong phần dưới đây chúng tôi trình bày rõ hơn về các sự kiện chính (main events) được gởi đi
khi có thay đổi: i) hoặc là trong cấu hình IP, và ii) hoặc là trong trạng thái thiết bị mạng
Thay đổi trong cấu hình IP (Changes in IP configuration)
Trang 29Khi có thay đổi trong cấu hình IP của một thiết bị, cơ chế tìm đường nhận được một thông báo và
xử lý thông báo này thông qua điều khiển fib_inetaddr_event Hình 11 trình bày các tác vụ được
xử lý tương ứng Các sự kiện chính bao gồm:
NETDEV_UP
Một địa chỉ IP mới đã được cấu hình trên một thiết bị cục bộ, và chương trình điều khiển (handler)
tương ứng phải thêm vào các đường đi cần thiết vào bảng tìm đường cục bộ ip_fib_local_table Hàm xứ lý tương ứng là fib_add_ifaddr()
NETDEV_DOWN
Một địa chỉ IP đã được loại bỏ trên một thiết bị cục bộ, và chương trình điều khiển (handler) tương
ứng phải loại bỏ các đường đi tương ứng được thêm vào bởi sự kiện NETDEV_UP trước đó Hàm
xứ lý tương ứng là fib_del_ifaddr()
Hình 11 Cơ chế gọi hàm với fib_netdev_event và fib_inetaddr_event
Thay đổi trong trạng thái thiết bị (Changes in device status)
Khi một thiết bị thay đổi trạng thái hay cấu hình (ngoài cấu hình IP), hệ thống tìm đường nhận
được một thông báo tương ứng và điều khiển thông qua fib_netdev_event Hình 11 trình bày các
Trang 30NETDEV_UNREGISTER
Khi một thiết bị không đăng ký nữa (unregistered), tất cả đường đi tương ứng dùng thiết bị này được loại bỏ khỏi các bảng tìm đường
NETDEV_DOWN
Khi một thiết bị down, tất cả đường đi tương ứng dùng thiết bị này được loại bỏ khỏi các bảng tìm
đường với hàm fib_disable_ip()
NETDEV_UP
Khi một thiết bị up, tất cả các mục đường đi (routing entries) cho tất cả các địa chỉ IP của thiết bị
này phải được thêm vào bảng tìm đường cục bộ ip_fib_local_table Điều này được thực hiện thông qua việc gọi hàm fib_add_ifaddr() cho mỗi địa chỉ IP được cấu hình trên thiết bị
NETDEV_CHANGE
Khi thay đổi cấu hình của một thiết bị, bộ nhớ tạm thời cho bảng tìm đường (routing table cache) được flush, ví dụ như thay đổi kích thước gói tin cho phép truyền (Maximum Transmission Unit-
MTU)
2.3.2.3 Cấu trúc các bảng tìm đường (Routing tables) trong nhân hệ điều hành Linux
Phần này mô tả cấu trúc các bảng tìm đường trong Linux, cũng như miêu tả chi tiết hơn cơ chế truy xuất đường đi (route lookup) thông qua việc mô tả làm cách nào mà các cấu trúc dữ liệu dùng
để tạo ra bảng tìm đường có thể được truy xuất nhanh chóng qua việc sử dụng các bảng băm (hash table) Hệ điều hành Linux định nghĩa một số các loại bảng băm khác nhau trỏ đến cùng các cấu trúc dữ liệu của bảng tìm đường để phục vụ nhanh chóng cho các tác vụ tìm khác nhau, cụ thể như sau:
Một tập hợp các bảng băm cho phép truy xuất đường đi dựa trên chiều dài mặt nạ mạng (netmask length)
Một tập hợp các bảng băm cho phép tìm kiếm trực tiếp các cấu trúc dữ liệu fib_info
Một bảng băm dùng chỉ mục dựa trên thiết bị mạng được sử dụng để tìm kiếm nhanh chóng các nốt kế tiếp (next-hop) trên các đường đi đã được cấu hình
Một bảng băm dùng chỉ mục dựa trên đường đi (route) và thiết bị (device) được sử dụng để tìm kiếm nhanh chóng gateway được dụng cho nốt kế tiếp của đường đi
Trang 31Trong phạm vi đề tài này, chúng tôi giới hạn miêu tả chi tiết về tập hợp các bảng băm cho phép truy xuất đường đi dựa trên chiều dài mặt nạ mạng (netmask length) Trong trường hợp với IPv4
sẽ có 33 chiều dài mặt nạ mạng khác nhau do IPv4 sử dụng địa chỉ 32-bit, thay đổi từ /0 đến /32 với /0 biểu diễn các đường đi ngầm định (default routes), có thể kết hợp với một địa chỉ IP Hệ
thống tìm đường sẽ duy trì một bảng băm khác nhau cho mỗi mặt nạ mạng Các bảng băm này sau
đó được kết hợp vào các bảng khác để cấu trúc và tổ chức nên hệ thống bảng tìm đường trong nhân hệ điều hành Linux, như miêu tả trong Hình 12
Các bảng tìm đường được miêu tả với các cấu trúc dữ liệu fib_table Mỗi cấu trúc fib_table bao
gồm một véc-tơ gồm 33 con trỏ, trong đó mỗi con trỏ tương ứng với mỗi mặt nạ mạng và trỏ đến
một cấu trúc dữ liệu kiểu fn_zone Thuật ngữ zone đề cập đến các mạng chia sẻ một mặt nạ mạng duy nhất Các cấu trúc fn_zone tổ chức các đường đi vào các bảng băm, vì vậy các đường đi dẫn
đến các mạng đích với cùng chiều dài mặt nạ mạng chia sẻ cùng một bảng băm Vì vậy, cho bất kỳ một đường đi nào, bảng băm liên quan của đường đi đó có thể nhanh chóng xác định bởi chiều dài
mặt nạ mạng của đường đi Các cấu trúc fn_zone không trống sẽ được liên kết với nhau, và đầu danh sách được lưu trong cấu trúc fn_zone_list Có một ngoại lệ là bảng băm cho zone /0 (được sử
dụng cho các đường đi mặc định) chỉ bao gồm một cấu trúc duy nhất Điều này là do một nốt hiếm khi duy trì nhiều đường đi ngầm định
Các đường đi được mô tả bởi một sự kết hợp của các cấu trúc dữ liệu khác nhau, mỗi cấu trúc biểu diễn cho một phần thông tin khác nhau Các thông tin định nghĩa một đường đi được chia nhỏ thành nhiều cấu trúc dữ liệu khác nhau bởi vì nhiều đường đi chỉ khác nhau ở một vài cáu trúc dữ liệu nhỏ này, và do đó, hệ thống định tuyến làm cho phép chia sẻ thông tin giữa các đường đi tương tự nhau, tách riêng các chức năng riêng biệt, và định nghĩa rõ ràng hơn các giao tiếp giữa các chức năng này
Trang 32Hình 12 Cấu trúc và tổ chức bảng tìm đường trong Linux
Trang 33Mỗi mạng con duy nhất (unique subnet) sẽ tương ứng với một cấu trúc dữ liệu fib_node và được nhận dạng thông qua biến fn_key Ví dụ, giá trị biến fn_key sẽ là 10.1.1 với mạng con 10.1.1.0/24 Chú ý là một cấu trúc dữ liệu fib_node được kết hợp với một mạng con chứ không phải là một
đường đi do nhiều đường đi khác nhau có thể có cùng subnet Trong trường hợp này, các đường đi
khác nhau này có thể chia sẻ cũng một cấu trúc dữ liệu fib_node Ví dụ trong trường hợp các
đường đi khác nhau dẫn đến cùng một mạng đích và các đường đi này chỉ khác nhau trong các giá
trị TOS, mỗi cấu trúc dữ liệu fib_alias sẽ được gán đến một giá trị TOS khác nhau, trong đó cấu trúc dữ liệu fib_alias sẽ được kết hợp với cấu trúc dữ liệu fib_info để lưu trữ thông tin về mỗi đường đi tương ứng Sự kết hợp giữa fib_alias và fib_info không phải là kết hợp 1-1, mà nhiều cấu trúc fib_alias có thể chia sẻ một cấu trúc fib_info Trong trường hợp một cấu trúc fib_info được kết hợp với nhiều cấu trúc fib_alias cho các đường đi khác nhau, danh sách các cấu trúc fib_alias kết hợp với cấu trúc fib_info này được sắp xếp theo thứ tự tăng dần của trường fa_tos (IP TOS) của cấu trúc fib_alias Nếu các cấu trúc fib_alias có cùng trường fa_tos, các cấu trúc fib_alias này
sẽ được sắp xếp theo thứ tự tăng dần của trường fib_protocol của cấu trúc fib_info Ngoài ra, trong cấu trúc fib_info có một biến fib_treeref để đếm số đường đi khác nhau tham khảo đến cấu trúc
fib_info này
Hình 12 cũng trình bày một ví dụ miêu tả mối quan hệ giữa các cấu trúc dữ liệu nên trên, cụ thể như sau:
Có tổng cộng 04 đường đi khác nhau thể hiện qua bốn cấu trúc fib_alias
Bốn đường đi khác nhau ở trên dẫn đến ba mạng con khác nhau do có ba cấu trúc
fib_node Điều này cũng có nghĩa là có hai đường đi khác nhau dẫn đến cùng một mạng
đích, do đó sẽ có hai cấu trúc fib_alias chia sẻ chung một cấu trúc fib_node
Hai trong bốn đường đi ở trên chia sẻ cùng nốt kế tiếp (next-hop), và do đó, hai trường
fa_info trong hai cấu trúc fib_alias của hai đường đi này sẽ trỏ đến cùng một cấu trúc fib_info ở góc dưới phải của Hình 12
Kích thước của mỗi bảng băm (hash table) trong 33 bảng băm, được trỏ đến bởi fz_hash, được gia tăng khi số mục (entry) trong bảng, được lưu trong fz_divisor, vượt quá hai lần số phần tử (bucket)
của bảng Điều này cho phép giảm thời gian tìm kiếm đường đi trong bảng Kích thước tối đa của một bảng được tính toán từ các thông số quản lý bộ nhớ, và các thông số này phục thuộc vào kiến
trúc thiết bị Ví dụ trên kiến trúc i386, kích thước tối đa của mỗi bảng băm này là 8MB Do mỗi
phần tử của bảng băm chứa một con trỏ có kích thước 4 bytes trên bộ vi xử lý 32-bit, một hệ thống
i386 có thể hỗ trợ một bảng băm chứa đến hơn 2 triệu phần tử (buckets)
Trang 34Khi mỗi bảng băm lần đầu được tài ra thông qua gọi hàm fn_new_zone(), kích thước ngầm định của bảng là 16 phần tử (ngoại trừ trường hợp /0 zone dành cho các đường đi ngầm định) Trong
hai lần gia tăng kích thước đầu tiên, kích thước của bảng băm sẽ được gia tăng tương ứng là 256,
và 1024 Trong các lần gia tăng kích thước tiếp theo, kích thước bảng băm sẽ được tăng gấp đôi Trong trường hợp số phần tử trong bảng băm giảm xuống, kích thước của bảng băm được giữ nguyên không thay đổi
Các bảng tìm đường ngầm định: ip_fib_main_table, và ip_fib_local_table
Có hai bảng tìm đường luôn được tạo ra trong quá trình khởi động Với ip_fib_local_table, nhân
(kernel) hệ điều hành Linux sẽ cài đặt các đường đi từ các địa chỉ cục bộ vào bảng tìm đường này, bao gồm cả địa chỉ mạng (subnet address) và địa chỉ broadcast (subnet broadcast address) Nội dung bảng tìm đường này không được cấu hình và thay đổi trực tiếp được bởi người dùng Với
ip_fib_main_table ,tất cả các đường đi còn lại, bao gồm các đường đi cấu hình tĩnh bởi người
dùng, hay các đường đi cấu hình động thông qua các giao thức tìm đường sẽ được cài đặt vào bảng tìm đường này
Thứ tự tìm kiếm đường đi (routing lookup) được thực hiện trên các bảng tìm đường theo thứ tự sau như trong Hình 13 dưới đây
Hình 13 Thứ tự tìm kiếm đường đi trên các bảng tìm đường Cập nhật đường đi (Adding and removing routes)
Trang 35Nội dung các bảng tìm đường trong Linux có thể được cấu hình động thông qua các giao thức tìm
đường tương ứng, và cụ thể là hai hàm fn_hash_insert() và fn_hash_delete() sẽ được gọi cho hai
tác vụ thêm đường đi (adding route) và xóa đường đi (removing route) trong bảng tìm đường Các tác vụ cơ bản sau sẽ được thực hiện liên quan đến việc gọi hai hàm trên:
Với mỗi đường đi được thêm vào hay xóa đi, khóa tìm kiếm (search key) tương ứng sẽ
được dẫn ra, và khóa này sẽ được sử dụng để tìm kiếm các cấu trúc fib_node và fib_alias
tương ứng Việc tìm kiếm này để kiểm tra xem liệu đường đi thêm vào có trùng lắp với một đường đi khác đã có trong bảng tìm đường, hoặc là đường đi muốn xóa có tồn tại trong bảng tìm đường hay không
Cập nhật thông tin vào các cấu trúc dữ liệu liên quan với đường đi được thêm vào, hoặc đường đi bị xóa đi, trong các bảng băm tương ứng của cấu trúc các bảng tìm đường
Flush bộ nhớ tạm thời (routing cache) nếu cần thiết
Kích hoạt thông báo thông qua giao tiếp Netlink đến các listeners đăng ký về việc thêm vào, hay xóa đi đường đi tương ứng Một ví dụ cho các listeners đăng ký là các dịch vụ giao thức tìm đường (routing daemons) Một ví dụ cho loại thông báo qua giao tiếp Netlink
là RTM_NEWROUTE khi một đường đi mới được thêm vào bảng tìm đường
Thêm đường đi (adding a route) vào bảng tìm đường
Việc thêm một đường đi mới vào bảng tìm đường được thực hiện thông qua gọi hàm
fn_hash_insert() Hàm fn_hash_insert() sẽ thực hiện các tác vụ điều khiển tương ứng như nối
thêm vào sau (appending), nối thêm vào trước (prepending), thay đổi (changing), hoặc thay thể (replacing) Sơ đồ luận lý logic và các hàm được gọi tương ứng trong các tác vụ điều khiển của
hàm fn_hash_insert() được trình bày tương ứng trong các Hình 14 và Hình 15 Các tác vụ điều khiển khác nhau của hàm fn_hash_insert() sẽ được phân biệt dựa vào các cờ NLM_F_XXX trong
Bảng 2
Chú ý là các đường đi khác nhau với các giá trị TOS khác nhau có thể có cùng đích đến, và do đó, nhân hệ điều hành sẽ trả lại lỗi nếu một đường đi mới được thêm vào trong khi đã tồn tại một đường đi tương ứng có cùng đích đến và giá trị TOS Ngoài ra, việc thêm vào một đường đi mới
có thể kích khởi việc gia tăng kích thước bảng băm thông qua việc gọi hàm fn_rehash_zone() Khi
một đường đi mới thay thế cho một đường đi cũ, nhân hệ điều hành cũng flush bộ nhớ tạm thời
routing cache Và cuối cùng, thông báo RTM_NEWROUTE qua giao tiếp Netlink sẽ được gởi đến
các listeners đăng ký để cập nhật thông tin
Trang 36BẢNG 2 Các cờ cho các tác vụ điều khiển fn_hash_insert()
NLM_F_CREATE NLM_F_REPLACE
inet_rtm_newroute
NLM_F_CREATE NLM_F_APPEND
inet_rtm_newroute