KHỚP TIỀN TỐ DÀI NHẤT
Chương 3 và chương 4 tiếp theo ta lần lượt nghiên cứu hai phương pháp định tuyến trên bảng định tuyến động. Sau đây là phương pháp đầu tiên dùng cây tìm kiếm ưu tiên trình bày ở chương 2 xây dựng cấu trúc dữ liệu cho bảng định tuyến để giải quyết bài toán so khớp tiền tố dài nhất.
3.1 Mở đầu
Định tuyến trên Router bao gồm rất nhiều các công việc, các thủ tục và kỹ thuật rất phức tạp. Nhiệm vụ mà bài toán này tôi đi giải quyết đó là: từ các dữ liệu đầu vào đã có trên bảng định tuyến và địa chỉ đã lấy được từ phần đầu của gói tin, ta đi tìm một Next Hop phù hợp nhất để chuyển gói tin đó đến.
3.1.1 Khớp tiền tố dài nhất
Trong bảng định tuyến bao gồm trường prefix. Vậy trên người ta dùng cách nào để xây dựng được các tiền tố ấy?
Trên Router người ta dùng định tuyến phân lớp giữa các miền CIDR chia các địa chỉ IP thành các khối tiền tố, để đăng ký sử dụng Internet giữa các vùng.
CIDR sử dụng kỹ thuật mặt nạ mạng có chiều dài thay đổi (VLSM- Variable Length Subnet Masking) cho phép định vị trí các tiền tố có chiều dài tùy ý. Khối CIDR IPv4 (W = 32) được xác định bởi A.B.C.D/N trong đó A.B.C.D là địa chỉ IP (Mỗi số A, B, C, D có giá trị từ 0-255) N chiều dài tiền tố (có giá trị 0-32).
Ví dụ một khối có địa chỉ bắt đầu là 220.78.168.0 hoặc biểu diễn dạng nhị phân là 11011100.01001110.10101000.00000000; địa chỉ kết thúc
là 220.78.175.0 hoặc 11011100.01001110.10101111.00000000. Ta thấy 21 bít (bôi đậm) của hai địa chỉ giống nhau, 3 bít cuối cùng của octet thứ 3 có giá trị khác nhau từ 000 đến 111. Do vậy đầu vào trong bảng định tuyến trở thành 220.78.168.0/21 hay 11011100.01001110.10101*. Trong đó 21 là chiều dài tiền tố.
Với cấu trúc này mỗi địa chỉ IP là một phần của tiền tố, và một địa chỉ IP có thể khớp với nhiều tiền tố có chiều dài khác nhau. Việc tìm một tiền tố khớp với địa chỉ đích d thì tiền tố và địa chỉ đích phải có N bít đầu giống nhau.
Giả sử với địa chỉ IP 5 bít (số bít để biểu diễn một địa chỉ IP). Tiền tố 1101* khớp với tất cả các địa chỉ đích mà bắt đầu với các bít 1101. Khi biểu diễn các tiền tố thành một đoạn thì 1101* trở thành {11010,11011} = {26,27}, Giả sử một bảng định tuyến Router bao gồm các tiền tố P1=101*, P2=10010*, P3=01*, P4=1* và P5=1010*. Địa chỉ đích d=1010100 khớp với các tiền tố P1, P4, P5. Trong đó P5 là tiền tố dài nhất khớp với d.
Ta nhận thấy, một tiền tố có thể biểu diễn bởi một đoạn với điểm đầu và điểm kết thúc của đoạn tương ứng là địa chỉ đầu và địa chỉ cuối khớp với một tiền tố đó. Vì vậy từ đây về sau ta hiểu biểu diễn một tiền tố là một đoạn, nhưng một đoạn thì không là một tiền tố.
Trong định tuyến tiền tố dài nhất, xác định Next Hop cho gói tin có địa chỉ đích d là Next Hop của tiền tố khớp với d mà có độ dài lớn nhất.
3.1.2 Lý thuyết về đoạn
Trong phần này, tôi không ham muốn trình bày những kiến thức toán học rất phức tạp. Đoạn mà tôi trình bày sau đây được hiểu theo nghĩa là một đoạn địa chỉ, bao gồm các địa chỉ từ địa chỉ bắt đầu đến địa chỉ kết
thúc. Nội dung phần này sẽ cho ta những cơ sở lý thuyết cho việc giải quyết bài toán tìm tiền tố dài nhất.
Định nghĩa 1: Một đoạn r=[ ]u v, là một cặp địa chỉ u và v, u v≤ .
Một đoạn r biểu diễn các địa chỉ {u, u+1, …, v}. start(r)=u là điểm bắt đầu của đoạn và finish(r) = v là điểm cuối của đoạn. Đoạn r chứa hoặc là khớp với tất cả các địa chỉ d sao cho u d v≤ ≤ . range(q) xác nhận là đúng nếu q là một đoạn.
Chú ý: mọi tiền tố của bảng định tuyến tiền tố có thể biểu diễn một đoạn. Ví dụ: khi W=6, tiền tố P = 1101* khớp với các địa chỉ trong đoạn [52, 55]. Do dó, chúng ta nói P = 1101* = [52, 55], start(P) = 52, finish(P) = 55.
Khi một đoạn biểu diễn một tập liên tiếp các điểm, ta sử dụng các phép toán, quan hệ tập hợp chuẩn như ∩và ⊂ khi xử lý trên đoạn. ví dụ [2, 6] ∩[4, 8] = [4, 6].
Một số phép toán giữa các đoạn không phải là một đoạn. ví dụ: [2, 6]
∪[8, 10] = {2, 3, 4, 5, 6, 7, 8, 9, 10}
Định nghĩa 2: Cho r = [u, v] và s = [x, y] là hai đoạn. Đặt overlap(r, s) = r∩s.
(a)disjoint(r, s) – hai đoạn rời nhau. Khẳng định disjoint(r, s) là đúng nếu r và s là rời nhau.
disjoint(r, s) ⇔overlap(r, s) = ∅ ⇔v < x∨y<u
(b)nested(r, s) – hai đoạn chứa nhau.
Khẳng định nested(r, s) là đúng nếu một đoạn được chứa bên trong đoạn kia.
r s s r
⇔ ⊆ ∨ ⊆
x u v y u x y v
⇔ ≤ ≤ ≤ ∨ ≤ ≤ ≤
(c) intersect(r, s) – hai đoạn giao nhau khẳng định intersect(r, s) là đúng nếu r và s có phần giao nhau khác rỗng
intersect(r, s)⇔ ∩ ≠ ∅ ∧ ∩ ≠ ∧ ∩ ≠r s r s r r s s
⇔ ¬disjoint r, s( )∧¬nested r, s( )
Chú ý overlap(r, s) = [x, v] khi u<x≤v<y và overlap(r, s) = [u, y] khi x<u≤
y<v
Ví dụ: [2, 4] và [6, 9] là rời nhau; [2, 4] và [3, 4] là chứa nhau; [2, 4] và [2, 2] là chứa nhau; [2, 8] và [4, 6] là chứa nhau; [2, 4] và [4, 6] là giao nhau; [3, 8] và [2, 4] là giao nhau. [4, 4] = overlap của [2, 4] và [4, 6]; overlap ([3, 8], [2, 4]) = [3, 4]
Hình 3.1. Mối quan hệ giữa các cặp đoạn. (A) Hai đoạn rời nhau.
(B) Hai đoạn chứa nhau. (C) Hai đoạn giao nhau
Bổ đề 1: r, s là hai đoạn thì một trong các hàm sau sẽ đúng
i) disjoint(r,s)
ii) nested(r, s)
Định nghĩa 3. Cho R={r1, …, rn} là tập hợp của n đoạn. Phép
chiếu, ∏( )R của R là
1
( )R = ∪≤ ≤i n ir
∏
Nghĩa là, ∏( )R bao gồm tất cả các địa chỉ mà được chứa bởi ít nhất 1 đoạn trong R.
Với A = {[2, 5], [3, 6], [8,9]}, ∏( )A = {2, 3, 4, 5, 6, 8, 9}, với B = {[4, 8], [7, 9]}, ∏( )B ={4, 5, 6, 7, 8, 9}. ∏( )A không phải là đoạn, ∏( )B
là đoạn [4, 9].
Chú ý: ∏( )R là một đoạn nếu d⊆∏( )R với mọi d, u d v≤ ≤ với
min{d|d (R)}
u= ∈∏ và v=max{d|d∈∏(R)}.
Bổ đề 2. Cho R=(r1, r2,…,rn) là tập hợp của n đoạn sao cho
( ) [u, v]R = ∏
(a) u = minStart(R) = min{start(ri)} và v=maxFinish(R) = max{finish(ri)}
(b) cho s là một đoạn. ∏(R∪{s})là một đoạn nếu start(s)≤v+1 và finish(s)≥u-1.
(c) Khi ∏(R∪{s})=[x,y], x = min{u, start(s)} và y=max{v, finish(s)}
Chứng minh: (a) dễ dàng nhận thấy.
Hình 3.2 biểu diễn tất cả các trường hợp có thể xảy ra với
(R∪{s})
∏ là một đoạn, s là đường nét liền. (b) và (c) dễ dàng kiểm tra cho mỗi trường hợp của hình 3.2.
Hình 3.2. Các trường hợp của bổ đề 1
Định nghĩa 4. Một đoạn r được gọi là đặc trưng hơn đoạn s khi và
chỉ khi r⊂s
Hai đoạn chứa nhau thì có một đoạn đặc trưng hơn đoạn còn lại. Trường hợp hai đoạn giao nhau và rời nhau thì không có đoạn nào đặc trưng hơn đoạn khác
Ví dụ: [2, 4] thì đặc trưng hơn [1, 6], [5, 9] đặc trưng hơn [5, 12]. [2, 4] và [8,14] không có đoạn nào đặc trưng hơn đoạn khác. Tương tự thế, [4, 14] và [6, 20] không có đoạn nào đặc trưng hơn.
Định nghĩa 5. Cho R là tập hợp các đoạn.
i) ranges(d, R) (hoặc đơn giản ranges(d) khi R ẩn) là một tập con của R sao cho các phần tử trong tập khớp với địa chỉ đích d.
ranges(d, R) = {[u, v]|[u , v] ∈ R và u≤d≤v}
ii) msr(d, R)7 (hoặc msr(d)) là đoạn đặc trưng nhất của R và khớp với d. Nghĩa là msr(d) là đoạn đặc trưng nhất trong ranges(d).
msr([u, v], R) = msr(u, v, R) = r nếu msr(d, R) = r, u≤d≤v. Khi R ẩn, ta dùng msr(u, v) và msr([u, v]) thay thế.
Trong tìm đường trên đoạn đặc trưng nhất, Next Hop cho một gói tin có địa chỉ đích d cho bởi thông tin next-hop tương ứng với msr(d).