AODV (Adhoc On-demand Distance Vector) là sự kết hợp giữa hai giao thức định tuyến DSDV và DSR. Cũng giống như DSR, trong giao thức định tuyến AODV, các nút chỉ tìm kiếm và duy trì thông tin định tuyến trong khi các nút có nhu cầu trao đổi thông dữ liệu.
AODV vẫn sử dụng cơ chế tìm đường như trong DSR là sử dụng tiến trình route discovery. Tuy nhiên, AODV còn sử dụng nhiều cơ chế khác để duy trì thông tin bảng định tuyến. Nó sử dụng bảng định tuyến truyền thống để lưu trữ thông tin định tuyến với mỗi entry cho một địa chỉ đích.
Không sử dụng source route và chỉ cần biết về các nút láng giềng của nó, AODV dựa trên các entry của bảng định tuyến để phát gói RREP về cho nút nguồn và nút nguồn không dùng thông tin đó để gửi dữ liệu đến đích. Để đảm bảo rằng thông tin trong bảng định tuyến là mới nhất thì AODV sử dụng khái niệm destination sequence number của giao thức định tuyến DSDV để loại bỏ đường đi không còn giá trị trong bảng định tuyến. Mỗi nút sẽ có một tăng số sequence number cho riêng nó. Các cơ chế chính của AODV
• Cơ chế Router Discovery
Mỗi nút có hai bộ phận đếm (counter): Bộ đếm số sequence number và bộ đếm broadcast ID. Số sequence number được tăng lên khi:
o Trước khi một nút khởi động tiến trình route discovery, điều này chống sự xung đột với các gói RREP trước đó.
o Trước khi một nút đích gửi gói RREP trả lời gói RREQ, nó sẽ nhập lại giá trị sequence number trong gói RREQ.
o Khi có một sự thay đổi trong mạng cục bộ của nó (mạng cục bộ là nút láng giềng).
o Số broadcast ID được tăng lên khi nút khởi động một tiến trình route discovery mới.
Tiến trình Route Discovery được khởi động khi nào muốn trao đổi dữ liệu với nút khác mà trong bảng định tuyến của nó không có thông tin định tuyến đến nút đích đó. Khi đó tiến trình sẽ phát broadcast một gói RREQ cho các nút láng giềng của nó. Thông tin trong RREQ ngoài địa chỉ đích, địa chỉ nguồn, số hop count,… còn có các trường: số sequence number của nút nguồn, số broadcast ID, số sequence number của nút đích. Cặp thông tin<địa chỉ nguồn, số broadcast ID) là số định danh duy nhất cho một gói RREQ. Khi nút hàng xóm nhận được gói RREQ thì nó sẽ kiểm tra tuần tự theo các bước:
o Xem gói RREQ đã được xử lý trước đó hay chưa? Nếu đã được xử lý thì nó sẽ loại bỏ gói tin đó và không xử lý thêm. Ngược lại thì chuyển qua bước 2.
o Nếu bảng định tuyến của nó chứa đường đi đến đích, thì sẽ kiểm tra giá trị destination sequence number trong gói RREQ, nếu số destination sequence number trong RREQ lớn hơn số sequence number trong entry thì nó sẽ không sử dụng thông tin entry trong bảng định tuyến để trả lời nút nguồn mà nó sẽ tiếp tục phát broadcast gói RREQ đó đến nút láng giềng của nó. Ngược lại nó sẽ phát unicast gói RREP ngược lại nút láng giềng mà đã nhận gói RREQ. Gói RREP ngoài các thông tin như: địa chỉ nguồn, địa chỉ đích, còn chứa các thông tin: destination sequence number, hop-count, giá trị TTL. Ngược lại thì qua bước 3.
o Nếu trong bảng định tuyến của nó không có đường đi đến đích thì nó sẽ tăng số hop-count lên 1, đồng thời nó sẽ thiết lập một đường đi ngược
láng giềng mà nó nhận gói RREP phản hồi cho nút nguồn, sau đó entry này sẽ được xóa đi. Các thông tin bao gồm:
Địa chỉ đích Địa chỉ nguồn Số broadcast ID
Thời gian timeout cho việc chờ đợi thời gian nhận gói RREP Số sequence number của nút nguồn
Sau đó phát broadcast đến các nút hàng xóm của nó.
Và quá trình trên cứ lặp đi lặp lại cho đến khi nó gặp nút đích hoặc nút trung gian mà có các điều kiện thỏa mãn bước 2. Trong quá trình trả về gói RREP, một nút có thể cùng lúc nhận nhiều gói RREP có số hop-count nhỏ nhất. Sau đó nó sẽ đề cập các thông tin cần thiết vào trong bảng định tuyến của nó và chuyển gói RREP đi.
Hình 3.4. Đường đi của gói tin RREP trở về nguồn
• Cơ chế Route Maintenance
Khi một nút thấy rằng next hop của nó không thể tìm thấy, thì nó sẽ phát một gói RREP khẩn cấp với số sequence number bằng số sequence number trước đó cộng với 1, và hop count bằng ∞ và gửi đến tất cả các nút hàng xóm đang ở trangh thái active, những nút đó sẽ tiếp tục chuyển gói tin đó đến các nút hàng xóm… và cứ như vậy cho đến khi tất cả các nút trong mạng mà ở trạng thái active nhận được gói tin này, sau khi nhận thông báo đó, các nút sẽ khởi động lại tiến trình route discovery nếu có nhu cầu định tuyến đến đích hay không thì nó sẽ kiểm tra giao thức bên dưới có kết nối đến nút đích nào không? Nếu thấy có nhu cầu định tuyến thì nó sễ gửi một gói RREQ(với số sequence number bằng với số sequence number mà nó biết trước đó cộng với 1) đến các nút hàng xóm để tìm đến địa chỉ đích. Để kiểm tra trạng thái một nút có active hay không, AODV sử dụng một bộ timer. Một entry của bảng định tuyến sẽ bị xem là không active nếu nó không được sử dụng thường xuyên.
• Quản lý bảng định tuyến
Một nút duy trì một entry trong bảng định tuyến cho một địa chỉ đích. Một entry chứa các thông tin:
o Next hop
o Hop count
o Số sequence number của nút đích
o Các nút láng giềng ở trạng thái active
o Thời gian hết hạn entry
Trong mỗi entry của bảng định tuyến, địa chỉ của các nút láng giềng có trạng thái active mà có định tuyến đến đích vẫn được lưu giữ. Một nút láng giềng được đặt ở trạng thái active nếu khởi tạo hoặc chuyển tiếp ít nhất một packet đến nút đích trong giới hạn của active_timeout. Thông tin này cần được lưu giữ để giúp cho việc thông báo một link bị hỏng đến các nút active được thuận lợi. Một entry của bảng định tuyến được xem là active nếu nó được sử dụng bởi các nút láng giềng ở trạng thái active.
Khi có một đường đi mới đến một nút đích, thì nút nguồn sẽ so sánh số sequence number của đường đi mới với số sequence number có trong entry tương ứng với địa chỉ đích trong bảng định tuyến. Đường đi mà số sequence number bằng nhau, thì đường nào có số hop-count nhỏ hơn sẽ được chọn.