Giao thức DSR (Dynamic Source Routing)

Một phần của tài liệu Tìm hiểu công nghệ manet và xây dựng ứng dụng truyền tệp (Trang 33 - 86)

DSR (Dynamic Source Routing – Định tuyến nguồn động) là giao thức định tuyến đơn giản và hiệu quả được thiết kế riêng cho mạng MANET. DSR cho phép mạng tự động tổ chức và cấu hình mà không cần đến sự can thiệp của người quản trị hoặc cơ sở hạ tầng sẵn có của mạng.

Giao thức DSR là giao thức định tuyến phản ứng (Reactive) sử dụng cơ chế định tuyến nguồn (source routing), nghĩa là bên gửi sẽ biết toàn bộ thông tin về đường đi đến đích. Phần Header của gói dữ liệu sẽ lưu trữ thứ tự các nút mà gói tin cần phải đi qua để đạt tới đích. Do vậy, các nút trung gian chỉ cần giữ liên lạc với các nút hàng xóm của nó để chuyển tiếp các gói tin.

Tại mỗi một nút trong mạng luôn duy trì một bộ nhớ đệm (Router Cache), đây là cấu trúc dữ liệu lưu trữ các con đường đã biết. Khi có đường đi tồn tại trong Router Cache, các gói tin sẽ nhận thông tin về đường đi và thực hiện việc truyền tin trên con đường đã chọn. Ngược lại, khi không tồn tại đường đi trong Router Cache hoặc có tồn tại đường đi nhưng không còn hiệu lực, DSR sẽ thực hiện cơ chế phát hiện đường (Route Discovery) bằng cách gởi các gói tin quảng bá Route Request đến các nút lân cận trên toàn bộ mạng. Các nút trung gian nhận được gói tin quảng bá sẽ kiểm tra đường đi trong Route Cache. Khi đường đi được tìm thấy, gói tin Route Reply sẽ chứa thứ tự các chặng tới đích và được truyền trở lại nguồn.

Như vậy, hoạt động của giao thức DSR bao gồm hai cơ chế chính: cơ chế tạo thông tin định tuyến (Route Discovery) và cơ chế duy trì thông tin định tuyến (Route Maintanance).

2.1.3.2. Cơ chế xƣ̉ lý khám phá đƣờng của DSR

Trong mạng Adhoc tìm kiếm đường đi đến đích một cách tự động thông qua các node trung gian, tiến trình tạo thông tin định tuyến sẽ phát gói tin Route Request (RREQ) đến các node lân cận của nó trong mạng. Ngoài các trường bình thường như: địa chỉ nguồn, địa chỉ đích, đường dẫn…, thông tin

trong gói RREQ còn chứa một số request ID là một số được tạo ra bởi node nguồn và là số không trùng nhau. Khi một node nhận gói RREQ thì nó sẽ tiến hành kiểm tra thông tin trong RREQ như sau [4],[8]:

Hình 2.2: Cơ chế xử lý khám phá đường tại node của DSR Phát RREQ đến các node hàng xóm Trƣớc đó node chƣa nhận RREQ? <Source, Request_id>

Hủy gói RREQ

N

Node không có đƣờng đi đến đích trong Route

Cache?

Y

Node không là node đích?

Y

Phản hồi RREP về nguồn

Y

- Cập nhật thông tin về nguồn trong Router cache

- Cập nhật lại đƣờng dẫn cho gói RREQ

N

Kết thúc tiến trình khám phá

đƣờng Thêm <Source, Request_id> vào Router cache

của node

Nối đƣờng đi trong RREQ và đƣờng đi đã có trong Router cache, cập nhật vào

RREQ N Bắt đầu tiến trình khám phá đƣờng tại nguồn Kết thúc tiến trình xƣ̉ lý gói RREQ đã nhận

Bước 1: Thông qua trường request ID, nó sẽ kiểm tra xem đã nhận gói tin này hay chưa? Nếu đã tồn tại thì nó sẽ loại bỏ gói tin đó và không xử lí gì thêm. Ngược lại thì qua bước 2.

Bước 2: Nó kiểm tra trong Route Cache của nó có đường đi đến node đích mà

còn hiệu lực hay không? Nếu có đường đi đến đích thì nó sẽ phản hồi lại cho node nguồn bằng gói Route Reply (RREP) chứa thông tin về đường đi đến đích và kết thúc tiến trình. Ngược lại thì qua bước 3.

Bước 3: Nó kiểm tra địa chỉ đích cần tìm có trùng với điạ chỉ của nó hay

không? Nếu trùng thì nó gởi lại cho node nguồn gói Route Reply (RREP) chứa thông tin về đường đi đến đích và kết thúc tiến trình. Ngược lại thì nó sẽ phát quảng bá (broadcast) gói tin RREQ đến các nút láng giềng của nó. Các nút láng giềng sau khi nhận gói tin RREQ sẽ thực hiện quay về bước 1 kiểm tra thông tin

Như vậy, quá trình này cứ tiếp tục cho đến khi node nguồn nhận được thông tin về đường đi đến đích hoặc thông tin rằng không thể định tuyến đến đích. Gói Route Reply (RREP) được gởi đến nguồn bằng cơ chế phát Unicast với Source Route là đảo ngược Source Route trong gói RREQ.

Giả sử xét mô hình mạng Adhoc với mô hình truyền thông như hình 2.3, nút S cần truyền dữ liệu đến nút D. Hình 2.3: Mô hình mạng Adhoc S E A F B K G H I S D J

Khả năng thứ nhất: Trong Route Cache của các nút hiện tại là rỗng. Nút S sẽ phát gói tin Router Request (RREQ) đến các nút lân cận của nó [4].

Hình 2.4:Nút S phát gói tin RREQ đến các nút lân cận A, E, F

Nút A, E, F sẽ kiểm tra mình có phải là đích hay không? Nếu không sẽ kiểm tra trong Route Cache về đường đi đến đích. Theo giả thuyết ban đầu thì trong Route Cache sẽ không có thông tin về đường đi đến đích. Do đó, nút E, F, A sẽ cập nhật thông tin về đường đi về nguồn vào Route Cache thông qua gói tin RREQ, đồng thời sẽ phát gói tin RREQ đến các nút lân cận của nó.

Bảng 2.1: Thông tin lưu trữ trong Route Cache tại thời điểm 1

Nút A, E, F sẽ phát gói tin RREQ đến các nút lân cận của nó

Tại thời điểm này tại A và F đều nhận gói tin RREQ (vì A là nút láng giềng của F và ngược lại). Do đó, hai gói tin này sẽ bị hủy vì đã tồn tại trước đó. Đồng thời, quá trình tìm kiếm đường đi vẫn chưa hoàn thành vì chưa đạt đến đích. Vì vậy, các nút lân cận sẽ lưu trữ thông tin về đường đi đến nguồn trong Route Cache và tiếp tục gửi gói tin RREQ đến các nút lân cận của nó.

Bảng 2.2:Thông tin lưu trữ trong Route Cache tại thời điểm 2

Nút B, K, G sẽ phát gói tin RREQ đến các nút lân cận của nó

Hình 2.6:Nút B, K, G phát gói tin RREQ đến các nút C, G, H, K

Tại thời điểm này, nút H cùng nhận gói RREQ từ 2 nút K và G. Trong trường hợp này, gói tin nào đến sau sẽ bị loại bỏ. Giả sử gói tin gửi từ K đến sau, vì thế giao thức DSR sẽ loại bỏ gói tin này. Tiến trình khám phá đường đi vẫn tiếp tục thực hiện.

Nút H, C sẽ phát gói tin RREQ đến các nút lân cận của nó

Hình 2.7: Nút H, C phát gói tin RREQ đến các nút láng giềng I, D, J

Bảng 2.4:Thông tin lưu trữ trong Route Cache tại thời điểm 4

Tại thời điểm này, D nhận được gói RREQ và kiểm tra biết được mình chính là đích nên tiến trình khám phá đường đến đích dừng. Giao thức DRS sẽ thực hiện các công việc sau:

 D sẽ phát gói tin phản hồi Route Reply (RREP) về nguồn thông qua

đường đã tìm được.

 Nút I vẫn tiếp tục phát gói RREQ để tìm đường đến D. Tuy nhiên,

khi tìm thấy D thì gói tin RREQ sẽ lập tức bị hủy vì D đã nhận gói tin này trước đó, đồng thời D gửi gói tin RREP về nguồn S thông qua đường này.

 Nút J vẫn tiếp tục phát gói RREQ để tìm đến D. Tuy nhiên, trong trường hợp này nút I không tìm thấy và sẽ gửi gói RREP về nguồn.

Trong khi các gói tin RREP được gửi về nguồn, Route Cache sẽ tiếp tục lưu trữ đường đi ngược lại từ đích. Sau khi nút nguồn S nhận được gói tin phản hồi RREP, S sẽ biết được được đường đi đến đích và tiến hành gửi dữ liệu theo con đường này.

Hình 2.8:Nút D phát gói tin RREP về nút S theo đường đã khám phá

Như vậy, trong trường hợp này sẽ có 2 con đường đi từ nút S đến nút D đó là: S,A,B,C,D và S,F,G,H,I,D. Giao thức DSR sẽ sử dụng một trong hai con đường này để truyền dữ liệu từ nút S đến nút D. Trong quá trình truyền dữ liệu nếu đường thứ nhất đang sử dụng bị hỏng thì giao thức sẽ sử dụng đường thứ hai và ngược lại. Trong trường hợp cả hai đường bị hỏng thì tiến trình khám phá đường (Router Discovery) sẽ tự động thực hiện lại.

Khả năng thứ hai là trong Route Cache của các nút là không rỗng. Giả sử

Route Cache của nút B đã lưu trữ đường đi đến D. Tiến trình khám phá đường đi vẫn thực hiện bình thường như giả thuyết 1. Tuy nhiên, khi đến B giao thức DSR sẽ kiểm tra trong Route Cache và phát hiện được đường đi đến D chính là đích, nên tiến trình khám phá đường sẽ dừng và nút B sẽ gửi gói tin phản hồi RREP về nguồn thông qua đường đi đã xác định.

2.1.4. Cơ chế duy trì thông tin định tuyến (Route Maintanance)

Route Maintanance cho phép các nút trong hệ thống mạng tự động bảo trì thông tin định tuyến trong Route Cache. Trong giao thức định tuyến DSR,

các node khi chuyển gói tin trên mạng đều phải có nhiệm vụ xác nhận rằng các gói tin đó đã chuyển đến node kế tiếp hay chưa (thông qua sự phản hồi thông tin của node nhận). Trong một trường hợp nào đó mà node đó phát hiện rằng gói tin không thể truyền đến node kế tiếp. Nó sẽ gởi gói Route Error (RERR) cho node nguồn để thông báo tình trạng hiện thời của liên kết và điạ chỉ của node kế tiếp mà không thể chuyển đi. Khi node nguồn nhận được gói RERR, nó sẽ xóa con đường đi mà liên kết bị hỏng trong Route cache và tìm một đường đi khác mà nó biết trong route cache hoặc sẽ khởi động một tiến trình route discovery mới nếu như không tồn tại đường đi thích hợp trong Route cache [3],[11].

Hình 2.9:Minh họa cơ chế duy trì thông tin định tuyến

2.1.5. Giao thức AODV (Adhoc On Demand Distance Vector)

Giao thức định tuyến AODV là một trong những giao thức định tuyến theo cơ chế phản ứng trong hệ thống mạng MANET. Tương tự như giao thức DSR, AODV cũng phát gói tin broadcast để yêu cầu tìm đường khi có nhu cầu. Tuy nhiên điểm khác biệt cơ bản đối với giao thức DSR là AODV sử dụng nhiều cơ chế khác để duy trì thông tin bảng định tuyến, chẳng hạn như 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 cơ chế Source Routing và cũng không cần biết thông tin về các node 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 tin RREP về node nguồn và node nguồn 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 kỹ thuật Sequence Number (kỹ thuật này dùng để nhận ra các con đường đi không còn giá trị trong quá trình cập nhật bảng định tuyến) để loại bỏ những đường đi không còn giá trị trong bảng định tuyến. Mỗi node sẽ có một bộ tăng số Sequence Number riêng cho nó.

Tương tự như cơ chế hoạt động của DSR, quá trình định tuyến của AODV cũng bao gồm 2 cơ chế chính: cơ chế tạo thông tin định tuyến và cơ chế duy trì thông tin định tuyến [8],[11].

2.1.6. Cơ chế tạo thông tin định tuyến của AODV

Cơ chế tạo thông tin định tuyến sẽ được thiết lập khi một nút nguồn có nhu cầu trao đổi thông tin với một nút khác trong hệ thống mạng. Trong hệ thống mạng MANET hoạt động theo giao thức AODV, mỗi nút trong hệ thống mạng luôn duy trì 2 bộ đếm: Bộ đếm Sequence Number và Bộ đếm

REQ_ID (Requirement Identifier). Cặp thông tin <Sequence Number,

REQ_ID> là định danh duy nhất cho một gói tin RREQ. Cặp thông tin này sẽ bị thay đổi giá trị khi:

2.1.6.1. Đối với Sequence Number

Trước khi một node khởi động tiến trình route discovery, đều này nhằm chống sự xung đột với các gói tin RREP trước đó.

Khi nhận được một gói tin RREP gửi từ nút đích để trả lời gói tin RREQ, nó sẽ cập nhật lại giá trị Sequence number lớn nhất của một trong 2 giá trị là Sequence number hiện hành mà nó lưu giữ đối với Sequence number trong gói RREQ.

2.1.6.2. Đối với REQ_ID (Requirement Identifier)

Khi có một sự thay đổi trong toàn bộ các nút lân cận của nó dẫn đến sẽ có một số tuyến đường trong bảng định tuyến sẽ không còn hiệu lực. Số

REQ_ID sẽ được tăng lên khi node khởi động một tiến trình route discovery mới.

Hình 2.10: Các trường trong gói tin RREQ

Tiến trình Route Discovery được khởi động khi nào một node muốn trao đổi dữ liệu với một node khác mà trong bảng định tuyến của nó không có thông tin định tuyến đến node đích đó. Khi đó tiến trình sẽ phát broadcast một gói RREQ cho các node 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 khởi tạo giá trị ban đầu là 0),… còn có các trường: số sequence number của node nguồn, số broadcast ID, giá trị sequence number được biết lần cuối cùng của node đích. Khi các node láng giềng nhận được gói RREQ, nó sẽ kiểm tra tuần tự theo các bước.

Hình 2.11:Cơ chế xử lý khám phá đường tại node của AODV

Bước 1: Xem các gói RREQ đã được xử lý 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 chuyển qua bước 2.

Trƣớc đó node chƣa nhận RREQ? <Source, Broadcast_id>

Hủy gói RREQ

Y

Node không là đích?

N

Không có đƣờng trong Router cache?

Hoặc

Có đƣờng nhƣng DSN của Router cache nhỏ hơn DSN của RREQ

N

Y

Phản hồi RREP về nguồn

N

- Thiết lập đƣờng dẫn ngƣợc về node phát RREQ - Hop_cnt = Hop_cnt + 1

Y

Phát RREQ đến các hàng xóm

Thêm <Source, Request_id> vào Router cache của node Bắt đầu tiến trình khám phá

đƣờng tại nguồn

Kết thúc tiến trình khám phá đƣờng

Kết thúc tiến trình xử lý gói RREQ đã nhận

Bước 2: Nếu trong 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 entry chứa thông tin về đường đi với số Destination sequence number trong gói RREQ, nếu số Destination sequence number trong RREQ lớn hơn số Destination squence number trong entry thì nó sẽ không sử dụng thông tin trong entry của bảng định tuyến để trả lời cho node nguồn mà nó sẽ tiếp tục phát Broadcast gói RREQ đó đến cho các node láng giềng của nó. Ngược lại nó sẽ phát Unicast cho gói RREP ngược trở lại cho node láng giềng của nó để báo đã 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, TTL. Ngược lại thì qua bước 3.

Bước 3: 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ẽ tự động thiết lập một đường đi ngược (Reverse path ) từ nó đến node nguồn bằng cách ghi nhận lại địa chỉ của node láng giềng mà nó nhận gói RREQ lần đầu tiên. Entry chứa đường đi ngược này sẽ được tồn tại trong một khoảng thời gian đủ để gói RREQ tìm đường đi đến đích và gói RREP phản hồi cho node nguồn, sau đó entry này sẽ được xóa đi.

Hình 2.12: Các trường trong gói tin RREP

Quá trình kiểm tra này sẽ lặp tuần tự cho đến khi gặp node đích hoặc một node trung gian mà có các đều kiện thỏa bước 2. Trong quá trình trả về gói RREP, một node có thể nhận cùng lúc nhiều gói RREP, khi đó nó sẽ chỉ xử lý gói RREP có số Destination Sequence number lớn nhất, hoặc nếu cùng số Destination sequence number thì nó sẽ chọn gói RREP có số Hop-count nhỏ

nhất. Sau đó nó sẽ cập nhật 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 [3],[4],[10],[11].

2.1.7. Cơ chế duy trì thông tin định tuyến AODV

Như đã nhận xét ở trên, cơ chế hoạt động của AODV là không cần phải biết thông tin về các nút láng giềng, chỉ cần dựa vào các entry trong bảng định

Một phần của tài liệu Tìm hiểu công nghệ manet và xây dựng ứng dụng truyền tệp (Trang 33 - 86)