c. Quá trình nố i tách:
3.3 Các thuật toán đ−ờng dẫn ngắn nhất (Shortest-path Routing)
Phần lớn các mạng chuyển mạch gói sử dụng các thuật toán khác nhau của ph−ơng pháp chọn tuyến đ−ờng ngắn nhất do lớp mạng thực hiện.Một số mạng chọn tuyến theo theo cách thức tập trung, thiết lập đ−ờng dẫn giữa nút nguồn và nút đích ở trung tâm điều hành mạng NMC ( Network Management Center) hay trung tâm điều khiển chọn tuyến RCC (Routing Control Center) rồi sau đó phân phối các thông tin chọn tuyến tới tất cả các nút chuyển mạch trong mạng. Các mạng khác sử dụng cách thức phi tập trung hay còn gọi là cách thức phân bố, từng nút trao đổi thông tin chọn tuyến và giá thành với các nút khác trong mạng trên cơ sở t−ơng tác cho đến khi các bảng chọn tuyến đáp ứng đ−ợc yêu cầu chọn tuyến ngắn nhất.
Trong phần này chúng ta mô tả hai thuật toán chọn đ−ờng ngắn nhất.Trong một số mạng, ng−ời ta chọn ra một loạt các đ−ờng dẫn, đ−ợc xếp thứ tự theo giá thành, khi trên một đ−ờng dẫn xảy ra sự cố, ta có thể thay bằng đ−ờng khác theo danh mục đã có.
3.3.1 Thuật toán A (Thuật toán Dijkstra)
Xét mạng hình 3.6, trên mỗi đ−ờng ghép nối có các trọng số t−ơng ứng với giá thành của từng đ−ờng, để cho đơn giản ta coi các trọng số này theo cả hai chiều là nh− nhau, dù rằng trên thực tế chúng có thể có giá trị khác nhau. Để chọn đ−ợc đ−ờng dẫn ngắn nhất từ một nguồn tới tất cả các nút trong mạng, đòi hỏi phải có kiến thức về cấu hình tổng thể của mạng ( danh sách các nút và các ghép nối giữa chúng) cũng nh− giá thành của từng đ−ờng nối. Điều đó dẫn đến việc tính toán tập trung dựa trên thông tin đầy đủ l−u trong các cơ sở dữ liệu trung tâm (Central Database). Trong thí dụ này, chúng ta tìm đ−ờng dẫn ngắn nhất từ nút 1 tới tất cả các nút trong mạng. Thuật toán đ−ợc
thực hiện theo từng b−ớc, xây dựng mô hình cây đ−ờng ngắn nhất (Shortest- path Tree) có gốc tại nút nguồn ( nút 1). Các đ−ờng dẫn ngắn nhất tới k nút khác đ−ợc tính toán trong k b−ớc, chúng đ−ợc tập hợp lại trong tập N.
Coi D(v) là khoảng cách (tổng của các trọng số đ−ờng nối dọc theo đ−ờng dẫn ) từ nút nguồn 1 tới nút v. Coi l(i,j) là giá thành đã cho giữa hai nút i và j. Thuật toán gồm hai b−ớc:
1. B−ớc khởi đầu
Đặt N = {1} (tập N ban đầu chỉ gồm duy nhất nút 1), với mỗi nút v không thuộc N đặt D(v) = l(1,v), với các nút không nối trực tiếp với nút 1 ta coi giá thành bằng ∞.
2. B−ớc lặp
Tìm nút w không thuộc N sao cho D(w) là tối thiểu và bổ sung w vào tập N. Sau đó thay D(v) cho toàn bộ các nút không thuộc N còn lại bằng cách tính:
D(v) ← Min [D(v), D(w) + l(w, v)]
B−ớc này d−ợc lặp lại cho đến khi tất cả các nút đèu có trong N.
Sau khi thực hiện, ta lần l−ợt có đ−ợc các b−ớc mô tả bởi bảng thống kê sau:
Bảng 3-1 Bảng mô tả thuật toán
B−ớc Tập N D(2) D(3) D(4) D(5) D(6) 0 1 2 3 4 5 {1} {1,4} {1,4,5} {1,2,4,5} {1,2,3,4,5} {1,2,3,4,5,6} 2 2 2 2 2 2 5 4 3 3 3 3 1 1 1 1 1 1 ∞ 2 2 2 2 2 ∞ ∞ 4 4 4 4 Mô hình cây đ−ờng ngắn nhất nếu lấy nút 1 làm nút nguồn có thể mô tả nh− hình vẽ sau: 2 2 1 2 3 3 2 1 5 Hình 3.6
Đích Nút tiếp theo 2 3 4 5 6 2 4 4 4 4
Thuật toán chọn tuyến đ−ờng ngắn nhất trên có thể đ−ợc minh hoạ bằng ch−ơng trình sau:
{ Tìm đ−ờng dẫn ngắn nhất giữa nguồn và các nút còn lại trong mạng }
Const n =. ..; {số l−ợng các nút}
infinity =. ..; {số lớn hơn mọi trọng số}
Type node = 0..n;
nodelist = array [1..n] of node;
matrix = array [1..n, 1..n] of integer;
Procedure ShortestPath (a: matrix; s, t: node; var path: nodelist);
{ Tìm đ−ờng dẫn ngắn nhất từ nguồn s tới ma trận a và trả kết quả về path }
Type lab = (perm, tent) ; {Nhãn cố định hay tạm thời} NodeLabel = record predecessor: node;
length: integer; labl: lab; end;
GraphState = array [1..n] of NodeLabel;
var state: GraphState; i,k: node; min: integer; begin
for i: = 1 to n do
Hình 3.7: Thuật toán đ−ợc áp dụng cho mạng hình 2-6 với nút 1 là nút nguồn
Hình (a) Mô hình cây đ−ờng ngắn nhất Hình (b) Bảng chọn tuyến cho nút 1
with state [i] do begin
predecessor: =0; length:= infinity; labl:=tent end;
state [t].length:=0;state [t].labl:=perm; k:=t; {k là nút làm việc khởi đầu} repeat {tìm xem có nút nào tốt hơn k không} for i:=1 to n do
if (a[k,i] <> 0) and (state[i].labl = tent) then
{i là nút kế cạnh và tạm thời}
if (state[k].length + a[k,i] < state[i].length) then
begin
state[i].predecessor:=k;
state[i].length:= state[i].length + a[k,i];
end;
{tìm nút có nhãn tạm thời với nhãn nhỏ nhất} for i:=1 to n do
if (state[i].length < min) and (state[i].labl = tent) then
begin
min:= state[i].length; k:=i;
end;
until k = s; {lặp cho đến khi đạt đến nguồn} {Ghi đ−ờng dẫn vào mảng ra}
k:=s; i:=0; repeat i:= i+1; path[i]:=k; k:= state[k].predecessor; until k=0; End; {Kết thúc thủ tục tính đ−ờng ngắn nhất}
Với thuật toán tính này ta có thể tính đ−ợc các tuyến đ−ờng có đ−ờng dẫn ngắn nhất cho từng nút, cụ thể ta coi nút đó là nút nguồn rồi thực hiện các b−ớc kể trên. Trong tr−ờng hợp chọn tuyến theo ph−ơng thức tập trung, NMC sẽ gửi các bảng chọn tuyến cho từng nút một sau khi đã thiết lập xong, còn nếu mạng sử dụng ph−ơng thức phân bố thì từng nút phải tự tính lấy bảng chọn tuyến, cùng sử dụng các thông tin tổng thể nh− trên (đ−ợc cung cấp bởi các nút lân cận hoặc bởi NMC ) và chọn ra cây đ−ờng dẫn cho riêng nó.
Trong phần tiếp theo chúng ta sẽ mô tả một thuật toán khác cũng là loại thuật toán chọn tuyến ngắn nhất.
Thuật toán này cũng gồm hai phần: b−ớc khởi đầu và b−ớc lặp cho tới khi tính xong các tuyến đ−ờng dẫn. Sự khác biệt với thuật toán đã trình bày là ở chỗ thay vì coi nút 1 là nút nguồn thì ta coi nó là nút đích, đồng thời từ tất cả các nút khác ta tìm đ−ờng dẫn ngắn nhất tới đích 1 này. Trong bảng chọn tuyến ta sẽ chỉ ra khoảng cách (nhớ rằng đây cũng chỉ là giá trị trọng số trừu t−ợng để mô tả giá thành của tuyến truyền) từ nút bất kỳ tới nút 1 và nút lân cận để truyền tới đích 1 theo tuyến ngắn nhất. Việc tạo bảng chọn tuyến sử dụng thuật toán này đòi hỏi phải lặp đi lặp lại cho từng nút một, và cuối cùng cho ghi tất cả vào trong một tập các nhãn cho từng nút, mỗi nhãn có thông tin chọn tuyến (nút tiếp theo) và khoảng cách tới đích cuối cùng.
Mỗi nút v có nhãn (n, D(v)), với D(v) là giá trị hiện thời của khoảng cách ngắn nhất từ nút đó tới đích, còn n là số hiệu của nút tiếp theo trên đ−ờng dẫn ngắn nhất tạm thời.
1. B−ớc thứ nhất
Coi nút 1 là nút đích, đặt D(v) = 0 và gán (, ∞) cho tất cả các nút khác. 2. B−ớc lặp: dán nhãn khoảng cách cho các nút còn lại
Với từng nút khác 1 ta thực hiện nh− sau:
Thay D(v) bởi giá trị hiện thời D(w) với từng nút lân cận w để tính giá trị D(w) + l(w, v) và thực hiện phép toán
D(v) ← min [D(w] = l(w, v) (*)
Sau đó, gán nhãn mới của v bằng cách thay n bởi nút lân cận t−ơng ứng với biểu thức (*) tính đ−ợc và thay giá trị mới tìm đ−ợc vào D(v).
Với mạng ví dụ nh− hình 3-6, ta thiết lập bảng các vòng thực hiện sau: Bảng 3-2 thuật toán thứ hai dùng cho mạng hình 3-6:
Vòng Nút đích /Nhãn 2 3 4 5 6 0 1 2 1 1 1 (., ∞) (1, 2) (1, 2) (., ∞) (1, 5) (5, 3) (., ∞) (1, 1) (1, 1) (., ∞) (4, 2) (4, 2) (., ∞) (5, 4) (5, 4) Sau hai vòng lặp, các giá trị nhãn trở nên bất biến, có nghĩa rằng thuật toán đã đ−ợc thực hiện xong. Nh− vậy, trong vòng 1 nhận thấy nút 2 là “gần nhất” đối với nút 1, giá thành mới của nó là D(v) = D(1) + l(1,2) = 2, và nhãn của nó chuyển thành (1,2). Chuyển tới nút 3, ta có thể chọn hoặc D(2) + l(2,3) =5 hoặc D(1) + l(1,3) = 5; giả sử ta chọn D(1) + l(1,3) thì nhãn mới của nó là (1,5) (ta cũng có thể chọn D(2) + l(2,3) vì kết quả cuối cùng nh− nhau). ậ vòng lặp thứ hai,ta có thể thay tại nút 3 nhãn mới vì giá trị tối thiểu mới là D(w) + l(w, 3) = D(5) + l(5,3) = 3, do vậy nhãn của nó là (5,3). Từ đó trở đi, các giá trị không thay đổi nên quá trình có thể coi là hoàn thành. Nếu ta xây dựng sơ dồ cây trên cơ sở các kết quả nhận đ−ợc thì ta có mô hình của hình 3- 7a, với nút 1 là gốc.
Thuật toán này đã đ−ợc áp dụng cho một số tr−ờng hợp cụ thể,ví dụ nh− trong TYMNET, theo ph−ơng thức tập trung. Nếu sử dụng thuật toán này theo ph−ơng thức phân bố, ta đ−ợc một biến dạng mới của nó, gọilà thuật toán
B dạng phi tập trung (Decentralized Version of Algorithm B) hay thuật toán phân bố.