CHƢƠNG 1 : TỔNG QUAN MẠNGCẢM BIẾN KHÔNG DÂY
2.4 Giao Thức Định Tuyến AODV
2.4.1 Định dạng các bản tin sử dụng trong giao thức AODV
Giao thức định tuyến AODV dùng 4 loại bản tin để định tuyến, sửa lỗi, duy trì tuyến đƣờng: yêu cầu tìm đƣờng, trả lời tìm đƣờng, lỗi tìm đƣờng, phản hồi trả lời tìm đƣờng[8].
2.4.1.1 Định dạng bản tin yêu cầu tìm đường (RREQ)
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
Loại J R G D U Dự trữ Đếm chặng
Số ID của bản tin RREQ Địa chỉ IP đích
Số đếm đích Địa chỉ IP nguồn
Số đếm nguồn
Hình 2.2 : Định dạng bản tin RREQ[8].
Định dạng của bản tin RREQ đƣợc biểu diễn bằng bảng trên với ý nghía của các trƣờng nhƣ sau[8]:
Bảng 2.1 : Định dạng bản tin RREQ
Trường Ý nghĩa
Loại 1
J Cờ Joint ; dành riêng cho multicast
R Cờ Repair ; dành riêng cho multicast
G Cờ RREP để trống
D Cờ Destination only; cho biết chỉ có nút đích mới hồi đáp lại gói tin RREQ này
U Cho biết rằng số đếm ở nút đích không xác định
Dự trữ Các bit để dành, mặc định là 0
Số ID của bản tin RREQ Số ID để xác định duy nhất một gói tin RREQ nhất định khi có trùng lặp về địa chỉ IP của nút nguồn Địa chỉ IP đích Địa chỉ IP của nút đích mà nút nguồn cần tìm đƣờng tới
Số đếm đích Số Sequence cuối cùng mà nút nguồn lƣu về nút đích
Địa chỉ IP nguồn Địa chỉ IP của nút nguồn ban đầu gửi gói tin RREQ
Số đếm nguồn Số sequence hiện tại của nút nguồn ban đầu gửi gói tin RREQ
2.4.1.2 Định dạng bản tin trả lời tìm đường (RREP)
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 Loại R A Dự trữ Kích thƣớc tiền tố Đếm chặng Địa chỉ IP đích Số đếm đích Địa chỉ IP nguồn Thời gian sống Hình 2.3 : Định dạng bản tin RREP[8].
Định dạng của bản tin RREP đƣợc biểu diễn bằng bảng trên với ý nghía của các trƣờng nhƣ sau[8]:
Bảng 2.2: Định dạng bản tin RREP
Trường Ý nghĩa
Loại 2
R Cờ Repair; Sử dụng cho multicast
A Yêu cầu có gửi lại xác nhận
Dự trữ Các bit để dành, mặc định là 0
Kích thước tiền tố
Nếu khác 0, 5 bit phần Prefix size sẽ chỉ ra rằng nút tiếp theo đƣợc chỉ ra sẽ đƣợc sử dụng cho tất cả các nút với cùng tiền tố
(đƣợc định nghĩa bởi Prefix size) nhƣ là địa chỉ đƣợc yêu cầu.
Đếm chặng
Số lƣợng các nút tính từ nút nguồn đến nút hiện tại đang xử lý gói tin RREQ này
Địa chỉ IP đích Địa chỉ IP của nút đích mà nút nguồn cần tìm đƣờng tới
Số đếm đích Số đếm cuối cùng mà nút nguồn lƣu về nút đích
Địa chỉ IP nguồn Địa chỉ IP của nút nguồn ban đầu gửi gói tin RREQ
Thời gian sống Thời gian để nút nguồn nhận lại bản tin trả lời tìm đƣờng
2.4.1.3 Định dạng bản tin lỗi tìm đường (RERR)
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
Loại N Dự trữ Đếm đích
Địa chỉ IP đích không thể tới Số đếm đích không thể tới
Địa chỉ IP đích không thể tới đƣợc thêm (Nếu cần) Số đếm đích không thể tới đƣợc thêm (Nếu cần)
Hình 2.4 : Định dạng bản tin RERR[8].
Định dạng của bản tin RERR đƣợc biểu diễn bằng bảng trên với ý nghía của các trƣờng nhƣ sau[8].
Bảng 2.3: Định dạng bản tin RERR
Trường Ý nghĩa
Loại 3
N Cờ không xóa; đƣợc khởi tạo khi 1 nút thực hiện sửa cục bộ cho 1 kết nối, và nốt nhận đƣợc bản tin này sẽ không xóa
tuyến đƣờng nó biết về nút đƣợc báo lỗi.
Dự trữ Các bit để dành, mặc định là 0
Đếm đích Số các nút đích không thể thực hiện kết nối đƣợc nêu trong bản tin; phải có ít nhất một nút.
Địa chỉ IP đích không thể tới Địa chỉ IP của nút đích không thực hiện kết nối đƣợc
Số đếm đích không thể tới Số Sequence trong bảng định tuyến của nút khởi tạo bản tin RERR về nút đích không thể thực hiện kết nối đƣợc nêu ở
trƣờng Unreachable Destination IP address
2.4.1.4 Định dạng gói tin phản hồi trả lời tìm đường (RREP-ACK)
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
Loại Dự trữ
Hình 2.5 : Định dạng bản tin RREP-ACK[8].
Định dạng của bản tin RREP-ACK đƣợc biểu diễn bằng bảng trên với ý nghĩa của các trƣờng nhƣ sau[8]:
Bảng 2.4: Định dạng bản tin RREP-ACK.
Trường Ý nghĩa
Loại 4
Dự trữ Các bit để dành, mặc định là 0
2.4.2 Nguyên lý hoạt động của giao thức 2.4.2.1 Số đếm 2.4.2.1 Số đếm
Mỗi bảng định tuyến tại tất cả các nút đều phải lƣu giữ những thông tin mới nhất có thể về số đếm của tất cả các nút đích mà bảng định tuyến đang duy trì một đƣờng đi khả dụng đến đó. Số đếm này đƣợc gọi là “số đếmđích”. Nó đƣợc cập nhật bất cứ khi nào nút đó nhận đƣợc thông tin mới (mới xét theo mặt thông tin chứ không xét theo mặt thời gian) về số đếmtừ các bản tin RREQ, RREP, hoặc RERR mà nó nhận đƣợc có liên quan đến nút đích này. Giao thức AODV phụ thuộc vào việc từng nút ở trong
mạng lƣu và duy trì các số đếmđích trong bảng định tuyến của mình, từ đó giúp cho nó có thể ngăn ngừa hiện tƣợng lặp trong mạng bằng cách kiểm tra các số đếmtrong các bản tin. Một nút đích tăng số đếmcủa riêng nó trong 2 trƣờng hợp[8]:
Ngay lập tức trƣớc khi nút khởi tạo một bản tin yêu cẩu RREQ, nút phải tăng số đếmcủa nó. Việc này giúp ngăn chặn việc trùng lặp khi các nút khác nhận đƣợc bản tin RREQ sẽ thực hiện kiểm tra số đếmđể tạo đƣờng ngƣợc quay lại nút khởi tạo bản tin RREQ ban đầu[8].
Ngay lập tức khi nút đích thực hiện khởi tạo bản tin đáp trả RREP để hồi đáp lại bản tin RREQ nhận đƣợc[8].
Số đếmđƣợc lƣu dƣới dạng số nguyên không dấu. Khi một nút nhận đƣợc thông tin về số đếmcủa một nút nào đó, nó sẽ kiểm tra giá trị này với số đếmcũng của nút này mà nó lƣu trong bảng định tuyến. Nếu số đếmthu đƣợc từ bản tin lớn hơn số đƣợc lƣu trong bảng định tuyến tức là thông tin này là mới hơn, vậy nó sẽ tự động cập nhật lại bảng định tuyến của mình[8].
Chỉ duy nhất một trƣờng hợp khác mà một nút có thể thay đổi số đếmđích trong bảng định tuyến là khi tuyến đƣờng này đang ở trạng thái liên kết bị mất hoặc hết hạn với nút kế tiếp trong trong tuyến đƣờng đó. Khi đó, nút sẽ xác định nhữngnút đích bị ảnh hƣởng bởi sự mất kết nối với nút kế tiếp này bằng cách tra bảng định tuyến. Trong trƣờng hợp này, các nút bị ảnh hƣởng sẽ đƣợc nút này tăng số đếmlên 1 và đánh dấu tuyến đƣờng này là lỗi. Từ đây, nút sẽ chờ đến khi nào nó nhận đƣợc thông tin định tuyến về các nút bị ảnh hƣởng đủ tƣơi hơn thông tin cũ (có số đếmlớn hơn hoặc bằng số đếmnó đang lƣu), khi đó nó sẽ cập nhật lại bảng định tuyến của mình với thông tin mới vừa thu đƣợc[8].
Một nút chỉ thực hiện thay đổi số đếmtrong bảng định tuyến về một nút nào đó trong các trƣờng hợp sau đây[8]:
Bản thân nó là nút đích, và nó chuẩn bị gửi bản tin hồi đáp RREP tới nút tạo bản tin yêu cầu RREQ về nó[8].
Nó nhận đƣợc một bản tin AODV với thông tin về số đếmcủa nút đích mới hơn[8].
Đƣờng đi tới nút đích này bị gãy hoặc là bị hết hạn[8].
2.4.2.2 Quá trình tìm đường khởi tạo kết nối
Một nút khởi tạo bản tin yêu cầu RREQ khi nó xác định đƣợc rằng mình cần một tuyến đƣờng đến nút đích nào đó và trong bảng định tuyến của nó, nó không có tuyến đƣờng khả dụng nào đến nút này cả. Điều này có thể xảy ra nếu nút muốn gửi tin chƣa hề biết thông tin gì về nút đích này cả, hoặc là tuyến đƣờng khả dụng trƣớc đã hết hạn hoặc đƣợc đánh dấu là lỗi. Trƣờng số đếmđích trong bản tin RREQ là số đếmmới nhấtcủa nút đích mà nút khởi tạo có và giá trị này đƣợc sao chép từ trƣờng số đếmđích
trong bảng định tuyến. Nếu không có số đếmđích, cờ “số đếmkhông xác định” trong bản tin RREQ đƣợc dựng là 1. Số đếmnguồn trong bản tin RREQ chính là số đếmcủa nút khởi tạo bản tin RREQ này. Trƣờng RREQ ID đƣợc tăng thêm 1 từ số RREQ ID lần cuối đƣợc sử dụng tại nút đó. Mỗi nút chỉ có duy nhất một số RREQ ID. Trƣờng “Đếm chặng” đƣợc đặt là 0[8].
Trƣớc khi phát quảng bá gói tin RREQ, nút khởi tạo sẽ lƣu lại số RREQ ID và địa chỉ IP của nó vào bộ nhớ đệm trong khoảng thời gian là “PATH_DISCOVERY_TIME”. Bằng cách này, khi nút nhận đƣợc bản tin này từ hàng xóm của nó, nó sẽ không thực hiện xử lý hoặc chuyển tiếp gói tin[8].
Nút khởi tạo luôn mong chờ có sự liên lạc hai chiều với nút đích. Trong trƣờng hợp này, nếu nút nguồn có đƣờng đi tới nút đích không thôi là không đủ, nút đích cũng phải có đƣờng đi quay lại nút nguồn. Để thực hiện đƣợc điều này, các nút trung gian khi nhận đƣợc các bản tin RREQ, RREP, RERR, chúng đều thực hiện lƣu thông tin để tạo đƣờng ngƣợc về các nút khởi tạo bản tin này[8].
Một nút không thực hiện khởi tạo nhiều hơn “RREQ_RATELIMIT” bản tin RREQ trong 1 giây. Sau khi phát quảng bá 1 bản tin RREQ, nút đó sẽ đợi bản tin hồi đáp RREP (hoặc các bản tin điều khiển khác chứa thông tin về về tuyến đƣờng tới nút đích đang đƣợc tìm kiếm). Nếu tuyến đƣờng không nhận trong khoảng thời gian “NET_TRAVERSAL_TIME”(ms), nút đó có thể tiếp tục phát quảng bá bản tin yêu cầu RREQ để tìm đƣờng, số lần gửi yêu cầu lại không vƣợt quá “RREQ_RETRIES” lần. Và với mỗi lần phát lại này, nút phải tăng số RREQ ID lên 1 trong các bản tin RREQ của mình[8].
Các gói tin dữ liệu sẽ chờ cho tuyến đƣờng đƣợc khởi tạo thành công (đợi bản tin RREP sau khi bản tin yêu cầu RREQ đƣợc gửi đi) và đƣợc lƣu vào bộ đệm. Việc lƣu vào bộ đệm này tuân theo quy tắc “vào trƣớc ra trƣớc” (First in, first out – FIFO). Nếu quá trình tìm đƣờng đã đƣợc thực hiện “RREQ_RETRIES” lần mà không nhận đƣợc bất cứ bản tin RREP nào, tất cả bản tin dữ liệu gửi đến nút đích này đều bị bỏ khỏi hàng đợi và bản tin không tìm thấy nút yêu cầu (Destination Unreachable message) sẽ đƣợc gửi cho chƣơng trình ở lớp cao hơn[8].
Để giảm tắc nghẽn trong mạng, việc lặp lại bản tin RREQ từ nút nguồn đến đích trong quá trình tìm đƣờng phải thực hiện theo thuật toán phân bố nhị phân hàm mũ. Khi nút nguồn phát bản tin RREQ đầu tiên, nó sẽ chờ trong một khoảng thời gian “NET_TRAVERSAL_TIME” (ms) cho tới khi nhận đƣợc bản tin RREP. Nếu nó không nhận đƣợc bản tin RREP trong thời gian đó, nó sẽ gửi một bản tin RREQ mới. Sau khi gửi bản tin RREQ thứ hai, nút nguồn sẽ tính toán khoảng thời gian chờ theo thuật toán phân bố nhị phân hàm mũ. Do đó thời gian chờ bản tin RREP sau khi gửi bản tin RREQ thứ hai là “2 * NET_TRAVERSAL_TIME” (ms). Nếu trong khoảng thời gian này nút nguồn vẫn không nhận đƣợc bản tin RREP thì nó sẽ gửi tiếp bản tin
RREQ khác cho đến khi đạt giá trị ngƣỡng bản tin RREQ là “RREQ_RETRIES”. Với mỗi lần gửi lại một bản tin RREQ thì thời gian chờ lại tăng lên hai lần[8].
Để ngăn chặn việc bản tin RREQ đƣợc quảng bá ra toàn mạng một cách không cần thiết, nút nguồn sử dụng một công nghệ tìm kiếm vòng mở rộng. Trong công nghệ này, các nút nguồn ban đầu đặt “TTL=TTL_START” trong bản tin RREQ và thiết lập thời gian chờ cho việc nhận bản tin RREP là “RING_TRAVERSAL_TIME” (ms). Thời gian này đƣợc tính bằng công thức sau[8]:
RING_TRAVERSAL_TIME = 2 * NODE_TRAVERSAL_TIME *
(TTL_VALUE + TIMEOUT_BUFFER)[8]
Nếu sau một số lần quảng bá bản tin RREQ mà không nhận đƣợc bản tin RREP thì nút nguồn ban đầu sẽ tăng giá trị TTL lên một khoảng là “TTL_INCREMENT”, điều này cứ tiếp tục cho đến khi TTL đạt đến giá trị ngƣỡng “TTL_THRESHOLD”[8]. Giá trị “Đếm chặng” đƣợc lƣu trữ trong bảng định tuyến, chỉ ra “Đếm chặng” mới nhất đi đến nút đích. Khi có một đƣờng đi mới đến cùng một đích trong một khoảng thời gian sau đó, giá trị TTL trong bản tin RREQ đƣợc thiết lập bằng “Đếm chặng + TTL_INCREMENT”. Sau đó giá trị TTL đƣợc tăng lên một khoảng là “TTL_INCREMENT”, điều này cứ tiếp tục cho đến khi TTL đạt đến giá trị ngƣỡng “TTL_THRESHOLD”. Khi TTL=NET_DIAMETER thì khi đó thời gian chờ TTL đƣợc thiết lập bằng khoảng thời gian “NET_TRAVERSAL_TIME”[8].
Khi một nút nhận đƣợc bản tin RREQ, nó sẽ tạo ra hoặc cập nhật một đƣờng đi đến nút trƣớc đó mà không có một số thứ tự hợp lệ, sau đó nó sẽ kiểm tra hai thông tin địa chỉ nút đích và số ID của bản tin RREQ vừa nhận đã đƣợc nhận từ trƣớc hay chƣa, nếu nút đã nhận bản tin RREQ với các thông tin giống nhƣ bản tin vừa nhận thì bản tin RREQ vừa nhận sẽ bị hủy. Nếu là bản tin RREQ đầu tiên, nó sẽ tăng giá trị “Đếm chặng” thêm 1. Sau đó nút sẽ tạo và cập nhật một đƣờng ngƣợc về nút nguồn. Khi một bản tin RREQ đƣợc nhận, giá trị thời gian sống của đƣờng ngƣợc về nút nguồn là giá trị lớn nhất của hai giá trị “Thời gian sống đang tồn tại” và “Thời gian sống nhỏ nhất”, trong đó[8].
Thời gian sống nhỏ nhất = (thời gian hiện tại + 2*NET_TRAVERSAL_TIME - 2*Đếm chặng*NODE_TRAVERSAL_TIME) [8]
Một nút nhận đƣợc bản tin RREQ, sẽ thực hiện gửi lại bản tin RREP khi[8]:
Nó chính là nút đích đƣợc chỉ ra trong bản tin RREQ[8].
Nó biết đƣờng đi tới nút đích đƣợc chỉ ra trong bản tin RREQ, số đếm đích trong bảng định tuyến cho nút đích này là khả dụng và lớn hơn hoặc bằng số đếmđích trong bản tin RREQ[8].
Bản tin RREP sẽ đƣợc truyền đơn hƣớng về nút đầu tiên khởi tạo bản tin RREQ. Tuyến đƣờng sẽ đƣợc tạo dựa trên các bảng định tuyến tại các nút mà bản tin RREP đi
qua. Các bản ghi về nút nguồn đầu tiên khởi tạo bản ghi RREQ này đã đƣợc tạo ra do các nút trung gian tạo đƣờng ngƣợc về nút nguồn mỗi khi nhận đƣợc bản tin RREQ. Trƣờng “Đếm chặng” sẽ tăng lên qua mỗi nút, bởi vậy khi bản tin RREP đến đƣợc nút nguồn, giá trị của trƣờng “Đếm chặng” trong bản tin RREP sẽ biểu diễn chiều dài của tuyến đƣờng (theo số nút) từ nút nguồn đến nút đích[8].
Để dễ hiểu, có thể biểu diễn phƣơng thức AODV thực hiện khởi tạo kết nối bằng cách biểu diễn dƣới dạng thuật toán nhƣ sau:
//S là nút nguồn, D là nút đích //RT= bảng định tuyến
//S muốn kết nối với D
Nếu (RT của S có đƣờng đi khả dụng tới D) S sẽ thiết lập kết nối tới D
Ngƣợc lại
S tạo bản tin yêu cầu RREQ và phát quảng bá nó đến các hàng xóm của mình Cho ( tất cả các nút nhận đƣợc bản tin RREQ)
Nếu (RREQ này đã xử lý từ trƣớc) Bỏ đi bản tin RREQ bị trùng Kết thúc nếu
Nếu ( nó là D)
Gửi bản tin RREP tới nút ban đầu gửi đi bản tin RREQ này Ngƣợc lại nếu (N có một tuyến đƣờng tới D với SeqId >= RREQ.Seq)
Gửi bản tin RREP
Ngƣợc lại
Lƣu lại thông tin nút gửi bản tin RREQ này Phát quảng bá bản tin RREQ
Kết thúc nếu Kết thúc cho
S nhận đƣợc bản tin RREP
S cập nhật RT của nó dựa trên nút gửi bản tin RREP S thiết lập kết nối với D
Sau đây là ví dụ mô tả cách thức tìm đƣờng của giao thức AODV.
Hình 2.6 : Ví dụ bản tin RREQ phần 1
Nút S là nút nguồn. Các nút trong mạng sử dụng giao thức AODV là giao thức định tuyến. Tại thời điểm ban đầu, nút S muốn tìm đƣờng đến nút D
Hình 2.7 : Ví dụ bản tin RREQ phần 2
Nút S bắt đầu phát quảng bá bản tin RREQ. Nút B,C,E nhận đƣợc bản tin RREQ.
Hình 2.8 : Ví dụ bản tin RREQ phần 3
Nút B,C,E thấy mình không phải là nút đích và cũng không có đƣờng đi khả dụng nào đến nút đích trong bảng định tuyến, nút B,C,E thực hiện chuyển tiếp bản tin