Tải bản đầy đủ (.doc) (73 trang)

Đồ án tốt nghiệp đại học nghiên cứu bộ lọc bloom và ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.6 MB, 73 trang )

Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
MỤC LỤC
1
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
LỜ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ất
kỳ thông tin nào về khoa học, sức khoẻ, đời sống, tin tức, và cả việc thông
tin liên lạc qua thư điện tử, chat,…Với những ưu điểm lớn của World Wide
Web, số lượng người sử dụng, máy chủ, các mạng con kết nối vào Internet
ngày tăng với tốc độ chóng mặt. Điều đó cũng đồng nghĩa với việc lưu
lượ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ềm
khô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 được
hiệ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 Bloom
ngày càng được sử dụng rộng rãi trong rất nhiều ứng dụng mạng: định
tuyến IP, phân loại gói tin, chia sẽ bộ nhớ cache trong mạng per to per, IP
traceback, khai phá phần tử phổ biến trong luồng dữ liệu, phát hiện sự xâm
nhập trong hệ thống an ninh mạng Bộ lọc Bloom cũng rất hiệu quả trong
việ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ất
nhiề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ài
nhất, phân loại gói tin và khai phá phần tử phổ biến sử dụng
ESBF theo mô hình Damped.


2
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
- 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.
3
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Chươ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ắn
gọ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ử trong
tập, sau đó nó được dùng để xác định một phần tử có thuộc tập đó hay
không. Nó được xây dựng bởi Burton H.Bloom năm 1970 và được sử dụng
rộ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ững
trườ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.
- k hàm băm (h
1
h
k
), h
i
: U → [1 m]
- Tập X gồm n phần tử x
i
, với mỗi x thì các bít V[h

1
(x)], V[h
k
(x)]
được gán là 1.
Bộ lọc Bloom cơ bản là một vector bit có độ dài m, được sử dụng để
biểu diễn một cách khá hiệu quả một tập phần tử. Cho trước một tập X với
n phần tử, bộ lọc Bloom được khởi tạo như sau: mỗi phần tử x
i
trong X sẽ
được tính toán qua k hàm băm h
1
,…,h
k
để tạo ra k giá trị nằm trong khoảng
[1, m] là h
1
(x
i
), ,h
k
(x
i
) và các bit trong vector m–bit tương ứng có thứ tự là
h
1
(x
i
), ,h
k

(x
i
) sẽ được gán là 1.
4
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Hì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[h
1
(x)],
V[h
2
(x)],…,V[h
k
(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ó được
dù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ọc
Bloom 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à h
1
(x), ,h
k
(x) từ x qua k hàm băm. Nếu k bit
trong vector m-bit có vị trí tương ứng là V[h
1
(x)], V[h
2

(x)],…,V[h
k
(x)] đều
có 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ếu
chỉ 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ần
tử trong X khi khởi tạo bộ lọc. Chỉ cần một bit 0 chúng ta có thể khẳng
V
m-1
01000 10100 00010
x
h
1
(x) h
2
(x) h
k
(x)
V
0
h
3
(x)
5
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
đị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à
không có.
Với bộ lọc Bloom chúng ta có thể gặp phải lỗi false positive với xác
suất rất nhỏ mà hoàn toàn không có khả năng xảy ra lỗi false negative.
x
i
x
k
6
h
2
(x)h
1
(x) h
k
(x)
h
3
(x)

V
0
V
m-1
01010 10100
00010
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Hì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à
m
1
. Và
xác để bit đó không được gán là 1 là
m
1
1−
. Bởi n phần tử của X là
n
m








1
1
.
Vì mỗi phần tử của X qua k hàm băm sẽ thiết lập k bit của vector m-bit
thành 1 nên xác suất để 1 bit không được thiết lập thành 1 là
nk
m







1
1
và do
đó xác suất để 1 bit được thiết lập thành 1 là
nk
m







−−
1
11
. Đố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:
01000 10100 00010
h
2
(x) h
k
(x)
V
0
V
m-1
h
3
(x)
a b c d
x
h
1
(x)
7
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
k

nk
m
f














−−=
1
11
Vớ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
ef









−≈

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ất
nà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:
2ln
n
m
k
=
Xác suất false positive tại điểm tối ưu nhất được cho như sau:
k
f







=
2
1
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ột
phần tử sau khi đã được đưa vào trong bộ lọc. Xoá một phần tử riêng biệt
có nghĩa rằng k bit tương ứng trong vector m-bit được thiết lập trở về 0.
8
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Đ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.
Hì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 V
7
được thiết lập là 1 hai lần bởi x
i
và x
j
. Bây
giờ nếu muốn xoá x
i
ra khỏi bộ lọc thì chúng ta cần gán các bit V
3
, V
7
, V
9

,
V
m-4
trở lại là 0, điều này sẽ làm xáo trộn x
j
.
Để 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ỗi
bit 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ên
hoặc giảm đi 1. Khi một giá trị trong vector đếm được tăng từ 0 lên 1 thì bit
tương ứng trong vector m-bit được thiết lập là 1 và ngược lại khi được
giảm trở về 0 thì bit tương ứng đó được thiết lập là 0.
V
m-1
01000 10100 01011
x
i
h
1
(x) h
2
(x) h
k
(x)
V
0
h
3
(x)

x
j
9
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Hì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ử.
1.6 Lựa chọn hàm băm
Bộ lọc Bloom được sử dụng chủ yếu với số nguyên nên trong trường
hợp này chúng ta chọn các hàm băm theo 2 phương pháp như sau:
1.6.1 Hàm băm sử dụng phương pháp chia
h(k) = k mod m
- 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ần
phải tránh một số giá trị nhất định của m để hạn chế ảnh hưởng của m tới
h(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ối
cùng của k trong biểu diễn nhị phân.
V
m-1
01010 10100 01011
x
i
h
1
(x) h
2
(x) h
k
(x)

V
0
h
3
(x)
x
j
02010 10300 01011
C
0
C
m-1
x
k
10
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
- m không được là bội số của 10: với m=10p, giá trị h(k) sẽ là p bit
cuố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ột
phâ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ị:
A =
2
15 −
= 0.618033988749…, m=10p được xem là tốt
Ví dụ: k = 1115552; m = 10000
11
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Chươ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 động
của bộ lọc Bloom, sau đây chúng ta sẽ tìm hiểu ứng dụng của bộ lọc Bloom
trong bài toán khớp tiền tố dài nhất được sử dụng khá hiệu quả trong việc
tăng tốc độ định tuyến địa chỉ IP của router. Trước hết chúng ta sẽ đi tìm
hiể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ộc
mạng đầu đến trạm nhận thuộc mạng cuối. Router có thể được sử dụng
trong 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ói
tin 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 qua

mạng. Để làm được điều đó nó phải tìm được đường đi tốt nhất trong mạng
dự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ần
Header của gói tin. Nó so sánh địa chỉ đích với bảng định tuyến để tìm ra
12
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
mộ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 vi
củ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 CIDR
1
.
Next Hop: bước truyền tiếp theo, đây là địa chỉ của các router kế tiếp.
Prefix Next Hop
* N1
0101* N2
100* N3
1001* N4
10111* N5
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ể trong
thời gian qua. Điều này đúng với vai trò chủ yếu của nó trong hoạt động
của router Internet. Theo sự phát triển vượt bậc của Internet, Classless
Inter-Domain Routing (CIDR) được chấp nhận rộng rãi nhằm kéo dài đời
sống của IPv4. CIDR yêu cầu Router tìm kiếm các tiền tố địa chỉ có độ dài

thay đổi để tìm ra tiền tố khớp dài nhất của địa chỉ IP đích và lấy ra thông
tin đ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.
1
Classless Inter-Domain Routing
13
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
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. 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 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ì đị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ề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.
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.
14
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Như 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ọc
Bloom 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ất
nhằ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ìm
kiếm trên bảng băm đó. Sau đây chúng ta sẽ đi nghiên cứu chi tiết thuật
toán này.
15
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
2.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. Bao
gồ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.
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ài
củ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ới
mỗi bộ lọc Bloom được lưu trữ trong bộ nhớ nhúng thì các bộ đếm kết hợp
vớ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ớ phong
phú là cấu hình chung của mọi router hoạt động với mức độ cao.
16
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Gom nhóm dữ liệu tiền tố thành các tập theo độ dài tiền tố. Mỗi bảng
bă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ột
cặp [tiền tố, bước truyền tiếp theo]. Trong trường hợp này chúng ta chỉ xét
bảng chuyển tiếp chỉ có 2 trường song trong thực tế có nhiều trường khác
nữ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 tra
song 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 ra
kế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ết
quả từ bộ lọc tương ứng là khớp chúng ta có một vectơ, gọi là vectơ khớp.
17
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Hì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ài
tiề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ố - W

dist
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ông
bao 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ý. V
k
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à 3
với độ dài tiền tố là 2, 4, 5. Chúng ta có các bảng băm như sau:
Prefix Next hop
18
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
00* 100.5.2.0
01* 100.5.1.0
10* 100.5.3.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ìm
trong các bảng băm có độ dài tiền tố là 4 và 2. Thì chúng ta thấy trong bảng
bă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ải
tì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
*100.5.1.00110*100.5.3
.00111*100.5.4.01001*

100.5.5.01011*100.5.6.
0
PrefixNext
hop001010*100.5.2.0010101*100.5.
1.0110101*100.5.3.0111010*100.5.4
.0111101*100.5.5.0111110*100.5.6.
0111111*100.5.7.0
19
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Chương 3:
PHÂN LOẠI GÓI TIN SỬ DỤNG BỘ LỌC BLOOM
3.1 Khái niệm về phân loại gói tin
Phân loại gói tin là một hoạt động của router nhằm phân loại gói tin
dựa trên header thành các lớp tương đương gọi là các dòng (flow). Một
dòng được định nghĩa bởi một quy tắc, ví dụ tập các gói tin mà các địa chỉ
nguồn của nó bắt đầu với các bit tiền tố S và địa chỉ đích của là D, và nó sẽ
được gửi cho cổng máy chủ trên mạng. Mỗi dòng gắn tương ứng một hành
động gọi là xử lý thêm vào – ví dụ gửi tới một hàng đợi cụ thể, xoá bỏ gói
tin hay copy gói tin,… Do đó router phân loại gói tin sẽ có một cơ sở dữ
liệu gồm tập các quy tắc, mỗi quy tắc là tương ứng với một kiểu dòng mà
router muốn xử lý khác nhau. Khi một gói tin đến, router sẽ tìm một quy
tắc khớp với header gói tin để xác định xử lý thích hợp cho gói tin đó.
Tất cả gói tin của một dòng đều tuân theo một quy tắc được xác định
trướ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 ta
có nhận được kết quả khớp với quy tắc 2 trước do đó chúng ta xử lý gói tin
này với hành động là A

2
.
20
Trường 1Trường 2WTrường kHành độngQuy tắc 15.3.40.6/212.13.8.11/32…
UDPA
1
Quy tắc 25.168.3.0/24152.133.0.0/16…TCPA
2
W……………Quy tắc
N5.168.0.0/16152.0.0.0/8…AN•A
N
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Phân loại gói tin rất quan trọng trong các ứng dụng như an ninh
mạng, firewall, mạng riêng ảo, hệ thống lọc gói tin, hệ thống phát hiện xâm
nhậ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, tuy
nhiê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êu
tốn bộ nhớ và không hiệu quả. Chúng ta sẽ đi tìm hiểu về thuật toán tích
chéo đa tập con, trong đó tập quy tắc ban đầu được chia thành các tập con
nên giảm lượng quy tắc giả sinh ra. Và tiếp đó nữa chúng ta sẽ tìm hiểu
cá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ích
ché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ới
header gói tin đó. Và chúng ta sẽ xem như gói tin đến là một quy tắc cần
tì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ắc
trong một tập quy tắc. Mỗi tập quy tắc sẽ được nạp vào trong bộ lọc Bloom
tương ứng và khi tìm kiếm một quy tắc thì sẽ tiến hành lọc qua bộ lọc
Bloom đó để kiểm tra xem quy tắc đó có thể có trong tập quy tắc hay
khô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ào
khớ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.
21
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Chú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 do
mỗi quy tắc có nhiều trường và mỗi trường có tính chất khác nhau, các
trường địa chỉ thì có độ đài tiền tố khác nhau. Do vậy người ta đã đưa ra
phươ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ình
tì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 qui
tắ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:
22
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Hì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ết
hơ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ết
quả 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ơn
của nó.
23
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
Hì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 (
u
i
in field 1)
2. for each (
v

i
in field 2)
3. if <
u
i
,
v
i
> not in BangBam
4. then if CoQuyTacCha(<
u
i
,
v
i
>)
5. then ThemVaoBangBam(<
u
i
,
v
i
>)
6. End If
7. End if
8. End for
9. End for
Quá trình tìm kiếm thực hiện trên các trường riêng lẻ sẽ dừng khi tìm
thấy tiền tố khớp dài nhất, những tiền tố này là nguyên nhân tạo ra các qui
tắc được xây dựng bởi các tiền tố con của nó. Nếu một qui tắc được xây

dựng từ các tiền tố khớp dài nhất không tồn tại trong bảng, nó phải được
24
Giáo viên hướng dẫn: Nguyễn Mạnh Hùng HVTH: Trương Thị Thu Hằng
thê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ư được
chỉ 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àm
mũ là 100
4
và như vậy với các tập quy tắc lớn thì lượng quy tắc giả cần
thê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
trong 1* mà chúng ta đã có r1, r2 nên chúng ta thêm vào p6, p7.
25

×