2.7.1. Tổng quan về giao thức
AODV (Ad hoc On-Demand Distance Vector) về cơ bản là sự kết hợp của DSR và DSDV. AODV sử dụng cơ chế phát hiện tuyến quảng bá như sử dụng trong thuật toán định tuyến nguồn động DSR. Tuy nhiên, thay vì định tuyến nguồn,
AODV dựa vào bảng định tuyến tạo lập động lưu trữ ở các nút mạng trung gian. Sự khác biệt này tạo thành công trong các mạng có nhiều nút mạng, khi overhead lớn hơn được mang trong mỗi gói dữ liệu. Để duy trì phần lớn thông tin định tuyến mới giữa các nút mạng, AODV sử dụng số tuần tự đích như trong thuật toán DSDV .
Tuy nhiên, không giống DSDV, mỗi nút mạng Ad hoc duy trì một bộ đếm số tuần tự ra tăng đều đặn được sử dụng để thay thế các tuyến đệm cũ. Việc kết hợp các kĩ thuật này tạo ra thuật toán AODV những hiệu quả nhất định trong việc sử dụng độ rộng băng. Điều này đáp ứng cho sự thay đổi tôpô mạng và đảm bảo định tuyến lặp tự do.
Thuật toán AODV có thể biến đổi động, tự khởi động, định tuyến đa bước giữa các nút di động đang muốn thiết lập và duy trì mạng Ad hoc. AODV cho phép các nút di động có những tuyến một cách nhanh chóng để tới đích và không yêu cầu các nút mạng duy trì các tuyến tới các đích mà không ở trong hoạt động truyền thông. AODV cho phép các nút mạng di động trả lời các gói kết nối và thay đổi tôpô mạng. Hoạt động của AODV là lặp tự do và bằng cách ngăn ngừa vấn đề “tăng đến vô cùng” Bellman-Ford để cung cấp sự hội tụ nhanh khi tôpô mạng Ad hoc thay đổi.
2.7.2. Hoạt động của AODV
AODV định nghĩa các loại thông báo sau: Route Requests (RREQs), Route Replies (RREPs), Route Errors (RERRs). Một nút mạng gửi một yêu cầu RREQ khi nó cần một tuyến tới đích và bản thân nó không có sẵn tuyến. Điều này có thể xảy ra nếu nút mạng đích đã được biết trước hoặc nếu tuyến có hiệu lực tới đích trước đấy hết hiệu lực hoặc bị đánh dấu là vô hiệu lực.
Một nút mạng tạo một RREP nếu bản thân nó là nút đích hoặc nếu nó là một tuyến hoạt động tới đích, số tuần tự đích trong phần lưu trữ bảng định tuyến đang tồn tại của nút cho nút đích là có hiệu lực và lớn hơn hoặc bằng số tuần tự đích của RREQ và cờ “chỉ đích” không được thiết lập. Khi tạo thông báo RREP, nút mạng sẽ sao chép địa chỉ IP đích và số tuần tự đích gốc từ thông báo RREQ trong trường tương ứng trong thông báo RREP. Việc xử lý là khác nhau phụ thuộc vào nút mạng đích được yêu cầu chính là nó hay không hoặc thay thế nếu nó là một nút trung gian
với một tuyến mới tới đích. Khi một kết nối bị gián đoạn trong tuyến hoạt động được phát hiện thì thông báo RERR được sử dụng để thông báo cho những nút mạng khác biết việc mất kết nối này đã xảy ra. Thông báo RERR chỉ thị những đích khác mà không tìm thấy kết nối bị gián đoạn nữa.
2.7.2.1. Duy trì các số tuần tự
Mọi phần lưu trữ bảng định tuyến ở mỗi nút mạng phải bao gồm thông tin sẵn có mới nhất về số tuần tự để địa chỉ IP của nút đích cho phần lưu trữ bảng định tuyến được duy trì. Số tuần tự này được gọi là số tuần tự đích. Nó được cập nhật bất cứ khi nào một nút mạng nhận được thông tin mới về số tuần tự từ thông báo RREQ, RREP, RERR mà có thể được nhận liên quan tới đích. AODV phụ thuộc vào mỗi nút mạng để có và duy trì số tuần tự đích của nó, bảo đảm việc lặp tự do tất cả các nút mạng hướng tới đích này. Một nút mạng đích tăng số tuần tự của nó trong hai trường hợp sau:
- Ngay lập tức trước khi một nút khởi tạo một phát hiện tuyến, nó phải tăng số tuần tự của mình. Điều này ngăn những xung đột khi thành lập các tuyến ngược hướng tới nút phát sinh ra RREQ trước đấy.
- Ngay lập tức trước khi nút mạng đích khởi tạo RREP để trả lời RREQ, nó phải cập nhật số tuần tự của nó là số lớn nhất của số tuần tự hiện tại và số tuần tự đích trong gói RREQ.
Để chắc chắn rằng thông tin về đích là không bị lỗi thời, nút mạng so sánh giá trị bằng số hiện tại của nó cho số tuần tự với giá trị đã có được từ thông báo AODV đến. So sánh này phải được sử dụng số 32 bit có dấu. Nếu kết quả của việc trừ số tuần tự được lưu trữ hiện tại từ giá trị của số tuần tự đến bé hơn 0 thì thông tin liên quan tới đích này trong thông báo AODV phải được loại bỏ bởi vì thông tin này đã trở nên lỗi thời so với thông tin lưu trữ hiện tại của nút mạng này.
Chỉ trường hợp khác trong nút mạng có thể thay đổi số tuần tự đích một trong số phần lưu trữ bảng định tuyến của nó là phản ứng lại liên kết bị mất hoặc không còn hiệu lực tới bước tiếp theo hướng tới đích. Nút mạng này sẽ quyết định những đích sử dụng bước tiếp theo riêng biệt bằng cách tra cứu bảng định tuyến. Trong
trường hợp này, với mỗi đích sử dụng bước tiếp theo, nút mạng tăng số tuần tự và đánh dấu tuyến khi không có hiệu lực. Mỗi khi thông tin định tuyến mới đầy đủ cho đích bị ảnh hưởng được nhận bởi một nút mạng được đánh dấu trong phần lưu trữ bảng định tuyến là vô hiệu lực thì nút mạng này sẽ cập nhật thông tin bảng định tuyến theo thông tin được chứa trong phần cập nhật.
Một nút có thể thay đổi số tuần tự trong phần lưu trữ bảng định tuyến của một nút mạng đích chỉ nếu thỏa mãn một trong các điều kiện sau:
- Nút mạng này chính là nút mạng đích và đưa ra một tuyến mới tới nó.
- Nút mạng này nhận một thông báo AODV với thông tin mới về số tuần tự cho một nút đích.
- Đường truyền tới nút đích bị mất hiệu lực hoặc bị gián đoạn.
AODV là một giao thức định tuyến và AODV phải đối phó với vấn đề quản lý bảng định tuyến. Thông tin bảng định tuyến phải được giữ với các tuyến ngắn nhất tồn tại như được tạo để những tuyến đảo ngược được lưu trữ tạm thời hướng tới những nút mạng mà khởi tạo RREQ.
2.7.2.2. Quản lý bảng định tuyến
Ngoài số tuần tự nguồn và đích, các thông tin hữu ích khác cũng được lưu trữ trong phần lưu trữ bảng định tuyến và được gọi là trạng thái mềm kết hợp với phần lưu trữ. Kết hợp với các phần lưu trữ định tuyến ngược là một đồng hồ, gọi là đồng hồ kết thúc yêu cầu định tuyến. Mục đích của đồng hồ này là để làm sạch phần lưu trữ tuyến ngược tại các nút mạng mà không dựa trên tuyến từ nguồn tới đích. Thời gian kết thúc phụ thuộc vào kích cỡ của mạng Ad-hoc. Một tham số quan trọng khác kết hợp với phần lưu trữ tuyến là thời gian dừng sử dụng đệm định tuyến hay là thời gian sau khi tuyến được coi là không còn hiệu lực.
Trong mỗi phần lưu trữ bảng định tuyến, địa chỉ của các nút mạng lân cận mà gói đi qua tới đích định sẵn cũng được duy trì. Một lân cận được coi là hoạt động nếu nó khởi tạo hoặc chuyển tiếp ít nhất một gói tới đích trong khoảng thời gian dừng timeout_active. Thông tin này được duy trì để tất cả các nút nguồn hoạt động có thể được chú ý khi một kết nối trong tuyến tới đích bị gián đoạn. Một phần
lưu trữ tuyến được coi là hoạt động nếu nó được sử dụng trong các lân cận hoạt động. Một tuyến từ nguồn tới đích mà các gói đi qua dọc theo các phần lưu trữ tuyến hoạt động được gọi là tuyến hoạt động. Một nút mạng di động duy trì phần lưu trữ bảng định tuyến cho mỗi đích quan tâm. Mỗi phần lưu trữ bảng định tuyến bao gồm các thông tin sau:
- Địa chỉ IP đích. - Số tuần tự đích.
- Cờ số tuần tự đích có hiệu lực.
- Trạng thái và các cờ định tuyến khác (có hiệu lực, không có hiệu lức, có khả năng sửa chữa, đang được sửa chữa).
- Giao diện mạng.
- Số đếm các bước (số các bước cần để tìm tới đích). - Bước tiếp theo.
- Danh sách tiền thân.
- Thời gian tồn tại (thời gian kết thúc hoặc xoá bỏ tuyến).
Quản lý số tuần tự chủ yếu là để ngăn ngừa những vòng lặp định tuyến, thậm chí khi các liên kết gián đoạn và một nút mạng không thể tới để cung cấp thông tin của nó về số tuần tự. Một đích trở nên không thể tới được khi một liên kết gián đoạn hoặc không hoạt động. Khi những điều kiện này xảy ra thì tuyến không có hiệu lực. Mỗi thời gian một lưu trữ định tuyến được sử dụng để truyền dữ liệu từ nguồn tới đích thì timeout cho phần lưu trữ được thiết lập lại với thời gian hiện tại cùng với active_route_timeout. AODV cũng thực hiện hai hoạt động cơ bản là phát hiện tuyến và duy trì tuyến.
2.7.3. Phát hiện tuyến
Tiến trình phát hiện tuyến được khởi tạo khi một nút mạng nguồn cần truyền thông với nút mạng khác mà nó không có thông tin định tuyến trong bảng. Các nút mạng đều duy trì hai bộ đếm riêng biệt: bộ đếm số tuần tự nút mạng và bộ đếm broadcast_id. Nút mạng nguồn khởi tạo bản tin phát hiện tuyến bằng cách quảng bá một gói yêu cầu tuyến (RREQ) tới các nút mạng lân cận. Bản tin RREQ bao gồm
các trường: <source_addr, source_sequence_#, broadcast_id, dest_addr, dest_sequence_#, hop_cnt>.
Cặp <source_addr, broadcast_id> nhận dạng duy nhất một RREQ. Broadcast_id tăng lên khi nguồn phát sinh một RREQ mới. Mỗi nút mạng lân cận hoặc đáp ứng lại RREQ bằng việc gửi một gói trả lời tuyến (RREP) trở lại nguồn hoặc tiếp tục quảng bá RREQ tới lân cận của nó sau khi tăng hop_cnt (số bước). Chú ý rằng, một nút mạng có thể nhận nhiều bản sao của cùng một gói quảng bá tuyến từ các nút mạng lân cận. Khi một nút mạng trung gian nhận một RREQ với broadcast_id và địa chỉ nguồn giống như thế, nó sẽ loại bỏ RREQ thừa và không quảng bá lại.
2.7.3.1. Thiết lập tuyến ngược
Có hai số tuần tự trong broadcast_id của một RREQ: số tuần tự nguồn và số tuần tự đích. Số tuần tự nguồn được sử dụng để duy trì thông tin mới nhất về tuyến ngược lại tới nguồn. Số tuần tự đích chỉ rõ một tuyến mới tới đích. Khi RREQ đi từ nút mạng nguồn tới các đích khác nhau, nó sẽ tự động thiết lập các tuyến ngược lại từ tất cả các nút trở lại nguồn như trên hình 2.12. Để thiết lập một tuyến ngược, một nút mạng ghi địa chỉ của nút lân cận nơi mà nó nhận bản tin đầu tiên của RREQ. Tuyến ngược được duy trì trong ít nhất một thời gian đủ để RREQ đi qua mạng và đưa ra một gói trả lời gửi trở lại nguồn.
2.7.3.2. Thiết lập tuyến tiếp theo
Khi RREQ tới một nút mạng (có thể chính là đích cần đến) mà có một tuyến hiện tại tới đích. Trước tiên, nút mạng nhận sẽ kiểm tra xem RREQ có phải được nhận qua một kết nối hai chiều không. Nếu một nút mạng trung gian có một phần lưu trữ tuyến cho đích mong muốn, nó sẽ xác định tuyến hiện tại bằng cách so sánh số tuần tự đích trong phần lưu trữ của nó với số tuần tự đích trong gói RREQ. Nếu số tuần tự đích trong RREQ lớn hơn thì nút mạng trung gian không được sử dụng tuyến đã được ghi của nó để trả lời RREQ. Thay vào đó, nút mạng trung gian sẽ quảng bá lại RREQ. Nút mạng trung gian có thể chỉ trả lời khi nó có một tuyến có số tuần tự đích lớn hơn hoặc bằng số tuần tự đích trong RREQ. Nếu nút mạng có một
tuyến hiện tại tới đích và nếu RREQ không được xử lý trước đó, nó sẽ gửi một gói trả lời (RREP) đơn hướng trở lại nút mạng lân cận mà nó nhận RREQ từ đó. Một RREP bao gồm các thông tin sau:
<source_addr, dest_addr, dest_sequence_#, hop_cnt, lifetime>
Trong thời gian một gói quảng bá tới một nút mạng có thể có một tuyến tới đích, một tuyến ngược được thiết lập trở lại nguồn phát RREQ. Khi RREP trở lại nguồn, mỗi nút mạng dọc theo tuyến sẽ thiết lập một con trỏ tới nút mạng mà RREP đến, cập nhật thông tin timeout của nó cho các phần lưu trữ tuyến tới nguồn, đích và ghi lại số tuần tự đích cuối cùng. Trên hình 2.12, RREP từ đích D tới nguồn S. Các nút mạng không ở trên tuyến được xác định xác định bởi RREP sẽ timeout sau Active_Router_Timeout (3000ms) và sẽ xóa các con trỏ ngược.
Hình 2.12. Sự hình thành tuyến ngƣợc và tiếp theo
Nút mạng nhận một RREP truyền RREP đầu tiên cho nút mạng nguồn đã định về phía nguồn. Nếu nó nhận thêm các RREP thì nó cập nhật thông tin định tuyến của mình và truyền RREP chỉ khi RREP chứa hoặc một số tuần tự đích lớn hơn RREP trước hoặc cùng một số tuần tự đích với số bước đếm được nhỏ hơn. Khi đó nút mạng sẽ loại bỏ tất cả các RREP khác mà nó nhận được. Việc này làm giảm bớt số gói RREP truyền về phía nguồn trong khi vẫn đảm bảo thông tin định tuyến
cập nhật và nhanh nhất. Nút mạng nguồn có thể bắt đầu truyền dữ liệu ngay khi nhận gói RREP đầu tiên và có thể cập nhật thông tin định tuyến sau đó nếu nó nhận được một tuyến tốt hơn.
2.7.4. Duy trì tuyến
Sự di chuyển của các nút mạng không nằm trên một tuyến hoạt động nào mà không ảnh hưởng tới việc định tuyến tới đích trên tuyến này. Nếu nút mạng nguồn di chuyển trong suốt một phiên hoạt động, nó có thể khởi tạo lại thủ tục phát hiện tuyến để thiết lập một tuyến mới tới đích. Khi hoặc là nút mạng đích hoặc là các nút mạng trung gian di chuyển, thì một gói RREP đặc biệt được gửi lại nút mạng nguồn. Bản tin hello định kỳ có thể được sử dụng để đảm bảo các kết nối đối xứng, phát hiện tuyến bị lỗi. Với độ trễ ít nhất, lỗi có thể được phát hiện bằng cách sử dụng các bản tin xác nhận lớp kết nối LLACKS (Link-Layer Acknowledgments). Một lỗi kết nối cũng được chỉ thị nếu cố gắng chuyển một gói tới bước lỗi tiếp theo này.
Mỗi khi bước tiếp theo không thể tới được thì nút mạng phía trên đoạn hỏng sẽ truyền một gói RREP với một số tuần tự lớn hơn các số tuần tự đã biết trước đó và số bước là ∞ tới các nút mạng lân cận hoạt động. Các nút mạng tiếp tục chuyển tiếp thông báo đó tới các nút lân cận hoạt động và cứ tiếp tục như thế. Tiến trình tiếp tục tới khi tất cả nút mạng nguồn hoạt động được thông báo.
Dựa trên việc nhận thông báo gián đoạn kết nối, các nút mạng nguồn có thể khởi tạo lại tiến trình phát hiện tuyến nếu chúng vẫn cần một tuyến tới đích. Để xác định tuyến nào vẫn cần thiết, nút mạng phải kiểm tra xem tuyến đã sử dụng mới đây cũng như xem xét các khối điều khiển giao thức mức trên để biết kết nối nào còn lại sử dụng đích được chỉ thị. Nếu nút mạng nguồn (hoặc là các nút mạng dọc theo tuyến trước) quyết định sẽ xây dựng lại tuyến tới đích, nó sẽ gửi đi một bản tin RREQ với số tuần tự đích lớn hơn các số tuần tự đã biết trước để đảm bảo rằng việc xây dựng tuyến mới có thể được và không có nút mạng nào trả lời nếu chúng vẫn cho rằng tuyến trước là có hiệu quả.
Các nút mạng nhận biết các nút mạng lân cận của chúng theo một trong hai cách. Khi một nút mạng nhận một gói quảng bá từ một lân cận của nó, nó sẽ cập nhật thông tin kết nối nội bộ để đảm bảo rằng có các nút mạng lân cận này. Trong