Giao thức định tuyến AODV

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp tiếp cận theo thiết kế xuyên tầng nhằm tối ưu hóa năng lượng trong mạng manet (Trang 29 - 38)

AODV [7] là một giao thức định tuyến động, hoạt động theo yêu cầu, đa chặng và tự khởi động giữa các nút di động trong mạng MANET. Nó cho phép các nút tìm đƣợc các đƣờng tới một đích một cách nhanh chóng và không yêu cầu các nút duy trì các con đƣờng tới đích khi không truyền thông. Đồng thời, giao thức này cho phép các nút di động làm việc đƣợc với sự thay đổi hình trạng của mạng hoặc liên kết bị đứt.

AODV là giao thức có khả năng tránh định tuyến lặp và có tốc độ hội tụ nhanh khi hình trạng mạng thay đổi. Khi một liên kết bị đứt, AODV sẽ tạo ra hiệu ứng để báo cho tập các nút liên quan cập nhật thông tin về đƣờng bị lỗi.

biểu diễn “độ mới” của đƣờng. Số thứ tự đích do nút đích tạo ra đƣợc đƣa vào các gói tin điều khiển cùng với các thông tin định tuyến khác và đƣợc gửi đi đến nút có yêu cầu tìm đƣờng. Nút yêu cầu sẽ lựa chọn một con đƣờng có số thứ tự lớn nhất.

Các gói yêu cầu đƣờng (RREQ), trả lời đƣờng (RREP), báo lỗi đƣờng (RERR) và gói Hello là các gói điều khiển đƣợc định nghĩa trong AODV. Khi một nút cần tìm đƣờng đến đích, nó sẽ quảng bá gói RREQ. Quá trình quảng bá gói RREQ tạo ra các đƣờng nghịch (reverse route) hƣớng tới nút nguồn tại các nút nhận gói. Khi một nút nhận đƣợc gói RREQ, nếu nó là nút đích hoặc là nút trung gian nhƣng có thông tin về đƣờng “đủ mới” thoả mãn yêu cầu của nút nguồn, nó sẽ gửi gói RREP dạng unicast tới nút nguồn để trả lời đƣờng. Quá trình truyền gói RREP tạo ra các đƣờng thuận (forward route) hƣớng tới nút đích tại các nút nhận gói. Gói Hello đƣợc sử dụng để theo dõi trạng thái của liên kết. Khi một liên kết thuộc một đƣờng bị đứt gói RERR đƣợc sử dụng để báo lỗi đƣờng cho các nút láng giềng qua “danh sách con trỏ trước”.

Quản lý số thứ tự là một việc thiết yếu để tránh định tuyến lặp. Một nút đích sẽ trở thành nút không đến đƣợc khi một liên kết bị đứt hoặc đang ở trạng thái không hợp lệ. Khi những điều kiện này xảy ra, đƣờng chứa liên kết này sẽ đƣợc coi là mất hiệu lực bằng thao tác gán số thứ tự và đánh dấu trong bảng định tuyến là đƣờng không hợp lệ.

Cơ chế hoạt động của giao thức AODV

Duy trì các số thứ tự

Số thứ tự đƣợc gán cho mỗi đƣờng trong bảng định tuyến là “độ mới” của con đƣờng. Nó đƣợc gọi là “số thứ tự đích” vì nó biểu diễn “độ mới” cho con

đƣờng tới một đích xác định để tránh định tuyến lặp. Nó đƣợc cập nhật khi một nút nhận đƣợc thông tin mới hơn từ các thông điệp RREQ, RREP hoặc RERR liên quan đến đích. Số thứ tự đích đƣợc mỗi nút duy trì một cách độc lập. Một nút sẽ tăng số thứ tự của nó: (1) trƣớc khi gửi gói RREQ; (2) trƣớc khi gửi gói RREP; (3) khi nhận thông tin về trạng thái liên kết tới chặng kế tiếp của đƣờng bị lỗi.

Để khẳng định rằng thông tin về đƣờng đi tới một đích là mới, một nút chỉ cập nhật thông tin từ các gói điều khiển của AODV nó nhận đƣợc khi số thứ tự đích của gói lớn hơn số thứ tự đích hiện tại của nó.

Bảng định tuyến và các danh sách con trỏ trƣớc

Bảng định tuyến của AODV bao gồm các entry, mỗi entry là biểu diễn một đƣờng tới một đích, chứa các thông tin về IP đích, số thứ tự đích, các cờ trạng thái, giao tiếp mạng, số chặng, chặng kế tiếp, danh sách con trỏ trƣớc và thời gian sống.

Khi một nút nhận đƣợc gói RREQ, RREP hoặc RRER, nó sẽ kiểm tra bảng định tuyến đã có entry biểu diễn đƣờng tới đích. Nếu chƣa có, nó sẽ tạo entry mới. Một entry chỉ đƣợc cập nhật nếu số thứ tự đích của nó: (i) cao hơn số thứ tự đích; (ii) bằng với số thứ tự đích nhƣng số chặng của đƣờng mới cộng một nhỏ hơn số chặng hiện tại của entry hiện tại; (iii) chƣa đƣợc biết đến.

Thời gian hoạt động của mỗi entry đƣợc xác định từ gói điều khiển nhận đƣợc hoặc đƣợc khởi tạo tới bằng giá trị ACTIVE_ROUTE_TIMEOUT. Khi entry đƣợc sử dụng để chuyển tiếp gói dữ liệu, giá trị trƣờng này đƣợc cập nhật bằng thời gian hiện tại cộng với ACTIVE_ROUTE_TIMEOUT. Nếu thời gian hiện tại lớn hơn giá trị trƣờng này, entry sẽ đƣợc đánh dấu là không hợp lệ.

Các nút trong danh sách này sẽ nhận các thông báo về sự kiện liên kết tới chặng kế tiếp bị đứt. Danh sách các con trỏ trƣớc chứa địa chỉ các nút láng giềng của các đƣờng nghịch.

Tạo gói yêu cầu tìm đƣờng RREQ

Giao thức AODV sử dụng gói tin RREQ để gửi yêu cầu tìm đƣờng. Cấu trúc gói RREQ đƣợc biểu diễn trong Hình 1.11.

Một nút sẽ gửi gói RREQ khi cần chuyển tiếp một gói dữ liệu tới một đích nhƣng nó không có entry hợp lệ trong bảng định tuyến. Trƣờng Destination Sequence Number đƣợc thiết lập bằng số thứ tự đích của entry có đích tƣơng ứng trong bảng định tuyến. Nếu entry này không tồn tại, cờ „U‟ đƣợc thiết lập là True. Trƣờng Originator Sequence Number đƣợc thiết lập giá trị bằng số thứ tự của nút cộng một. Trƣờng RREQ ID đƣợc thiết lập bằng giá trị RREQ ID của nút cộng một. Mỗi nút duy trì giá trị RREQ ID một cách độc lập. Trƣờng Hop Count đƣợc thiết lập bằng 0. Trƣờng Originator IP Address và Destination IP Address chứa địa chỉ IP tƣơng ứng của nút hiện tại (nguồn) và nút đích.

Trƣớc khi quảng bá gói RREQ, nút nguồn lƣu giá trị trƣờng RREQ ID và Originator IP Address trong khoảng thời gian PATH_DISCOVERY_TIME. Khi một nút nhận lại gói tin chính gói tin này từ các nút láng giềng, gói tin sẽ không đƣợc xử lý và chuyển tiếp. Nếu cờ „G‟ đƣợc thiết lập, khi nút trung gian gửi gói RREP để trả lời đƣờng, nó sẽ thông tin cho nút đích đƣờng quay trở lại nút nguồn.

Số gói RREQ đƣợc tạo trong một giây phải nhỏ hơn RREQ_RATELIMIT. Sau khi gửi gói RREQ, nút nguồn đợi gói RREP trong khoảng thời gian NET_TRAVERSAL_TIME. Sau khoảng thời gian này, nút nguồn sẽ quảng bá một gói RREQ khác với số lần gửi lại lớn nhất là RREQ_RETRIES. Để giảm tắc nghẽn, giá trị của khoảng thời gian đợi gói RREP ở lần truyền lại gói RREQ thứ n sẽ là (2n x NET_TRAVERSAL_TIME).

Dữ liệu cần chuyển tiếp trong thời gian tìm đƣờng đƣợc lƣu trữ vào bộ nhớ đệm kiểu FIFO. Nếu sau RREQ_RETRIES lần gửi lại gói RREQ, nút nguồn không tìm đƣợc đƣờng, dữ liệu trong bộ nhớ đệm sẽ bị xóa và thông điệp Destination Unreachable sẽ đƣợc gửi tới ứng dụng.

Điều khiển truyền gói RREQ

Để hạn chế sự quảng bá của gói RREQ, các nút trong giao thức AODV có thể sử dụng thuật toán tìm đƣờng mở rộng dần theo vòng trên cơ sở thay đổi giá trị trƣờng TTL trong gói IP chứa gói RREQ. Giá trị trƣờng này đƣợc khởi tạo ở lần tìm đƣờng thứ nhất là TTL_START. Nếu sau thời gian RING_TRAVERAL_TIME, nút nguồn không nhận đƣợc gói trả lời đƣờng RREP, nó sẽ tăng giá trị trƣờng TTL lên TTL_INCREMENT đơn vị và gửi lại gói RREQ. Việc này sẽ tiếp tục cho đến khi TTL đƣợc thiết lập trong RREQ đạt

đến ngƣỡng TTL_THRESHOLD, ngoại trừ trƣờng hợp TTL=NET_DIAMETER đƣợc sử dụng cho mỗi lần thử truyền lại RREQ. Sau mỗi lần, khoảng thời gian timeout chờ để nhận một thông điệp RREP là RING_TRAVERAL_TIME. Khi muốn thông điệp RREQ đi qua toàn bộ mạng trong mọi lần thử truyền lại, cần thiết lập cả giá trị TTL_START và TTL_INCREMENT bằng giá trị NET_DIAMETER.

Nếu trong bảng định tuyến tồn tại một entry tới đích nhƣng không còn hợp lệ, giá trị TTL đƣợc khởi tạo bằng tổng số chặng của entry và TTL_INCREMENT.

Xử lý và chuyển tiếp các thông điệp RREQ

Khi một nút nhận đƣợc một gói RREQ, đầu tiên nó sẽ tạo hoặc cập nhật entry biểu diễn đƣờng tới nút gửi gói RREQ cho nó. Sau đó, nó sẽ kiểm tra để xác định nó đã đƣợc nhận gói này trƣớc đó chƣa. Nếu đã nhận, nút này sẽ huỷ bỏ gói RREQ. Nếu chƣa nhận đƣợc, nó sẽ thực hiện các việc sau: (1) tăng giá trị trƣờng hop count trong gói RREQ đƣợc tăng lên một đơn vị; (2) tìm đƣờng nghịch có đích là Originator IP Address của gói RREQ trong bảng định tuyến của mình. Nếu chƣa có thì tạo đƣờng nghịch mới. Nếu đã có thì cập nhật đƣờng nghịch nếu đƣờng nghịch nhận đƣợc có số thứ tự mới hơn số thứ tự của đƣờng hiện tại; (3) cập nhật số thứ tự đích của nút nếu số thứ tự đích của gói RREQ lớn hơn số thứ tự hiện tại của nút; (4) chuyển tiếp gói RREQ nếu không có đƣờng tới đích hoặc trả lời bằng gói RREP nếu có đƣờng tới đích. Trong trƣờng hợp gói RREQ cần đƣợc chuyển tiếp, giá trị trƣờng TTL đƣợc trừ đi 1 đơn vị và gói này đƣợc gửi kiểu broadcast trên tất cả các giao tiếp mạng của nút. Trƣờng hợp trả

lời bằng gói RREP, nếu giá trị cờ „G‟ trong gói RREQ bằng 1, gói RREQ sẽ đƣợc gửi kiểu unicast đến đích.

Tạo gói trả lời đƣờng RREP

Giao thức AODV dùng gói tin RREP (Hình 1.12) để trả lời truy vấn đƣờng. Một nút tạo gói RREP nếu nó là nút đích hoặc nó có entry biểu diễn đƣờng tới nút đích có giá trị số thứ tự đích lớn hơn hoặc bằng với số thứ tự đích của gói RREQ nó nhận đƣợc.

Khi tạo ra một thông điệp RREP, giá trị trƣờng Destination IP Address và trƣờng Originator IP Address đƣợc sao chép từ thông điệp RREQ. Sau đó, gói RREP đƣợc truyền kiểu unicast theo đƣờng nghịch mà gói RREQ đã đi qua. Tại mỗi nút trung gian, giá trị trƣờng Hop Count sẽ đƣợc tăng 1 đơn vị.

Nếu nút tạo gói RREP là nút đích, nó phải tăng số thứ tự của nó lên một đơn vị nếu số thứ tự trong thông điệp RREQ lớn hơn số thứ tự hiện tại của nó. Nút đích sẽ thiết lập giá trị cho trƣờng Destination Sequence Number bằng số thứ tự của nó, thiết lập giá trị trƣờng Hop Count bằng 0, thiết lập giá trị trƣờng Lifetime bằng giá trị MY_ROUTE_TIMEOUT của nó.

Hình 1.12. Cấu trúc gói RREP

Gọi entry trong bảng định tuyến chứa đƣờng tới nút đích là entry hiện tại. Nếu nút tạo thông điệp RREP không phải là nút đích, nó sẽ thiết lập giá trị trƣờng Destination Sequence Number bằng giá trị entry hiện tại; cập nhật các danh sách con trỏ trƣớc của entry biểu diễn đƣờng thuận tới đích và đƣờng nghịch tới nguồn tƣơng ứng bằng địa chỉ IP của nút gửi gói RREQ cho nó và địa chỉ IP của chặng kế tiếp thuộc đƣờng tới đích; thiết lập trƣờng Hop Count bằng giá trị Hop Count của entry hiện tại; thiết lập giá trị trƣờng Lifetime bằng hiệu giữa thời gian timeout của hiện tại và thời gian hiện tại.

Nhận và chuyển tiếp gói RREP

Khi một nút nhận gói RREP, nó sẽ tạo một entry chứa đƣờng tới nút gửi gói RREP và entry chứa đƣờng thuận tới nút đích nếu những entry này chƣa tồn tại. Sau đó, nút này sẽ tăng giá trị trƣờng Hop Count lên một đơn vị. Nếu đã tồn tại entry chứa đƣờng thuận tới đích, nút hiện tại sẽ cập nhật entry này nếu: (1) Số thứ tự của entry đƣợc đánh dấu là không hợp lệ; (2) Giá trị trƣờng Destination Sequence Number lớn hơn số thứ tự của nó; (3) Số thứ tự đích trong gói RREP bằng nhau số thứ tự của nó và giá trị Hop Count của gói RREP nhỏ hơn giá trị Hop Count của entry hiện tại. Các công việc cập nhật entry đƣờng thuận bao gồm: Thiết lập trạng thái entry là hợp lệ; Thiết lập trạng thái số thứ tự đích của entry là hợp lệ; Thiết lập Next Hop của entry là địa chỉ IP của nút gửi gói RREP tới nó; Thiết lập giá trị trƣờng Hop Count, Lifetime và Destination Sequence Number của entry tƣơng ứng bằng giá trị Hop Count và Lifetime và Destination Sequence Number của gói RREP. Nút hiện tại sau đó có thể sử dụng đƣờng biểu diễn bởi entry này để chuyển tiếp các gói dữ liệu đến đích.

Nếu nút nhận gói RREP không phải là nút khởi tạo yêu cầu tìm đƣờng, nó sẽ tìm entry chứa đƣờng tới nút nguồn trong bảng định tuyến để xác định nút tiếp theo nhận gói RREP đƣợc nó chuyển tiếp.

Gói Hello

Giao thức AODV sử dụng gói Hello nhƣ là một phần của gói RREP để duy trì trạng thái kết nối. Gói Hello chỉ sử dụng 4 trƣờng của gói RREP. Khi một nút gửi gói Hello, trƣờng Destination IP chứa địa chỉ IP của nút gửi, Destination Sequence Number chứa số thứ tự hiện tại của nút, Hop Count thiết lập bằng 0 và Lifetime thiết lập bằng giá trị ALLOWED_HELLO_LOSS * HELLO_INTERVAL. Mỗi nút thuộc một đƣờng đang hoạt động sẽ quảng bá gói Hello trong gói IP có giá trị trƣờng TTL bằng 1 theo chu kỳ HELLO_INTERVAL. Nếu một nút đã nhận đƣợc một gói HELLO trƣớc đó và nó không nhận đƣợc gói Hello tiếp theo sau khoảng thời gian bằng ALLOWED_HELLO_LOSS * HELLO_INTERVAL, nút này coi nhƣ liên kết giữa nó với nút gửi gói Hello đã bị đứt và khởi tạo tiến trình báo lỗi đƣờng bằng gói RRER.

Gói báo lỗi đƣờng RERR

Khi một nút nhận đƣợc thông tin về một đƣờng bị lỗi hoặc một liên kết bị phá vỡ, nó sẽ: (1) làm mất tính hiệu lực của các con đƣờng đang tồn tại; (2) xác định danh sách các nút đích bị ảnh hƣởng; (3) xác định các nút láng giềng bị ảnh hƣởng; (4) truyền gói RERR tới các nút láng giềng bị ảnh hƣởng.

Gói RRER đƣợc tạo ra khi một nút gặp phải một trong các tình huống: (i) khi liên kết tới chặng kế tiếp của đƣờng tới đích bị đứt; (ii) khi nhận đƣợc gói dữ

liệu có đích mà không có entry hợp lệ; (iii) khi nhận đƣợc gói RRER liên quan tới các đƣờng trong bảng định tuyến.

Hình 1.13. Cấu trúc gói RRER

Trƣớc khi truyền thông điệp RERR, việc cập nhật đƣợc thực hiện đối với các entry chứa đích không đến đƣợc trong bảng định tuyến bao gồm: (1) tăng số thứ tự đích của entry với trƣờng hợp (i) và (ii) hoặc thiết lập số thứ tự đích bằng giá trị trƣờng Unreachable Destination Sequence Number của gói RRER trong trƣờng hợp (iii); (2) làm mất tính hiệu lực của entry bằng trạng thái Invalid; (3) thiết lập giá trị trƣờng Lifetime của entry bằng thời gian hiện tại công với giá trị DELETE_PERIOD. Sau khoảng thời gian Lifetime, nếu trạng thái của entry không thay đổi, entry này sẽ bị xoá khỏi bảng định tuyến.

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp tiếp cận theo thiết kế xuyên tầng nhằm tối ưu hóa năng lượng trong mạng manet (Trang 29 - 38)