Giao thức AODV được phát triển từ thuật toán DSDV. AODV là sự cải tiến của DSDV do nó tối thiểu hóa số bản tin quảng bá cần thiết bằng cách tạo ra các tuyến trên cơ sở theo yêu cầu, ngược với việc duy trì một danh sách hoàn chỉnh các tuyến như thuật toán DSDV. AODV được xem như hệ thống chiếm tuyến theo yêu cầu ban đầu. Theo đó các nút không nằm trên đường dẫn được chọn thì không duy trì thông tin định tuyến và cũng không tham gia trong việc trao đổi bảng định tuyến. Các nút không cần phải khám phá hay duy trì bất cứ một đường định tuyến nào cho tới khi chúng có nhu cầu trao đổi thông tin với nhau. Mục đích chính của thuật toán này:
• Chỉ quảng bá các bản tin khám phá tuyến khi cần thiết.
• Quảng bá các thông tin về sự thay đổi trong các kết nối cục bộ tới những nút hàng xóm cần thông tin này.
AODV sử dụng một cơ chế khám phá tuyến broadcast, cũng được sử dụng trong thuật toán DSR. Tuy nhiên, thay vì định tuyến nguồn, AODV dựa trên các entry của bảng định tuyến thiết lập động tại các nút trung gian. Để duy trì những thông tin định tuyến mới nhất giữa các nút, AODV cũng sử dụng SN như DSDV. Sự kết hợp những kỹ
thuật này tạo ra một thuật toán sử dụng băng thông hiệu quả, đáp ứng với những thay đổi của topo mạng và đảm bảo không có lặp tuyến.
2.3.2 Mô tả
Để tìm được tuyến đường từ nút nguồn tới nút đích, AODV thực hiện hai quá trình:
• Khám phá tuyến: khi nút nguồn muốn gửi một bản tin tới đích nhưng không tìm thấy tuyến đường tới đích trong bảng định tuyến, nó sẽ khởi tạo quá trình khám phá tuyến.
• Duy trì tuyến: khi các nút phát hiện có một liên kết trên tuyến đường tới đích bị đứt, nó sẽ thông báo cho nhau và thiết lập lại một tuyến khác nếu cần.
Các bản tin định tuyến của giao thức AODV không mang thông tin của tất cả các tuyến
đường trong mạng mà chỉ mang những thông tin về tuyến đường được yêu cầu. Các
loại bản tin được sử dụng trong quá trình định tuyến:
• RREQ (Route request): bản tin yêu cầu tuyến, được quảng bá khi một nút cần tìm một định tuyến tới đích.
• RREP (Route reply): bản tin trả lời, do nút đích hoặc các nút trung gian có định tuyến tới đích truyền unicast tới nút nguồn.
• RRER (Route error): bản tin báo lỗi, được quảng bá khi các nút phát hiện có liên kết bị đứt.
• HELLO: được phát quảng bá định kỳ bởi các nút trên tuyến đường từ nguồn tới đích để thông báo cho mọi nút về thông tin những nút lân cận của nó.
2.3.2.1 Quản lý bảng định tuyến
Mỗi đường định tuyến trong bảng định tuyến của AODV gồm một số thông tin:
- Địa chỉ IP của nút đích
- Các cờ điều khiển định tuyến và trạng thái khác - Số chặng (các nút mạng) tới đích
- Hàng xóm tiếp theo
- Thời gian tồn tại của đường định tuyến
- Danh sách các nút hàng xóm liền kề còn hoạt động
- Bộ đệm yêu cầu: để đảm bảo mỗi yêu cầu chỉ được xử lý một lần
2.3.2.2 Khám phá tuyến
Quá trình khám phá tuyến được khởi tạo bất cứ khi nào một nút nguồn cần trao đổi với nút khác mà không có thông tin định tuyến trong bảng của nó. Nút nguồn sẽ lưu bản tin dữ liệu vào bộ đệm cho tới khi hoàn thành quá trình khám phá tuyến. Mỗi nút sẽ duy trì hai bộ đếm: SN của nút và id quảng bá. Nút nguồn khởi tạo khám phá tuyến bằng cách quảng bá bản tin yêu cầu tuyến RREQ tới hàng xóm của nó. Bản tin RREQ chứa những trường sau:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Type |J |R|G|D|U| Reserved | Hop Count
RREQ ID (broadcast_id) destination IP Address destination Sequence Number originator (source) IP Address originator (source) Sequence Number
Hình 2-4 Định dạng bản tin RREQ Trong đó:
- Type: 1 (kiểu bản tin là RREQ) - J | R | G | D | U : các cờ điều khiển.
- Reserved: gửi đi với giá trị 0 và được bỏ qua ở bên nhận
- Hop count: số chặng bản tin phải đi từ nguồn tới những nút trung gian nhận RREQ. Ban đầu, nút nguồn quảng bá bản tin với hop count bằng 0. Tại mỗi nút trung gian giá trị này sẽ được tăng thêm 1.
- broadcast_id : id quảng bá
- destination IP Address : địa chỉ IP của nút đích
- destination Sequence Number : SN của nút đích mới nhất mà nút nguồn nhận được. - originator (source) IP Address : địa chỉ IP của nút nguồn
- originator (source) Sequence Number: SN của nút nguồn
Cặp <địa chỉ nguồn, id quảng bá> duy nhất sẽ xác định bản tin RREQ duy nhất. ID quảng bá tăng khi nút nguồn phát một bản tin RREQ mới. Khi mỗi nút nhận được một bản tin RREQ, chúng sẽ lưu lại cặp <địa chỉ nguồn, id quảng bá> trong bộ đệm. Nếu sau đó, các nút này lại nhận được bản tin RREQ có cùng <địa chỉ nguồn, id quảng bá>, chúng sẽ không xử lý lại bản tin này.
SN đích trong bản tin RREQ là SN đích mới nhất mà nút nguồn nhận được trong phiên khám phá tuyến trước đó và được lấy từ bảng định tuyến của nút nguồn. Nếu nút nguồn không biết SN của nút đích, giá trị này sẽ được gán bằng 0. Cũng giống DSDV, giao thức AODV sử dụng SN đích để tránh vòng lặp tuyến. Khi một nút nhận được nhiều bản tin điều khiển (RREQ, RREP hoặc RRER) trong một phiên khám phá hoặc duy trì tuyến, nó sẽ kiểm tra SN đích trong các bản tin nhận được để cập nhật thông tin mới nhất. Bản tin điều khiển sẽ được cập nhật nếu:
- SN đích trong bản tin điều khiển lớn hơn SN trong bảng định tuyến.
- SN đích bằng nhau nhưng bản tin điều khiển có metric “tốt” hơn metric trong bảng định tuyến.
Một nút nhận bản tin RREQ từ nút hàng xóm sẽ cập nhật thông tin vừa nhận được vào bảng định tuyến của nó gồm thông tin về nút nguồn và nút đã gửi bản tin RREQ cho nó
đồng thời thiết lập một tuyến đường ngược về nút đó. Sau đó nút này quảng bá lại RREQ tới các nút hàng xóm tiếp theo sau khi đã tăng “hop count”. Sau khi nút nguồn quảng bá bản tin RREQ lần đầu tiên, nó sẽ đợi bản tin trả lời RREP trong một khoảng thời gian NODE_TRAVERSAL_TIME (ms). Nếu nút nguồn không nhận được bản tin RREP nào, nó sẽ lại gửi một bản tin RREQ mới. Sau khi gửi bản tin thứ hai, nút nguồn
lại đợi trong khoảng thời gian NODE_TRAVERSAL_TIME * 2 (tăng gấp đôi) trước
khi gửi lại bản tin RREQ tiếp theo. Nếu vẫn không nhận được bản tin trả lời, nút nguồn tiếp tục gửi lại bản tin RREQ. Mỗi nút sẽ được qui định số lần gửi lại bản tin RREQ. Sau số lần gửi lại bản tin RREQ cho phép, nút nguồn vẫn không nhận được bản tin trả lời, nó sẽ coi như không tồn tại nút đích và loại bỏ bản tin dữ liệu cần gửi. Bản tin RREP chứa những trường sau:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Type |R|A| Reserved |Prefix Sz | Hop Count
destination IP address destination sequence number originator (source) IP address
Lifetime
Hình 2-5 Định dạng bản tin RREP Trong đó
- Type: 2 (kiểu bản tin là RREP) - R: cờ điểu khiển
- A: trường này thiết lập sẽ phát đi yêu cầu gửi xác nhận khi nguồn nhận được bản tin RREP
- Reserved: gửi đi với giá trị 0 và được bỏ qua ở bên nhận
nút nào có cùng tiền tố định tuyến
- Hop count: số chặng bản tin phải đi từ nút nguồn tới đích. - destination sequence number: địa chỉ IP nút đích
- destination sequence number: SN của nút đích
- originator (source) IP address: địa chỉ IP nút nguồn (nút khởi tạo RREQ) - lifetime: thời gian tồn tại của một entry tuyến ngược
Bản tin RREQ sẽ được tất cả các nút trong mạng quảng bá cho đến khi nút đích hoặc một nút trung gian có định tuyến tới đích nhận được, các nút này sẽ cập nhật thông tin trong bản tin RREQ vào bảng định tuyến của nó và gửi bản tin trả lời RREP. Nếu nút nhận là nút đích, nó sẽ tăng SN của nó và đặt vào trường SN đích của bản tin RREP, thiết lập “hop count” bằng 0, sao chép lại địa chỉ IP nguồn và đích trong bản tin RREQ vào các trường tương ứng trong bản tin RREP, rồi gửi bản tin RREP theo tuyến đường ngược vừa thiết lập. Nếu nút nhận là nút trung gian có định tuyến tới đích, nó sẽ lấy SN của nút đích trong bảng định tuyến của nó đặt vào bản tin RREP và gửi về nguồn như nút đích, đồng thời cũng gửi 1 bản tin RREP tới đích để nút đích cập nhật tuyến đường tới nút nguồn.
Nếu một nút trung gian nhận thấy đường truyền để gửi bản tin RREP không tin cậy (có thể bị lỗi hoặc là liên kết một chiều), nút này sẽ thiết lập cờ điều khiển ‘A’ yêu cầu nút nhận RREP gửi bản tin xác nhận RREP-ACK. Định dạng bản tin RREP-ACK:
0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
Type Reserved Hình 2-6 Định dạng bản tin RREP-ACK Trong đó:
- Reserved: gửi đi với giá trị 0 và được bỏ qua ở bên nhận
Thiết lập tuyến đường ngược
Trong suốt quá trình chuyển tiếp bản tin RREQ, các nút trung gian ghi vào bảng định tuyến của chúng địa chỉ của các nút lân cận phát đi bản tin RREQ. Dựa vào đó, mỗi nút sẽ tạo một tuyến đường ngược về các nút vừa gửi RREQ cho mình. Kết quả là sẽ tạo ra một tuyến đường ngược từ nút đích về nút nguồn. Tuyến đường ngược này được duy trì trong khoảng thời gian đủ để bản tin RREQ đi qua mạng và được dùng để gửi bản tin RREP về nút nguồn.
Hình 2-7 Thiết lập tuyến đường ngược.
Như hình 2.6 khi nút nguồn S cần một định tuyến tới nút D nhưng không có, ngay lập tức nó sẽ quảng bá bản tin yêu cầu tuyến RREQ tới các nút hàng xóm của nó (nút 1 và 4). Nút 1 và 4 nhận được bản tin này, cập nhật địa chỉ và SN của nút nguồn vào trường
chúng tiếp tục quảng bá bản tin RREQ tới hàng xóm của chúng là 2 và 5 do không tìm thấy tuyến đường tới đích trong bảng định tuyến.
Các nút hàng xóm lại tiếp tục cập nhật thông tin và thiết lập tuyến ngược đồng thời quảng bá bản tin RREQ nếu không có định tuyến tới đích. Cho tới khi nút đích hoặc nút trung gian có định tuyến tới đích (nút 3 hoặc D) nhận được bản tin RREQ, nó sẽ gửi bản tin trả lời RREP về nút nguồn theo tuyến đường ngược vừa thiết lập.
Thiết lập tuyến đường chuyển tiếp
Khi bản tin RREP được gửi trở lại nút nguồn, mỗi nút trên tuyến ngược cập nhật địa chỉ nút đích và địa chỉ nút trung gian vừa gửi bản tin trả lời cho nó vào bảng định tuyến và thiết lập một con trỏ trỏ tới nút phát bản tin RREP tạo ra tuyến đường chuyển tiếp từ nguồn tới đích, đồng thời tất cả các nút trong mạng cập nhật thời gian timeout để xóa các tuyến không được sử dụng.
Như hình 2.7, khi D nhận được bản tin RREQ từ nút 3 (xét trong phiên khám phá tuyến đầu tiên khi nút 3 chưa có định tuyến tới D), ngay lập tức nó phát unicast bản tin RREP trở lại nút 3 theo tuyến ngược nó vừa thiết lập (sau khi tăng SN). Nút 3 cập nhật địa chỉ nút đích và chuyển tiếp bản tin RREP về nút 2, đồng thời thiết lập con trỏ trỏ tới nút D. Các nút hàng xóm tiếp theo cũng thực hiện một quá trình như vậy cho đến khi bản tin RREP về tới nút nguồn, khi đó sẽ thiết lập được một tuyến đường chuyển tiếp từ nguồn
tới đích. Ngay sau đó nút nguồn có thể gửi dữ liệu tới nút đích theo tuyến đường
chuyển tiếp vừa thiết lập. Đồng thời các nút 4 và 5 không nằm trên tuyến đường mà bản tin RREP đi qua sau một thời gian xác định (timeout) sẽ xóa tuyến đường ngược mà các nút này đã thiết lập.
Trong trường hợp nút 3 có định tuyến tới D và SN của D trong bảng định tuyến của 3 lớn hơn hoặc bằng SN đích trong bản tin RREQ mà nó nhận được, nó sẽ gửi bản tin RREP trở về nguồn đồng thời cũng gửi unicast 1 bản tin RREP tới nút D để D cập nhật tuyến đường tới nút nguồn S với cặp địa chỉ, SN đảo ngược với cặp địa chỉ, SN trong bản tin RREQ. Khi đó nếu SN nguồn trong bản tin RREP nhận được từ nút 3 nhỏ hơn SN của nút D, D sẽ gửi lại bản tin RREP với giá trị SN mới về nút 3, nút 3 tiếp tục phát unicast về các nút hàng xóm trên tuyến đường ngược cho tới khi nút nguồn nhận được. Trong trường hợp SN của D trong bảng định tuyến của 3 nhỏ hơn SN đích trong bản tin RREQ, nút 3 sẽ cập nhật và tiếp tục quảng bá RREQ tới D. Sau khi nút nguồn nhận
được bản tin RREP, tất cả các nút trung gian trên tuyến đường từ nguồn tới đích đều
xác định được định tuyến tới các nút khác trên tuyến đường đó do đó việc trao đổi giữa các nút này hoàn toàn dễ dàng.
Tuy nhiên, trong môi trường mạng vô tuyến, không phải lúc nào liên kết giữa các nút mạng cũng là liên kết 2 chiều. Trong trường hợp liên kết 1 chiều, các nút nguồn chỉ có thể gửi bản tin RREQ mà không nhận được bản tin RREP, dù có phát lại bản tin RREQ bao nhiêu lần. Trường hợp này cũng có thể xảy ra trong liên kết 2 chiều. Trong giao
thức AODV, như đã biết, các nút chỉ xử lý bản tin RREQ đầu tiên, các bản tin RREQ sau đó có cùng <địa chỉ nguồn, id quảng bá> sẽ bị bỏ qua. Giả sử trong trường hợp bản tin RREQ đầu tiên được gửi trên liên kết 1 chiều nhưng sau đó bản tin RREQ tiếp theo lại được gửi trên liên kết 2 chiều như vậy các nút chỉ xử lý bản tin đầu tiên mà bỏ qua bản tin sau đó. Để tránh điều này xảy ra, khi một nút phát hiện quá trình truyền RREP bị lỗi, nó sẽ lưu lại nút hàng xóm tiếp theo trên đường truyền RREP vào một “danh sách đen”. Các nút khác sẽ bỏ qua tất cả các bản tin RREQ được gửi từ bất cứ nút nào nằm trong “danh sách đen”. Các nút trong “danh sách đen” sẽ được xóa bỏ sau một khoảng thời gian timeout.
2.3.2.3 Duy trì tuyến
Trong AODV, các tuyến được duy trì như sau: Các nút chuyển động sẽ làm đứt liên kết với các nút gần nó. Nếu các nút không nằm trên tuyến đường hoạt động, nó sẽ không
ảnh hưởng tới quá trình trao đổi giữa nguồn và đích. Nếu nút chuyển động là nút
nguồn, nó có thể sẽ khởi tạo lại quá trình khám phá tuyến để thiết lập định tuyến mới tới đích. Nếu nút đích hoặc nút trung gian dịch chuyển, thì các nút lân cận dòng lên của nó phải nhận biết được chuyển động này và có nhiệm vụ truyền một bản tin RREP đặc biệt hay là bản tin RRER với 1 SN mới lớn hơn SN trước và metric là ∞ đến các nút lân cận dòng lên nhằm thông báo cho các nút này xóa phần tuyến đó. Quá trình này tiếp tục cho đến khi đạt đến nút nguồn. Bản tin RRER chứa các trường sau:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Type |N| Reserved | DestCount Unreachable Destination IP Address (1)
Unreachable Destination Sequence Number (1) Additional Unreachable Destination IP Address (if needed)
needed)
Hình 2-9 Định dạng bản tin RRER Trong đó:
- Type: 3 (kiểu bản tin là RRER) - N: trường điều khiển
- Reserved: gửi đi với giá trị 0 và được bỏ qua ở bên nhận
- DestCount: số nút đích bị đánh dấu là không đến được (phải ít nhất là 1)