Ờ Đối chiếu tuần tự:
Khi có một gói tin tới thì nó sẽ kiểm tra tuần tự với từng luật cho tới khi tìm thấy 1 luật phù hợp với trường thông tin của gói tin. Phương pháp này đơn giản và sử dụng hiệu quả bộ nhớ. Tuy vậy việc tìm kiếm tuần tự tốn rất nhiều thời gian. Thời gian này tăng tuyến tắnh với số lượng luật trong bảng.
Ờ Sử dụng TCAM (Ternary Content Addressable Memory):
TCAM là mở rộng của CAM (Content Addressable Memory), là bộ nhớ có khả
năng tìm kiếm (lookup table) trong một vài chu kỳ đồng hồ bằng cách sử dụng các mạch so sánh song song.
Ternary CAM (TCAM) có thể chứa một từ với 3 giá trị bit: Ổ0Ỗ, Ổ1Ỗ và Ổ*Ỗ. Nó có thể lưu các dữ liệu có dạng tiền tố như 192.168.*.* dưới dạng một mục trong TCAM.
TCAM thắch hợp cho với kiểu đối chiếu dạng tiền tố và là phương pháp rất phổ biết trong việc phân loại và chuyển tiếp gói tin. Tuy nhiên, TCAM sử dụng rất nhiều tài nguyên (trong FPGA, để thiết kế một TCAM có cùng dung lượng với RAM, ta cần số
lượng thanh ghi gấp 4 lần số lượng thanh ghi để tạo RAM) và tiêu tốn nhiều năng lượng. Khi một ứng dụng cần sử dụng nhiều TCAM thì vấn đề công suất tiêu thụ cần phải được quan tâm đến. Do đó ta cần phải tối ưu việc sử dụng TCAM, sử dụng các biện pháp để giảm công suất tiêu thụ.
Vì TCAM không hỗ trợ các thao tác như Ộlớn hơnỢ và Ộnhỏ hơnỢ, hay đối chiếu các giá trị trong một dải nên cần phải chia các dải này thành các dải nhỏ để có thể biểu diễn dưới dạng các tiền tố. Chẳng hạn, luật có đặt cổng gửi <513 sẽ phải chuyển thành 2 tiền tố là:
Mục1 : 0000 000* **** **** (0 → 511) Mục 2: 0000 0010 0000 0000 (= 512)
Vì vậy dung lượng TCAM cần thiết để lưu trữ các tiền tố không tăng tuyến tắnh với số lượng luật có trong bảng và khó có thể dựđoán.
Do đó việc sử dụng trực tiếp TCAM cho việc đối chiếu dạng dải là kém hiệu quả và người ta thường sử dụng các thuật toán nén kèm theo.
Học viên: Trần Trường Phan 31
Ờ Cây nhị phân quyết định (Binary Decision Tree):
Phương pháp này biểu diễn các trường trong luật dưới dạng cây nhị phân. Việc đối chiếu sẽ được thực hiện bằng cách tìm kiếm trên cây nhị phân. Phương pháp này có thể thực hiện bằng phần cứng. Tuy tốc độ tìm kiếm không cao như TCAM, nhưng bù lại nó lại sử dụng bộ nhớ hiệu quả hơn vì dùng RAM. Kắch thước của của cây nhị
phân quyết định cũng không tăng tuyến tắnh với số lượng tiền tố.
Hình 1.15: Mô hình cây quyết định
Mỗi tiền tố có trong bảng lọc sẽđược biểu diễn bằng một nút màu đen trên cây. Do số lượng các nút trên cây là hữu hạn nên dung lượng cần lưu trữ có thể xác định trước
được. Thời gian tìm kiếm trên cây nhị phân quyết định cũng không phụ thuộc vào số
lượng các tiền tố mà phụ thuộc vào độ sâu của cây. Cây quyết định thắch hợp cho việc đối chiếu dạng dải.
1.5. Các nghiên cứu có liên quan và lựa chọn giải pháp
Qua tìm hiểu, tác giả nhận thấy giải pháp lọc gói tin BV Ờ TCAM do Haoyu Song và John W.Lockwood của trường đại học Washington, St.Louis Ờ Mỹ năm 2005 [1]là
Học viên: Trần Trường Phan 32
thắch hợp nhất vì nó kết hợp được ưu điểm của TCAM và cây nhị phân quyết
định.[2][3][4][5][6][7][8][9].
Bảng 1.6: Bảng lọc các luật khác nhau
STT Địa chỉ IP nguồn Địa chỉ IP đắch Giao thức Cổng nguồn Cổng đắch
1 Bất kỳ 192.168.0.0/16 TCP ≥ 1024 2589 2 Bất kỳ 192.168.0.0/16 TCP 10101 Bất kỳ 3 128.252.158.203 192.168.50.2 TCP Bất kỳ 443
4 192.158.0.0/16 Bất kỳ UDP 49230 60000
5 Bất kỳ Bất kỳ TCP Bất kỳ < 110
Trong bảng lọc, số lượng các luật khác nhau ở 3 trường đầu (địa chỉ IP nguồn, địa chỉ IP đắch và giao thức) thường không nhiều. Giải pháp BV Ờ TCAM kết hợp giữa TCAM, giải thuật Bit Vector (BVỜ nén hiệu quả dữ liệu trong bảng luật) để thực hiện
đối chiếu kiểu tiền tố cho 3 trường này và giải thuật cây nhị phân quyết định để đối chiếu cổng nguồn và cổng đắch.
Kiến trúc BV Ờ TCAM
Lọc các trường địa chỉ IP nguồn, địa chỉ IP đắch và giao thức: sử dụng TCAM. TCAM thông thường sử dụng kiểu đối chiếu có mức ưu tiên. Khi dữ liệu được đưa vào trong TCAM, nó sẽ cho kết quả là vị trắ mục trong TCAM có mức ưu tiên cao nhất. Nhưng trong kiến trúc này, người ta sử dụng TCAM không có mức ưu tiên. Do
đó số lượng bit ở kết quảđầu ra của TCAM chắnh bằng số lượng mục có trong TCAM. Mỗi bit tương ứng với trạng thái của mục có khớp với dữ liệu vào hay không (giá trị 1 tương ứng với khớp và giá trị 0 tương ứng với không khớp). Dữ liệu đầu ra này tạo thành một BitVector có kắch thước bằng số mục trong TCAM.
Học viên: Trần Trường Phan 33
Hình 1.16: TCAM trong kiến trúc BV - TCAM
TCAM có thể lưu 3 trường đầu của gói tin một cách trực tiếp nhưng để sử dụng hiệu quả hơn, ta phân tắch 3 trường này được phân tắch và nếu giống nhau sẽ chỉđược lưu vào một mục trong TCAM (giải pháp nén).
Lọc trường cổng nguồn và cổng đắch: Sử dụng cây nhị phân quyết định.
Các dải số hiệu cổng sẽđược chia thành các miền nhỏ và biểu diễn dưới dạng một chuỗi các tiền tố.
Hình 1.17: Chuyển một dải Ộsố hiệu cổng ≥ 1024 Ợ thành các tiền tố
Mỗi tiền tố này lưu một BitVector chỉ ra tất cả các luật có liên quan đến tiền tố này.
0000 01** **** **** (1024 → 2047) 0000 1*** **** **** (2048 → 4095) 0001 **** **** **** (4096 → 8191) 001* **** **** **** (8192 → 16383) 01** **** **** **** (16384 → 32767) 1*** **** **** **** (3276 → 65536)
Học viên: Trần Trường Phan 34
Bảng 1.7: Các tiền tố của trường cổng nguồn trong bảng lọc ở hình 1.2 và BitVector tương ứng Tiền tố Luật Địa chỉ BitVector BitVector * 3, 5 0 001010 0000 01** **** **** 1 1 101010 0000 1*** **** **** 1 2 101010 0001 **** **** **** 1 3 101010 001* **** **** **** 1 4 101010 01** **** **** **** 1 5 101010 1*** **** **** **** 1 6 101010 0010 0111 0111 0101 2 7 111010 1100 0000 0100 1110 4 8 101110 0000 0000 1001 0010 6 9 101011
Hình 1.18: Mô hình Tree Bitmap và BitVector tương ứng của cổng nguồn
Nếu một gói tin có cổng nguồn là 2559 (0x9FF hay b0000 1001 1111 1111), hệ
thống sẽ thực hiện việc tìm kiếm trên cây và đưa ra kết quả là cổng này ứng với tiền tố
Ộ0000 1*** **** ****Ợ. Sau đó địa chỉ của BitVector được tắnh toán ra. Giá trị của bit vector tương ứng là 101010, có nghĩa là gói tin này phạm vào các luật có chỉ số là 1, 3 và 5.
Học viên: Trần Trường Phan 35
Vì kắch thước của BitVector bằng số luật nên khi số luật tăng lên thì kắch thước của bitvector cũng tăng theo. Chẳng hạn khi số luật bằng 256 thì cần phải có 256 bit để lưu 1 bit vector. Yêu cầu này có thể thực hiện được bằng phần cứng vì trong FPGA có thể
tạo ra RAM nội có độ rộng bus dữ liệu lên tới 256 bit. Một cách khác là chia BitVector thành nhiều từ trong RAM, nhưng sẽ phải cần một vài truy cập RAM đểđọc hết BitVector.
Thuật toán cây nhị phân quyết định: Tree Bitmap của Eatherton và Dittia được sử
dụng trong kiến trúc BV Ờ TCAM vì tiêu tốn ắt bộ nhớ (sẽ được mô tả chi tiết ở
chương 2).
Hình 1.19: Sơđồ khối của bộ lọc gói tin sử dụng kiến trúc BV Ờ TCAM
Thành phần (địa chỉ IP nguồn, địa chỉ IP đắch và giao thức) được đưa vào khối TCAM. Cổng nguồn và cổng đắch được đưa vào 2 khối tìm kiếm theo giải thuật Tree Bitmap. Ba BitVector ở đầu ra của 3 khối sẽ được ỘANDỢ với nhau theo từng bit để
tạo thành một BitVector duy nhất. Trong BitVector mới này, các bit có giá trị bằng 1 sẽ tương ứng với luật mà gói tin phạm phải.
Học viên: Trần Trường Phan 36
Chương 2 Thiết kế phần cứng 2.1 Tree Bitmap của Eatherton và Dittia[10] [11]
2.1.1 Mô tả cấu trúc của Tree Bitmap
Các tiền tố phân tắch ra từ bảng lọc sẽ được đưa lên trên cây nhị phân. Một nút là tiền tốđược biểu diễn bằng màu đen. Ngược lại, các nút không phải tiền tốđược biểu diễn bằng màu trắng. Vì dữ liệu cổng là dữ liệu 16 bit nên độ sâu của cây tối đa là 16.
Trong thuật toán Tree Bitmap, cây nhị phân được chia thành các node (vắ dụ như
trong hình mỗi node có chiều sâu là S = 4). Trong cả phần này, để mô tả thuật toán Tree Bitmap, ta thống nhất sử dụng node có chiều sâu là 4.
Hình 2.1: Mô hình Tree Bitmap
Thuật toán Tree Bitmap dựa trên 2 ý chắnh là:
Ờ Thứ nhất, tất cả các dữ liệu về các node con của một node cho trước được lưu trữ
liên tiếp nhau. Như vậy, chỉ cần một con trỏ tham chiếu cho các node con, là con trỏ 0 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0
Học viên: Trần Trường Phan 37
trỏ tới node con đầu tiên trong khối dữ liệu các node con liên tiếp này. Nhờ đó mà giảm số lượng con trỏđể kiểm soát các node. Một điều duy nhất không thuận lợi trong ý tưởng này đó là yêu cầu dữ liệu của các node con lưu trữ trong bộ nhớ phải liên tiếp nhau, gây khó khăn khi ta muốn chèn thêm một node mới hay xóa một node đi.
Ờ Thứ hai, mỗi node gồm 2 phần thông tin: thông tin về các tiền tố bên trong node và thông tin về sự tồn tại các node con của node này. Hai thành phần này được biểu diễn dưới dạng các bitmap tương ứng gọi là Internal Prefix Bitmap và Extending Paths Bitmap.
Hình 2.2: Chuyển một node thành bitmap
Internal Prefix Bitmap
Trong một node, một nút là tiền tốđược mã hóa bằng bit 1, một nút không phải tiền tốđược mã hóa bằng bit 0. Như vậy 4 mức trong node sẽđược biểu diễn lại như trong hình vẽ 2.3. Nếu sắp xếp các mức đã mã hóa này theo chiều ngang từ trái sang phải, ta sẽđược 15 bit mã hóa thông tin về các tiền tố bên trong node.
Học viên: Trần Trường Phan 38
Hình 2.3: Xây dựng Internal PrefixBitmap của node trong hình 2.2
Extending Paths Bitmap
Ứng với mỗi node, có tối đa 16 node con. Thuật toán Tree Bitmap sử dụng 16 bit để
mã hóa thông tin về các node con này. Ở đầu ra của node, ứng với các vị trắ có node con, vị trắ tương ứng trong bitmap được mã hóa bằng bit 1. Nếu không, vị trắ tương
ứng trong bitmap được mã hóa bằng bit 0.
Tắnh toán các thông số
Giả sử ta chia cây nhị phân thành các node có độ sâu là S (S là ước của 16, chẳng hạn S = 4).
Bảng 2.1: Số bit để mã hóa một node
Internal Bitmap External Bitmap
BitvectorArrayPtr 16 bit
Internal Prefix Bitmap 2S Ờ 1 bit
ChildNodeArrayPtr 16 bit
Extending Paths Bitmap 2S bit
Với mỗi node, ngoài 2 bitmap ta cần có 2 con trỏ để lưu giữđịa chỉ của node con
đầu tiên của node hiện hành và địa chỉ của tiền tốđầu tiên trong node. Giả sử 2 con trỏ
là 16 bit (có nghĩa là ta quản lý được tới 216 = 65536 = 64K tiền tố và 64K node). Suy ra số bit để mã hóa một node là:
b = 16 + 2S Ờ 1 + 16 + 2S = 31 + 2 x 2S 1 Mức 0 0 0 Mức 1 0 1 1 0 Mức 2 0 0 0 0 0 0 0 0 Mức 3 1 00 0110 00000000 Mức 0 Mức 1 Mức 2 Mức 3 1 00 0110 0000000
Học viên: Trần Trường Phan 39
Tắnh toán số node tối đa trên cây
Vì cây có chiều sâu là 16, mỗi node có chiều sâu là S, suy ra có r = 16/S mức node. Mỗi node có a = 2S node con. Vậy số node tối đa trên cây tắnh theo k là:
N = 1 + a + a2 + Ầ + arỜ1 = (ar Ờ 1)/(aỜ1) = (216 Ờ 1)/(2S Ờ 1)
Hình 2.4: Cây có chiều sâu 16
Chú ý: Các nút ở vị trắ sâu nhất trên cây (mức 16) sẽ nằm độc lập, không dùng node
để mã hóa. Thông tin BitVector của nó được xác định từ Extending Paths Bitmap của node cha tương ứng.
Dung lượng bộ nhớ cần thiết để mã hóa hết tất cả các node là: m = N x b (bit)
Tắnh toán số tiền tố tối đa trên cây
Học viên: Trần Trường Phan 40
P = 1+ 21 + 22 +Ầ + 215 + 216 = 217 Ờ 1 = 131071
Suy ra muốn quản lý hết số tiền tố này, cần sử dụng 17 bit để mã hóa địa chỉ. Ta có bảng thống kê của các thông số thay đổi theo S như sau:
Bảng 2.2: Thống kê các thông số thay đổi theo S
S r a N = node_max b m (bit)
1 16 2 65,535 35 2,293,725 2 8 4 21,845 39 851,955 4 4 16 4,369 63 275,247
8 2 256 257 543 139,551
Tùy thuộc vào dung lượng bộ nhớ có trên từng loại FPGA, ta có thể chọn S khác nhau. Nhưng S càng lớn thì số lần truy cập bộ nhớ càng ắt. Trong thiết kế của này, chúng ta chọn S = 4 với 2 lý do:
Ờ Tuy rằng RAM của FPGA có thể tạo được với độ rộng bus dữ liệu là bất kỳ (≤ 256, không cần là bội của 8), nhưng để thuận tiện cho việc cập nhật dữ liệu vào RAM dưới dạng byte thì cần chọn b là bội của 8. Giá trị 63 là phù hợp vì nó không quá lớn và số bit dư thừa là tối thiểu (chọn b = 64 thì chỉ dư thừa 1 bit).
Ờ Vì số tiền tố tối đa trên cây là P = 217 Ờ 1, do đó cần con trỏ 17 bit để quản lý hết số tiền tố này. Ở trên ta đã giả thiết sử dụng con trỏ 16 bit, vậy có thể sử dụng 1 bit dư thừa này để có thểđánh địa chỉ toàn bộ số tiền tố P.
2.1.2 Kỹ thuật tìm kiếm trên Tree Bitmap
Giả sử các tiền tố được đưa lên cây nhị phân quyết định như hình vẽ 2.6. Để dễ
dàng hình dung, ta mô tả thuật toán tìm kiếm khi có một dữ liệu về số hiệu cổng vào là:
Học viên: Trần Trường Phan 41
Hình 2.5: Vắ dụ về cây quyết định
Việc tìm kiếm bắt đầu bằng việc đọc 4 bit đầu tiên (1 nible) của số hiệu cổng: (1000)2 = 8 với thông tin bitmap của node gốc.
Hình 2.6: Thông tin bitmap của node gốc
Nhìn từ hình vẽ ta thấy, giá trị 8 ứng với đầu ra thứ 8 của node gốc. Vị trắ này có node con, cũng ứng với bit thứ 8 tắnh từ phắa trái trong Extending Paths Bitmap bằng 1. Để chuyển việc tìm kiếm sang mức 2, ta cần lấy dữ liệu của node con này. Vì các node con được lưu trữ liên tiếp nhau nên việc xác định địa chỉ của nó được tắnh bằng
địa chỉ của node con đầu tiên cộng với chỉ số của node con này trong dãy. Căn cứ vào Extending Paths Bitmap, chỉ số của node con được tắnh bằng cách đếm số bit 1 từ phắa trái cho đến vị trắ thứ 8 = (1000)2. Thao tác đếm này được gọi là Count_Ones. Chỉ số
của node con này là 3.
Mức 1
Mức 2
Học viên: Trần Trường Phan 42
Ở mức 2, Nilbe2 = (0100)2 = 4. Trong Extending Paths Bitmap ở hình 2.7 ta thấy bit thứ 4 tắnh từ phắa trái bằng 0 nên node hiện hành không có node con. Do đó ta sẽ
xét xem cổng này có khớp với một tiền tố nào trong node này không nhờ Internal Prefix Bitmap. Thao tác đó gọi là Prefix_Search. Đồng thời, nếu khớp Prefix_Search còn chỉ ra chỉ số của tiền tố dài nhất trong node khớp với Nible2 này (Prefix_Search và Count_Ones sẽ được mô tả chi tiết sau). Nhìn trên hình ta thấy giá trị cổng này phạm vào tiền tố thứ 2 trong node. Vòng tìm kiếm dừng lại và đưa ra địa chỉ của BitVector ứng với tiền tốđó bằng cách cộng địa chỉ của tiền tốđầu tiên trong node với chỉ số của tiền tố này.
Hình 2.7: Thông tin của node con tương ứng
Count_Ones: Index = Count_Ones(Bmp, pos) - Đầu vào:
9 Bmp: Bitmap.
9 Pos: Vị trắ của bit cần xem xét (cũng chắnh là giá trị thập phân của Nible).