Chính vì thế bộ lọc Bloomngày càng được sử dụng rộng rãi trong rất nhiều ứng dụng mạng: địnhtuyến IP, phân loại gói tin, chia sẽ bộ nhớ cache trong mạng per to per, IP
Trang 1MỤC LỤC
LỜI NÓI ĐẦU 3
Chương 1: LÝ THUYẾT VỀ BỘ LỌC BLOOM 5
1.1 Giới thiệu 5
1.2 Cấu trúc bộ lọc Bloom cơ bản 5
1.3 Cơ chế hoạt động của bộ lọc Bloom 6
1.4 Ước lượng sai số 7
1.5 Bộ lọc Bloom đếm (counting Bloom Filters) 9
1.6 Lựa chọn hàm băm 11
1.6.1 Hàm băm sử dụng phương pháp chia 11
1.6.2 Hàm băm sử dụng phương pháp nhân 12
Chương 2: 13
KHỚP TIỀN TỐ DÀI NHẤT SỬ DỤNG BỘ LỌC BLOOM 13
2.1 Định tuyến IP của router 13
2.1.1 Thiết bị định tuyến router 13
2.1.2 Bảng định tuyến 13
2.2 Thuật toán khớp tiền tố cổ điển 14
2.3 Khớp tiền tố dài nhất sử dụng bộ lọc Bloom 16
2.3.1 Giới thiệu 16
2.3.2 Cấu trúc cơ bản 17
2.3.3 Hoạt động 18
Chương 3: 22
PHÂN LOẠI GÓI TIN SỬ DỤNG BỘ LỌC BLOOM 22
3.1 Khái niệm về phân loại gói tin 22
3.2 Chức năng của bộ lọc Bloom trong phân loại gói tin 23
3.3 Thuật toán tích chéo cổ điển 24
3.4 Thuật toán tích chéo đa tập con 28
3.5 Thuật toán tìm kiếm không gian bộ mức xếp chồng 34
Trang 23.5.1 Phương pháp gom nhóm không chồng nhau (Overlap-free) 35
3.5.2 Bản đồ bit NLT và bản đồ bit PL/NL 37
3.5.3 Sơ đồ dòng của thuật toán 40
3.6 Thuật toán Tích chéo và trộn NLT (NLT Merging and Crossproduct – NLTMC) 43
Chương 4: 47
KHAI PHÁ PHẦN TỬ PHỔ BIẾN TRONG LUỒNG DỮ LIỆU SỬ DỤNG ESBF THEO MÔ HÌNH DAMPED 47
4.1 Định nghĩa luồng dữ liệu và phần tử phổ biến 47
4.2 Mô hình Damped 48
4.3 Bộ đếm phân rã theo thời gian 49
4.4 ESBF 51
4.5 Thuật toán MIBFD 53
Chương 5: CÀI ĐẶT CHƯƠNG TRÌNH 58
5.1 Giao diện chính 58
5.2 Chương trình cài đặt bộ lọc Bloom cơ bản 58
5.3 Chương trình cài đặt thuật toán khớp tiền tố dài nhất 63
5.4 Chương trình cài đặt bài toán phân loại gói tin 64
5.4.1 Thuật toán tích chéo cổ điển 65
5.4.2 Thuật toán tích chéo đa tập con 66
5.4.3 Thuật toán tìm kiếm không gian NLT 68
5.4.4 Thuật toán tích chéo và trộn NLT 69
5.4.5 So sánh các thời gian xử lý của các thuật toán 70
5.5 Chương trình cài đặt bài toán khai phá phần tử phổ biến 71
KẾT LUẬN 73
TÀI LIỆU THAM KHẢO 75
Trang 3LỜI NÓI ĐẦU
Internet là một kho dữ liệu khổng lồ, mọi người có thể tìm được bấtkỳ thông tin nào về khoa học, sức khoẻ, đời sống, tin tức, và cả việc thôngtin liên lạc qua thư điện tử, chat,…Với những ưu điểm lớn của World WideWeb, số lượng người sử dụng, máy chủ, các mạng con kết nối vào Internetngày tăng với tốc độ chóng mặt Điều đó cũng đồng nghĩa với việc lưulượng lưu thông trên mạng ngày càng tăng lên và dường như quá tải Đểgiải quyết vấn đề đó, những nghiên cứu cả về phần cứng và phần mềmkhông ngừng được nêu ra nhằm tăng tốc độ truyền tải trên mạng, tăng tốc
độ xử lý của các thiết bị mạng…Việc sử dụng mạng Internet ngày càng phổbiến thì cũng càng đặt nhiều vấn đề mới hơn như vấn đề an ninh mạng, vấnđề bảo mật thông tin trên mạng…
Bộ lọc Bloom do Burton Bloom đưa ra năm 1970 đã cho thấy đượchiệu quả của nó trong việc góp phần giải quyết một số vấn đề về tốc độ vàthời gian xử lý với cơ sở dữ liệu trên mạng Chính vì thế bộ lọc Bloomngày càng được sử dụng rộng rãi trong rất nhiều ứng dụng mạng: địnhtuyến IP, phân loại gói tin, chia sẽ bộ nhớ cache trong mạng per to per, IPtraceback, khai phá phần tử phổ biến trong luồng dữ liệu, phát hiện sự xâmnhập trong hệ thống an ninh mạng Bộ lọc Bloom cũng rất hiệu quả trongviệc xử lý với cơ sở dữ liệu nói chung nên thực sự rất hữu ích trong rấtnhiều ứng dụng thực tế khác
Trong đồ án tốt nghiệp của mình, em chọn đề tài là “Nghiên cứu bộlọc Bloom Filter và ứng dụng” gồm 3 nội dung chính:
- Lý thuyết về bộ lọc Bloom
- Tìm hiểu một số ứng dụng của bộ lọc Bloom: khớp tiền tố dàinhất, phân loại gói tin và khai phá phần tử phổ biến sử dụngESBF theo mô hình Damped
Trang 4- Cài đặt chương trình minh họa.
Em xin chân thành cảm ơn thầy giáo cùng các thầy cô trong Bộ môn
Công nghệ phần mềm, và Khoa CNTT đã tận tình hướng dẫn, chỉ bảo và
tạo mọi điều kiện giúp đỡ em hoàn thành tốt đồ án này
Trang 5Chương 1: LÝ THUYẾT VỀ BỘ LỌC BLOOM
1.1 Giới thiệu
Bộ lọc Bloom là một cấu trúc dữ liệu được dùng để biểu diễn ngắngọn một tập phần tử Bộ lọc trước hết được khởi tạo với mỗi phần tử trongtập, sau đó nó được dùng để xác định một phần tử có thuộc tập đó haykhông Nó được xây dựng bởi Burton H.Bloom năm 1970 và được sử dụngrộng rãi cho nhiều mục đích khác nhau như là web caching, phát hiện sựxâm nhập và tìm đường dựa trên nội dung… do có khả năng hạn chế nhữngtrường hợp không cần thiết phải thực hiện việc tìm kiếm
1.2 Cấu trúc bộ lọc Bloom cơ bản
Một bộ lọc Bloom cơ bản bao gồm:
- Một vectơ Bit V có kích thước là m ban đầu được thiết lập là 0
Trang 6Hình 1.1: Khởi tạo phần tử x
Khi khởi tạo bộ lọc Bloom với phần tử x thì các bit V[h1(x)],V[h2(x)],…,V[hk(x)] được gán là 1
1.3 Cơ chế hoạt động của bộ lọc Bloom
Chức năng của bộ lọc Bloom là xác định một phần tử x có thuộc tập
X hay không (các phần tử tập X đã được nạp vào trong bộ lọc) Nó đượcdùng là bước tiền xử lý của quá trình tìm kiếm Nếu sau khi lọc qua bộ lọcBloom trả về kết quả “không” thì không cần thực hiện việc tìm kiếm nữa,nếu trả về kết quả “có thể có” thì thực hiện tìm kiếm
Để xác định một phần tử x bất kỳ có thuộc tập X hay không, chúng
ta cũng tính toán k giá trị là h1(x), ,hk(x) từ x qua k hàm băm Nếu k bittrong vector m-bit có vị trí tương ứng là V[h1(x)], V[h2(x)],…,V[hk(x)] đềucó giá trị là 1 thì x “có thể” có trong tập X với một xác suất nào đó, còn nếuchỉ cần ít nhất 1 bit có giá trị là 0 thì khẳng định là x không thuộc tập X
Chúng ta chỉ có thể khẳng định là x “có thể” thuộc tập X là bởi vìtrong vector bit, 1 bit có thể được gán giá trị là 1 nhiều lần bởi nhiều phầntử trong X khi khởi tạo bộ lọc Chỉ cần một bit 0 chúng ta có thể khẳng
Trang 7định x không thuộc X bởi vì nếu x thuộc X thì tất cả k bit tương ứng sẽđược gán là 1 khi khởi tạo bộ lọc với phần tử x đó.
Hình 1.2: V[h 1 (x)], V[h 2 (x)] được gán giá trị bởi cả x k và x i
1.4 Ước lượng sai số
Với một bộ lọc có thể xảy ra 2 lỗi sau:
Lỗi false positive: kiểm tra qua bộ lọc là không có nhưng tìm
kiếm thực thì lại có
Lỗi false negative: kiểm tra qua bộ lọc là có nhưng thực là
Trang 8Hình 1.3: Minh hoạ lỗi false positive, các bit V[h 1 (x)], V[h 2 (x)],…,V[h k (x)] được gán bằng 1 bởi các phần tử khác nhau a, b, c, d Khi kiểm tra phần tử
x, chúng ta thấy tất cả các bit này bằng 1 nên khẳng định là x “có thể”
thuộc X.
Chúng ta sẽ xác định xác suất xảy ra lỗi false positive Xác suất để
một bit ngẫu nhiên của vector m-bit được gán là 1 bởi 1 hàm băm là m1
Và xác để bit đó không được gán là 1 là 1 m1 Bởi n phần tử của X là
Đối với mỗi phần tử sau khi kiểm tra qua bộ lọc thấy rằng có thể thuộc tập
X thì tất cả k bit được xác định bởi k hàm băm phải là 1 Do đó xác suất đểmột phần tử thuộc tập X:
k nk
Trang 9Với m rất lớn chúng ta có thể viết lại công thức tương đương sau:
k m nk e
1
Vì xác suất này không phụ thuộc vào phần tử cần kiểm tra nên được
gọi là xác suất false positive Xác suất false positive có thể giảm xuống nếu
chọn giá trị m và k, n thích hợp Giá trị m–độ dài vector bit cần phải khá
lớn hơn so với n-kích thước tập phần tử Với tỉ số
n
m
cho trước, xác suấtnày có thể giảm xuống nếu tăng số hàm băm Trong trường hợp tốt nhất,
khi xác xuất false positive được cực tiểu hoá theo k, chúng ta nhận được
mối liên hệ sau:
2 ln
n
m
k Xác suất false positive tại điểm tối ưu nhất được cho như sau:
Chú ý rằng khi xác suất false positive cố định thì kích thước của bộ
lọc-m cần phải tỉ lệ tuyến tính với kích thước của tập phần tử – n
1.5 Bộ lọc Bloom đếm (counting Bloom Filters)
Một đặc điểm của bộ lọc Bloom cơ bản là không thể xoá được mộtphần tử sau khi đã được đưa vào trong bộ lọc Xoá một phần tử riêng biệtcó nghĩa rằng k bit tương ứng trong vector m-bit được thiết lập trở về 0.Điều này có thể sẽ làm xáo trộn các phần tử khác đã được đưa vào trong bộlọc mà đã băm tới các bit này
Trang 10Hình 1.4: mỗi bit trong vectơ bit V có thể được gán bằng 1 nhiều lần bởi
nhiều phần tử.
Ví dụ ở hình trên bit V7 được thiết lập là 1 hai lần bởi xi và xj Bâygiờ nếu muốn xoá xi ra khỏi bộ lọc thì chúng ta cần gán các bit V3, V7, V9,Vm-4 trở lại là 0, điều này sẽ làm xáo trộn xj
Để giải quyết vấn đề này, ý tưởng về một bộ lọc Bloom đếm đã đượcđưa ra Bộ lọc này có thêm một vector đếm có độ dài m tương ứng với mỗibit của vector m-bit Khi một phần tử được thêm vào hoặc xoá đi trong bộlọc thì k giá trị tương ứng với k giá trị băm trong vector đếm sẽ tăng lênhoặc giảm đi 1 Khi một giá trị trong vector đếm được tăng từ 0 lên 1 thì bittương ứng trong vector m-bit được thiết lập là 1 và ngược lại khi đượcgiảm trở về 0 thì bit tương ứng đó được thiết lập là 0
Trang 11Hình 1.5: Các giá trị đếm của vectơ đếm C tương ứng với các bit vectơ V
bằng số lần các bit đó được gán bằng 1 bởi các phần tử.
- k là khoá; m – kích thước của bảng
- h(k) sẽ nhận các giá trị: 0, 1, …, m-1
Như vậy m sẽ ảnh hưởng tới h(k) Khi dùng phương pháp này cầnphải tránh một số giá trị nhất định của m để hạn chế ảnh hưởng của m tớih(k), ví dụ:
- m không được là bội số của 2: với m = 2p, giá trị h(k) sẽ là p bit cuốicùng của k trong biểu diễn nhị phân
Trang 12- m không được là bội số của 10: với m=10p, giá trị h(k) sẽ là p bitcuối cùng của k trong biểu diễn thập phân.
Với 2 trường hợp trên, h(k) không phụ thuộc đầy đủ vào khoá k màchỉ phụ thuộc vào p bit cuối cùng trong khoá k
Cách chọn tốt nhất là sao cho h(k) phụ thuộc đầy đủ vào khoá k,thường chọn m là số nguyên tố Với m là số nguyên tố, sẽ đảm bảo cho mộtphân bổ tương đối đều
1.6.2 Hàm băm sử dụng phương pháp nhân
h(k) = [m * (k * A mod 1)]
Trong đó:
k – là khoá
m – kích thước bảng
A - hằng số 0<A<1
m thường được chọn là m=2p, m=10p
Sự tối ưu trong việc chọn A phụ thuộc vào đặc trưng của dữ liệu.Theo Knuth thì A, m thường được chọn bằng giá trị:
Trang 13Chương 2:
KHỚP TIỀN TỐ DÀI NHẤT SỬ DỤNG BỘ LỌC BLOOM
Trong chương 1, chúng ta đã tìm hiểu cấu trúc và cơ chế hoạt độngcủa bộ lọc Bloom, sau đây chúng ta sẽ tìm hiểu ứng dụng của bộ lọc Bloomtrong bài toán khớp tiền tố dài nhất được sử dụng khá hiệu quả trong việctăng tốc độ định tuyến địa chỉ IP của router Trước hết chúng ta sẽ đi tìmhiểu một số khái niệm về định tuyến router và bảng định tuyến Sau đótrình bày về bài toán khớp tiền tố dài nhất cổ điển và bài toán khớp tiền tốdài nhất sử dụng bộ lọc Bloom để thấy được hiệu quả của bộ lọc Bloom
2.1 Định tuyến IP của router
2.1.1 Thiết bị định tuyến router
Router là một thiết bị hoạt động trên tầng mạng, nó có thể tìm đượcđường đi tốt nhất cho các gói tin qua nhiều kết nối để đi từ trạm gửi thuộcmạng đầu đến trạm nhận thuộc mạng cuối Router có thể được sử dụngtrong việc nối nhiều mạng với nhau và cho phép các gói tin đi theo nhiềuđường khác nhau tới đích
Router có địa chỉ riêng và chỉ tiếp nhận, xử lý các gói tin gửi đến nó
mà thôi Khi một trạm muốn gửi gói tin qua Router, trạm đó phải gửi góitin tới địa chỉ trực tiếp của Router thì khi gói tin đến Router, Router mới xửlý và gửi tiếp
Khi xử lý một gói tin, Router phải tìm được đường đi của gói tin quamạng Để làm được điều đó nó phải tìm được đường đi tốt nhất trong mạngdựa trên các thông tin đã có về mạng trên bảng định tuyến
2.1.2 Bảng định tuyến
Router chuyển tiếp các gói tin dựa trên địa chỉ IP đích trong phầnHeader của gói tin Nó so sánh địa chỉ đích với bảng định tuyến để tìm ra
Trang 14một lối khớp, lối này sẽ cho Router biết gói tin sẽ được chuyển đi đâu tiếp.Nếu Router không khớp một lối nào trong bảng định tuyến và không cóđường mặc định nào thì nó sẽ hủy gói tin.
Mỗi bảng định tuyến bao gồm rất nhiều thành phần Trong phạm vicủa bài toán đang tìm hiểu, chúng ta giả sử đã có một bảng định tuyến nhưbảng 1.1, bao gồm các trường sau:
Prefix: tiền tố được đưa ra bởi CIDR1
Next Hop: bước truyền tiếp theo, đây là địa chỉ của các router kế tiếp.
Bảng 2.1 Một bảng định tuyến với 5 quy tắc (W = 5)
2.2 Thuật toán khớp tiền tố cổ điển
Kỹ thuật khớp tiền tố dài nhất đã nhận được sự chú ý đáng kể trongthời gian qua Điều này đúng với vai trò chủ yếu của nó trong hoạt độngcủa router Internet Theo sự phát triển vượt bậc của Internet, ClasslessInter-Domain Routing (CIDR) được chấp nhận rộng rãi nhằm kéo dài đờisống của IPv4 CIDR yêu cầu Router tìm kiếm các tiền tố địa chỉ có độ dàithay đổi để tìm ra tiền tố khớp dài nhất của địa chỉ IP đích và lấy ra thôngtin điạ chỉ chuyển tiếp (địa chỉ của router tiếp theo sẽ chuyển tới) tươngứng cho mỗi gói tin đi qua router đó Kỹ thuật LPM được sử dụng trongđịnh tuyến IP (IP Lookup) đã có thể giải quyết khá tốt vấn đề thắt nút cổchai trong các router Internet hoạt động ở mức độ cao
Trang 15Trên Router người ta dùng định tuyến phân lớp giữa các miền CIDRchia các địa chỉ IP thành các khối tiền tố để đăng ký sử dụng Internet giữacác vùng
CIDR sử dụng kỹ thuật mặt nạ mạng có chiều dài thay đổi Variable Length Subnet Masking) cho phép định vị trí các tiền tố có chiềudà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ềudài tiền tố (có giá trị 0-32)
(VLSM-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 Chúng 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 octetthứ 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 địachỉ 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ì địa chỉ đích phải có N bít đầu giống với
tiền tố (N là độ dài tiền tố)
Giả sử với địa chỉ IP 5 bít (số bít để biểu diễn một địa chỉ IP) Tiềntố 1101* khớp với tất cả các địa chỉ đích mà bắt đầu với các bít 1101 Khibiể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
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.
Trang 16Như vậy với địa chỉ đích của gói tin là d chúng ta có đoạn mã giả mô tả
thuật toán khớp tiền tố dài nhất như sau:
KhopTienToDaiNhat(d )
1 for each length i = [1, length(d)]
2 x = prefix(d, i)
3 {prefix, nexthop} ← TimKiem(x, y)
Trong đó chúng ta thấy x được gán bằng tiền tố của d có độ dài là i
và sau đó được tìm trong bảng định tuyến Kết quả cuối cùng là tiền tố
khớp dài nhất x được gán cho y.
2.3 Khớp tiền tố dài nhất sử dụng bộ lọc Bloom
2.3.1 Giới thiệu
Thuật toán khớp tiền tố dài nhất (LPM – Longest Prefix Matching)sử dụng bộ lọc Bloom thực hiện các truy vấn song song trên các bộ lọcBloom nhằm xác định thành phần tiền tố dài nhất của một địa chỉ đầu vào
là thuộc tập tiền tố nào, các tập tiền tố này được sắp xếp theo các tập có độdài tiền tố bằng nhau
Bộ lọc Bloom được sử dụng trong bài toán khớp tiền tố dài nhấtnhằm giúp một cách khá hiệu quả trong quá trình tìm kiếm Bộ lọc Bloom
là một cấu trúc dữ liệu có hiệu quả để truy vấn thành viên với lỗi false positive có thể điều hướng được Khả năng xuất hiện lỗi false positive phụ
thuộc vào số đầu vào được lưu trữ trong bộ lọc, kích thước của bộ lọc, vàsố lượng hàm băm được sử dụng để khảo sát bộ lọc
Với kỹ thuật này bảng chuyển tiếp được chia thành các bảng nhỏ gọi
là bảng băm theo độ dài tiền tố Mỗi bảng băm có trường tiền tố là có cùng
độ dài Và mỗi bảng băm được gắn với một bộ lọc Bloom để hỗ trợ tìmkiếm trên bảng băm đó Sau đây chúng ta sẽ đi nghiên cứu chi tiết thuậttoán này
Trang 172.3.2 Cấu trúc cơ bản
Cấu trúc cơ bản của phương pháp này thể hiện trong hình 2.1 Baogồm:
W bộ lọc Bloom: B(1),…, B(W)
W bộ đếm tương ứng với W bộ lọc Bloom: C(1),…, C(W)
W bảng băm chứa các tiền tố có độ dài từ 1 đến W
B(2)
C(2)
Bảng băm W (Tiền tố W bit)
B(W)
C(W) Bảng định tuyến
Hình 2.1: W bộ lọc Bloom có W bộ đếm và được nạp vào W bảng băm có
tiền tố có độ dài từ 1 đến W.
Hệ thống sử dụng một tập W bộ lọc Bloom đếm trong đó W là độ dàicủa địa chỉ đầu vào và mỗi bộ lọc hoạt động với một độ dài tiền tố Mỗi bộlọc được khởi tạo với một tập tiền tố có độ dài tiền tố tương ứng với bộ lọcđó Chú ý một điều quan trọng là trong khi các vector bit mà kết hợp vớimỗi bộ lọc Bloom được lưu trữ trong bộ nhớ nhúng thì các bộ đếm kết hợpvới mỗi bộ lọc được giữ bởi một bộ xử lý điều khiển riêng biệt để quản lýviệc cập nhật router Các bộ xử lý điều khiển riêng biệt với bộ nhớ phongphú là cấu hình chung của mọi router hoạt động với mức độ cao
Trang 18Gom nhóm dữ liệu tiền tố thành các tập theo độ dài tiền tố Mỗi bảngbăm dùng để lưu trữ tập dữ liệu có cùng độ dài tiền tố Do đó địa chỉ IP có
W bit nên chúng ta dùng W bảng băm Mỗi bản ghi trong bảng băm là mộtcặp [tiền tố, bước truyền tiếp theo] Trong trường hợp này chúng ta chỉ xétbảng chuyển tiếp chỉ có 2 trường song trong thực tế có nhiều trường khácnữa như trường quy tắc, trường giao thức…
2.3.3 Hoạt động
Quá trình tìm kiếm diễn ra như sau: địa chỉ IP đầu vào được kiểm trasong song qua W bộ lọc Bloom Tiền tố 1-bit của địa chỉ được đưa qua bộlọc mà được khởi tạo bởi các tiền tố 1-bit, tiền tố 2-bit được đưa qua bộ lọc
mà được khởi tạo bởi các tiền tố 2-bit,… Mỗi bộ lọc chỉ đơn giản đưa rakết quả là khớp hay không khớp Tập hợp tất cả các độ dài tiền tố mà kếtquả từ bộ lọc tương ứng là khớp chúng ta có một vectơ, gọi là vectơ khớp
C(1)
Quản lý bộ đếm
Next Hop
Trang 19Hình 2.2: Cấu trúc cơ bản và hoạt động của LPM sử dụng bộ lọc Bloom
Xét một IPv4 mà sau khi lọc qua các bộ lọc chúng ta thấy các độ dàitiền tố khớp là 8, 17, 23 và 30, chúng ta có vector khớp là {8, 17, 23, 30}
Nhớ rằng các bộ lọc Bloom có thể đưa ra lỗi false positive nhưng không bao giờ có lỗi false negative, do đó nếu một tiền tố khớp tồn tại trong cơ sở
dữ liệu thì độ dài tiền tố tương ứng sẽ có trong vectơ khớp Chú ý rằng sốlượng các độ dài tiền tố trong cơ sở dữ liệu tiền tố - Wdist có thể nhỏ hơn W.Trong trường hợp này, các bộ lọc Bloom biểu diễn các tập rỗng sẽ khôngbao giờ đóng góp một kết quả khớp trong vector khớp dù là hợp lệ hoặc
false positive.
Tiếp tục quá trình tìm kiếm bằng cách khảo sát các bảng băm tươngứng với các độ dài tiền tố biểu diễn trong vector khớp theo thứ tự từ tiền tốdài nhất đến ngắn nhất Quá trình tìm kiếm dừng khi một kết quả khớpđược tìm thấy hoặc là đã duyệt qua hết vector khớp
Thuật toán được mô tả như sau:
KhopTienToDaiNhatSuDungBoLocBloom (IP)
For i = 1 to i = length(IP)
d←tiền tố của IP có độ dài i
If (kết quả lọc qua bộ lọc Bloom=true) then Thêm i vào vectơ khớp V k
For i = length(V k) to i = 1
{prefix, nexthop} = BangBam[V k [i]] ← TimKiem(V k [i])
If (TimKiem(V k [i]) = true) then Exit()
Trong đó IP là địa chỉ đích của gói tin cần xử lý Vk là vectơ khớp,BangBam[t] là bảng băm tương ứng với độ dài tiền tố là t
Chúng ta xét một ví dụ địa chỉ IP có độ dài là 8 Và số bảng băm là 3với độ dài tiền tố là 2, 4, 5 Chúng ta có các bảng băm như sau:
Trang 2000* 100.5.2.0
Giả sử có một gói tin đến với địa chỉ đích là: 10111001
Khi lọc qua các bộ lọc thì tiền tố tương ứng là 10*, 1011* và101110*, kết quả kiểm tra qua bộ lọc có độ dài tiền tố là 2 và 4 là đúng và
6 và sai Do đó chúng ta có vectơ khớp là {2,4} Chúng ta sẽ lần lượt đi tìmtrong các bảng băm có độ dài tiền tố là 4 và 2 Thì chúng ta thấy trong bảngbăm có độ dài tiền tố là 4 có tiền tố khớplà 1011* tương ứng với nexthop là100.5.6.0 Và do đó đây là kết quả khớp dài nhất, chúng ta không cần phảitìm kiếm tiếp trong các bảng băm có độ dài tiền tố nhỏ hơn
PrefixNext hop0001*100.5.2.00100
1.0110101*100.5.3.0111010*100.5.4.0111101*100.5.5.0111110*100.5.6
0111111*100.5.7.0
Trang 21Tất cả gói tin của một dòng đều tuân theo một quy tắc được xác địnhtrước và router được xử lý như nhau Ví dụ một dòng = (địa chỉ nguồn, điạchỉ đích) hay một dòng = (tiền tố địa chỉ đích, giao thức).
Xét ví dụ bảng quy tắc với k+1 trường như sau:
Giả sử gói tin đến có header (5.168.3.0, 152.133.171.71,…, TCP),chúng ta thấy gói tin khớp với quy tức 2 và N, nhưng khi tìm kiếm chúng tacó nhận được kết quả khớp với quy tắc 2 trước do đó chúng ta xử lý gói tinnày với hành động là A2
Trường 1Trường 2…Trường kHành độngTrường kHành độngQuy tắc 15.3.40.6/212.13.8.11/32…
UDPA1Quy tắc 25.168.3.0/24152.133.0.0/16…TCPA2…Trường kHành động………Quy tắc
N5.168.0.0/16152.0.0.0/8…ANYAAN
Trang 22Phân loại gói tin rất quan trọng trong các ứng dụng như an ninhmạng, firewall, mạng riêng ảo, hệ thống lọc gói tin, hệ thống phát hiện xâmnhập và các dịch vụ khác nhau trên mạng.
Sau đây chúng ta sẽ tìm hiểu về thuật toán phân loại gói tin sử dụng
bộ lọc Bloom Thuật toán này xuất phát từ thuật toán tích chéo cổ điển, tuynhiên thuật toán tích chéo cổ điển lại sinh ra quá nhiều quy tắc giả nên tiêutốn bộ nhớ và không hiệu quả Chúng ta sẽ đi tìm hiểu về thuật toán tíchchéo đa tập con, trong đó tập quy tắc ban đầu được chia thành các tập connên giảm lượng quy tắc giả sinh ra Và tiếp đó nữa chúng ta sẽ tìm hiểucách thức để phân chia tập quy tắc thành các tập con một cách hiệu quảnhất sao cho số tập con không quá nhiều đồng thời sinh ra ít quy tắc tíchchéo
Trong những vấn đề sẽ trình bày tiếp theo đây chúng ta sẽ hiểu quátrình phân loại gói tin chính là tìm một quy tắc trong tập quy tắc khớp vớiheader gói tin đó Và chúng ta sẽ xem như gói tin đến là một quy tắc cầntìm kiếm
3.2 Chức năng của bộ lọc Bloom trong phân loại gói tin
Trong các thuật toán phân loại gói tin chúng ta sẽ nghiên cứu sauđây, bộ lọc Bloom được sử dụng trước quá trình tìm kiếm một quy tắctrong một tập quy tắc Mỗi tập quy tắc sẽ được nạp vào trong bộ lọc Bloomtương ứng và khi tìm kiếm một quy tắc thì sẽ tiến hành lọc qua bộ lọcBloom đó để kiểm tra xem quy tắc đó có thể có trong tập quy tắc haykhông rồi mới tiến hành tìm kiếm nếu có thể có Bộ lọc Bloom được sửdụng rất hiệu quả để tránh được tất cả các trường hợp không có quy tắc nàokhớp thì không cần phải thực hiện quá trình tìm kiếm nữa và kết luận làkhông có quy tắc khớp
Trang 23Chúng ta sẽ lần lượt nghiên cứu các thuật toán phân loại gói tin cổđiển và dần dần cải tiến nó để sử dụng bộ lọc Bloom sao cho hiệu quả nhất,giảm thời gian tính toán đồng thời tiết kiệm bộ nhớ và giảm số lần truy cập
bộ nhớ
3.3 Thuật toán tích chéo cổ điển
Với tập quy tắc ban đầu thì việc tìm kiếm diễn ra rất khó khăn domỗi quy tắc có nhiều trường và mỗi trường có tính chất khác nhau, cáctrường địa chỉ thì có độ đài tiền tố khác nhau Do vậy người ta đã đưa raphương pháp xây dựng bảng quy tắc đầy đủ bao gồm các quy tắc ban đầu
và quy tắc tích chéo thêm vào Sau khi đã có bảng quy tắc đầy đủ quá trìnhtìm kiếm một quy tắc khớp diễn ra như sau:
Giả sử chúng ta có một bảng có k trường Đầu tiên thực hiện phép
LPM (khớp tiền tố dài nhất) trên mỗi trường Đặt v i là tiền tố khớp dài nhất
của trường f i Khi đó chúng ta nhận được v 1 , v 2 ,…, v k lần lượt là tiền tố khớp
dài nhất của f 1 , f 2 ,…, f k Sau đó tìm kiếm khoá ‹v 1 , v 2 ,…, v k› trong bảng quitắc tích chéo (được xây dựng như là một bảng băm) Quy tắc nào khớp thìtrả về ID của qui tắc đó
Đặt P.f i là giá trị của trường i trong gói tin P Quá trình phân loại gói
tin có thể tóm tắt trong đoạn mã giả dưới đây:
PhanLoaiGoiTin(P )
1 for each field i
2 v i ← LPM(P.f i )
3 {KetQuaKhop, {Id}} ← TimKiem(‹v 1 , , v k ›)
Chúng ta sẽ tìm hiểu phương pháp tích chéo sau đây để sinh ra các
quy tắc tích chéo Ta xét ví dụ sau Giả sử chỉ có 2 trường, f 1 và f 2 Mỗi
trường có độ rộng 4-bit Một tập qui tắc có 3 qui tắc r 1 : ‹1*,*›, r 2‹1*,00*›,
r 3 ‹101*, 100*› Chúng ta biểu diễn mỗi trường trên một cây nhị phân, quađó có thể biểu diễn các quy tắc như sau:
Trang 24Hình 3.1: biểu diễn cây nhị phân cho mỗi trường và mỗi liên kết là một quy
tắc
Các node tương ứng với các tiền tố hợp lệ của các trường có màuđen Mỗi kết nối giữa 2 node màu đen của hai trường là một qui tắc Một
điều quan trọng cần chú ý rằng một khoá khớp với r 2: ‹1*,00*› thì cũng
khớp với r 1 : ‹1*,*› bởi vì tiền tố * của trường thứ hai của r 1 cũng là một
tiền tố của 00* Do đó r 2 là trường hợp cụ thể hơn của r 1 , r 2 chứa trong r 1
Do đó khi khớp r 2 thì ID của r 2 và r 1 sẽ cùng được trả về Tức là r 2 khớp
với cả r 2 và r 1 Tương tự, r 3 khớp với cả r 3 và r 1
Giả sử có một gói tin đến và trường f 1 có tiền tố khớp dài nhất là
101*, trường f 2 là 00* Không có qui tắc gốc ‹101*,00*› Tuy nhiên, chú ýrằng 1* là một tiền tố của 101* Do đó, một kết quả khớp với tiền tố chi tiếthơn 101* cũng là một kết quả khớp với các tiền tố có mức chi tiết thấp hơn
1* Nên khoá ‹101*,00*› cũng khớp với quy tắc r 2: ‹1*,00*› Để quá trình
tìm kiếm thực hiện đúng, chúng ta thêm vào một qui tắc giả: p 2: ‹101*,00*›
và kết hợp ID qui tắc r 2 với nó Tương tự, nếu 1* là tiền tố khớp dài nhất
của trường f 1 và 100* là của f 2 thì mặc dù không có qui tắc gốc ‹1*,100*›,
nó cũng là một khoá khớp với r 1: ‹1*,*› Do đó, chúng ta cần thêm vào một
qui tắc giả p 1 : ‹1*,100*› và kết hợp ID qui tắc r 1 với nó Tóm lại, một kếtquả khớp của một tiền tố thì cũng là một kết quả khớp của tiền tố ngắn hơncủa nó
Trang 25Hình 3.2: Xây dựng quy tắc tích chéo
Chúng ta có thuật toán xác định số quy tắc tích chéo thêm vào nhưsau:
TinhQuyTacTichCheo()
1 for each (ui in field 1)
2 for each (vi in field 2)
Trang 26thêm vào tập và kết hợp nó với các ID của qui tắc gốc mà khớp với khoá
mới đó Trong ví dụ trên các qui tắc giả cần thêm vào là p 1 , p 2 , p 3 như đượcchỉ ra trong hình 3.2
Nếu trong tập qui tắc mỗi trường (không tính trường giao thức) có
100 tiền tố không trùng nhau thì tập qui tắc mở rộng có thể tăng theo hàmmũ là 1004 và như vậy với các tập quy tắc lớn thì lượng quy tắc giả cầnthêm vào là quá lớn
Hình 3.3: Ví dụ thuật toán tích chéo cổ điển: (A) tập quy tắc và biểu diễn dựa vào trie (B) tập quy tắc sau khi thêm vào các quy tắc giả.
Giải thích cụ thể: Chúng ta thấy 00*, 100*, 11* chứa trong * mà chúng ta có r6 và r1, r2 nên cần thêm vào p1, p2, p3, p4, p5 101* chứa
Trang 273.4 Thuật toán tích chéo đa tập con
Chúng ta chia tập qui tắc thành nhiều tập con nhỏ hơn và thực hiệntích chéo trong mỗi tập con đó và như vậy sẽ sử dụng nhiều truy cập bảngbăm hơn Nhưng tổng số qui tắc giả sẽ giảm xuống đáng kể so với lược đồthuật toán tích chéo cổ điển ở trên Xét cụ thể ví dụ ở hình 3.3 A Giả sửchia tập qui tắc theo cách nào đó thành 3 tập con G1, G2 và G3 (hình 3.4)
Hình 3.4: tập quy tắc ban đầu được chia thành 3 tập con G1, G2, G3 Và
các bảng LPM tương ứng với từng trường.
Trong mỗi tập con, chúng ta thực hiện một phép tích chéo, như vậychúng ta sẽ thêm qui tắc giả p7 vào tập con 1 (G1) và p2 vào tập con 2(G2) Tổng số quy tắc là 3, tất cả những qui tắc giả khác được nêu trong
Trang 28hình 3.3 (B) được loại bỏ và lượng bộ nhớ tiêu tốn đã giảm xuống một cáchđáng kể.
Tại sao số qui tắc giả giảm xuống mạnh mẽ như vậy? Đó là bởi vì vềbản chất, tích chéo làm cho số quy tắc giả nhân lên nhiều lần so với số quy
tắc gốc Khi chia tập qui tắc, số tiền tố chồng chéo của một trường i đã
giảm xuống xi lần, kết quả là các quy tắc tích chéo giảm xuống theo ∏x vàsố quy tắc giả sẽ giảm đi rất nhiều
Với mỗi tập quy tắc con chúng ta có một bảng băm riêng và thựchiện tìm kiếm quy tắc tương ứng trong bảng băm đó Sự phân chia có thêm
2 nhược điểm: 1) toàn bộ tiến trình khớp tiền tố dài nhất trên tất cả cáctrường cần được lặp lại cho mỗi tập con; 2) cần một truy cập bảng bămriêng biệt trên mỗi tập con để tìm kiếm quy tắc cuối cùng Bây giờ chúng ta
sẽ tìm hiểu cách để tránh nhược điểm 1 và giảm nhược điểm 2
Chúng ta xét ví dụ trong hình 3.4, vì phân chia qui tắc thành các tậpcon G1, G2 và G3, các tập tiền tố hợp lệ của trường thứ nhất đối với G1 là{1*,101*}, đối với G2 là {1*,01*} và đối với G3 là {00*} Do đó tiền tốdài nhất trong một tập con có thể không phải là tiền tố dài nhất trong cáctập khác nên cần mỗi phép khớp tiền tố dài nhất riêng biệt cho mỗi tập con.Tuy nhiên chúng ta sẽ không cần dùng mỗi khớp tiền tố dài nhất độc lậpcho mỗi tập con nếu sửa đổi cấu trúc dữ liệu của phép khớp tiền tố dài nhất.Với mỗi trường, chúng ta thêm một bảng tiền tố toàn cục gọi là bảng LPMchứa các tiền tố không trùng nhau của trường đó từ tất cả các tập con Khichúng ta thực hiện phép khớp tiền tố dài nhất trong bảng LPM này, tiền tố
khớp sẽ là tiền tố dài nhất trong tất cả các tập con Do đó, tiền tố dài nhất của một tập con bất kỳ là tiền tố đã khớp ở trên hoặc là tiền tố con của tiền tố đó.
Với mỗi tiền tố trong bảng LPM, chúng ta lưu một danh sách các
Trang 29xem xét trường 1 trong ví dụ ở trên Nếu tiền tố khớp dài nhất của trườngnày là 101* thì chúng ta biết rằng các tiền tố khớp dài nhất trong mỗi tậpcon phải hoặc là tiền tố này hoặc là tiền tố con của nó Trong G1, tiền tốkhớp dài nhất là 101*, trong G2 là 1*, trong G3 là Null
Giả sử có g tập con Chúng ta ký hiệu t i (t i v, t i u[1],…, t i u[g]) là một bản ghi bất kỳ trong bảng LPM của trường i Trong đó t i v là một tiền tố – khoá tìm kiếm của bản ghi đó, t i u[1],…, t i u[g] là tiền tố tương ứng của g
tập con G1, G2,…,Gg Mỗi ti u[j] là một tiền tố con của t i v và t i u[j] là tiền tố khớp dài nhất của trường i trong tập con j Nếu t i u[j] = = NULL thì không có tiền tố con nào của t i v trong tập con j.
Sau khi thực hiện phép LPM trên các trường, chúng ta có tất cảthông tin chúng ta cần về các tiền tố khớp trong các tập riêng lẻ
Ví dụ với trường 1 ở ví dụ trên chúng ta có bảng LPM như sau:
vậy chúng ta có bảng như sau:
Trang 30Nếu tiền tố khớp dài nhất trên trường này trong gói tin là 101* thì cómột tiền tố con của 101* có độ dài 3 (là chính nó) là tiền tố dài nhất trongG1; có một tiền tố con có độ dài 1 (là 1*) là tiền tố dài nhất trong G2 vàkhông có tiền tố con nào (ký hiệu bởi dấu –) của 101* là trong G3 Do đó,sau khi tìm ra tiền tố dài nhất của mỗi trường, chúng ta có thể đưa ra danhsách các khoá tương ứng với các tập con và sử dụng nó để khảo sát cácbảng băm Ví dụ nếu 101* là tiền tố khớp dài nhất của trường 1 và 100* làcủa trường 2 thì chúng ta sẽ khảo sát bảng băm quy tắc G1 với khoá <101,100>, bảng băm quy tắc G2 với khoá <1, 100> và chúng ta không cần khảosát bảng băm của G3.
Đoạn mã giả dưới đây sẽ mô tả thuật toán phân loại gói tin như sau:
PhanLoaiGoiTin(P)
1 for each trường i
2 t i ← LPM (P.f i )
3 for each tập con j
4 for each trường i
5 if (ti u[j] = = NULL) bỏ qua tập con j
6 {match, {Id}} ← TimKiem(t i u[j],…, t k u[j])
Như vậy là với việc thêm vào bảng LPM như trên thì sau khi chia tậpquy tắc thành nhiều tập con thì trên mỗi trường cũng chỉ cần thực hiện mộtphép LPM (dòng 1-2) Do dó, giai đoạn đầu của thuật toán này tương tựthuật toán tích chéo cổ điển Sau giai đoạn LPM, khảo sát lần lượt các bảngquy tắc con với các khoá được xây dựng từ các tiền tố khớp dài nhất ởtrong tập con đó (dòng 3-6) Không cần khảo sát tập con nào nếu có ít nhấtmột trường không có tiền tố con tương ứng Khi gặp trường hợp này, bỏqua tập con đó và kiểm tra tập con tiếp theo (dòng 4-5) Tuy nhiên với mụcđích phân tích, chúng ta giả sử rằng với mỗi trường thì tất cả các tập con
đều có tiền tố con tương ứng với mỗi khoá và do đó tất cả g tập con đều
Trang 31cần được khảo sát Chúng ta sẽ trình bày cách để tránh phải khảo sát tất cảcác tập con này bằng cách sử dụng bộ lọc Bloom.
Nếu một gói tin có thể khớp với p quy tắc và nếu tất cả những quy tắc này tập trung trong một số bảng băm nhất định thì chỉ p trong số g khảo
sát bảng băm là sẽ thành công và trả về quy tắc khớp Những truy cập bộnhớ khác là không cần thiết và có thể tránh được bằng cách sử dụng bộ lọcBloom on-chip Chúng ta duy trì một bộ lọc Bloom trong bộ nhớ on-chip
tương ứng với mỗi bảng băm tập quy tắc con off-chip Đầu tiên chúng ta lọc qua các bộ lọc Bloom với các khoá được tìm kiếm trong các tập con Nếu bộ lọc chỉ ra một kết quả khớp, chúng ta sẽ tìm khoá đó trong bảng băm off-chip Với xác suất rất là cao, chỉ những bộ lọc Bloom chứa quy tắc
khớp mới đưa ra một kết quả khớp Thuật toán này được mô tả cụ thể tronghình 3.5 thông qua ví dụ trên
Hình 3.5: Sơ đồ dòng của thuật toán.
Trang 32Qua hình trên chúng ta thấy thuật toán gồm các bước sau:
1 Thực hiện phép LPM trên mỗi trường tìm ra tiền tố khớp dàinhất và bản ghi trong bảng LPM tương ứng của mỗi trường
2 Thực hiện phép giao của hai bản ghi, kết hợp với tiền tố mỗitrường để xây dựng các cặp khoá
3 Thực hiện lọc qua bộ lọc Bloom của mỗi tập con để kiểm trakhả năng có mặt
4 Tìm các quy tắc khớp nếu kết quả lọc là có thể có
Số truy cập bộ nhớ trung bình đối với LPM trên trường i với kỹ thuật
khớp tiền tố dài nhất sử dụng bộ lọc Bloom có thể được biểu diễn như sau:
f W
1 đến 16 có thể được dùng để lưu trữ tiền tố cổng nguồn và từ 17-32 dùngđể lưu trữ tiền tố cổng đích Do đó tổng số lần truy cập bảng băm cần đếncho LPM trên tất cả 4 trường có thể biểu diễn như sau:
Trang 33= 4 + 92f (2)
Chúng ta cần g bộ lọc Bloom để lưu trữ các quy tắc của mỗi tập con.
Trong suốt giai đoạn tìm kiếm quy tắc, khi chúng ta truy vấn các bộ lọc
Bloom của tất cả g tập con, chúng ta sẽ có p kết quả khớp đúng và g-p bộ
lọc Bloom còn lại có thể đưa ra một kết quả khớp với mỗi kết quả khớp có
xác suất false positive f Do đó số khảo sát băm cần đến trong khi khớp quy
tắc là:
T g = p + (g – p)f (3)Tổng số khảo sát bảng băm cần đến trong toàn bộ quá trình phân loạigói tin là:
Như trong công thức 4, thuật toán này hiệu quả khi f và g càng nhỏ.
Trong phần tiếp theo chúng ta sẽ tìm hiểu phương pháp để giảm đến mứctối thiểu giá trị của các tham số này
3.5 Thuật toán tìm kiếm không gian bộ mức xếp chồng
Trang 34Trong thuật toán tích chéo đa tập con, nếu tập quy tắc ban đầu đượcphân chia ngẫu nhiên thành các tập con thì lượng tích chéo sinh ra cũngkhá đáng kể Các quy tắc giả chỉ cần đến khi các quy tắc ở trong cùng mộttập con có các tiền tố chồng nhau Chúng ta sẽ nghiên cứu một phươngpháp gom nhóm thông minh nhằm làm giảm đến mức tối thiểu số quy tắcgiả cần thêm vào Đó là phương pháp chia tập quy tắc thành các tập conkhông chồng chéo nhau.
3.5.1 Phương pháp gom nhóm không chồng nhau free)
(Overlap-Chúng ta nghiên cứu một kỹ thuật đơn giản dựa trên khái niệm về bộ mức xếp chồng (Nested Level Tuple - NLT), đưa ra một cách chia tập quy
tắc thành các tập con sao cho không có tập con nào sinh ra quy tắc tíchchéo Trước hết với mỗi trường chúng ta xây dựng một cây tiền tố nhị phân(prefix–trie) trong đó số tiền tố của mỗi trường trong tập quy tắc đã biết.Chúng ta sẽ sử dụng các định nghĩa dưới đây:
Hình 3.6: Minh hoạ cây nhị phân (trái) và cây mức xếp chồng (phải)
Mức xếp chồng (Nested Level): mức xếp chồng của một nút được
đánh dấu trong một cây nhị phân là số nút ông bà (ancestor) đã được đánh dấu của nút đó Nút gốc luôn được xem là đã được đánh dấu Ví dụ, mức xếp chồng của nút m 2 và m 3 là 1 và mức xếp chồng của nút m 4 là 2
Cây mức xếp chồng (Nested Level Tree): cho biết một cây nhị
Trang 35chồng bằng cách bỏ đi các nút không đánh dấu và liên kết mỗi nút được đánh dấu tới nút ancestor gần nhất của nó.
Bộ mức xếp chồng (Nested Level Tuple – NLT): với mỗi trường
có trong tập quy tắc, chúng ta tạo ra một cây mức xếp chồng (xem hình 3.6) Bộ mức xếp chồng của quy tắc r là tập hợp mức xếp chồng của mỗi trường tiền tố của quy tắc đó Ví dụ, trong hình 3.7, NLT của r 6 là [1,0] và
Từ định nghĩa mức xếp chồng chúng ta thấy rất rõ rằng giữa các nútcó cùng mức xếp chồng, không nút nào là ancestor của nút khác Do đó,trong một cây các tiền tố được biểu diễn bởi các nút có cùng mức xếp
chồng thì không chồng chéo lẫn nhau Vì vậy tập quy tắc chứa trong cùng một bộ mức xếp chồng thì không sinh một quy tắc tích chéo nào cả Điều
này được minh hoạ trong hình 3.7 Ví dụ trong NLT [1,0] có 2 quy tắc r1
Trang 36và r6 Các tiền tố của chúng ở trường 1 là 1* và 00*, không tiền tố nàotrong đó chi tiết hơn tiền tố khác (do đó không chồng chéo nhau) Tương tựnhư vậy, chúng dùng chung cùng tiền tố, đó là * ở trường 2 Do đó khôngcần đến tích chéo nào.
Như vậy với phương pháp xây dựng cây mức xếp chồng và phânchia tập quy tắc tương ứng với bộ mức xếp chồng thì không có tập con nàosinh thêm một quy tắc tích chéo nào cả Chúng ta gọi các tập quy tắc connhư vậy là tập quy tắc con NLT Sau đây chúng ta sẽ tìm hiểu tiếp phươngpháp cải tiến bảng LPM để có thể giảm chi phí lưu trữ dữ liệu cho bảngLPM này
3.5.2 Bản đồ bit NLT và bản đồ bit PL/NL
Chúng ta thấy một đặc điểm của tập quy tắc con NLT là không mộttiền tố nào có tiền tố con trong cùng một tập con Sử dụng đặc điểm này,cấu trúc dữ liệu đầu vào LPM đã trình bày trong hình 3.4 có thể được nénhơn nữa Với mỗi tiền tố, chúng ta lưu một bản đồ bít (bit-map) với số bitbằng số bộ mức xếp chồng (NLT) gọi là bản đồ bit NLT Mỗi bit tươngứng với một NLT và sẽ được thiết lập là 1 nếu tiền tố đó hoặc tiền tố concủa nó thuộc về một quy tắc mà được chứa trong NLT này và trong trườnghợp ngược lại thì có giá trị là null (biểu diễn trong bảng dưới đây ký hiệu là
‘–‘)
Chúng ta xét ví dụ dưới đây: với trường thứ nhất, tiền tố 1* chỉ cótrong NLT [1,0] và [1,1] nên bản đồ bit của nó là 11–, 101* có trongNLT[2,1], trong NLT [1,0] và NLT [1,1] có tiền tố con của nó là 1* nênbản đồ bit của nó là 111 Xét với tất cả các tiền tố của hai trường chúng tacó bảng dưới đây
Trang 37Hình 3.8: Các bảng LPM với bản đồ bit NLT và bản đồ bit PL/NL.
Chúng ta thực hiện phép giao giữa các bản đồ bit NLT của các tiềntố khớp dài nhất của mỗi trường để cắt bớt các tập quy tắc con khi tìmkiếm
Hình 3.9: Phép giao giữa các bản đồ bit của các trường để tìm ra các tập
quy tắc con cần tìm kiếm.