Thuật toán định tuyến theo trạng thái đường truyền

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 128 - 131)

Trong thuật toán trạng thái đường truyền, cấu trúc mạng và giá của tất cả các liên kết đều phải được xác định trước. Điều này được thực hiện bằng cách mỗi nút sẽ gửi thông báo quảng bá về định danh của mình và giá các cung liên kết trực tiếp đến nó tới tất cả các thiết bị khác trên mạng. Việc quảng bá rộng rãi trạng thái đường truyền có thể được thực hiện ngay khi nút không biết về đầy đủ các nút khác trên mạng. Ban đầu nút chỉ biết được thông tin về các hàng xóm của mình cũng như giá các cung đến các hàng xóm. Nhưng sau đó nó sẽ xác định được hình trạng của phần còn lại của mạng khi nhận những thông báo quảng bá từ các nút khác. kết quả của việc quảng bá trạng thái liên kết là tất cả các nút có thể đầy đủ thông tin về tổng thể mạng. Sau đó mỗi nút đều có thể chạy thuật toán trạng thái đường truyền và xác định đường đi có giá thấp nhất tới mọi nút.

Hình 7.5 Xây dựng bảng định tuyến dựa trên pháp trạng thái đường truyền Thuật toán trạng thái đường truyền thường được sử dụng là thuật toán Dijkstra, đó là thuật toán xác định đường đi có giá thấp nhất từ một nút nguồn đến tất cả các nút khác trên mạng. Thuật toán Dijkstra có nhiều bước và sau k bước sẽ xác định được đường đi có giá thấp nhấp tới ít nút đích. Chúng ta định nghĩa một số ký hiệu sau:

c(i, j): giá liên kết từ nút i đến nút j. Nếu nút i và nút j không có đường kết nối trực tiếp thì c(i, j)=. Để đơn giản, chúng ta coi c(i, j)= c(j, i).

P(v) : nút phía trước nút v (hàng xóm của v) trên tuyến đường hiện có giá thấp nhất từ nguồn tới nút v.

N: tập hợp của các nút đã xác định được đường đi ngắn nhất tới.

Thuật toán Dijkstra gồm có bước khởi tạo cho vòng lặp, số các bước bằng tổng số nút trên mạng. Khi kết thúc, thuật toán sẽ xác định được đường đi ngắn nhất từ nút nguồn đến tất cả các nút khác trên mạng. Thuật toán Link state(LS): Khởi tạo: N={A}

For (tất cả các nút v)

if v kề A thì D(V)=c(A,v) else D(v)= ∞ Repeat Tìm w không ở trong N có D(w) nhỏ nhất Bổ sung w vào N

cập nhật D(v) cho tất cả v kề với w và không nằm trong N: D(v)=min (D(v), D(w)+c(w,v))

/* giá mới đến v khác cũ giá cũ đến v hoặc biết được giá đường đi ngắn nhất

đến w cộng với giá tớ w đến v */ Until tất cả các nút nằm trong N

Bảng 7. 2 bảng trạng thái các bước cho mạng minh họa trên hình 5.4

Bước N D(b), p(B) D(c), p(C) D(D), p(D) D(E), p(E) D(F), p(F) 0 A 2, A 5, A 1, A ∞ ∞ 1 AD 2, A 4, D 2,D ∞ 2 ADE 2, A 3, E 4, E 3 ADEB 3, E 4, E Bước N D(b), p(B) D(c), p(C) D(D), p(D) D(E), p(E) D(F), p(F) 4 ADEBC 4, E 5 ADEBCF

Xét đồ thị mạng trong hình 7.4 và tính đường đi có giá thấp nhất từ A đến tất cả các nút khác bảng 4.2 cho thấy các kết quả tính của thuật toán, mỗi dòng trong bảng ứng với trạng thái của thuật toán sau khi kết thúc một bước. Sau đây chúng ta sẽ phân tích một số bước đầu tiên:

- Trong bước khởi tạo, giá hiện tại thấp nhất của đường đi từ A đến các nút hàng xóm B, C và D tương ứng là 2, 5, và 1. Chúng ta có một chú ý nhỏ ở đây, giá đến C được đặt là 5 (ngay sau đây chúng ta sẽ thấy đây không phải là đường đi tốt nhất) vì đây là giá của đường nói trực tiếp từ A đến C. Giá

đến E và F được đặt là vô cùng vì giữa A và E, F không có đường kết nối trực tiếp.

- Trong bước đầu tiên chúng ta tìm kiếm trên những nút chưa được đưa vào tập N và xác định nút có giá đến thấp nhất. Đó là nút D với giá là 1 và do đó D được bổ sung vào N. Dòng 12 của thuật toán LS được thực hiện để cập nhật D(v) cho tất cả các nút v, kết quả nhận được được trình bày trong dòng thứ 2 (bước 1) trong bảng 4.2. Giá của đường đi đến B không đổi. Giá đường đi đến C (nhận giá trị 5 trong bước khởi tạo trước) qua D có giá trị nhỏ hơn là 4. Đây là đường Tốt hơn được chọn và nút phía trước của C trên đường đi ngắn nhất từ A sẽ là D. tương tự vậy, giá đường đi đến E (qua D) được tính là 2 và bảng được cập nhật tương ứng.

- Trong bước thứ hai, đường đi đến nút B và E đều có giá thấp nhất và chúng ta bổ sung E vào tập N (Bây giờ N chứa A, D và E). Giá đến các nút chưa nằm trong N (gồm B, C và F) được cập nhật trong dòng 12 của thuật toán LS, kết quả là dòng 3 của bằng 4.2..

Khi thuật toán LS kết thúc, với mỗi nút chúng ta xác định được nút ngay trước nó trên tuyến đường có giá thấp nhất xuất phát từ nguồn. với mỗi nút phía trước chúng ta lại có nút phía trước nữa” Cuối cùng chúng ta xác định được toàn bộ đường đi từ nguồn đến tất cả các nút đích.

Độ phức tạp tính toán của thuật toán này bằng bao nhiêu? với n nút (không kể nút nguồn), để tìm đường đi có giá thấp nhất từ nguồn đến tất cả các đích, khối lượng tính toán là bao nhiêu trong trường hợp xấu nhất? Trong vòng lặp đầu tiên chúng ta cần kiểm tra qua tất cả n nút để xác định nút w có giá nhỏ nhất không nằm trong N; trong vòng lặp thứ hai, chúng ta cần kiếm tra n - 1 nút để xác định giá thấp nhất trong vòng lặp thứ ba là n - 2 nút … tổng số các nút mà chúng ta cần phải kiểm tra qua tất cả các bước là n(n+l)/2 và theo đó chúng ta có thể nói rằng thuật toán Link state có độ phức tạp là O(n2). (Thuật toán này có thể được cải tiến bằng cách sư dụng cầu trúc dữ liệu HEAP, độ phức tạp chỉ còn theo hàm logarit của n).

Trước khi kết thúc về thuật toán LS, chúng ta hãy xét ví dụ minh họa một cấu hình mạng giống như trên hình 5.5. Giá của mỗi liên kết (cung) bằng Tải hiện tại trên nó (như thế giá sẽ là độ trễ mà gói tin phải chịu). Trong trường hợp này giá không có tính chất đối xứng, nghĩa là c(A, B) chỉ bằng c(B, A) nếu tải trên cả hai hướng AB là như nhau. Giả sử hai nút B và D gửi một đơn vị dữ liệu, nút C gửi khối lượng dữ liệu là e tới A. Định tuyến ban đầu được minh họa trên hình 5.5(a), giá của mỗi cung ứng với tải trên cung đó.

Trong bước tiếp theo của thuật toán LS, nút C (với giá liên kết cơ bản đã được xác định trong hình 7.6a) nhận thấy đường đi đến A theo chiều kim đồng hồ có giá là 1, trong khi theo chiều ngược lại có giá là 1+e. Do đó, đường đi đến A có giá thấp nhất của C bây giờ là theo chiều kim đồng hồ. Tương tự, B nhận thấy đường đi đến A có giá thấp nhất mới cứng theo chiều kim đồng hồ, kết quả được trình bày trong hình 7.6b. Trong bước tiếp theo, nút B, C và D nhận thấy đường đi đến A ngược chiều kim đồng hồ có giá là 0 và tất cả các nút định lại

tuyến đường theo ngược chiều kim đồng hồ. Trong bước tiếp theo B, C và D lại thay đổi việc định tuyến theo chiều kim đồng hồ.

Hình 7.6 Xung đột định tuyến

Lảm thế nào có thể ngăn ngừa sự dao động như trên (điều này luôn xuất hiện với những thuật toán chọn độ tắc nghẽn hoặc thời gian trễ làm giá cho đường truyền). Một giải pháp được đưa ra là định giá cho đường truyền không phụ thuộc vào tải trên đường đi, một giải pháp khó có khả năng chấp nhận vì mục tiêu của định tuyến là tránh những đường truyền hay tắc nghẽn (có độ trễ cao). Một giải pháp khác là làm thế nào để tất cả các thiết bị định tuyến không chạy thuật toán LS tại cùng một thời điểm. Giải pháp này dường như hợp lý hơn vì chúng ta hy vọng rằng thậm chí nếu các thiết bị định tuyến có chạy thuật toán LS với cùng chu kỳ, thì thuật toán sẽ đưa ra những kết quả khác nhau trên mỗi nút.

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 128 - 131)