Uploaded by emqgdeprgqsnfmqkwi

twardy firewall fpga

advertisement
WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI, INFORMATYKI I ELEKTRONIKI
KATEDRA ELEKTRONIKI
Maciej Twardy
Rekonfigurowany system ochrony transmisji
danych typu Firewall dla sieci Ethernet
o wielkich przepływnościach implementowany
w układach FPGA
Rozprawa doktorska
Promotor:
Prof. dr hab. inż. Kazimierz Wiatr
Kraków 2010
Pragnę wyrazić serdeczne podziękowania
Panu Profesorowi Kazimierzowi Wiatrowi
za inspirację, mobilizację oraz nieocenioną
pomoc w powstaniu tej rozprawy.
2
Spis treści
Wykaz skrótów.........................................................................................................................................5
1.
2.
Wstęp .............................................................................................................................................10
1.1.
Motywacja ............................................................................................................................. 10
1.2.
Cel i teza pracy ...................................................................................................................... 12
1.3.
Organizacja pracy .................................................................................................................. 14
Przegląd rozwiązań systemów ochrony danych przesyłanych w sieciach
teleinformatycznych .....................................................................................................................15
2.1.
Wprowadzenie ....................................................................................................................... 15
2.2.
Klasyfikacja funkcjonalna ..................................................................................................... 16
2.2.1.
Pasywne filtry pakietów ................................................................................................ 16
2.2.2.
Dynamiczne filtry pakietów .......................................................................................... 17
2.2.3.
Bramki typu Circuit-level.............................................................................................. 18
2.2.4.
Bramki aplikacyjne ....................................................................................................... 19
2.2.5.
Filtry typu Stateful Inspection ....................................................................................... 20
2.2.6.
Proxy odcinające ........................................................................................................... 20
2.2.7.
Rozwiązania typu Air Gap ............................................................................................ 21
2.2.8.
Filtry typu Deep Packet Inspection ............................................................................... 22
2.2.9.
Zunifikowane zarządzanie zagrożeniami ...................................................................... 23
2.3.
3.
4.
Klasyfikacja implementacyjna ............................................................................................... 24
2.3.1.
Firewalle programowe................................................................................................... 24
2.3.2.
Firewalle sprzętowe....................................................................................................... 34
Stanowisko badawcze ...................................................................................................................45
3.1.
Wprowadzenie ....................................................................................................................... 45
3.2.
Pakiet Active-HDL ................................................................................................................. 45
3.3.
Płyta testowo-uruchomieniowa Digilab 2E firmy Digilent ................................................... 47
3.4.
Płyta testowo-uruchomieniowa XUPV2 firmy Digilent ........................................................ 49
3.5.
Realizacja dostępowych interfejsów fizycznych dla sieci Fast i Gigabit Ethernet ................ 52
3.5.1.
Karta Fast Ethernet ........................................................................................................ 53
3.5.2.
Karta Gigabit Ethernet .................................................................................................. 59
Sprzętowa implementacja kontrolerów MAC dla sieci Ethernet .............................................65
4.1.
Wprowadzenie ....................................................................................................................... 65
4.2.
Struktura ramki Ethernet ........................................................................................................ 68
4.2.1.
Charakterystyka pól składowych ramki podstawowej .................................................. 69
4.2.2.
Format ramki znakowanej ............................................................................................. 71
3
4.3.
4.3.1.
Schemat blokowy .......................................................................................................... 72
4.3.2.
Tor odbiorczy Rx .......................................................................................................... 73
4.3.3.
Tor nadawczy TX .......................................................................................................... 77
4.3.4.
Moduł kontrolny............................................................................................................ 85
4.3.5.
Wyniki implementacji ................................................................................................... 87
4.4.
5.
Sprzętowy kontroler MAC - wersja Fast Ethernet ................................................................. 72
Sprzętowy kontroler MAC - wersja Gigabit Ethernet ........................................................... 88
4.4.1.
Schemat blokowy .......................................................................................................... 89
4.4.2.
Tor odbiorczy Rx .......................................................................................................... 90
4.4.3.
Tor nadawczy Tx ........................................................................................................... 96
4.4.4.
Moduł kontrolny.......................................................................................................... 104
4.4.5.
Wyniki implementacji ................................................................................................. 104
Sprzętowy system bezpieczeństwa typu Firewall.....................................................................105
5.1.
Wprowadzenie ..................................................................................................................... 105
5.2.
Silnik sprzętowego systemu typu Firewall .......................................................................... 109
5.2.1.
Schemat blokowy ........................................................................................................ 109
5.2.2.
Kontroler pamięci ramkowej ....................................................................................... 111
5.2.3.
Moduł generujący deskryptor bezpieczeństwa ............................................................ 113
5.2.4.
Pamięć wspomagająca cache ...................................................................................... 113
5.2.5.
Moduł zarządzający..................................................................................................... 117
5.2.6.
Wyniki implementacji ................................................................................................. 119
5.3.
Sprzętowy klasyfikator pakietów......................................................................................... 119
5.3.1.
Schemat blokowy ........................................................................................................ 120
5.3.2.
Filtr adresów sieciowych ............................................................................................. 122
5.3.3.
Filtr portów sieciowych ............................................................................................... 126
5.3.4.
Moduł sterujący ........................................................................................................... 131
5.3.5.
Wyniki implementacji oraz ocena wydajności sprzętowego klasyfikatora pakietów . 133
5.4.
Blok ładowania polityki bezpieczeństwa ............................................................................. 135
5.5.
Aplikacja zarządzająca ........................................................................................................ 140
5.6.
Ocena wyników implementacji kompletnej zapory sieciowej ............................................. 142
6.
Podsumowanie ............................................................................................................................149
7.
Bibliografia..................................................................................................................................154
8.
Dodatek A – opis funkcji sygnałów poszczególnych modułów sprzętowego systemu
Firewall .......................................................................................................................................163
9.
Dodatek B - szczegółowe wyniki syntezy modułów sprzętowego Firewalla ..........................172
10. Dodatek C – zawartość płyty CD ..............................................................................................186
4
Wykaz skrótów
2sBFCE
- sprzętowa
wersja
algorytmu
klasyfikacji
pakietów
wykorzystującego
wielopoziomowe filtry Bloom’a (ang. Dual Stage Bloom Filter Classification
Engine)
ABV
- algorytm klasyfikacji pakietów wykorzystujący zagregowane wektory bitowe
(ang. Aggregated Bit Vector)
ACE
- opracowany przez firmę Xilinx system zarządzania konfiguracją wewnętrzną
układów FPGA (ang. Advanced Configuration Environment)
ACL
- lista kontroli dostępu (ang. Access Control List)
AQT
- algorytm klasyfikacji dwuwymiarowej opracowany przez M. Buddhikot'a et al.
(ang. Area-based Quad Tree)
ARP
- protokół odnajdywania adresu sprzętowego hosta na podstawie adresu warstwy
sieciowej (ang. Address Resolution Protocol)
ASIC
- układy scalone projektowane do ściśle określonych zastosowań, zgodnie
ze specyfikacją użytkownika (ang. Application Specific Integrated Circuits)
B2PC
- algorytm klasyfikacji pakietów bazujący na wielopoziomowych filtrach Bloom’a
(ang. Bloom Based Packet Classification)
BRGC
- binarny refleksyjny kod Gray’a (ang. Binary-Reflected Gray Code)
BVL
- algorytm klasyfikowania pakietów wykorzystujący wektory bitowe (ang. Bit Vector
Linear serach)
BWL
- typ kompresji zniekształceń sygnału w sieciach Ethernet (ang. Base Line Wander)
CAM
- pamięć adresowana zawartością (ang. Content Addressable Memory)
CLB
- konfigurowalny blok logiczny dostępny w zasobach układów FPGA Virtex firmy
Xilinx (ang. Configurable Logic Blocks)
CMOS
- technologia wytwarzania układów scalonych wykorzystująca tranzystory MOS
o przeciwnym typie przewodnictwa (ang. Complementary MOS)
CRC
- cykliczny kod nadmiarowy (ang. Cyclic Redundancy Check)
CSMA/CD - protokół wielodostępu ze śledzeniem stanu medium transmisyjnego (ang. Carrier
Sense Multiple Access with Collision Detect)
DAC
- model
nieobowiązkowej
kontroli
dostępu
do
systemów
komputerowych
niezależnym
przeszukiwaniu
(ang. Discretionary Access Control)
DCFL
- metoda
klasyfikacji
pakietów
bazująca
na
poszczególnych pól, połączonym z kodowaniem i agregacją pośrednich wyników
5
kwerend (ang. Distributed Crossproducting Field Labels)
DCFLE
- rozszerzona wersja algorytmu DCFL zaproponowana przez G. Jedhe et al.
(ang. Distributed Crossproducting of Field Labels Extended)
DCM
- blok zarządzania zegarem cyfrowym dostępny w zasobach układów FPGA Virtex
firmy Xilinx (ang. Digital Clock Management)
DDR
- podwójna szybkość przesyłu danych (ang. Double Data Rate)
DIRE
- metoda kodowania zakresów uzależniona od zawartości bazy reguł bezpieczeństwa
(ang. Database Independent Range Encoding)
DIRPE
- metoda kodowania zakresów niezależna od zawartości bazy reguł bezpieczeństwa
(ang. Database Independent Range PreEncoding)
DoS
- atak typu odmowa usługi (ang. Denial of Service)
DPI
- metoda pełnej (głębokiej) analizy pakietów (ang. Deep Packet Inspection)
EDA
- elektroniczne wspomaganie procesu projektowania (ang. Electronic Design
Automation)
EPP
- standard dwukierunkowego równoległego portu komunikacyjnego urządzeń
komputerowych (ang. Enhanced Parallel Port),
ERS
- metoda jawnego wyszukiwania zakresów zaproponowana przez Y. Lou et al.
(ang. Explicite Range Serach)
E-TCAM
- zmodyfikowana trójwartościowa pamięć adresowana zawartością, pozwalająca na
zapisywanie przedziałów (ang. Extended TCAM)
FCS
- sekwencja kontrolna ramki Ethernet zawierająca 4-bajtowy kod CRC (ang. Frame
Check Sequence)
FIFO
- kolejka, liniowy bufor danych (ang. First In, First Out)
FIS-tree
- algorytm klasyfikacji pakietów wykorzystujący zmodyfikowaną wersję drzewa
odcinków (ang. Fat Inverted Segment tree)
FPGA
- układy programowalne o architekturze matrycowej (ang. Field Programmable Gate
Array)
FSM
- automat skończony (ang. Finite State Machine)
FTP
- protokół transferu plików (ang. File Transfer Protocol)
GMII
- gigabitowy interfejs komunikacyjny niezależny od typu medium fizycznego
(ang. Gigabit Media Independent Interface)
GOT
- algorytm klasyfikacji pakietów bazujący na strukturach typu trie opracowany przez
V. Srinivasan’a et al. (ang. Grid-Of-Tries)
GPP
- procesor ogólnego przeznaczenia (ang. General Purpose Processor)
GUI
- graficzny interfejs użytkownika (ang. Graphical User Interface)
HiCuts
- heurystyczny algorytm klasyfikacji pakietów opracowany przez P. Gupta et al.
(ang. Hierarchical Intelligent Cuttings)
6
http
- protokół przesyłania dokumentów hipertekstowych (ang. Hypertext Transfer
Protocol)
ICMP
- internetowy protokół komunikatów kontrolnych wykorzystywany w diagnostyce
sieci oraz trasowaniu pakietów (ang. Internet Control Message Protocol)
IDS
- system wykrywania włamań (ang. Intrusion Detection System)
IOS
- system operacyjny urządzeń sieciowych firmy Cisco (ang. Internetwork Operating
System)
IP
- protokół komunikacyjny warstwy sieciowej modelu OSI (ang. Internet Protocol)
IP-Core
- elementy biblioteczne o określonej funkcjonalności (ang. Intellectual Property Core)
IPS
- system zapobiegania włamaniom (ang. Intrusion Prevention System)
ISO/OSI
- model odniesienia przeznaczony do łączenia systemów otwartych (ang. International
Organization for Standardization / Open System Interconnection Reference Model)
ISP
- dostawca usług internetowych (ang. Internet Service Provider)
JTAG
- nazwa standardu IEEE 1149.1
definiującego protokół używany do testowania
połączeń na płytkach drukowanych oraz diagnostyki układów cyfrowych (ang. Joint
Test Action Group)
LAN
- lokalna sieć komputerowa (ang. Local Area Network)
LCA
- najniższy wspólny przodek w strukturze danych typu drzewo (ang. Lowest Common
Ancestor)
LDPS
- tryb pracy układu PHY redukujący pobieraną moc (ang. Link Down Power Saving)
LED
- dioda elektroluminescencyjna (ang. Light-Emitting Diode)
LRU
- najdawniej używane wpisy w tablicy połączeń Firewalla (ang. Last Recently Used)
LSB
- najmniej znaczący bit w słowie (ang. Least Significant Bit)
LUT
- tablica spełniająca rolę tablicy wartości funkcji logicznej (ang. Look-Up-Table)
MAC
- kontroler dostępu do sieci Ethernet (ang. Media Access Control)
MAC
- obligatoryjny model ochrony systemów komputerowych (ang. Mandatory Access
Control)
MAU
- łącze interfejsu dopasowującego do typu medium fizycznego (ang. Media
Attachment Unit)
MDC
- linia zegarowa interfejsu MDIO (ang. Management Data Clock)
MDI
- element MAU zapewniający właściwe połączenie fizyczne oraz elektryczne
z medium transmisyjnym (ang. Medium Dependent Interface)
MDIO
- typ szeregowego interfejsu zarządzającego układami PHY (ang. Management Data
Input/Output)
MDIX
- odmiana MDI z zamienionymi parami przewodów (ang. MDI crossover)
MGT
- standard gigabitowego portu komunikacyjnego (ang. Multi-Gigabit Transceiver)
MII
- w modelu ISO/OSI interfejs komunikacyjny niezależny od typu medium fizycznego
7
(ang. Media Independent Interface)
MLS
- wielopoziomowy model bezpieczeństwa systemów komputerowych (ang. MultiLevel Security)
MLT-3
- standard kodowania sygnałów (ang. Multi-Level Transmit)
Mpps
- jednostka wydajności przetwarzania danych wyrażona w milionach pakietów na
sekundę (ang. Mega packets per second)
MSB
- najbardziej znaczący bit w słowie (ang. Most Significant Bit)
MTU
- maksymalny rozmiar datagramu w protokole transportowym (ang. Maximum
Transmission Unit)
NIC
- karta interfejsu sieciowego (ang. Network Interface Card)
NRZ
- standard kodowania sygnałów (ang. Non Return to Zero)
NRZI
- standard kodowania sygnałów (ang. Non Return to Zero Inverted)
P2C
- metoda równoległej klasyfikacji pakietów opracowana przez J. Lunteren'a et al.
(ang. Parallel Packet Classification)
PAD
- sekwencja bitów uzupełniających ramkę Ethernet do minimalnej wymaganej
standardem długości (ang. padding)
PCS
- podwarstwa fizycznego kodowania sygnału w modelu ISO/OSI (ang. Physical
Coding Sublayer)
PHY
- urządzenie warstwy fizycznej w modelu ISO/OSI odpowiedzialne za obsługę
połączenia z medium komunikacyjnym w sieci Ethernet (ang. Physical Layer
Device)
PLL
- pętla sprzężenia fazowego (ang. Phase-Locked Loop)
PMA
- przyłącze medium fizycznego w modelu ISO/OSI (ang. Physical Medium
Attachment)
PMD
- podwarstwa
modelu
ISO/OSI
odpowiedzialna
za
transmisję
oraz
odbiór
poszczególnych bitów z medium fizycznego (ang. Physical Medium Dependent)
RAM
- pamięć o dostępie swobodnym (ang. Random Access Memory)
RARP
- protokół odnajdywania adresu warstwy sieciowej hosta na podstawie adresu
sprzętowego (ang. Reverse Address Resolution Protocol)
RBAC
- model bezpieczeństwa systemów komputerowych bazujący na rolach przydzielanych
użytkownikom (ang. Role-Based Access Control)
RFC
- heurystyczny algorytm klasyfikacji pakietów opracowany przez P. Gupta et al.
(ang. Recursive Flow Classification)
RGMII
- odmiana interfejsu GMII o zredukowanej liczbie linii sygnałowych (ang. Reduced
GMII)
SATA
- szeregowa magistrala komputerowa służąca komunikacji z urządzeniami pamięci
masowej (ang. Serial Advanced Technology Attachment)
8
SDRAM
- synchroniczna dynamiczna pamięć RAM (ang. Synchronous Dynamic RAM)
SFD
- znacznik początku ramki Ethernet (ang. Start Frame Delimiter)
SMA
- typ złącza koncentrycznego (ang. SubMiniature version A)
SMB
- protokół współdzielenia plików w sieci Microsoft Network (ang. Server Message
Block)
SMD
- element elektroniczny przystosowany do montażu powierzchniowego (ang. Surface
Mount Device)
SNI
- szeregowy interfejs sieciowy (ang. Serial Network Interface)
SOI
- flaga zakończenia transmisji danych (ang. Start Of Idle)
SRGE
- algorytm niezależnego od kontekstu bazy reguł klasyfikowania pakietów
wykorzystujący kod BRGC (ang. Short Range Gray Encoding)
TCAM
- trójwartościowa pamięć adresowana zawartością (ang. Ternary Content Addressable
Memory)
TCP
- strumieniowy protokół komunikacyjny warstwy transportowej modelu OSI
(ang. Transmission Control Protocol)
TE
- model bezpieczeństwa systemów komputerowych bazujący na kontroli typów
obiektów(ang. Type Enforcement)
TOE NIC
- kontroler NIC wyposażony w sprzętowe wspomaganie obsługi protokołów TCP/IP
(ang. TCP/IP Offload Engine Network Interface Card)
TP-PMD
- podwarstwa obsługi medium transmisyjnego typu skrętka miedziana w modelu
ISO/OSI (ang. Twisted Pair Physical Medium Dependent Sublayer)
UDP
- bezpołączeniowy protokół komunikacyjny zlokalizowany w warstwie transportowej
modelu ISO/OSI (ang. User Datagram Protocol)
UTM
- system
zunifikowanego
zarządzenia
zagrożeniami
(ang.
Unified
Threat
Management)
VBA
- język programowania zaimplementowany w aplikacjach pakietu Microsoft Office
(ang. Visual Basic for Applications)
VHDL
- język opisu sprzętu (ang. Very High Speed Integrated Circuits Hardware
Description Language)
VPN
- wirtualna sieć prywatna (ang. Virtual Private Network)
WAN
- rozległa sieć komputerowa (ang. Wide Area Network)
WSC4VB
- biblioteka funkcji obsługi komunikacji szeregowej dla języka VBA (ang. Windows
Standard Serial Communications Library for Visual Basic)
9
1. Wstęp
1.1.
Motywacja
Metody ochrony krytycznych danych w firmach i instytucjach podlegają ciągłej ewolucji,
powodowanej zmianami wymogów formalnych oraz postępem technologicznym w obszarze
przetwarzania i przechowywania informacji. Powszechne wykorzystanie systemów komputerowych,
postępujący proces cyfryzacji treści wraz z popularyzacją technologii sieciowej transmisji danych,
doprowadził do sytuacji, w której pierwotne mechanizmy bezpieczeństwa, oparte głównie o środki
fizyczne i procedury administracyjne, przestały należycie spełniać swe zadanie. Ewolucyjne zmiany
dotknęły także informacji samej w sobie – stała się ona strategicznym dobrem wymagającym
szczególnej ochrony. Nieuprawnione wykorzystywanie poufnych zasobów, ich niekontrolowane
„przecieki”, mogłyby bowiem wywołać nieodwracalne szkody z punktu widzenia interesów
organizacji zarówno naukowych, jak również publicznych i komercyjnych. Globalna sieć Internet jest
z jednej strony nieocenionym narzędziem służącym wymianie myśli i wiedzy we współczesnym
świecie. Dla organizacji komercyjnych stanowi ona platformę efektywnego prowadzenia działalności
gospodarczej, umożliwiając wzajemną komunikację kluczowych aplikacji biznesowych, niezależnie
od lokalizacji geograficznej poszczególnych jednostek. Z drugiej strony tak ogromny potencjał
Internetu daje dużej liczbie użytkowników dostęp do współdzielonych zasobów komputerowych,
wprowadzając nieznane wcześniej zagrożenia dla bezpieczeństwa systemów informatycznych:
włamania, wirusy, spamming, blokowanie działania, itp. Wskutek lawinowej ekspansji nowoczesnych,
mobilnych urządzeń wymiany danych (np. komputery przenośne, telefony komórkowe typu
smartfon, etc.), zaciera się bardzo wyraźna kiedyś granica pomiędzy wewnętrzną siecią chronioną
biura czy też centrum danych a zewnętrznym, niebezpiecznym środowiskiem publicznego Internetu.
Działy bezpieczeństwa informacji firm i instytucji starają się nadążyć za postępującymi zmianami,
wdrażając coraz bardziej wyrafinowane systemy ochrony, jednak liczba nowych zagrożeń czyni to
zadanie niełatwym. Niejednokrotnie wysiłek oraz nakłady finansowe poniesionie na wdrożenie
systemów bezpieczeństwa wewnętrznych sieci organizacji nie przynoszą należytych efektów.
Całkowita efektywność kompleksowego łańcucha ochrony danych jest bowiem uzależniona od jego
najsłabszego ogniwa – często jeden nieodpowiedzialny pracownik wykonujący powierzone mu
zadania, korzystając z domowej publicznej sieci Internet, stanowi lukę pozwalającą na obejście (tzw.
tylne drzwi) nawet najbardziej zaawansowanych systemów zabezpieczających [66]. O skali
prezentowanego problemu dobitnie świadczą statystyki występujących obecnie zagrożeń. Firma
Google wylicza, że z przeanalizowanych 450 milionów stron WWW (ang. World Wide Web)
10
publikowanych w sieci Internet 450 tysięcy było zainfekowanych złośliwym oprogramowaniem typu
malware (z ang. malicious software). Każdego dnia identyfikowano ponad 8 tysięcy nowych
przypadków takich stron [54]. Z kolei raporty czołowego producenta systemów bezpieczeństwa firmy McAfee ostrzegają przed drastycznym zwiększeniem się szybkości rozprzestrzeniania
szkodliwych aplikacji komputerowych. Przykładowo, program “Code Red v2” (robak internetowy)
potrzebował 14 godzin do zarażenia 400 tysięcy komputerów, dzięki czemu zespoły programistów
dysponowały czasem niezbędnym do opracowania skutecznych środków ochrony. Bardziej
zaawansowany robak “Warhol” w ciągu 15 minut był w stanie zainfekować ponad milion
komputerów, podczas gdy najnowszy kod „Flash” dokonuje tego w ciągu zaledwie 30 sekund [67].
Drogą propagacji robaków i wirusów bywa najczęściej poczta elektroniczna (ang. e-mail). Pomiędzy
styczniem a marcem roku 2009 wysłano 139 miliardów niepożądanych wiadomości e-mail (tzw.
spam), co stanowi 89% ogólnej liczby wiadomości przesłanych w tym okresie [66]. Wymienione
przykłady ukazują jedynie niewielką grupę występujących współcześnie zagrożeń. Co niezwykle
istotne, w miarę upływu czasu zwiększa się nie tylko liczba wykrywanych zdarzeń danego typu, ale
również poszerza się zbiór metod naruszania bezpieczeństwa danych oraz systemów informatycznych
służących ich przetwarzaniu.
Naturalną konsekwencją takiego stanu rzeczy jest poszukiwanie automatycznych narzędzi
pozwalających na zabezpieczenie krytycznych zasobów organizacji. Muszą one sprostać wyzwaniom
wydajnościowo-funkcjonalnym, wynikającym ze stale powiększającego się wolumenu oraz szybkości
przesyłania danych w sieciach teleinformatycznych, jak również z wykazanej wcześniej eskalacji
rodzajów zagrożeń. Od początku swego istnienia aż do chwili obecnej architektura powszechnie
wykorzystywanych systemów zabezpieczających bazuje przede wszystkim na rozwiązaniach
programowych. Wszelkie implementowane funkcje ochrony danych są efektem wykonywania poleceń
kodu specjalizowanego oprogramowania, uruchamianego na platformach sprzętowych ogólnego
przeznaczenia. Tylko w nielicznych wypadkach tworzone są rozwiązania dedykowane: odpowiednio
zaprojektowany sprzęt wraz z niezbędnym oprogramowaniem, co jednak znacznie podnosi koszty
całego urządzenia. Standardowe podejście do budowy systemów bezpieczeństwa w oparciu
o oprogramowanie posiada jednak wiele wad. Do najistotniejszych należy niewątpliwie duża
podatność na próby naruszenia bezpieczeństwa, związana m.in. z wykorzystywaniem błędów
systemów operacyjnych, stanowiących platformę dla implementacji programowego mechanizmu
zabezpieczającego. Opisana sytuacja dotyczy nie tylko popularnych rodzin systemów operacyjnych
Windows czy też Linux, ale również rozwiązań przeznaczonych wyłącznie do zastosowania
w infrastrukturze sieci komputerowych produkowanych przez czołowe firmy tego sektora, takie jak
Cisco, Check Point czy Juniper Networks. Przykładowo, w ciągu ostatnich 7 lat w oprogramowaniu
Cisco IOS (ang. Internetwork Operating System) w wersji 12.x wykryto 82 błędy [89] pozwalające na
złamanie zabezpieczeń, przejęcie kontroli nad urządzeniem wykorzystującym ten system bądź
nieuprawniony dostęp do chronionych danych. Podobnie w wypadku innych produktów: Cisco
11
Intrusion Prevention System (IPS) 5.x - 6 luk bezpieczeństwa od 2005 roku [88], Cisco PIX 6.x – 10
luk od 2003 roku [90], itd. Również inni producenci nie wypadają na tym polu lepiej od firmy Cisco.
Presja rynkowa jak najszybszego wprowadzania do sprzedaży kolejnych generacji urządzeń oraz
minimalizacja kosztów ich wytworzenia wpływają negatywnie na jakość wytwarzanych produktów,
szczególnie w kontekście oferowanej stabilności pracy, funkcjonalności, a przede wszystkim poziomu
ochrony danych.
Drugie istotne ograniczenie konwencjonalnych systemów bezpieczeństwa, zbudowanych
w oparciu o procesory ogólnego przeznaczenia GPP (ang. General Purpose Processors), to niska
wydajność przetwarzania danych. Coraz szybszy rozwój technologii komunikacji sieciowej
stymulowany jest przede wszystkim ogromnym zapotrzebowaniem na pasmo transmisyjne,
generowane przez współczesne aplikacje strumieniowe. Standard 10 Gb Ethernet staje się powoli
powszechnym medium komunikacyjnym w większości centrów przetwarzania danych; w drugim
kwartale 2010 roku sprzedano ponad milion portów tego rodzaju [17]. Tak duża przepustowość
uniemożliwia wykorzystanie wyłącznie programowych metod analizy przesyłanych danych.
Producenci posiłkują się w takich przypadkach akceleracją wybranych elementów funkcjonalnych
kompletnego systemu (np. obsługa wirtualnych sieci prywatnych tzw. VPN), najczęściej przy
wykorzystaniu specjalizowanych układów ASIC (ang. Application Specific Integrated Circuit), bądź
stosują wydajniejsze wersje procesorów GPP. Oczywiście konsekwencją takich działań jest wzrost
ceny urządzenia, często nieadekwatny do rzeczywistych kosztów poniesionych przez producentów. Na
rynku produktów komputerowych jest bowiem bardzo wyraźnie zarysowana granica ekonomiczna
pomiędzy tanim sprzętem popularnym, adresowanym do szerokiego grona odbiorców (ang. low level)
a wielokrotnie droższymi, zaawansowanymi rozwiązaniami z grupy „profesjonalnej” (ang. high-end).
1.2. Cel i teza pracy
Ostatnie lata przyniosły również dynamiczny rozwój technologii cyfrowych układów
programowalnych FPGA (ang. Field Programmable Gate Array). Nieustannie zwiększająca się
szybkość oraz coraz większa ilość dostępnych zasobów sprzętowych, otwierają przed logiką
reprogramowalną nowe obszary zastosowań. Oferowana przez układy FPGA elastyczność w zakresie
zmian
konfiguracji
zasobów
wewnętrznych,
umożliwia
budowę
systemów
uniwersalnych
i parametryzowanych przy jednoczesnej dużej ekonomiczności takiego rozwiązania. Ma ona związek
z możliwością zapamiętywania części map konfiguracji w pamięci RAM i dynamicznego
rekonfigurowania struktury w zależności od aktualnych potrzeb. Nieograniczona liczba takich zmian,
wynikająca z faktu zapisywania konfiguracji w pamięci RAM, pozwala na zastosowanie układów
reprogramowalnych w projektach, w których sprzęt musi być ściśle dostosowany do wymagań
aplikacji różnych użytkowników. Atrakcyjność technologii FPGA bierze się z połączenia jej
naturalnych walorów, wpływających m.in. na skrócenie czasu opracowania prototypów oraz łatwości
modyfikacji funkcjonalnej realizowanych systemów, ze stale polepszającymi się ich parametrami
12
użytkowymi, takimi jak: szybkość działania czy też wielkość dostępnych zasobów [122, 123]. Fakt ten
został bardzo szybko dostrzeżony przez wiele zespołów badawczych, koncentrujących swą aktywność
naukową
na
optymalizacji
systemów
zabezpieczających
transmisję
danych
w
sieciach
teleinformatycznych [7, 31, 59, 61, 62, 81]. Wykorzystanie potencjału układów FPGA stwarza
bowiem całkowicie nowe możliwości w dziedzinie zdominowanej dotychczas przez rozwiązania
oparte o procesory GPP. W tym miejscu watro jednak podkreślić, że w zdecydowanej większości
prowadzone w tym zakresie prace badawcze skupiają się przede wszystkim na ulepszaniu algorytmów
klasyfikacji danych, pomijając lub marginalizując kwestie pozostałych elementów wchodzących
w skład architektury Firewalla. Tylko niewielka grupa publikacji [43, 59] podejmuje temat
kompleksowej
sprzętowej
implementacji
zapory
ogniowej
z wykorzystaniem
logiki
reprogramowalnej. Jednak nawet w wypadku takich prac, stosowane wstępne założenia projektowe
powodują ograniczenie funkcjonalności bądź elastyczności konfiguracji systemu, w sposób
utrudniający jego praktyczną eksploatację. Obserwacje te legły u podstaw podjęcia przez autora
niniejszej rozprawy badań w zakresie metod efektywnej realizacji sprzętowego Firewalla, przy
uwzględnieniu realnych wymagań funkcjonalnych, stawianych przez współczesne, wysoko wydajne
systemy komputerowe.
Celem pracy była praktyczna realizacja w pełni funkcjonalnego, rekonfigurowanego systemu
ochrony transmisji danych typu Firewall, zaimplementowanego w logice FPGA, pozbawionego
wszelkich elementów programowych w procesie klasyfikacji przetwarzanych danych. Dzięki temu
wyeliminowana została możliwość włamań poprzez uruchamianie obcego kodu, przejmowanie
uprawnień, itp. Spodziewanym rezultatem zastosowania sprzętowego weryfikowania pakietów pod
kątem zgodności z bazą reguł bezpieczeństwa miał być również znaczący wzrost wydajności
przetwarzania danych. Rozprawa ta wpisuje się w nowy, dynamicznie rozwijający się nurt
wykorzystywania technologii FPGA w obszarach zabezpieczania transmisji danych w szybkich
sieciach teleinformatycznych. Większość z zaplanowanych prac badawczych prowadziło do
opracowania elementów otwierających nowe możliwości dla zastosowania logiki reprogramowalnej.
Wymienić tutaj można sprzętową implementację kontrolerów sieci Ethernet czy też mechanizmy
analizy transmitowanego strumienia danych, stanowiących zasadniczy element projektowanego
systemu bezpieczeństwa. Doświadczenia zdobyte w trakcie realizacji niniejszej rozprawy pozwolą
kontynuować prace badawcze w opisanym powyżej zakresie.
W wyniku przeprowadzonych badań, autor zamierza udowodnić następującą tezę pracy:
„Implementacja w układach FPGA rekonfigurowanego systemu ochrony transmisji danych
typu Firewall dla sieci Ethernet o wielkich przepływnościach pozwala uzyskać wysoki poziom
bezpieczeństwa, dużą szybkość przetwarzania danych oraz możliwość dynamicznej zmiany
parametrów”.
13
1.3. Organizacja pracy
Niniejsza praca została podzielona na 6 rozdziałów obejmujących zagadnienia związane
z przedmiotem prowadzonych badań, w szczególności: przegląd i analizę dostępnych metod
i systemów klasyfikacji pakietów w systemach ochrony transmisji danych, prezentację niezbędnych
składników środowiska testowo-uruchomieniowego oraz zasadniczy opis poszczególnych elementów
zrealizowanej zapory ogniowej.
Rozdział 1 zarysowuje w sposób ogólny genezę oraz problematykę przeprowadzonych badań.
Na tym tle prezentuje również tezę pracy oraz jej główny cel.
Rozdział 2 prezentuje przekrojową analizę dostępnych algorytmów oraz systemów
zabezpieczania krytycznych zasobów informacyjnych ze szczególnym uwzględnieniem sposobów
sprzętowej akceleracji procesu weryfikacji przetwarzanych pakietów. Autor w syntetyczny i czytelny
sposób stara się podsumować wady i zalety poszczególnych rozwiązań, poszukując na tej podstawie
dróg dalszej optymalizacji procesu klasyfikacji pakietów oraz architektury zapory ogniowej.
Rozdział 3 zawiera dokładny opis elementów wchodzących w skład środowiska testowouruchomieniowego, niezbędnego do realizacji prac projektowych. W szczególności omawia parametry
i konfiguracje wykorzystywanych płyt z układami FPGA oraz środowiska programistycznego
Active-HDL.
Rozdział 4 przedstawia budowę, funkcjonalność oraz uzyskane parametry wydajnościowe
zrealizowanych w ramach prac badawczych sprzętowych wersji kontrolerów MAC dla sieci Ethernet.
Stanowią one główny pomost komunikacyjny pomiędzy silnikiem klasyfikacji pakietów
a urządzeniami przesyłającymi dane w infrastrukturze sieciowej.
Rozdział 5 to kluczowa część rozprawy, zawierająca opis opracowanej architektury sprzętowej
zapory ogniowej wraz z charakterystyką poszczególnych elementów wchodzących w jej skład. Dla
każdego z modułów sprzętowego Firewalla szczegółowo omówiono realizowane przez nie
funkcjonalności, jak również zaprezentowano uzyskane parametry implementacji w układach FPGA.
Rozdział 6 zawiera wnioski końcowe, najistotniejsze osiągnięcia uzyskane w toku realizacji
pracy oraz zarys przyszłych kierunków badań nad rozwojem opracowanego systemu.
Dodatki prezentują pełne wyniki syntezy logicznej, jak również wyjaśniają funkcje linii
sygnałowych poszczególnych modułów kompletnej sprzętowej zapory ogniowej. Do pracy załączono
także płytę CD z dokumentacją techniczną oraz kodami źródłowymi w języku VHDL.
14
2. Przegląd rozwiązań systemów ochrony
danych przesyłanych w sieciach
teleinformatycznych
2.1. Wprowadzenie
Wykazany we wstępie do niniejszej rozprawy ogromny wzrost liczby potencjalnych zagrożeń
dla danych przetwarzanych w formie cyfrowej generuje potrzebę stosowania szeregu różnorodnych
systemów zabezpieczających. Od wielu lat dominujące wśród nich są rozwiązania określane mianem
ścian ogniowych (ang. Firewall). W miarę upływu czasu, w związku z dynamicznym postępem
technologicznym, ta wąska początkowo grupa rozrosła się do wielkiej rodziny, składającej się obecnie
z wielu odmiennych funkcjonalnie urządzeń. W tej sytuacji punktem wyjścia przy opracowywaniu ich
klasyfikacji musi być próba sformułowania ogólnej definicji systemu bezpieczeństwa typu Firewall,
obejmującej wszelkie formy jego implementacji. Optymalnym terminem wydaje się być generalne
stwierdzenie opisujące Firewall jako systemem komputerowy, złożony z komponentów sprzętowych
oraz/lub programowych, zabezpieczający wewnętrzną sieć teleinformatyczną organizacji w każdym
z punktów styku z mniej zaufanymi sieciami zewnętrznymi (np. Internetem) [10, 70]. Zwykle,
w warunkach rzeczywistych, administratorzy zapór ogniowych zdecydowanie bardziej rygorystycznie
podchodzą do weryfikacji ruchu sieciowego pochodzącego spoza danej organizacji, niż w odniesieniu
do informacji wysyłanych w kierunku przeciwnym. Wszystkie istniejące typy systemów Firewall
analizują strumienie danych pod kątem zgodności z obowiązującym schematem polityki
bezpieczeństwa. Ocena taka dokonywana jest na podstawie zawartości określonych pól
w przetwarzanych pakietach, ulokowanych w różnych warstwach modelu referencyjnego OSI [42],
w zależności od typu wykorzystywanej ściany ogniowej. To właśnie opisany czynnik –
funkcjonowanie w ściśle określonej warstwie modelu OSI – jest podstawą do dokonania głównego
podziału funkcjonalnego całej rodziny systemów Firewall, zaprezentowanego w dalszej części
rozdziału. Drugi istotny czynnik wyróżniający poszczególne implementacje dotyczy platformy
wykorzystanej do budowy systemu bezpieczeństwa. Do niedawna najbardziej rozpowszechnionymi
w tym obszarze były rozwiązania wykorzystujące procesory ogólnego przeznaczenia GPP oraz
dedykowane oprogramowanie filtrujące [36]. Obecnie wiele zespołów badawczych poszukuje
alternatywnych metod weryfikacji danych przesyłanych w sieciach teleinformatycznych, opracowując
nowe algorytmy klasyfikujące [5, 6, 33] bądź wykorzystując ogromny potencjał stricte sprzętowych
realizacji, bazujących na logice reprogramowalnej FPGA [7, 31, 59, 61, 62, 81].
15
2.2. Klasyfikacja funkcjonalna
W początkowym okresie istnienia zapór ogniowych podział pomiędzy poszczególnymi ich
rodzajami rysował się w sposób jasny i czytelny. Definiował go jedynie poziom w modelu OSI, do
którego system analizował przetwarzane dane. W miarę rozwoju technik zabezpieczania transmisji
sieciowej następowało coraz większe różnicowanie ścian ogniowych, któremu często towarzyszyło
łączenie funkcjonalności odrębnych wcześniej rozwiązań. Powstawały więc swego rodzaju hybrydy
nie wnoszące całkowicie nowych usług, lecz pozwalające na lepsze dostosowanie się do wymagań
specyficznych użytkowników. Proces ten trwa nadal; co więcej w ostatnich latach przybrał on na sile,
choć, obserwując jego kierunek, można wysnuć wniosek, że kolejne generacje wprowadzonych
urządzeń w wielu przypadkach inicjowane są planami marketingowymi producentów, aniżeli
racjonalnymi potrzebami klientów. W celu sformułowania pełnej klasyfikacji ścian ogniowych
również i takie systemy zostały uwzględnione w zaprezentowanym dalej zestawieniu.
2.2.1. Pasywne filtry pakietów
Pasywne filtry pakietów (ang. Static Packet Filters) są najstarszą i najprostszą z istniejących
architektur systemów bezpieczeństwa typu Firewall [36]. Z tej przyczyny aktualnie stanowią
najbardziej popularną metodę ochrony danych przesyłanych w sieciach komputerowych. Znajdują
zastosowanie zarówno w komercyjnych rozwiązaniach, takich jak listy kontroli dostępu Cisco ACL
(ang. Access Control List), czy też w otwartych rozwiązaniach typu IPChains (obecnie IPTables)
wykorzystywanych w systemie operacyjnym Linux [76].
Statyczny filtr pakietów
WARSTWY MODELU
REFERENCYJNEGO OSI
APLIKACJI
PREZENTACJI
SESJI
TRANSPORTOWA
SIECIOWA
ŁĄCZA DANYCH
FIZYCZNA
Sieć zewnętrzna
Interfejs
sieciowy
Interfejs
sieciowy
Sieć wewnętrzna
Rys. 2.1. Poglądowy schemat strukturalny pasywnego filtru pakietów.
Weryfikacja przetwarzanych pakietów dokonywana jest w filtrach statycznych na podstawie
danych zawartych w nagłówkach warstwy sieciowej i transportowej (Rys.2.1), obejmujących:
 źródłowy adres IP,
 docelowy adres IP,
16
 numer portu źródłowego,
 numer portu docelowego,
 typ protokołu.
Podstawową zaletą statycznych filtrów pakietów jest ich duża wydajność [2] oraz niski koszt budowy
wynikający z ograniczonej funkcjonalności. Negatywną konsekwencją tego jest podatność na ataki
polegające na podszywaniu się pod zaufane adresy sieciowe (tzw. spoofing). Administrator systemu,
tworząc schemat reguł odzwierciedlających obowiązującą politykę bezpieczeństwa, zmuszony jest do
uwzględniania wszystkich możliwych przypadków komunikacji występującej w danej sieci
komputerowej. Pasywne filtry pakietów nie analizują bowiem stanów połączeń [13], stąd każdemu
otwartemu portowi aplikacji wysyłającej bądź odbierającej dane należy przyporządkować
dedykowaną regułę zezwalającą albo zapobiegającą przepływowi strumienia informacji. Konieczne
jest również zastosowanie domyślnej reguły blokującej ruch pakietów zawierających nagłówki
wykraczające poza wcześniej zdefiniowany schemat polityki bezpieczeństwa.
2.2.2. Dynamiczne filtry pakietów
Dynamiczne filtry pakietów stanowią modyfikację wersji pasywnej, polegającą na
wprowadzeniu analizy stanów połączeń. Do weryfikacji przetwarzanych danych wykorzystują one
dokładnie te same pola, jak w przypadku filtrów statycznych, stąd ulokowanie w modelu OSI jest
analogiczne do przedstawionego na rysunku 2.1. Dane o połączeniach przechowywane są w specjalnej
tablicy (ang. Connection Bypass table) [10], dzięki czemu filtr jest w stanie precyzyjnie śledzić
poszczególne fazy nawiązywania komunikacji, a przez to określać ich zgodność z obowiązującymi
standardami. Jeśli przetwarzany pakiet zostanie zidentyfikowany jako część już wcześniej
zainicjowanego połączenia, nie jest konieczna jego dalsza weryfikacja [36]. Wpływa to na
zwiększenie wydajności przetwarzania informacji w stosunku do klasycznych filtrów statycznych,
które muszą analizować wszystkie pakiety.
Najbardziej krytycznym elementem konstrukcji dynamicznego filtru pakietów jest tablica
połączeń implementowana w pamięci RAM (ang. Random Access Memory). Pamięć taka dysponuje
zwykle ograniczoną pojemnością, co ma związek z minimalizacją kosztów urządzeń. Dlatego filtry
dynamiczne są podatne na ataki typu maksymalnego wykorzystania zasobów (ang. resource starvation
attack) [10]. W takiej sytuacji Firewall może wykonać następujące akcje [30]:
 zablokować generowanie nowych wpisów do tablicy połączeń, a tym samym doprowadzić
do paraliżu funkcjonalnego systemu – odmowa usługi, czyli atak typu DoS (ang. Denial
of Service),
 usunąć tylko najstarsze wpisy LRU (ang. Last Recently Used), upewniając się najpierw,
czy połączenie nadal nie jest aktywne,
 zastosować mechanizm wczesnej detekcji losowej (ang. Random Early Detection),
wybierający i usuwający pakiety w sytuacji przepełniania się tabeli połączeń,
17
 usuwać po określonym czasie (ang. time out) poszczególne wpisy z tabeli połączeń.
2.2.3. Bramki typu Circuit-level
Bramki typu Circuit-level, zwane również filtrami połączeń [10] lub bramkami na poziomie
sesji [48], stanowią kolejny etap zwiększania funkcjonalności filtrów pakietów. Operując na piątej
warstwie modelu OSI (Rys. 2.2), można pozyskać dodatkowe informacje pozwalające na
dokładniejszą weryfikację strumieni danych. Pełna lista analizowanych pól obejmuje [36]:
 źródłowy adres IP,
 docelowy adres IP,
 numer portu źródłowego,
 numer portu docelowego,
 typ protokołu,
 potwierdzenia protokołu transmisyjnego oraz numery sekwencji.
Bramka typu Circuit-level
WARSTWY MODELU
REFERENCYJNEGO OSI
APLIKACJI
PREZENTACJI
SESJI
TRANSPORTOWA
SIECIOWA
ŁĄCZA DANYCH
FIZYCZNA
Sieć zewnętrzna
Interfejs
sieciowy
Interfejs
sieciowy
Sieć wewnętrzna
Rys. 2.2. Poglądowy schemat strukturalny bramki typu Circuit-level.
Pierwszym etapem weryfikacji pakietów jest sprawdzenie zgodności pól adresowych oraz
portów z zapisami zdefiniowanymi w zestawie reguł bezpieczeństwa. Następnie filtr analizuje
parametry sesji na podstawie flag SYN, ACK oraz numeru sekwencji potwierdzeń protokołu TCP
(ang. Transmission Control Protocol) pod kątem zgodności z wymogami specyfikacji RFC 793 [16].
Do tego celu wykorzystuje on specjalną tabelę weryfikacji połączeń (ang. Connection Verification
Table), w której każdy wpis zawiera informacje o stanie flag (m.in. SYN, ACK) oraz numer sekwencji
ostatnio odebranego pakietu w danym strumieniu komunikacyjnym [10]. Bramki tego typu
charakteryzują się dużą wydajnością przetwarzania danych, ponieważ operują na dolnych warstwach
modelu OSI. Dzięki swej funkcjonalności umożliwiają zabezpieczenie istotnych segmentów sieci
komputerowych przed atakami hakerów polegającymi na przejmowaniu sesji (tzw. hijack)
i wprowadzaniu w strumienie połączeń nieautoryzowanych pakietów danych.
18
2.2.4. Bramki aplikacyjne
Bramka
aplikacyjna (ang.
Application-level
Gateway), określana także jako filtr
aplikacyjny [10], analizuje szczegółowe dane zawarte w najwyższej warstwie modelu OSI (Rys. 2.3).
Taka funkcjonalność wymusza pełną obsługę połączeń pomiędzy komputerami zlokalizowanymi
w sieci zewnętrznej oraz w bezpiecznym segmencie wewnętrznym [76], stąd też konieczne jest
zaimplementowanie w filtrze aplikacyjnym dedykowanego oprogramowania pośredniczącego (tzw.
proxy). Zazwyczaj jest ono dedykowane do obsługi konkretnej usługi sieciowej (np. HTTP, FTP, itp.),
stąd w przypadku wykrycia nieobsługiwanego serwisu proxy zablokuje takie pakiety [13, 30]. Co
więcej, zastosowanie rozważań dedykowanych poszczególnym aplikacjom, pozwala na drobiazgową
analizę przetwarzanych danych aż do poziomu poszczególnych poleceń danego protokołu. Dzięki
temu administrator otrzymuje narzędzie umożliwiające bardzo precyzyjne przydzielanie uprawnień
dostępowych do poszczególnych usług systemów informatycznych na etapie tworzenia polityki
bezpieczeństwa organizacji.
Bramka aplikacyjna
WARSTWY MODELU
REFERENCYJNEGO OSI
APLIKACJI
PREZENTACJI
SESJI
TRANSPORTOWA
SIECIOWA
ŁĄCZA DANYCH
FIZYCZNA
Sieć zewnętrzna
Interfejs
sieciowy
Interfejs
sieciowy
Sieć wewnętrzna
Rys. 2.3. Poglądowy schemat strukturalny bramki aplikacyjnej.
Wysoki poziom ochrony oferowany przez bramki aplikacyjne wynika z weryfikowania przez
nie wszystkich istotnych informacji zawartych w górnych poziomach modelu OSI, począwszy od
warstwy sieciowej. Negatywną konsekwencją takiej funkcjonalności jest niewątpliwie duży narzut
wydajnościowy, związany z koniecznością obsługi proxy. Producenci filtrów aplikacyjnych zmuszeni
są do ciągłego śledzenia potrzeb odbiorców wykorzystujących coraz to nowe usługi sieciowe, bowiem
dla każdej z nich trzeba tworzyć specyficzną aplikację pośredniczącą implementowaną w bramce.
O ile rosnące w ten sposób zapotrzebowanie na moc obliczeniową można w stosunkowo łatwy sposób
zaspokoić poprzez zastosowanie nowocześniejszych procesorów GPP, to w przypadku dodawania
kolejnych elementów aplikacyjnych istnieje duże ryzyko niewykrycia na etapie testów luk
w oprogramowaniu. Dlatego w wielu wypadkach nieostrożna implementacja oraz słaba jakość kodu
źródłowego doprowadziły do złamania zabezpieczeń tego typu systemów (szczególnie poprzez ataki
polegające na tzw. przepełnieniu bufora – ang. buffer overrun) [36].
19
2.2.5. Filtry typu Stateful Inspection
Omówiona w punkcie 2.2.4 bramka aplikacyjna jest ostatnim z wariantów rozbudowy
funkcjonalnej filtru pakietów. Kolejno prezentowane systemy bezpieczeństwa stanowią złożenie kilku
bloków filtrujących, pozwalających na uzyskanie dodatkowych mechanizmów ochrony przesyłanych
informacji. Pierwszą tego rodzaju hybrydą jest filtr typu Stateful Inspection. W teorii analizuje on
wszystkie 7 warstw modelu OSI (Rys. 2.4), łącząc w sobie cechy dynamicznego filtru pakietów,
bramki Circuit-level oraz bramki aplikacyjnej. Każdy z analizowanych pakietów jest najpierw
weryfikowany pod kątem zgodności z zakresami adresów i portów sieciowych, zdefiniowanych
w regułach bezpieczeństwa. Kolejno weryfikowane są pod kątem logiczności flagi SYN, ACK oraz
numery sekwencji, tak jak ma to miejsce w filtrach połączeń. Na koniec w ograniczonym zakresie
możliwe jest przeprowadzenie oceny kontekstowej danych aplikacji.
Filtr typu Stateful Inspection
WARSTWY MODELU
REFERENCYJNEGO OSI
Sieć zewnętrzna
WARSTWY MODELU
REFERENCYJNEGO OSI
APLIKACJI
APLIKACJI
APLIKACJI
PREZENTACJI
PREZENTACJI
PREZENTACJI
SESJI
SESJI
SESJI
TRANSPORTOWA
TRANSPORTOWA
TRANSPORTOWA
SIECIOWA
SIECIOWA
SIECIOWA
ŁĄCZA DANYCH
ŁĄCZA DANYCH
ŁĄCZA DANYCH
FIZYCZNA
FIZYCZNA
Interfejs
sieciowy
WARSTWY MODELU
REFERENCYJNEGO OSI
Dynamiczny
filtr pakietów
FIZYCZNA
FIZYCZNA
Ograniczone
funkcje bramki
typu Circuit-level
Ograniczone
funkcje bramki
aplikacyjnej
Interfejs
sieciowy
Sieć wewnętrzna
Rys. 2.4. Poglądowy schemat strukturalny filtru typu Stateful inspection.
Praktyczne implementacje, pomimo odmiennych twierdzeń producentów, często ograniczają
się jednak wyłącznie do obsługi jedynie warstwy sieciowej, co ma związek z ogromnym obciążeniem
generowanym przez pojedyncze wątki analizy stanu połączeń [36]. Wymusza to konieczność
degradacji funkcjonalności urządzenia do poziomu odpowiadającego dynamicznemu filtrowi
pakietów. Co bardziej istotne, duża część rozwiązań typu Stateful inspection wykorzystuje w swym
działaniu jednowątkowe procesy obsługujące algorytmy weryfikujące, stąd brak jest możliwości
kompensowania zapotrzebowania na moc obliczeniową poprzez wykorzystanie nowoczesnych
procesorów wielordzeniowych GPP. Dodatkowym problemem są ograniczenia języka stosowanego do
opisu reguł bezpieczeństwa dla silnika klasyfikującego, z tego też powodu zdecydowanie szybciej
popularyzują się rozwiązania bramek aplikacyjnych [36, 100].
2.2.6. Proxy odcinające
Proxy odcinające (ang. Cutoff Proxy) stanowi złożenie dynamicznego filtru pakietów oraz
części funkcjonalności bramki na poziomie sesji (Rys. 2.5). W pierwszej kolejności weryfikowane są
20
parametry sesji pod kątem zgodności z wymaganiami rekomendacji RFC [16], w szczególności
trójetapowa wymiana komunikatów oraz niezbędna autentykacja. Po poprawnym zakończeniu analizy
stanu sesji Proxy przełącza się w tryb dynamicznego filtru pakietów, weryfikującego parametry
trzeciej warstwy modelu OSI [36].
Proxy odcinające
WARSTWY MODELU
REFERENCYJNEGO OSI
APLIKACJI
APLIKACJI
PREZENTACJI
PREZENTACJI
SESJI
SESJI
TRANSPORTOWA
TRANSPORTOWA
SIECIOWA
SIECIOWA
ŁĄCZA DANYCH
ŁĄCZA DANYCH
FIZYCZNA
FIZYCZNA
Sieć zewnętrzna
Interfejs
sieciowy
WARSTWY MODELU
REFERENCYJNEGO OSI
Ograniczone
funkcje bramki
typu Circuit-level
FIZYCZNA
Dynamiczny
filtr pakietów
Interfejs
sieciowy
Sieć wewnętrzna
Rys. 2.5. Poglądowy schemat strukturalny filtru proxy odcinającego.
W przeciwieństwie do standardowej bramki sesyjnej, omówionej w punkcie 2.2.3, proxy
odcinające nie tworzy bariery w modelu klient-serwer w czasie nawiązywania połączenia. Stanowi
ono bezpośrednie połączenie pomiędzy zdalnym klientem a serwerem usługowym zlokalizowanym za
zabezpieczającą go ścianą ogniową [36]. Cecha ta lokuje proxy odcinające w grupie tzw. pośredników
transparentnych (ang. Transparent Proxies), które mogą przesyłać otrzymywane pakiety bez
konieczności ich modyfikowania [10]. Jest to oczywiste ograniczenie w stosunku do funkcjonalności
typowych bram sesyjnych, powodujące zmniejszenie poziomu zabezpieczeń świadczonych przez
zaporę. Z drugiej strony, z racji ogromnej różnorodności systemów sieciowych, a przez to i potrzeb
w zakresie ich ochrony, proxy odcinające znajdują swoje miejsce w grupie systemów realizujących
tego typu usługi.
2.2.7. Rozwiązania typu Air Gap
System zabezpieczający typu Air Gap (szczelina powietrzna) jest dobrym przykładem
obrazującym występujące obecnie zjawisko szybkiego wprowadzania do sprzedaży nowych rozwiązań
systemów Firewall, których nowatorstwo sprowadza się jedynie do wdrożenia elementów
pozwalających na odróżnianie się od produktów konkurencyjnych. Nie powoduje to istotnej zmiany
funkcjonalnej. Co gorsze, często cechy użytkowe nowego produktu ulegają pogorszeniu. Tak jest
właśnie w przypadku systemu Air Gap, w którym każde z połączeń pochodzących z zewnętrznej sieci
przed przekazaniem do segmentu chronionego zostaje zapisane na wewnętrzny dysk twardy
(Rys. 2.6). Utworzony w ten sposób bufor – „szczelina powietrzna”, zdaniem producentów, zapewnia
uzyskanie większego poziomu bezpieczeństwa chronionych danych [36].
21
Air Gap
Dysk twardy
APLIKACJI
PREZENTACJI
SESJI
TRANSPORTOWA
SIECIOWA
ŁĄCZA DANYCH
FIZYCZNA
Sieć zewnętrzna
Interfejs
sieciowy
WARSTWY MODELU
REFERENCYJNEGO OSI
Interfejs
sieciowy
Sieć wewnętrzna
Rys. 2.6. Poglądowy schemat strukturalny rozwiązania typu Air Gap.
Weryfikacja danych dokonywana jest we wszystkich warstwach modelu OSI, stąd
rozwiązanie Air Gap jest bliźniaczo podobne do bramki aplikacyjnej. Trudno jest doszukać się
wyjątkowego zysku z wykorzystania dodatkowego mechanizmu buforująco-separującego w postaci
dysku twardego. Element ten wpływa raczej na degradację zarówno wydajności systemu, jak również
jego awaryjności. Typowa brama aplikacyjna wykorzystuje również buforowanie, tyle że
zrealizowane za pomocą pamięci RAM, która jest zdecydowanie szybsza od dysku twardego
oraz mniej zawodna, ze względu na brak jakichkolwiek elementów mechanicznych.
2.2.8. Filtry typu Deep Packet Inspection
Mechanizm głębokiej analizy pakietów DPI (ang. Deep Packet Inspection) polega na
szczegółowej analizie zawartości przetwarzanych pakietów w celu odnalezienia określonych wzorców
bajtowych, zdefiniowanych w bazie sygnatur. W tradycyjnych implementacjach każda z reguł
bezpieczeństwa zawiera ciąg znakowy identyfikujący konkretne zdarzenie bądź zagrożenie dla
bezpieczeństwa danych [51]. Dzięki temu, że filtry DPI stanowią połączenie systemu detekcji
intruzów IDS (ang. Intrusion Detection System) oraz ściany ogniowej [25], w przypadku wykrycia
określonego
wzorca
automatycznie
blokują
niebezpieczne
połączenia.
Odmienne
od
konwencjonalnych systemów Firewall podejście do weryfikacji danych, polegające na monitorowaniu
jedynie podejrzanego ruchu, niesie z sobą pewną słabość tego typu rozwiązań. Całkowita efektywność
wykrywania zagrożeń sprowadza się bowiem do poziomu aktualności bazy sygnatur. Jest to zadanie
niezwykle trudne wobec ogromnej liczby zagrożeń powstających co roku. Jeśli wziąć pod uwagę
jedynie złośliwe oprogramowanie (tzw. malware), w każdym kwartale jest rejestrowanych klika
milionów nowych przypadków (Rys. 2.7). Do tego należy uwzględnić jeszcze wszelkiego rodzaju luki
w systemach i aplikacjach użytkowych oraz zagrożenia związane z ingerencją w protokoły
komunikacyjne.
22
Liczba zarejestrowanych przypadków
Przyrost Malware
(pierwsze kwartały lat 2008–2010)
4,500,000
4,000,000
3,500,000
3,000,000
2,500,000
2,000,000
1,500,000
1,000,000
500,000
0,000
Q1 2008
Q1 2009
Q1 2010
Rys. 2.7. Porównanie liczby zarejestrowanych przypadków oprogramowania malware w pierwszych
kwartałach lat 2008-2010 [66].
Dodatkowym problemem jest zapewnienie odpowiednio skalowalnej bazy danych sygnatur,
która zapewni możliwość przechowywania nowopowstających wzorców przez cały okres eksploatacji
urządzania (zwykle 3-5 lat).
2.2.9. Zunifikowane zarządzanie zagrożeniami
Najnowszym produktem w dziedzinie ochrony danych jest system zunifikowanego
zarządzenia zagrożeniami UTM (ang. Unified Threat Management). Według definicji IDC
(ang. International Data Corporation) UTM to dedykowane urządzenie (tzw. appliance), które
unifikuje i integruje wiele funkcjonalności bezpieczeństwa na pojedynczej platformie sprzętowej.
Zaklasyfikowanie do tej kategorii wymaga zaimplementowania co najmniej podsystemu Firewalla,
detekcji lub prewencji przed intruzami (IDS lub IPS) oraz skanera antywirusowego. Niekoniecznie
trzeba ich używać równocześnie, ale muszą istnieć w danym produkcie [36, 41, 87]. Tak bogate
wyposażenie bywa jednak w praktyce często ograniczane przez producentów redukujących koszty
wytworzenia. Stosowanie typowych komercyjnych lub otwartych systemów operacyjnych, w których
funkcjonują poszczególne usługi bezpieczeństwa, stwarza ogromne zagrożenie dla chronionych
danych. W takiej sytuacji zdecydowanie łatwiej jest dokonać włamania do bazowego systemu
operacyjnego niż bezpośrednio do poszczególnych usług bezpieczeństwa [36]. Podobne redukcje
dotykają pozostałych podsystemów: IDS/IPS, antywirus czy też antyspam. Do poprawnej pracy
wymagają one bieżącej aktualizacji baz sygnatur, co narzuca na producenta obowiązek utrzymania
kosztownych laboratoriów gromadzących informacje o nowych przypadkach zagrożeń bądź
zakupywania gotowych aktualizacji od zewnętrznych podmiotów prowadzących tego typu działalność.
23
2.3. Klasyfikacja implementacyjna
Rozwój platform implementacyjnych systemów bezpieczeństwa typu Firewall jest ściśle
powiązany z opisaną w rozdziale 2.2 klasyfikacją funkcjonalną. Wdrażanie nowych mechanizmów
ochrony danych niesie z sobą konieczność poszukiwania coraz bardziej wydajnych algorytmów
lub architektur sprzętowych. Trend ten utrzymuje się stale, choć obecnie jest bardziej uwarunkowany
przez lawinowo rosnącą ilość informacji przetwarzanych w systemach zabezpieczających. Jego
efektem jest powstanie rozwiązań wyraźnie wyróżniających w dotychczas jednorodnej grupie
systemów stricte programowych, wykorzystujących aplikacje filtrujące oraz popularne procesory
ogólnego przeznaczenia. Mowa tutaj o próbach zastosowania rozwiązań sprzętowych w postaci
układów ASIC, FPGA bądź pamięci TCAM jako metody zwiększenia bezpieczeństwa
oraz wydajności przetwarzania danych.
2.3.1. Firewalle programowe
Historycznie najstarsza metoda implementacji ścian ogniowych wykorzystuje dedykowane
aplikacje filtrujące działające w systemie komputerowym opartym na procesorach GPU.
To rozwiązanie, choć niewątpliwie najprostsze i najtańsze z możliwych, niesie ze sobą
wiele poważnych wad (Rys. 2.8). Przede wszystkim wykorzystanie typowego (powszechnie
wykorzystywanego) systemu operacyjnego umożliwia hakerom podejmowanie prób włamań
z wykorzystaniem znanych luk bezpieczeństwa.
Atak
Aplikacja
usługowa
Aplikacja
usługowa
Niemodyfikowany system
operacyjny
Moduły obsługi
komunikacji
sieciowej
Platforma komputerowa ogólnego przeznaczenia
. . . . ..
...
.
. ..
Ograniczenia
wydajnościowe
Rys. 2.8. Poglądowy diagram wrażliwych punktów struktury programowego Firewalla.
O skali tego problemu świadczy dobitnie liczba rejestrowanych co roku błędów w zabezpieczeniach
oprogramowania. Przykładowe zestawienie za rok 2009 dla czterech wybranych wersji popularnych
systemów operacyjnych zaprezentowano na rysunku 2.9.
24
Liczba zarejestrowanych luk bezpieczeństwa
25
20
15
10
5
0
Microsoft Windows Server 2008
SUSE Linux Enterprise Server (SLES) 11
Red Hat Enterprise Linux ES4
Debian GNU/Linux 5.0
Rys. 2.9. Liczba luk bezpieczeństwa wybranych systemów operacyjnych wykrytych w roku 2009
(na podstawie [102]) .
Producenci systemów operacyjnych starają się na bieżąco wydawać odpowiednie poprawki
likwidujące
wykryte
zagrożenia.
Jednak
to
na
użytkownikach
zapór
ogniowych
ciąży
odpowiedzialność ciągłej aktualizacji oprogramowania wewnętrznego. Jakiekolwiek zaniedbania w tej
kwestii mogą doprowadzić do przełamania zabezpieczeń i utraty istotnych danych.
Drugi problemem dotyczy platformy sprzętowej wykorzystanej do budowy tego typu
urządzeń. Z reguły minimalizacja kosztów produkcji zmusza producentów do stosowania
uniwersalnych
rozwiązań
sprzętowych
wyposażonych
w
popularne
procesory
ogólnego
przeznaczenia. Nieoptymalizowana pod kątem realizowanych zadań architektura płyt głównych,
w połączeniu z dużą ilością zbędnych usług działających w systemie operacyjnym, zmniejsza
w sposób radykalny całkowitą wydajność zapory.
Poszukiwania metod rozwiązania opisanych słabych stron zapór programowych obejmują
kilka równolegle rozwijających się działań:
 tworzenie specjalnie zabezpieczonych wersji systemów operacyjnych,
 optymalizacja algorytmów klasyfikujących pakiety,
 akceleracja weryfikacji danych z wykorzystaniem rozwiązań sprzętowych.
25
Zabezpieczanie systemu operacyjnego, zwane również utwardzaniem (ang. hardening), polega
na minimalizacji ekspozycji na aktualne oraz przyszłe zagrożenia poprzez przeprowadzenie pełnej
konfiguracji systemu wraz z usunięciem zbędnych aplikacji i urządzeń [78]. Proces ten nie kończy się
na jednorazowej aktywności, lecz powinien być kontynuowany przez administratorów w toku
produkcyjnej eksploatacji poszczególnych urządzeń.
W przypadku wykorzystywania systemu
operacyjnego do budowy dedykowanych ścian ogniowych, utwardzanie powinno sięgać o wiele dalej.
Konieczna jest ingerencja w kod źródłowy systemu, tak, aby wdrożyć mechanizmy rozgraniczające
w wyraźny sposób obszary, w których funkcjonują aplikacje bezpieczne bądź narażone na złamanie
(Rys. 2.10). Dopiero takie podejście daje gwarancję prawidłowej ochrony danych, eliminując
możliwość włamania się hakera do systemu operacyjnego z wysokimi prawami użytkownika [36].
Atak
Niezabezpieczona
aplikacja usługowa
Zabezpieczona
aplikacja usługowa
Bezpieczny system operacyjny
Bezpieczne moduły
obsługi komunikacji
sieciowej
Granica
bezpieczeństwa
. . . . ..
...
.
. ..
Platforma komputerowa ogólnego przeznaczenia
Ograniczenia
wydajnościowe
Rys. 2.10. Poglądowy diagram struktury programowego Firewalla z zabezpieczonym („utwardzonym”)
systemem operacyjnym (na podstawie [36]).
Dla systemów z grupy Linux, często wykorzystywanych do budowy programowych ścian
ogniowych, stosowane w praktyce mechanizmy ochrony można podzielić na cztery grupy [77]:
 ochrona pamięci w jądrze systemu,
 ochrona pamięci w kompilatorze,
 nadzór nad dostępem do systemu (kontrola dostępu),
 inne (stosujące randomizację, szczegółowe ograniczenia dostępu, zapis zdarzeń
zachodzących w systemie itp.).
Wpisują się one w szersze modele definiujące sposób przydzielania i kontroli uprawnień.
W najbardziej powszechnym modelu nieobowiązkowej kontroli DAC (ang. Discretionary Access
Control) zarówno użytkownicy, jak i procesy, dysponują możliwością pełnej kontroli nad
posiadanymi obiektami (m.in. plikami, katalogami, urządzeniami, itp.) [60, 77]. Takie podejście nie
nadaje się do budowy bezpiecznego środowiska dla funkcjonowania krytycznych aplikacji. Stąd też
w roku 1985 Departament Obrony Stanów Zjednoczonych opracował standard wprowadzający
26
obligatoryjny mechanizm ochrony zwany MAC (ang. Mandatory Access Control) [19]. Model ten
można podzielić na składowe polityki obejmujące m.in.: kontrolę dostępu podmiotów (użytkownicy
i procesy) do obiektów, autentykację tożsamości a zarazem przywilejów poszczególnych
użytkowników oraz metody szyfrowania istotnych danych [60]. W tym przypadku to administrator
systemu decyduje o konfiguracji zabezpieczeń i praw dostępów. Użytkownicy nie są w stanie
samodzielnie zmienić narzuconej im polityki bez wcześniejszej zgody administratora.
Nieustanny rozwój systemów komputerowych oraz wzrost znaczenia informacji przetwarzanej
w postaci cyfrowej spowodował konieczność modyfikowania ogólnych założeń modeli DAC
i MDAC. W wyniku takich działań powstało szereg dodatkowych rozwinięć koncepcji ochrony
systemów operacyjnych, dostosowanych do specyficznych potrzeb aplikacyjno-użytkowych. Do
najważniejszych zaliczyć należy modele:

wymuszania typów TE (ang. Type Enforcement),

kontroli dostępu na podstawie ról RBAC (ang. Role-Based Access Control),

wielopoziomowego bezpieczeństwa MLS (ang. Multi-Level Security).
Model bezpieczeństwa TE, bazujący na kontroli typów obiektów, minimalizuje uprawnienia
aplikacji do zakresu pozwalającego na ich poprawne funkcjonowanie oraz ogranicza potencjalne
negatywne skutki nadużycia tychże przywilejów [60]. Stanowi on praktyczną implementację
elastycznej architektury Flask [95], w której każdemu procesowi oraz obiektowi przypisany zostaje
specjalny zestaw atrybutów bezpieczeństwa (ang. security attributes), określany jako tzw. kontekst
bezpieczeństwa [124]. Dzięki temu funkcja kontrolująca uprawnienia, w momencie podejmowania
decyzji o zezwoleniu danej operacji, dysponuje zbiorem niezbędnych informacji. Implementacja TE
wprowadza pojęcie domeny jako atrybutu opisującego każdy proces oraz pojęcie typu klasyfikującego
każdy obiekt. Wszystkie procesy będące w tej samej domenie, jak również wszystkie obiekty
o konkretnym typie, podlegają takim samym zasadom bezpieczeństwa. Pojedynczy zestaw atrybutów,
opisujący zarówno procesy jak i obiekty, pozwala wykorzystać jedną macierz specyfikującą warunki
dostępu oraz wzajemnej interakcji pomiędzy typami i obiektami [124].
Kontrola dostępu na podstawie ról RBAC wykorzystuje do podejmowania decyzji informacje
o funkcjach, jakie przydzielono użytkownikowi w danej organizacji. Użytkownik nie może według
własnego uznania dokonywać operacji czy też uzyskiwać dostępu do danych innych użytkowników
systemu. RBAC jest więc przeciwieństwem modelu DAC. Ze względu na brak wykorzystania
wielopoziomowych mechanizmów zabezpieczających nie można go jednak zaliczyć wprost do grupy
obligatoryjnych modeli MDAC [27]. Wprowadzenie klasyfikowania użytkowników według ról
ułatwia proces zarządzania polityką bezpieczeństwa systemu. Wystarczy bowiem zdefiniować zestaw
zasad i uprawnień odzwierciedlających strukturę organizacji, a później przyporządkować
użytkowników według właściwej im lokalizacji. W przypadku zmiany stanowiska czy też
przynależności działowej pracownikowi przydzielony zostaje nowy zestaw reguł.
27
System zabezpieczony zgodnie z wymogami modelu wielopoziomowego bezpieczeństwa
MLS, powinien być wyposażony w następujące funkcjonalności [55]:
 możliwość tworzenia oraz izolowania równoważnych klas zasobów systemowych, przez co
wszystkie aktywne elementy danej klasy są dostępne na takich samych zasadach
bezpieczeństwa,
 zdefiniowane zasady interakcji pomiędzy poszczególnymi klasami,
 mechanizmy gwarantujące wdrożenie polityki MLS,
 metody kontroli zgodności działania mechanizmów zabezpieczających z obowiązującymi
regułami,
 nadanie czytelnych, łatwo identyfikowalnych etykiet poszczególnym klasom zasobów
systemowych.
Dzięki takim cechom system MLS pozwala w praktyce precyzyjnie odseparować poszczególne klasy
informacji oraz zarządzać użytkownikami o różnych poziomach uprawnień. Hierarchiczna struktura
klasyfikująca dane oraz uprawnienia, w połączeniu z mechanizmami weryfikacji użytkowników,
uniemożliwia nieautoryzowany dostęp do zasobów systemowych. Klasyczne rozwiązania MLS
opierają się na modelu kontroli dostępu Bell-LaPadula [9], w którym użytkownik nie może
odczytywać danych z wyższych poziomów uprawnień oraz nie może dokonywać zapisów na
poziomach innych od przydzielonego użytkownikowi. Restrykcje takie odnoszą się również do
programów uruchamianych przez użytkownika w danym systemie [86] .
Zaprezentowanej aktywności w obszarze zwiększania bezpieczeństwa systemów operacyjnych
towarzyszy poszukiwanie metod optymalizacji algorytmów klasyfikacji pakietów przetwarzanych
przez zapory ogniowe. Pomimo tego, że parametry funkcjonalne poszczególnych rozwiązań są
uwarunkowane docelowym obszarem zastosowań, można wyróżnić kilka uniwersalnych wymagań,
stawianych wszystkim nowoczesnym algorytmom klasyfikującym. Należą do nich m.in. [26, 33, 34,
62]:
 duża prędkość wyszukiwania – coraz szybsze łącza teleinformatyczne oraz rosnące
wymagania co do akceptowalnych poziomów opóźnień przetwarzania danych wymuszają
opracowywanie
rozwiązań
pozwalających
na
pracę
z
prędkościami
medium
komunikacyjnego (ang. wire-speed),
 minimalizacja ilości zasobów pamięciowych niezbędnych do implementacji algorytmu –
w zależności od przeznaczenia urządzenia zestaw reguł bezpieczeństwa może zawierać od
kilkudziesięciu do kilkuset tysięcy elementów,
 skalowalność ilości pól wykorzystywanych do weryfikacji danych – rozbudowa
funkcjonalna systemów bezpieczeństwa wiąże się z koniecznością analizy dodatkowych
informacji z nagłówków pakietów. Uniwersalny algorytm klasyfikujący powinien
pozwalać na łatwe poszerzenie zakresu sprawdzanych pól,
28
 elastyczność definiowania opisu reguł – oprócz arbitralnego ustalania wartości
poszczególnych pól składowych reguły, wymagana jest możliwość wykorzystywania
masek, operatorów (mniejszy, większy, etc.) czy też zakresów,
 szybkość aktualizacji zestawu reguł – praktyczna eksploatacja klasyfikatorów wiąże się
z koniecznością wdrożenia mechanizmów umożliwiających aktualizację definicji polityki
bezpieczeństwa. Szybkość realizacji tego procesu wpływa na efektywność całego
urządzenia.
Problem klasyfikacji pakietów w ujęciu ogólnym sprowadza się do porównywania
określonych pól nagłówków przetwarzanych pakietów z bazą danych klasyfikatora, zawierającą
skończoną sekwencję n reguł bezpieczeństwa: R1, R2… Rn. Poszczególne reguły składają się
z k-elementarnych wartości, odpowiadających analizowanym polom nagłówków pakietów. Każde
pole może być porównane z k-tym elementem reguły na jeden z trzech sposobów: bezpośrednio,
prefiksowo lub poprzez zakres. W przypadku porównywania bezpośredniego pole nagłówka musi
jednoznacznie odpowiadać wartości k danej reguły. Sytuacja taka ma miejsce przy specyfikowaniu
pojedynczego adresu IP, konkretnego numeru portu lub protokołu sieciowego. Dopasowywanie
prefiksowe jest wykorzystywane do opisywania grup adresów tworzących podsieci. Ostatni sposób,
polegający na porównywaniu zakresów, służy w praktyce określaniu przedziałów portów protokołów
transportowych [6]. Niezależnie od zastosowanej metody weryfikowany pakiet jest zgodny z daną
regułą Ri jedynie wówczas, jeśli ściśle zdefiniowane pola nagłówka odpowiadają jednocześnie
wszystkim k-elementarnym wartościom składowym reguły.
Do wyrażenia funkcyjnej złożoności czasowej algorytmów klasyfikujących powszechnie
używana jest w literaturze notacja „dużego O” [3]. W celu zapewnienia jak najlepszej czytelności
prezentowanych w dalszej części rozdziału charakterystyk metod weryfikacji pakietów, w tabeli 2.1
przedstawiono listę zmiennych wykorzystywanych w funkcjach opisujących złożoność czasową
poszczególnych algorytmów.
Tab. 2.1. Opis zmiennych wykorzystywanych w funkcjach złożoności czasowej poszczególnych
algorytmów.
Zmienna
Opis
N
Liczba reguł
d
Liczba wymiarów (analizowanych pól nagłówków)
W
Długość (bitowa) prefiksu pojedynczego wymiaru
S
Szerokość słowa danych pamięci
A, α, l
Parametry optymalizacyjne, specyficzne dla danego algorytmu
29
Wykorzystywane obecnie algorytmy klasyfikujące można podzielić na cztery główne grupy,
wymienione w tabeli 2.2 (na podstawie [33, 50]). W dalszej części rozdziału zostaną omówione
pokrótce najważniejsze cechy algorytmów wchodzących w skład pierwszych trzech grup, jako metod
klasyfikacji pakietów stosowanych w programowych systemach typu Firewall. Ostatnia kategoria,
wymieniona w tabeli 2.2 ze względu na konieczność całościowego przeglądu algorytmów
klasyfikujących, stanowi odrębny rozdział, dedykowany sprzętowym rozwiązaniom zabezpieczającym
transmisję danych w sieciach teleinformatycznych.
Tab. 2.2. Podział algorytmów klasyfikujących (na podstawie [33, 50]).
Kategoria
Przykłady algorytmów
Podstawowe struktury
danych
Przeszukiwanie liniowe, drzewa hierarchiczne,
drzewa przycinane, wektory bitowe
Geometryczne
GOT, cross-producting, AQT, FIS-tree
Heurystyczne
RFC, HiCutts, HyperCuts, przestrzeń krotek
Sprzętowe
TCAM, bitmap intersection
Najstarszy i zarazem najprostszy algorytm wyszukiwania liniowego polega na porównywaniu
odpowiednich pól nagłówków przetwarzanych pakietów z listą reguł bezpieczeństwa. Analiza taka
dokonywana jest sekwencyjnie, począwszy od reguły o najwyższym priorytecie, aż do momentu,
w którym dopasowane zostaną wszystkie pola nagłówkowe. Pomimo swej prostoty i stosunkowo
niewielkiego zapotrzebowania na zasoby pamięciowe O(N), algorytm przeszukiwania liniowego
charakteryzuje się niewielką wydajnością oraz skalowalnością. Czas przeszukiwania listy reguł,
wynoszący O(N), rośnie wprost proporcjonalnie do ich liczby [33, 50, 56, 119], co w praktyce
dyskwalifikuje możliwość produkcyjnego wykorzystania tego typu rozwiązań w najbardziej
wymagających obszarach zastosowań. Z tego względu rozpoczęto intensywne poszukiwania
efektywniejszych form klasyfikacji pakietów, zwiększających szybkość dopasowywania pakietów do
wzorców oraz zmniejszających zapotrzebowanie na zasoby pamięciowe. Początkowo prace te
skoncentrowały się na wykorzystaniu podstawowych struktur danych, jakimi są prefiksowe drzewa
wielokierunkowe trie (z ang. retrieval) przechowujące zbiory słów (łańcuchy znaków albo innych
obiektów, np. liczb całkowitych) nad pewnym zdefiniowanym alfabetem [3]. W wypadku
standardowych binarnych drzew przeszukiwań każdy z węzłów posiada maksymalnie dwa
węzły-dzieci. Dodatkowo dla każdego węzła n takiego drzewa wszystkie wartości przechowywane
w lewym poddrzewie (drzewie, którego korzeniem jest lewe dziecko korzenia głównego) są mniejsze
od wartości v zapisanej w n, zaś wszystkie wartości z prawego poddrzewa są większe od v [24].
Struktury typu trie różnią się od binarnych drzew przeszukiwań sposobem przechowywania
30
wyszukiwanych słów – są one zapisywane w liściach drzewa trie [8]. Węzły wewnętrzne drzewa
zawierają jedynie tablice wskaźników do kolejnych poddrzew trie lub węzłów zewnętrznych [49, 91].
Przeszukiwanie drzewa polega na przemieszczaniu się po jego strukturze zgodnie z kolejno
odczytywanymi bitami prefiksu, aż do osiągnięcia liścia zawierającego szukany klucz lub wskaźnika
pustego, oznaczającego, że dane słowo w drzewie nie występuje. Cecha taka idealnie wpasowuje się
w specyfikę wymagań związanych z klasyfikacją pakietów, gdzie weryfikowane ciągi informacji są
zazwyczaj znacznej długości (minimalne dwuwymiarowe słowo wejściowe złożone z pola adresu
źródłowego i docelowego IP posiada łączną długość 64 bitów).
Najprostsza metoda klasyfikacji z wykorzystaniem struktur trie polega na utworzeniu
d-wymiarowego hierarchicznego drzewa prefiksowego [82]. W wypadku, gdy d>1, procedura
konstruowania drzewa rozpoczyna się od utworzenia drzewa przeszukiwania F1 złożonego ze zbioru
prefiksów pierwszego wymiaru (np. adresu źródłowego IP). Dla każdego prefiksu p w drzewie F1,
jednoznacznie zdefiniowanego w zestawie reguł, rekurencyjnie tworzone są drzewa przeszukiwań dla
wymiarów d-1. Poszczególne prefiksy stanowią zarazem wskaźniki łączące drzewa kolejnych
poziomów hierarchii. Zapotrzebowanie na zasoby pamięciowego algorytmu hierarchicznych drzew
trie wynosi O(NdW), zaś maksymalny czas przeszukiwania jest równy O(Wd) [33, 50]. Możliwym jest
również dokonywanie przyrostowych aktualizacji hierarchii drzew w czasie O(d2W). Główne wady
omawianego algorytmu obejmują alokację dużych zasobów pamięciowych (większą niż w przypadku
przeszukiwania liniowego) oraz konieczność wstecznych wyszukiwań (ang. backtracking search)
w celu odnalezienia właściwej ścieżki do odpowiedniego prefiksu. Eliminacja wyszukiwań
wstecznych możliwa jest dzięki modyfikacji struktury danych drzewa trie poprzez replikację
odpowiednich reguł. Tak powstała nowa wersja drzewa, określana w literaturze jako Cecilia [98, 121]
bądź set-pruning trie [33], redukuje czas weryfikacji dla najgorszego przypadku do wartości O(dW)
kosztem zwiększenia zapotrzebowania na pamięć do poziomu O(NddW).
Złożoność czasowa
aktualizacji, wynosząca O(N ), ogranicza obszar wykorzystania algorytmu do relatywnie małych
d
i statycznych klasyfikatorów.
Alternatywną metodę wykorzystania struktur trie zaproponowano w algorytmie BVL (ang. Bit
Vector Linear serach) [6]. Poszczególnym węzłom drzewa trie przyporządkowane są N-bitowe
wektory sygnalizujące reguły odpowiadające danemu węzłowi. Dla każdego z wymiarów tworzone
jest odrębne drzewo trie o takiej konstrukcji. Wyznaczenie zbioru reguł zgodnych z weryfikowanym
słowem sprowadza się do określenia N-bitowych punktów przecięć pomiędzy d wektorami, stąd
najmniej korzystny czas wyszukiwania wynosi
przy wykorzystaniu pamięci równym
[50]. Obserwacje praktyczne pozwoliły stwierdzić, że przetwarzane pakiety pasują równocześnie
jedynie do niewielkiej liczby reguł, nawet w przypadku polityk bezpieczeństwa złożonych z około
1700 wpisów [6]. Definiowanie N-bitowych wektorów, dla każdego z wymiarów, prowadzi w tej
sytuacji do zbędnego zwiększania złożoności obliczeniowej. Zaproponowana przez Baboescu et al. [6]
zmodyfikowana wersja algorytmu ABV (ang. Aggregated Bit Vector), poprzez wykorzystanie
31
zagregowanego wektora bitowego o długości A, redukuje koszt operacji wstępnego przetwarzania
bazy reguł do wartości O(N2d), zwiększając przy tym zapotrzebowanie na zasoby pamięciowe
o dodatkowe
bitów (w stosunku do klasycznego algorytmu BVL) [50].
Kolejnym algorytmem bazującym na strukturach typu trie jest siatka drzew GOT (ang. GridOf-Tries) [98]. Ze względu na swą specyfikę GOT jest przyporządkowywany w dostępnej literaturze
do różnych grup funkcjonalnych: A. Kolehmainen zakwalifikowuje GOT do kategorii klasycznych
metod weryfikacji pakietów [50], zaś P. Gupta do grupy algorytmów geometrycznych [33]. Siatka
drzew tries została opracowana przez V. Srinivasana et al. [98] głównie z przeznaczeniem dla
klasyfikacji dwuwymiarowej, obejmującej adresy źródłowe i docelowe protokołu IP. Algorytm GOT
charakteryzuje się zapotrzebowaniem na zasoby pamięciowe rzędu O(NdW), osiągniętym poprzez
umieszczanie reguł (kluczy) tylko w pojedynczych węzłach drzewa. Dodatkowo stosowane jest
wstępne przetwarzanie bazy reguł w celu określenia pozycji wskaźników łączących drzewa
poszczególnych wymiarów. Dzięki temu możliwe są bezpośrednie skoki pomiędzy poddrzewami
prefiksów danego wymiaru bez konieczności wstecznego wyszukiwania, co zmniejsza czas
klasyfikacji do wartości O(Wd-1). Negatywną konsekwencją zastosowania takiej metody definiowania
wskaźników jest utrudnienie procesu przyrostowych aktualizacji – twórcy algorytmu sugerują
przebudowywanie całej struktury drzewa. Proces taki posiada złożoność czasową równą O(NW) [33].
Praktyczne potrzeby weryfikacji wielu pól z możliwością definiowania reguł zawierających
przedziały wyszukiwanych wartości doprowadziły do opracowania algorytmu cross-producting [98].
Pierwszy etap przetwarzania danych w tej metodzie polega na wydzieleniu z bazy reguł kolumn
zawierających wszystkie różne zakresy prefiksów dla każdego z wymiarów d. Na podstawie tych
informacji konstruowana jest tabela CT (ang. cross-product table) złożona ze zidentyfikowanych
zakresów wraz z odpowiadającymi im numerami reguł, przechowywanych w postaci krotek
i oznacza kolejne zakresy dla wymiaru d (np. [ ,
], [ ,
, gdzie
]….) [50]. Ponieważ dla N prefiksów
istnieje najwyżej 2N-2 zakresów, maksymalny rozmiar tablicy CT, a zarazem zapotrzebowanie na
zasoby pamięciowe algorytmu cross-producting, osiąga wartość O(Nd). Z tego względu nadaje się on
jedynie dla bardzo małych klasyfikatorów [33]. Czas wyszukiwania wynosi w tym przypadku O(dW).
Odmienną koncepcję dwuwymiarowego systemu klasyfikacji pakietów (ang. 2-dimensional
classification scheme) zaproponował T. Lakshman et al. [52]. Algorytm ten nakłada restrykcje
odnośnie specyfiki poszczególnych wymiarów: pierwszy wymiar F1 jest ograniczony jedynie do formy
prefiksowej, drugi zaś F2 pozwala na definiowanie dowolnych przedziałów. Dzięki takim założeniom
początkowym możliwe jest wykorzystanie drzewa trie jako struktury przechowującej prefiksy F1.
Węzłom zewnętrznym drzewa F1 przyporządkowane zostają niezachodzące na siebie przedziały
cząstkowe wymiaru F2, reprezentujące poszczególne reguły, zgodne z prefiksem wymiaru F1. Jako
struktury danych przeznaczone do identyfikacji zakresów wykorzystywane są zwykle binarne drzewa
wyszukiwań. Ponieważ każda z reguł zapisywana jest tylko raz w drzewie wyszukiwania,
32
zapotrzebowanie algorytmu na zasoby pamięciowe wynosi O(NW). Czas weryfikacji danych dla
najbardziej niekorzystnego przypadku wynosi O(WlogN) [33].
Do grupy metod geometrycznych, dedykowanych klasyfikacji dwuwymiarowej, należy także
algorytm AQT (ang. Area-based Quad Tree) [12]. Buddhikot et al. [24, 28] stosują dekompozycję
każdego z wymiarów do drzewa ćwiartek (ang. quad tree), składającego się z czterech węzłów (tzw.
kwadrantów) odpowiadających prefiksom „00”, ”01”, ”10” oraz „11”. Proces dekompozycji
realizowany jest rekurencyjnie aż do momentu, kiedy w każdym z kwadrantów drzewa ćwiartek
pozostaje najwyżej jedna pasująca reguła. Dana reguła przecina kwadrant, jeżeli całościowo obejmuje
przynajmniej jeden z jego wymiarów [33]. Algorytm AQT charakteryzuje się następującymi
parametrami: zapotrzebowanie pamięciowe O(NW), złożoność operacji wyszukiwania O(αW), czas
aktualizacji
, gdzie α oznacza parametr optymalizacyjny, definiujący liczbę podziałów [50].
Ostatnim z omawianych w grupie metod geometrycznych jest algorytm FIS-tree (ang. Fat
Inverted Segment tree), zaproponowany przez A. Feldmana et al. [26], wykorzystujący
zmodyfikowaną wersję drzewa odcinków (ang. segment tree). Struktura taka jest zrównoważonym
drzewem binarnym, w którym każdy z liści odpowiada przedziałom elementarnym, wyznaczonym
przez uporządkowane końce poszczególnych przedziałów. Węzły wewnętrzne drzewa odcinków
odpowiadają z kolei przedziałom, które są sumą odpowiednich przedziałów elementarnych poddrzewa
zakorzenionego w danym węźle [18]. Algorytm FIS-tree wprowadza dwie istotne zmiany: po pierwsze
kompresuje strukturę drzewa odcinków, redukując jego głębokość kosztem zwiększenia liczby
wymiarów l, po drugie nie wykorzystuje wskaźników powrotnych od węzłów-dzieci do węzła-rodzica
[33]. Dzięki takim zmianom uzyskano złożoność czasową wyszukiwania na poziomie O((l+1)W)
oraz zapotrzebowanie na pamięć rzędu O(l N 1+1/l) [50].
Zarówno w przypadku zaprezentowanych podstawowych metod wyszukiwania, jak
i algorytmów geometrycznych, optymalizacja jednego z istotnych parametrów oceny jakościowej
(czasu wyszukiwania bądź zapotrzebowania na pamięć) odbywa się często kosztem degradacji
drugiego parametru. Spostrzeżenie to stało się przyczyną poszukiwań nowych sposobów klasyfikacji
wielowymiarowej, opartych o heurystyki, uwzględniające specyfikę rzeczywistych baz reguł
bezpieczeństwa, posiadających niejednokrotnie bardzo rozbudowaną strukturę z nadmiarowymi lub
wykluczającymi się wpisami. Redukcja zbędnych informacji poprzez wstępne przetwarzanie bazy
reguł
jest
podstawą
działania
algorytmu
heurystycznego
RFC
(ang.
Recursive
Flow
Classification) [34]. W pierwszym etapie weryfikacji, dane z nagłówków pakietów dzielone są na
wiele mniejszych części, pozwalając na równoległe przeszukiwanie szeregu bloków pamięci,
w których zapisano przetworzoną bazę reguł. Odczytane wartości tworzą indeksy dla kolejnej fazy
wyszukiwania, przy czym łączny rozmiar bitowy wyniku operacji wyszukiwania jest mniejszy od
długości wektora danych wejściowych. Proces jest powtarzany rekurencyjnie aż do momentu,
w którym pozostaje tylko jeden indeks, kodujący informację o typie analizowanego pakietu (tzw.
33
classID). Efektywność czasowa weryfikacji dla algorytmu RFC wynosi O(d), zaś zapotrzebowanie
pamięciowe O(Nd) [50].
Twórcy algorytmu RFC opracowali również alternatywną metodę heurystycznej weryfikacji
pakietów, określaną jako HiCuts (ang. Hierarchical Intelligent Cuttings). W procesie wstępnego
przetwarzania tabeli definicji reguł bezpieczeństwa zbudowana zostaje struktura drzewa decyzyjnego,
w którego liściach przechowywane są niewielkie liczby reguł, przeszukiwane sekwencyjnie
w procesie klasyfikacji [35, 119]. Korzeń drzewa reprezentuje pełną d-wymiarową przestrzeń
wyszukiwania. W wyniku jej partycjonowania wzdłuż jednego z wymiarów, węzłom-dzieciom
przypisane zostają mniejsze podprzestrzenie. Proces ten realizowany jest rekurencyjnie do momentu,
kiedy w każdej z podprzestrzeni znajdzie się nie więcej niż B reguł, gdzie B oznacza zmienną
optymalizacyjną algorytmu [33]. Koszt czasowy operacji wyszukiwania jest równy O(d) przy
zapotrzebowaniu na zasoby pamięciowe wynoszącym O(Nd) [50]. Zmodyfikowana wersja algorytmu,
określana jako HyperCuts [92], pozwala na partycjonowanie wzdłuż wielu wymiarów równocześnie.
Dzięki temu, w stosunku do oryginalnej metody HiCuts, uzyskano redukcję zużycia zasobów
pamięciowych od 2 do 10 razy oraz skrócenie czasu wyszukiwania do 5 razy [92].
Grupę metod heurystycznych zamyka algorytm przeszukiwania przestrzeni krotek (ang. Tuple
Space Search) [99]. Poszczególnym regułom bezpieczeństwa przyporządkowywane zostają d-krotki,
w których każdy i-ty element odpowiada długości prefiksu i-tego wymiaru. Powstała w ten sposób
przestrzeń krotek odzwierciedla strukturę bazy reguł, pogrupowanej ze względu na długość prefiksów
wymiarów składowych. Zbiór reguł o takim samym, stałym rozmiarze, identyfikowany daną krotką,
jest przechowywany w tabeli funkcji skrótów [33]. W najgorszym przypadku każda reguła posiada
odrębną funkcję skrótu, stąd zapotrzebowanie algorytmu na zasoby pamięciowe oraz efektywność
czasowa operacji wyszukiwania wynoszą O(N). Algorytm umożliwia szybką aktualizację przyrostową
w czasie O(1) [50].
2.3.2. Firewalle sprzętowe
Pojęcie „sprzętowy Firewall” w idealnym przypadku oznacza system realizujący funkcje
zabezpieczania transmisji danych w sieciach teleinformatycznych przy wykorzystaniu wyłącznie
dedykowanych
układów
elektronicznych,
z
pominięciem
jakiegokolwiek
kodu
programu
wykonywanego przez mikroprocesor. W praktyce wielu producentów posługuje się jednak tym
terminem w odniesieniu do oferowanych produktów, będących tak naprawdę klasycznymi
rozwiązaniami
programowymi,
uzupełnionymi
jedynie
o
pewne
funkcje
wspomagające
implementowane w sprzęcie. Przeważnie do takich celów używane są układy ASIC, obsługujące
procesy szyfrowania i deszyfrowania pakietów w wirtualnych sieciach prywatnych VPN (ang. Virtual
Private Network) bądź akcelerujące proces wyszukiwania ciągów w urządzeniach IDS/IPS oraz
modułach antywirusowych [29, 36]. Nie sposób jest jednoznacznie stwierdzić, jak w rzeczywistości
realizowana jest taka funkcjonalność, ponieważ producenci nie udostępniają szczegółowych
34
dokumentacji technicznych oferowanych urządzeń, zasłaniając się tajemnicą technologiczną i ochroną
przed konkurencją. Użytkownikom pozostaje jedynie weryfikacja ogólnych parametrów technicznych
w toku produkcyjnej eksploatacji. W niektórych przypadkach minimalizacja kosztów produkcji,
w połączeniu z istniejącym zapotrzebowaniem w poszczególnych sektorach rynku, prowadzi do
wycofywania się z wytwarzania zaawansowanych, a przez to drogich i adresowanych do wąskiego
grona odbiorców, urządzeń. Przykładem opisanego zjawiska jest kampania marketingowa firmy
Check Point Software Technologies Ltd. dyskredytująca korzyści płynące z zastosowania rozwiązań
sprzętowych na rzecz nowych, wydajnych procesorów wielordzeniowych [14]. Pomimo tak silnego
wpływu strategii biznesowych na kierunki rozwoju technologicznego wiele ośrodków badawczych
prowadzi niezależne prace nad optymalizacją sprzętowych metod klasyfikacji pakietów. Historycznie
początki aktywności badawczej w tym obszarze stymulowane były koniecznością przetwarzania coraz
większych tabel trasowania pakietów w routerach brzegowych rozległych sieci WAN (ang. Wide Area
Network). Stąd też wynika wczesna dominacja metod dwuwymiarowych w grupie algorytmów
sprzętowej klasyfikacji danych (pierwotnie routery wykorzystywały do trasowania pakietów jedynie
informacje o adresie źródłowym i docelowym protokołu IP).
Pierwszy i zarazem najbardziej popularny sposób sprzętowej klasyfikacji pakietów opiera się
na wykorzystaniu trójwartościowej pamięci TCAM (ang. Ternary Content Addressable Memory). Jest
to zmodyfikowana wersja pamięci adresowanej zawartością (ang. Content Addressable Memory),
umożliwiająca przechowywanie również wartości nieistotnych (ang. don’t care). TCAM zapisuje pary
wyszukiwanych ciągów skojarzonych z dedykowanymi im maskami. Dzięki temu idealnie wpasowuje
się w prefiksowy schemat adresacji, obowiązujący w sieciach Ethernet. Przykładowo: zakres podsieci
192.168.1.*, gdzie „*” oznacza pozycję nieistotną, będzie zapisany w pamięci TCAM jako wartość
„11000000 10101000 00000001 00000000” z maską „11111111 11111111 11111111 00000000”.
Co najważniejsze, efektywność czasowa procesu wyszukiwania jest niezależna od liczby zapisanych
wierszy i wynosi O(1), zatem już po jednym cyklu zegarowym pamięć zwraca wynik kwerendy [119,
139]. W zależności od potrzeb implementacyjnych może być on dostępny w postaci binarnej
niekodowanej, w której każdemu wierszowi pamięci odpowiada dedykowana linia sygnałowa
potwierdzająca trafienie albo w formie kodowanej, znacznie redukującej szerokość magistrali
wyjściowej.
Pomimo swych niewątpliwych zalet, praktyczne wykorzystanie pamięci TCAM
w nowych obszarach zastosowań ogranicza kilka istotnych wad tej technologii [119, 137]:
 wysoki koszt produkcji,
 stosunkowo niska pojemność,
 niedostosowanie do przechowywania reguł zawierających przedziały wartości,
 duże zapotrzebowanie na energię,
 ograniczona skalowalność.
Koszt pojedynczego bitu przechowywanego w pamięci TCAM może być nawet do 30 razy
większy niż w przypadku pamięci DDR SRAM [119], co wynika z faktu, że komórka elementarna
35
TCAM wymaga użycia od 10 do 12 tranzystorów, podczas gdy konwencjonalne pamięci SRAM
potrzebują do tego celu jedynie od 4 do 6 tranzystorów [5]. Stale rosnąca liczba urządzeń
wyposażonych w tego typu pamięć pozwala przypuszczać, że jej cena będzie sukcesywnie maleć, choć
prawdopodobnie nigdy nie osiągnie poziomu powszechnych rozwiązań SRAM. Jednak to nie kwestia
ekonomiczna jest największym ograniczeniem pamięci TCAM – główny problem wiąże się z brakiem
bezpośredniej możliwości zapisywania reguł zawierających dowolne zakresy, szczególnie
w odniesieniu do numerów portów [11]. Każdy zakres musi być najpierw poddany dekompozycji do
postaci niezależnych prefiksów. W najgorszym przypadku dla W-bitowego numeru portu może istnieć
(2W-2)d prefiksów, stąd definicja pojedynczej reguły składającej się z dwóch 16-bitowych portów
będzie wymagała aż 900 wpisów do pamięci [33, 119]. Fakt ten wpływa także niekorzystnie na
efektywnie dostępną pojemność TCAM, szczególnie w połączeniu z dużymi rozmiarami komórek,
wynikającymi z konieczności zastosowania dodatkowych tranzystorów przechowujących informacje
o wartościach „*”.
Jednotaktowy czas wyszukiwania informacji w TCAM uzyskiwany jest dzięki zrównolegleniu
architektury wewnętrznej pamięci. Każda komórka sygnalizuje specjalnym blokom logicznym, czy
sygnał wejściowy jest zgodny z zapisaną w niej regułą. Duża liczba równocześnie aktywnych
elementów powoduje jednak znaczne zużycie energii.
Dostępne obecnie układy TCAM
charakteryzują się poborem mocy rzędu 12-15W [64, 137, 138]. W przeliczeniu na pojedynczy bit jest
to wartość 150 razy większa niż w wypadku klasycznych pamięci SRAM [119].
Atrakcyjność pamięci TCAM motywuje wiele zespołów naukowych na całym świecie do
prowadzenia badań nad możliwymi sposobami redukcji zapotrzebowania energetycznego, jak również
optymalnego implementowania obsługi wyszukiwania zakresów. Spitznagel et al. [97] proponują
rozwiązanie E-TCAM (ang. Extended TCAM), modyfikujące konstrukcję elementarnych komórek
pamięci, w sposób pozwalający na bezpośrednie wyszukiwanie zakresów na poziomie układu
scalonego. Dodatkowa funkcjonalność zwiększa liczbę elementów wchodzących w skład
pojedynczego wiersza pamięci o kolejne 32W tranzystorów. Pomimo tego E-TCAM ogranicza
o ponad 90% pobór mocy układu poprzez redukcję ilości obszarów aktywowanych w trakcie trwania
procesu wyszukiwania [11, 119]. Stało się to możliwe dzięki uzupełnieniu koncepcji partycjonowanej
pamięci CoolCAM [138] dodatkowym blokiem indeksów, z którym skojarzone są segmenty
przechowujące informacje. Na podstawie danych odczytanych z bloku indeksów realizowane jest
równoległe wyszukiwanie w niewielkiej, ściśle określonej grupie bloków pamięciowych.
Optymalizacja sprzętowej architektury TCAM jest zadaniem czasochłonnym i niezwykle
kosztownym. Z tego powodu bardzo dynamicznie rozwija się alternatywny kierunek badań,
koncentrujący się na opracowaniu efektywnych algorytmów kodowania zakresów. W nurcie tym
możemy wyróżnić metody zależne od kontekstu bazy danych reguł bądź od niego niezależne,
określane jako DIRE (ang. Database Independent Range Encoding) [11, 53]. Gupta oraz McKeown
[34] przeanalizowali 793 rzeczywiste systemy klasyfikacji pakietów funkcjonujące u 101 różnych
36
dostawców usług internetowych ISP (ang. Internet Service Provider). W sumie zawierały ponad
41 tysięcy reguł, co pozwoliło na wyciągnięcie kilku istotnych wniosków dotyczących charakterystyk
polityk bezpieczeństwa. Do najważniejszych wniosków należą [34]:
 średnia liczba reguł w badanych systemach wynosiła około 50 (jedynie 0,7% wszystkich
klasyfikatorów posiadała bazy zawierające więcej niż 1000 wpisów),
 protokoły warstwy transportowej były ograniczone zwykle do niewielkiego zbioru
konkretnych elementów, np.: TCP, UDP (ang. User Datagram Protocol), ICMP
(ang. Internet Control Message Protocol), itp.,
 tylko 10,2% klasyfikatorów wykorzystywało zakresy w definicji reguł dla warstwy
transportowej, w tym 9% przypadków był to przedział od portu 1023 do 65535,
 wiele reguł w tych samych klasyfikatorach wykorzystywało jednakowe definicje
poszczególnych pól,
 8% reguł było nadmiarowych.
Z kolei K. Lakshminarayanan et al. [53] wykazał, że w bazach danych list kontroli dostępu
ACL, pochodzących z 2004 roku, na łączną liczbę około 215 tysięcy reguł, 25% procent
wykorzystywało zakres w opisie jednego pola, zaś tylko 1,5% w dwóch polach. Dla pierwszego pola
wyróżniono 270 unikalnych przedziałów, a dla drugiego jedynie 37. Na podstawie powyższych
obserwacji H. Liu opracował metodę efektywnego mapowania przedziałów w pamięci TCAM [58].
Wykorzystuje ona translację klucza wyszukującego do wektora o zredukowanej długości, w którym
każdy z bitów składowych vi przyjmuje wysoką wartość logiczną jedynie wówczas, kiedy klucz
zawiera się w przedziale Ri. Translacja taka może być realizowana w oparciu o bezpośrednie
adresowanie pamięci konwencjonalnej (pojedyncze pole, zawierające 16-bitowy zakres, wymaga
zarezerwowania około 64 tysięcy wpisów) [58]. Wektor wynikowy zapisywany jest do pamięci
TCAM, zwracającej ostatecznie informację o regułach odpowiadających wyszukiwanemu kluczowi.
Odmienny wariant hierarchicznej minimalizacji liczby przedziałów proponuje J. Lunteren
et al. [62]. Schemat równoległej klasyfikacji pakietów P2C (ang. Parallel Packet Classification)
pozwala na jednoczesne, niezależne wyszukiwanie informacji w wielu polach, ograniczając znacznie
zapotrzebowanie na zasoby pamięciowe. Algorytm P2C występuje w trzech odmianach (stylach):
wariant I charakteryzuje się najlepszym czasem aktualizacji, natomiast warianty II i III najmniejszymi
rozmiarami wektorów pośrednich kodujących zakresy. Styl kodowania może być jednolity dla całej
bazy, jak również wybierany indywidualnie dla poszczególnych reguł. Wektor kodujący wyszukiwany
klucz jest przechowywany w pamięci TCAM, przy czym dla stylów I i II każda reguła alokuje
dokładnie jedną pozycję w pamięci, natomiast styl III może wymagać większej ilości wpisów [62].
Zarówno algorytm P2C, jak i metoda H. Liu, wymagają użycia dedykowanych rozwiązań sprzętowych
do wstępnego przetwarzania baz reguł, bądź dodatkowych zasobów pamięciowych przechowujących
tablice kodujące zakresy, co znacznie ogranicza skalowalność tego typu rozwiązań [11].
37
Próbę usunięcia głównych wad algorytmów hierarchicznych podejmują metody z grupy
DIRE, w których sposób kodowania przedziałów nie jest powiązany z ich rozkładem w bazie danych
reguł bezpieczeństwa. Lakshminarayanan et al. [53] opracowali algorytm DIRPE (ang. Database
Independent Range PreEncoding), bazując na dwóch podstawowych zasadach:
 każdy przedział jest reprezentowany jako zbiór arbitralnych elementów trójwartościowych
a nie prefiksów,
 dodatkowe,
wolne
bity
pamięci
TCAM
są
używane
do
kodowania
ciągów
trójwartościowych.
Dzięki temu, w porównaniu do standardowej reprezentacji prefiksowej, udało się znacznie
zredukować liczbę wpisów identyfikujących poszczególne przedziały, kosztem zwiększenia długości
poszczególnych słów. Jednak efektywność DIRPE spada w miarę zmniejszania liczby nadmiarowych
bitów dostępnych w pamięci TCAM.
Alternatywną koncepcją algorytmu niezależnego od kontekstu bazy jest SRGE (ang. Short
Range Gray Encoding) [11], którym reprezentację krótkich zakresów zrealizowano w oparciu
o binarny refleksyjny kod Graya BRGC (ang. Binary-Reflected Gray Code). Granice poszczególnych
przedziałów zostają zamienione z postaci binarnej na odpowiadające im kody Graya. Następnie dla
każdego początku i końca danego zakresu obliczany jest najniższy wspólny przodek LCA
(ang. Lowest Common Ancestor), czyli przodek najbardziej oddalony od korzenia drzewa. Stanowi on
punkt podziału pierwotnego zakresu na dwie mniejsze części. Dla lewego poddrzewa generowane
prefiksy pokrywają wszystkie wartości w nim zawarte. Dzięki własnościom kodu BRGC możliwa jest
minimalizacja zbioru prefiksów poprzez zastąpienie wpisem nieistotnym „*” wszystkich pozycji
odpowiadających krawędziom podziału LCA. Ciągi trójwartościowe wygenerowane przez algorytm
SRGE mogą jednak w pewnych wypadkach zachodzić na siebie, powodując nieefektywne
wykorzystanie zasobów pamięci TCAM. Z tego względu A. Bremler-Barr et al. [11] opracowali
zmodyfikowaną wersję hybrydowego algorytmu H-SRGE (ang. Hybrid-SRGE), w którym do każdego
przedziału
kodowanego
metodą
SRGE,
alokującego
największą
pojemność
TCAM,
przyporządkowywany zostaje jeden dodatkowy bit identyfikujący. Wstępny etap przetwarzania,
zależny od kontekstu bazy danych reguł bezpieczeństwa, polega na utworzeniu hierarchicznej listy
przedziałów nadmiarowych posegregowanej według częstości występowania. Dzięki takiemu
podejściu współczynnik rozwinięcia liczby zakresów hybrydowego algorytmu H-SRGE dla
referencyjnej bazy reguł wyniósł 1,03. Dla porównania algorytm DIRPE osiągnął wynik 1,12 przy
większej o 40% liczbie wymaganych bitów dodatkowych, dostępnych w pamięci TCAM [11].
Lakshman i Stiliadis [52] zaproponowali algorytm Bitmap-intersection, wykorzystujący do
procesu klasyfikacji pakietów standardowe pamięci SRAM. W metodzie tej zestaw reguł
odpowiadający analizowanemu pakietowi stanowi część wspólną d-podzbiorów trafionych reguł,
określanych dla każdego z wymiarów indywidualnie. Obliczanie części wspólnych zbiorów jest
realizowane metodami sprzętowymi. W tym celu jednowymiarowe wynikowe zbiory są kodowane do
38
postaci N-bitowego wektora (bitmapy), w którym wysoki stan logiczny na danej pozycji odpowiada
trafieniu w odpowiednią regułę. Iloczyn logiczny poszczególnych wektorów zwraca ostatecznie
rezultat klasyfikacji. Ponieważ każda z map bitowych jest długości N oraz istnieje O(N) przedziałów
w każdym z d wymiarów, zapotrzebowanie na zasoby pamięciowe algorytmu wynosi O(dN2).
Złożoność czasowa operacji wyszukiwania uzależniona jest od szerokości słowa pamięci
i wynosi
[33].
Tab. 2.3. Porównanie złożoności obliczeniowej oraz zapotrzebowania na zasoby pamięciowe
algorytmów klasyfikujących (na podstawie [33, 50]).
Algorytm
Złożoność obliczeniowa dla
najgorszego przypadku
Alokowane zasoby
pamięciowe dla
najgorszego przypadku
Wyszukiwanie liniowe
O(N)
O(N)
Przestrzeń krotek
O(N)
O(N)
Hierarchiczne drzewa trie
O(Wd)
O(NdW)
GOT
O(Wd-1)
O(NdW)
Cecilia (Set-pruning tries)
O(dW)
O(NddW)
Cross-producing
O(dW)
O(Nd)
Klasyfikacja 2D
O(W log N)
O(NW)
AQT
O(αW)
O(NW)
FIS-tree
O((l+ 1)W)
O(l N 1+1/l)
RFC
O(d)
O(Nd)
HiCuts
O(d)
O(Nd)
BVL
O(dN2)
Bitmap-intersection
Ternary CAM
Zbiorcze
zestawienie
O(1)
parametrów
czasowo-pamięciowych
O(N)
omawianych
algorytmów
przedstawiono w tabeli 2.3. Część z przedstawionych algorytmów można bezpośrednio
implementować w układach programowalnych FPGA (np. P2C [62] bądź Bitmap-intersection [52]),
przy czym w grupie tej dominują metody oparte o dekompozycję oraz drzewa decyzyjne [44].
W niektórych przypadkach pierwotne algorytmy zostały wzbogacane o pewne funkcjonalności,
polepszające własności klasyfikatorów. Takie podejście zastosował Song oraz Lockwood [93]
w rozwiązaniu BV-TCAM, łączącym metodę równoległych wektorów bitowych BV (ang. Bit Vector)
z pamięcią TCAM. Dzięki temu możliwym stało się sygnalizowanie wielu równoczesnych trafień.
39
Praktyczna implementacja algorytmu BV-TCAM w układzie FPGA Xilinx XCV2000E dla 222 reguł
alokowała około 10% dostępnych zasobów sprzętowych oraz 20% pamięci BlockRAM [93].
Taylor i Turner [118] przedstawili algorytm DCFL (ang. Distributed Crossproducting Field
Labels) redukujący wykładniczą złożoność czasową, jak również zapotrzebowanie pamięciowe
występujące w oryginalnych metodach Cross-producing i RFC. Algorytm ten, bardzo podobny do
równoległej klasyfikacji pakietów P2C, należy do grupy metod bazujących na niezależnym
przeszukiwaniu poszczególnych pól, połączonym z kodowaniem i agregacją pośrednich wyników
kwerend. DCFL składa się z trzech głównych elementów: zestawu równoległych bloków
wyszukujących, sieci agregującej oraz dekodera priorytetu reguł. Poszczególne bloki wyszukujące
stosują odmienne metody analizy, dostosowane do konkretnych typów pól nagłówków. I tak do
weryfikacji
adresów
źródłowych
i
docelowych
wykorzystano
zmodyfikowaną
wersję
kompresowanych wielobitowych drzew typy trie (w algorytmie DCFL określanych jako Tree Bitmap).
Każde wyszukiwanie dla takiej struktury danych wiąże się z koniecznością 6 odwołań do pamięci, zaś
pojedynczy prefiks alokuje średnio 6 bajtów [118]. W przypadku portów sieciowych autorzy
algorytmu przeprowadzili początkowo szereg analiz rzeczywistych systemów klasyfikatorów, na
podstawie których zdecydowali się na wyodrębnienie pięciu typów zakresów:
 WC - dowolne,
 HI - porty wysokie od 1024 do 65535,
 LO - porty niskie od 0 do 1023,
 AR - zakresy arbitralne,
 EM - pojedyncze porty.
Dla pierwszych trzech typów (WC, HI i LO) układy wyszukujące zawierają jedynie flagi informujące
o istnieniu filtrów, mieszczących się w tych zakresach portów oraz rejestry etykiet przedziałów,
uzupełnione logiką wykrywającą, czy analizowane pole jest większe od wartości 1023 czy też nie.
Pojedynczym portom EM dedykowano tablice funkcji skrótów, zaś do przeszukiwania zakresów
arbitralnych AR wykorzystano algorytm FIS-tree. Sieci agregujące wyniki pośrednie uzyskiwane
z opisanych bloków wyszukujących zbudowane zostały w oparciu o filtry Blooma, dzięki czemu,
zdaniem twórców DCFL, jest on w stanie osiągnąć wydajność klasyfikacji na poziomie 100 Mpps
(ang. Mega packets per second) [118]. Jednak takie podejście nie jest całkowicie optymalne przy
implementacji w układach FPGA, głównie ze względu na opóźnienia wnoszone przez długie ścieżki
logiczne [44]. Dyskusyjną kwestią pozostaje również efektywność zastosowanej metody
wyszukiwania zakresu portów, bazującej na statystycznych własnościach niewielkiej grupy
produkcyjnych klasyfikatorów.
Wielopoziomowe filtry Blooma zostały także wykorzystane w algorytmie B2PC (ang. Bloom
Based Packet Classification), opracowanym przez I. Papaefstathiou et al. [75] oraz jego sprzętowej
odmianie 2sBFCE (ang. Dual Stage Bloom Filter Classification Engine), zrealizowanej przez
A. Nikitakis’a et al. [71]. Obydwie wersje algorytmów posługują się generalnymi charakterystykami
40
baz danych reguł bezpieczeństwa, dostępnymi w publikacji P. Gupta et al. [33]. Dzięki dekompozycji
wielowymiarowych danych wejściowych poszczególne pola nagłówków są przetwarzane równolegle
w niezależnych blokach klasyfikujących, bazujących na filtrach Blooma. Wynikiem pierwszej fazy
weryfikacji jest 120-bitowy wektor, generowany przez blok permutacji, który trafia w kolejnym etapie
do drugiego filtru Blooma, indeksującego tablice identyfikatorów trafionych reguł. Algorytm 2sBFCE
pozwala na zapisanie bazy złożonej z 4 tysięcy definicji przy wykorzystaniu 178 kB pamięci SRAM.
Złożoność czasowa operacji wyszukiwania wynosi 26 taktów zegara systemowego, stąd maksymalna
przepustowość algorytmu osiąga wartość 5,86 Mpps [71]. Warto w tym miejscu zauważyć,
że wszystkie omawiane metody wykorzystujące filtry Blooma, mogą w niektórych przypadkach
zwracać niepoprawne wyniki klasyfikacji, tzw. false positive. Dyskwalifikuje to możliwość ich
praktycznego zastosowania w obszarach wymagających zapewnienia całkowitej wiarygodności
i autentyczności przesyłanych danych.
Odrębna grupa rozwijanych obecnie sprzętowych algorytmów klasyfikujących wykorzystuje
struktury drzew decyzyjnych. Są to drzewa binarne, których łukom przyporządkowano etykiety T (tak)
lub N (nie). Wewnętrzne węzły drzewa zawierają warunki bądź zapytania związane z etykietami
łuków, natomiast liście reprezentują wszystkie możliwe uporządkowania sortowanej tablicy [24].
Lou et al. [63] zaproponowali metodę jawnego wyszukiwania zakresów ERS (ang. Explicite Range
Serach), bazującą na wyżej wymienionych strukturach danych, redukującą w znaczny sposób
(w porównaniu do standardowego algorytmu HiCuts) rozmiar drzewa przeszukiwań. Dla najgorszego
przypadku w każdym liściu drzewa HiCuts znajdują się maksymalnie 4 reguły. Ostatecznie są one
przeszukiwane liniowo w celu odnalezienia właściwej, odpowiadającej analizowanemu pakietowi.
Algorytm ERS zmniejsza liczbę reguł w obszarach przeszukiwań liniowych do maksymalnie 3,
kosztem zwiększonego zapotrzebowania na zasoby pamięciowe. Ze względu na zmienną liczbę
odwołań do pamięci, niezbędnych do ustalenia ścieżki przeszukiwania drzewa dla każdego z jego
węzłów wewnętrznych, algorytm ERS, zdaniem W. Jianga et al. [44], nie pozwala na zastosowanie
potokowego przetwarzania danych. Co więcej, nie przeprowadzono praktycznej implementacji
algorytmu w układach FPGA, więc nie ma możliwości oceny jego rzeczywistej wydajności
i efektywności wykorzystania zasobów sprzętowych.
Próbę optymalizacji algorytmów HiCuts oraz HyperCuts podjął również Kennedy et al. [46,
47]. W celu lepszego dopasowania do specyfiki układów FPGA, a zarazem ograniczenia mocy
pobieranej przez klasyfikator, w opracowanej modyfikacji Kennedy zrezygnował z implementacji
dwóch elementów zawartych w pierwotnych wersjach algorytmów: zagęszczania regionów
oraz przesuwania w górę podzbiorów wspólnych reguł. Pierwszy z nich, redukujący do niezbędnego
minimum obszary skojarzone z poszczególnymi węzłami drzewa decyzyjnego, a dla realizacji
sprzętowej wymagałby wykorzystania bardzo dużej ilości zasobów logiki reprogramowalnej, głównie
ze względu na konieczność dokonywania operacji dzielenia zmiennoprzecinkowego. Przesuwanie do
wyższych węzłów podzbiorów wspólnych reguł wiąże się z kolei z koniecznością przeszukiwania
41
węzłów pośrednich w trakcie przemieszczania się w strukturze drzewa, co wpłynęłoby negatywnie na
wydajność sprzętowego akceleratora [46]. Praktyczna implementacja klasyfikatora w układzie Xilinx
Virtex5SX95T alokowała 22% dostępnych bloków slice oraz 54% pojemności pamięci BlockRAM.
Przy maksymalnej częstotliwość zegara wynoszącej 77 MHz klasyfikator pozwalał na przetwarzanie
danych z wydajnością 77 Mpps (dla bazy złożonej z 60 reguł). Przy zwiększeniu liczby reguł do 1000
wydajność spadła do wartości około 46 Mpps dla algorytmu HiCuts oraz 53 Mpps dla algorytmu
HyperCuts [46]. Dalsze prace optymalizacyjne, ukierunkowane na minimalizację pobieranej mocy
oraz wzrost szybkości przetwarzania danych, doprowadziły do powstania kolejnej wersji algorytmu,
wykorzystującej wiele równolegle pracujących bloków klasyfikujących. Zastosowanie 4 silników
weryfikujących oraz układu FPGA Stratix3 firmy Altera pozwoliło uzyskać całkowitą przepustowość
rzędu 169 Mpps [47] (pojedynczy silnik w tym wypadku osiągał efektywność około 42,25 Mpps).
Jiang i Prasanna [45] zaproponowali alternatywną metodę klasyfikacji wielowymiarowej,
bazującą na zmodyfikowanej wersji algorytmu HyperCuts. W swej pracy zidentyfikowali dwa główne
źródła
duplikacji
reguł
w
oryginalnym
algorytmie
HyperCuts,
wpływające
na
wzrost
wykorzystywanych zasobów pamięciowych:
 pokrywanie się obszarów wyznaczanych przez poszczególne reguły,
 dokonywanie
równomiernych
cięć
przedziałów
(bez
analizy
rozmieszczenia
poszczególnych reguł).
Redukcję pokrywania się obszarów osiągnięto dzięki zapisywaniu zestawu replikowanych reguł
w dedykowanych
tabelach,
tzw.
wewnętrznych
listach
reguł
(ang.
internal
rule
lists),
przyporządkowanych wewnętrznym węzłom drzewa decyzyjnego. Z kolei równomierne cięcia
przedziałów w odniesieniu do portów źródłowych i docelowych zastąpione zostały przez precyzyjne
wyszukiwanie optymalnych punktów przecięć, minimalizujących liczbę wielokrotnych wystąpień
reguł [45]. Testową implementację klasyfikatora przeprowadzono przy wykorzystaniu układu Xilinx
Virtex-5 XC5VFX200T, osiągając alokację zasobów sprzętowych na poziomie 33%. Teoretyczna
maksymalna częstotliwość pracy wynosząca 125,4 MHz, zdaniem autorów, pozwala na przetwarzanie
danych z szybkością 80 Gb/s, przy czym brak jest informacji dla jakich rozmiarów pakietów wartość
taką wyliczono. Z tego względu nie można jednoznacznie ocenić wydajności pracy klasyfikatora,
wyrażonej liczbą pakietów przetwarzanych w ciągu pojedynczej sekundy. Niekorzystną cechą
omawianego algorytmu jest także uzależnienie długości potoku analizy danych rzutującego na
całkowitą efektywność czasową metody, od rozmiaru drzewa decyzyjnego, warunkowanego
heurystyką bazy danych reguł bezpieczeństwa (algorytm nie będzie optymalny dla drzew decyzyjnych
o różnych wysokościach) [44].
Wszystkie przedstawione metody weryfikacji pakietów skupiają się na optymalizacji
parametrów głównego elementu zapory ogniowej, jakim jest niewątpliwie moduł klasyfikatora.
Niezwykle istotne z punktu widzenia wydajności przetwarzania danych oraz skalowalności jest jednak
spojrzenie całościowe na tak złożony system bezpieczeństwa. Pominięcie kwestii odpowiedniej
42
organizacji architektury wewnętrznej, ścieżek przepływu danych, mechanizmów wspomagających
proces klasyfikacji czy też pracy wielointerfejsowej, może w konsekwencji doprowadzić do degradacji
szybkości pracy oraz stabilności zapory bądź też ograniczenia jej funkcjonalności w sposób
niepozwalający na praktyczną eksploatację. Jedną z pierwszych prób implementacji w układzie FPGA
kompletnego rozwiązania systemu Firewall podjął Loinig i Wolkerstorfer [59]. Zaproponowana
koncepcja pozwala na zabezpieczenie wydzielonego segmentu sieci przy pomocy dwóch modułów
filtrujących ruch przychodzący i wychodzący. Współpracują one z kolejkami buforującymi przepływ
pakietów pomiędzy klasyfikatorem a kontrolerami interfejsów sieciowych Gigabit Ethernet. Proces
weryfikacji pakietów zrealizowano przy wykorzystaniu prostego mechanizmu wyszukiwania
liniowego, przy czym baza reguł bezpieczeństwa została podzielona na szesnastoelementowe,
przetwarzane równolegle bloki. Skraca to czas analizy pojedynczego pakietu do 17 cykli zegara,
aczkolwiek całkowite opóźnienie, uwzględniające przejście przez wszystkie elementy potoku filtracji
danych, wynosi 283 cykle (niezależnie od liczby i konfiguracji reguł) [59]. Omawiany Firewall
pracuje w trybie bezpośredniej retransmisji pakietów (tzw. cut-through). Dzięki temu znacznie
zredukowano zapotrzebowanie na zasoby pamięciowe, kosztem zaakceptowania propagacji
uszkodzonych ramek pomiędzy separowanymi segmentami sieci. Jedynie część z zaproponowanych
przez Loiniga funkcjonalności Firewalla została zaimplementowana w prototypowym układzie
(zrezygnowano m.in. z modułu obsługującego ruch szyfrowany oraz modułu zarządzającego).
Co więcej, testowa wersja zapory wykorzystywała tylko jeden fizyczny interfejs sieciowy, jej twórcy
nie byli więc w stanie w pełni zweryfikować parametrów pracy systemu w warunkach produkcyjnej
infrastruktury sieci teleinformatycznych.
Zdecydowanie bardziej przemyślaną i zaawansowaną konstrukcję sprzętowego Firewalla
zaprezentował Jedhe et al. [43]. Klasyfikator w wersji obsługującej dwa interfejsy sieciowe
wykorzystuje metodę niezależnej analizy poszczególnych pól nagłówków pakietów. Do weryfikacji
adresów sieciowych zastosowano pamięć TCAM, zaś dla portów sieciowych jej wersję rozszerzoną
ETCAM, umożliwiającą wyszukiwanie zakresów. Optymalizując wydajność opracowanego przez
Taylor’a i Turner’a [118] algorytmu DCFL, Jedhe et al. [43] zaproponowali jego wersję ulepszoną DCFLE (ang. Distributed Crossproducting of Field Labels Extended) z przeznaczeniem do agregacji
pośrednich wyników przetwarzania pojedynczych pól. Tym sposobem osiągnięto ograniczenie
zapotrzebowania na zasoby logiki reprogramowalnej. Zarówno przy implementacji pamięci TCAM,
jak i kontrolerów Gigabit Ethernet, użyto gotowych modułów IP core (ang. Intellectual Property)
firmy Xilinx. Pamięci ETCAM zbudowano w oparciu o łańcuchy elementów SRL16E (ang. Shift
Register Look-Up Table), dostępne w układach FPGA Virtex. Podczas operacji zapisu konfiguracji
filtrów są one wykorzystywane jako typowe 16-bitowe rejestry przesuwne, zaś podczas odczytywania
informacji (klasyfikacji pakietów) pracują jako 4-wejściowe bloki LUT (ang. Look-Up Table).
Ze względu na konieczność przechowywania wartości górnej i dolnej granicy wyszukiwanego
przedziału pojedynczy wiersz pamięci ETCAM wymaga zastosowania 16 bloków LUT4.
43
Implementacja pełnego klasyfikatora dla bazy złożonej z 32 reguł bezpieczeństwa alokowała 24%
dostępnych bloków LUT oraz 36% pojemności pamięci BRAM układu Virtex II Pro XC2VP30.
W przeciwieństwie do rozwiązania Loiniga i Wolkerstorfera, omawiany system buforuje poszczególne
pakiety, rozpoczynając ich analizę dopiero po zakończeniu odbierania danych (tzw. tryb store
and forward). Maksymalna wydajność klasyfikacji osiąga w tym przypadku 50 Mpps (dla pakietów
o długości 40 bajtów) [43]. Pomimo podkreślanej przez Jedhe et al. dużej skalowalności
i efektywności pracy zapory, przy jej opracowywaniu powzięto szereg arbitralnych ustaleń,
narzucających optymalną charakterystykę bazy danych reguł bezpieczeństwa bądź ograniczających
funkcjonalność systemu, w szczególności założono, że:
 maksymalna liczba unikalnych wartości pól jest relatywnie mała w porównaniu
z rozmiarem bazy danych reguł,
 maksymalna liczba unikalnych wartości pól zgodnych z analizowanym pakietem jest
relatywnie bardzo mała w odniesieniu do liczby wszystkich reguł i jest z reguły mniejsza
od pięciu,
 maksymalna liczba reguł odpowiadających danemu pakietowi jest typowo mniejsza od
pięciu,
 ramki typu ARP (ang. Address Resolution Protocol) bądź RARP (ang. Reverse Address
Resolution Protocol) są przesyłane pomiędzy separowanymi segmentami sieci bez filtracji
(nie istnieje możliwość zablokowania tego typu komunikacji),
 typy wykrywanych protokołów transportowych ograniczono do: TCP, UDP oraz ICMP
[43].
Zaprezentowany przegląd protokołów oraz metod implementacji systemów filtrujących
pakiety przesyłane w sieciach teleinformatycznych obrazuje ogromną dynamikę rozwoju tego obszaru
badawczego. Prowadzone prace badawcze koncentrują się przede wszystkim na optymalizacji
algorytmów klasyfikacji danych, pomijając lub marginalizując kwestie pozostałych elementów
wchodzących w skład architektury Firewalla. Tylko bardzo niewielka grupa publikacji podejmuje
temat kompleksowej sprzętowej implementacji kompletnej zapory ogniowej z wykorzystaniem logiki
reprogramowalnej. Jednak nawet w takich wypadkach stosowane wstępne złożenia projektowe
powodują ograniczenie funkcjonalności lub elastyczności konfiguracji systemu w sposób utrudniający
jego praktyczną eksploatację. Obserwacje te potwierdzają zasadność i celowość podjęcia przez autora
niniejszej rozprawy prac badawczych w zakresie metody efektywnej realizacji sprzętowego Firewalla,
przy uwzględnieniu realnych wymagań funkcjonalnych, stawianych przez współczesne, wysoko
wydajne systemy komputerowe.
44
3. Stanowisko badawcze
3.1. Wprowadzenie
Pierwszy etap realizacji pracy badawczej dotyczył przygotowania odpowiedniego środowiska
testowo-uruchomieniowego, obejmującego dedykowane narzędzia programistyczne EDA (ang.
Electronic
Design
Automation)
oraz
infrastrukturę
sprzętową
umożliwiającą
weryfikację
opracowanych rozwiązań w warunkach rzeczywistych. Poszczególne moduły opracowywanego
sprzętowego
systemu
bezpieczeństwa
typu
Firewall
musiały
najpierw
zostać
opisane
z wykorzystaniem języka VHDL (ang. Very High Speed Integrated Circuits Hardware Description
Language) a następnie poddane symulacji i testom z wykorzystaniem odpowiednich narzędzi
projektowych. Otrzymane w efekcie tych prac wyniki porównywano z założeniami projektowymi.
Jeżeli uzyskana funkcjonalność bądź parametry wydajnościowe odbiegały od przyjętych wartości,
konieczne było przeprowadzenie niezbędnych korekt w opisie i ponowne przetestowanie całego
modułu.
3.2. Pakiet Active-HDL
Kolejne generacje układów FPGA umożliwiają implementację coraz bardziej rozbudowanych
systemów cyfrowych. Presja, wywoływana rynkową konkurencją wśród producentów sektora
elektronicznego, znacznie skraca czas dostępny na zaprojektowanie i właściwe przetestowanie
opracowywanych urządzeń. Czynniki te przekładają się na wysokie wymagania funkcjonalne oraz
wydajnościowe stawiane narzędziom programistycznym EDA wspomagającym proces projektowania.
Jednym z wiodących producentów oprogramowania EDA dla inżynierów zajmujących się
układami reprogramowalnymi jest firma Aldec-ADT. Jej flagowy produkt, pakiet Active-HDL,
stanowi zintegrowane środowisko dostarczające pełnego zestawu narzędzi niezbędnych do
projektowania i weryfikacji układów cyfrowych wykorzystujących technologie FPGA oraz ASIC.
Kluczowe elementy oraz cechy funkcjonalne pakietu Active-HDL obejmują m.in. [4]:
 narzędzia projektowe Design Entry,
 szybki symulator,
 zestaw narzędzia do analizy i weryfikacji funkcjonalnej (debugowanie oraz profiler),
 automatyczną generację modułów testujących,
 zaawansowane zarządzanie projektem oraz pełne dokumentowanie prac projektowych,
 wsparcie dla narzędzi producentów układów.
45
W skład grupy Design Entry wchodzą podstawowe narzędzia służące do opisu
poszczególnych modułów realizowanego projektu, zarówno w formie tekstowej, jak i graficznej.
Obecnie większość projektantów systemów cyfrowych wykorzystuje języki opisu sprzętu, a ze
względu na wysoki stopień złożoności bardzo często łączone są ze sobą elementy zapisane w postaci
kodu VHDL, Verilog, SystemVerilog, jak również SystemC. Użytkownicy w ramach jednego
środowiska mogą korzystać ze wszystkich wyżej wymienionych modułów. Dodatkowo Active-HDL
pozwala na konwersję kodu zapisanego w formie tekstowej do postaci graficznej [4].
Symulator wbudowany w pakiet Active-HDL charakteryzuje się wydajnym, uniwersalnym
jądrem obsługującym wszystkie wspierane języki opisu sprzętu. Projektant ma możliwość
symulowania funkcjonowania fragmentów kodu zapisanych w językach VHDL, Verilog
oraz SystemC.
Proces oceny poprawności funkcjonowania kodu ułatwia szereg narzędzi do
debugowania, m.in.:
 edytor przebiegów (ang. Waveform Editor) - moduł umożliwiający edytowanie
symulowanych przebiegów,
 okno podglądu (ang. Watch Window) - umożliwia przeglądanie wartości symulowanych
obiektów, takich jak sygnały, zmienne, rejestry,
 podgląd pamięci (ang. Memory View) - umożliwia obserwację zawartości komórek pamięci
symulowanego modułu,
 stos wywołań (ang. Call Stack) - umożliwia śledzenie ścieżki wywołania kolejnych funkcji
testowanego modułu oraz śledzenie wartości parametrów na jakich operują funkcje.
Dokładne sterowanie procesem symulacji, a tym samym obserwowanie poszczególnych
etapów działania testowanego modułu, możliwe jest dzięki
śledzeniu wykonania
kodu
z wykorzystaniem modułów Watch Window, Memory View, Call Stack oraz dzięki punktom przerwań
(ang. break point).
Szybkie weryfikowanie skomplikowanych projektów ułatwiają automatyczne generatory
modułów testujących (ang. testbench) bazujących zarówno na wykresach utworzonych za pomocą
edytora przebiegów czasowych, jak również wygenerowanych bezpośrednio w trakcie trwania
symulacji. Podobnie dla automatów stanów istnieje możliwość automatycznego wygenerowania
modułów testbench pokrywających wszystkie zdefiniowane na diagramie przejścia.
Active-HDL nie jest dedykowany jednej konkretnej grupie układów FPGA – jego uniwersalna
architektura pozwala na wykorzystanie tego pakietu przez inżynierów pracujących z układami FPGA
różnych producentów. Projektant za pomocą funkcjonalności Design Flow Manager może
bezpośrednio w programie uruchomić dowolne narzędzie syntezy i implementacji, zarówno w trybie
interaktywnym GUI (ang. Graphical User Interface), jak również w trybie wsadowym (ang. Batch
mode). Active-HDL zawiera przekompilowane i gotowe do użycia biblioteki symulacyjne (VHDL
oraz Verilog) udostępniane przez wszystkich producentów układów programowalnych. Dodatkowo
pakiet wyposażony został w bogaty zestaw bibliotek schematów dla układów firmy Xilinx [4].
46
3.3. Płyta testowo-uruchomieniowa Digilab 2E firmy Digilent
Płyta FPGA Digilab 2E (D2E) firmy Digilent [21], przedstawiona na rysunku 3.1, jest
ekonomiczną platformą testowo-uruchomieniową, wyposażoną w dużą liczbę złącz zewnętrznych
interfejsów wejścia-wyjścia, niezbędnych do opracowywania różnorodnych układów cyfrowych.
Rys. 3.1. Umiejscowienie kluczowych komponentów na płycie FPGA Digilab D2E.
Charakteryzuje się ona następującymi parametrami:
 układ FPGA Spartan 2E XC2S200E firmy Xilinx [132],
 jeden port równoległy EPP (ang. Enhanced Parallel Port) oraz jeden szeregowy RS-232,
 sześć
40-nóżkowych
złączy rozszerzeń
wejścia-wyjścia
ogólnego
przeznaczenia
(ang. general puropse I/O expansion connectors).
Schemat blokowy płyty D2E przedstawiono na rysunku 3.2. Większość dostępnych
wyprowadzeń układu FPGA podłączonych zostało do portów rozszerzeń. Takie podejście z jednej
strony zapewnia dużą elastyczność oraz zmniejsza cenę urządzenia, które w swej podstawowej
konfiguracji zawiera jedynie elementy niezbędne do poprawnego funkcjonowania układu FPGA
(zasilanie, układ programowania JTAG, rezonator kwarcowy, itp.). Z drugiej zaś strony użytkownik
47
zmuszony jest zakupić bądź zbudować we własnym zakresie niezbędne karty rozszerzeń, realizujące
określone specyfiką danego projektu funkcje (porty komunikacyjne, sygnalizacja, sterowanie).
Rezonator
50 MHz
Gniazdo
zasilające
5-9V DC
Przycisk
kontrolny
Dioda
sygnalizacyjna
LED
Stabilizator
2.5 V
Stabilizator
3.3 V
Port szeregowy
Port
RS-232
Port
równoległy
Konwerter
RS-232
Port równoległy EPP lub SPP
Xilinx Spartan2E
XC2S200E-PQ208
Port rozszerzeń
D
Bufor
Przełącznik
trybu
programowania
Port rozszerzeń
C
Port
JTAG
Port rozszerzeń
A
Port rozszerzeń
E
Port rozszerzeń
B
Port rozszerzeń
F
Rys. 3.2. Schemat blokowy płyty FPGA Digilab 2E (na podstawie [21]).
Płyta Digilab D2E wyposażona jest w jedno złącze DB-25 poru równoległego EPP
współdzielone z portem programowania układu Spartan2E JTAG współpracującym z narzędziami
firmy Xilinx (np. Xilinx Parallel III cable oraz ISE WebPack). Złącze zgodne ze standardem IEEE
1284 jest podłączone bezpośrednio do układu FPGA. Do przełączania trybu pracy złącza z EPP do
JTAG służy dwupozycyjny przełącznik SW-1, sterujący dodatkowym układem buforów
trójstanowych. Dołączony kabel programowania JTAG wymaga posiadania w komputerze jednego
wolnego portu równoległego.
Na płycie zamontowano 8-nóżkowy 50 MHz rezonator kwarcowy. Dzięki łatwej wymianie
elementu oscylatora płyta zapewnia szeroki zakres częstotliwości pracy zegara systemowego: od
około 30 kHz do 100 MHz. Wykorzystując bloki funkcjonalne DLL układu Spartan2E, możliwe jest
doprowadzenie do implementowanych układów sygnału zegarowego o częstotliwości do 200 MHz.
Dla kart rozszerzeń użytkownika na platformie D2E dostępnych jest 6 portów wejścia-wyjścia
ogólnego przeznaczenia w standardowych 40-nóżkowych obudowach rozmieszczonych na
krawędziach płyty, zgodnie ze schematem zamieszczonym na rysunku 3.3. Złącza zorganizowane są
parami: A & B, C & D, E & F. Linie sygnałowe dla portów A & B oraz E & F są podłączone do
układu FPGA w sposób symetryczny tak, że pary A & E oraz B & F współdzielą te same linie
48
sygnałowe. Porty C oraz D podłączone są do układu FPGA w sposób niezależny. W każdym z portów,
oprócz linii sygnałowych, udostępnione zostały napięcie zasilające 3,3 V oraz masa płyty GND.
B
C
DB-9
A
37
11
Xilinx
Spartan2E
XC2S200E
-PQ208
F
D
DB-25
37
37
E
Rys. 3.3. Schemat rozmieszczenia oraz struktura połączeń wewnętrznych złączy rozszerzeń na płycie
FPGA Digilab 2E (na podstawie [21]).
Płyta D2E pozwala na wykorzystanie 122 linii sygnałowych układu Spartan2E, z czego 74
linie podłączone do złącz C & D umożliwiają pracę z częstotliwością do 100 MHz. Szczegółowy opis
poszczególnych linii sygnałowych złącz rozszerzeń można odnaleźć w dokumentacji technicznej
płyty [21].
3.4. Płyta testowo-uruchomieniowa XUPV2 firmy Digilent
Płyta testowo-uruchomieniowa XUPV2 firmy Digilent (Rys. 3.4) jest zaawansowanym
środowiskiem wdrożeniowym przeznaczonym do realizacji projektów systemów cyfrowych
implementowanych na platformie FPGA. Płyta bazuje na układzie FPGA Virtex II Pro XC2VP30
firmy Xilinx, uzupełnionym bogatym zestawem urządzeń peryferyjnych oraz funkcjonalności
obejmujących [23]:
 układ FPGA Virtex™ II Pro [135] wyposażony w dwa rdzenie procesora PowerPC™ 405,
 możliwość zainstalowania do 2 GB pamięci DDR (ang. Double Data Rate) SDRAM,
 wbudowany kontroler System ACE™, pamięć PROM oraz złącze CompactFlash™ Type II
do przechowywania wielu obrazów konfiguracji układu FPGA,
 port USB 2.0 do konfiguracji układu FPGA,
 konfigurację z wykorzystaniem SelectMAP Platform Flash,
 wbudowany układ PHY 10/100 Mb/s Ethernet,
 szybkie złącza zewnętrzne MGT,
49
Rys. 3.4. Wygląd płyty FPGA XUP Virtex II Pro.
 dostępne dwa porty szeregowe PS-2, jeden port szeregowy RS-232 DB9 oraz trzy porty
Serial ATA,
 sześć standardowych złączy rozszerzeń podłączonych do 80 wyprowadzeń I/O układu
Virtex II Pro z zabezpieczeniem przeciążeniowym,
 jeden szybki port rozszerzeń alokujący 40 wyprowadzeń I/O układu Virtex II Pro –
możliwość pracy w trybie różnicowym bądź standardowym,
 wbudowany CODEC AC-97 wyposażony w dodatkowy wzmacniacz oraz panel
wejść/wyjść audio,
 wbudowany port wideo XSGA wspierający rozdzielczości do 1200x1600 przy odświeżaniu
70 Hz,
 zegar systemowy 100 MHz oraz zegar SATA o częstotliwości 75 MHz,
 możliwość wykorzystywania zegarów użytkownika,
 specjalizowany układ resetu komponentów płyty po włączeniu zasilania.
Dostępny na płycie układ FPGA typu Virtex II Pro XC2VP30 FF896BGA firmy Xilinx [135]
charakteryzuje się następującymi parametrami:
 13969 bloków Slice,
 428 Kb pamięci Distributed RAM oraz 2448 Kb pamięci Block RAM,
50
 136 bloków mnożących,
 8 bloków DCM,
 2 rdzenie procesora PowerPC,
 8 transceiver’ów Multi-Gigabit.
Płyta posiada jedno 184-wyprowadzeniowe złącze zgodne z modułami pamięci DIMM DDR
SDRAM (ang. Dual In-line Memory Module Double Data Rate Synchronous Dynamic RAM)
o maksymalnej pojemności do 2GB w wersji zarówno buforowanej, jak i niebuforowanej.
W przypadku korzystania z pamięci o organizacji 72-bitowej, moduły takiej pamięci powinny
posiadać korekcję błędów ECC.
Złącza rozszerzeń
(zabezpieczenia
przeciążeniowe)
1
Diody LED, Przełączniki,
przyciski, porty
PS/2 Oraz RS-232
0
2
7
3
6
4
Pamięć 256M x 64/72 DDR SDRAM
DIMM
SXGA port
10/100
Ethernet
AC97 Audio
5
System ACE port
3.3V IO
2.5V IO
Rys. 3.5. Schemat połączeń banków I/O do urządzeń zewnętrznych płyty XUP Virtex II Pro
(na podstawie [23]).
Układ XC2VP30 komunikuje się z urządzeniami zewnętrznymi poprzez 8 banków sygnałów
wejścia-wyjścia. Przyporządkowanie poszczególnych banków do konkretnych urządzeń peryferyjnych
zaprezentowano na rysunku 3.5. Projektant ma do dyspozycji 6 zewnętrznych interfejsów
wejścia-wyjścia ogólnego przeznaczenia (ang. general puropse I/O expansion connectors) oraz jedno
bardzo szybkie zewnętrzne złącze przystosowane do pracy w trybie różnicowym z możliwością
obsługi do trzech niezależnych sygnałów zegarowych. Cztery z sześciu dostępnych złączy dostępne są
w konfiguracji 60 linii sygnałowych, a dwa w konfiguracji 40 linii sygnałowych. W każdym
z wariantów połowa dostępnych wyprowadzeń jest połączona z masą płyty (GND). Sumarycznie
wszystkie złącza pozwalają wykorzystać do 80 wyprowadzeń układu Virtex II Pro. Szczegółowy opis
poszczególnych sygnałów portów rozszerzeń można odnaleźć w dokumentacji technicznej
płyty [135].
51
Układ XC2VP30 zawiera w sumie osiem portów MGT (ang. Multi-Gigabit Transceiver),
cztery z nich udostępniono użytkownikom w postaci złączy zewnętrznych. Kolejne trzy interfejsy
MGT zostały podłączone do gniazd SATA, a ostatni do gniazda w standardzie Sub-Miniature A
(SMA). Wszystkie interfejsy MGT wykorzystują niezależny sygnał zegarowy o częstotliwości pracy
75MHz. Dodatkowo złącze SMA przystosowane jest do pracy z różnicowym zegarem zewnętrznym.
Uzupełnieniem zestawu portów komunikacyjnych dostępnych na płycie XUPV2P jest jeden interfejs
Fast Ethernet zgodny ze specyfikacjami 100BASE-TX oraz 10BASE-T. Pozwala on na
dwukierunkową transmisję danych (tzw. tryb Full Duplex) z szybkościami 10 Mb/s i 100 Mb/s.
Wspiera również funkcje autonegocjacji oraz detekcji kolizji.
Programowanie układu XC2VP30 ułatwia wbudowany kontroler System ACE (ang. Advanced
Configuration Environment), pozwalający na zarządzanie łańcuchem konfiguracyjnym złożonym
z następujących elementów:
 portu Compact Flash,
 portu konfiguracyjnego JTAG,
 portu MPU,
 portu testowego JTAG.
3.5. Realizacja dostępowych interfejsów fizycznych dla sieci Fast
i Gigabit Ethernet
Ogromne możliwości oferowane przez technologię układów reprogramowalnych FPGA
zostały szybko zauważone przez firmy komercyjne zajmujące się produkcją gotowych systemów
testowo-uruchomieniowych. Spośród dużego zbioru różnorodnych płyt producentów, takich jak:
Digilent [22], HiTech Global Design & Distribution [37], Terasic Technologies [120] i wielu innych,
zespoły badawcze mogą wybrać platformę najlepiej odpowiadającą swoim wyposażeniem potrzebom
funkcjonalnym realizowanych urządzeń. Większość dostępnych rozwiązań płyt uruchomieniowych
wyposażana jest dodatkowo w złącza rozszerzeń, zwiększające elastyczność całej platformy, poprzez
umożliwienie
dołączania
specjalizowanych
kart
dostosowanych
do
potrzeb
konkretnych
użytkowników. W efekcie tego znikają praktycznie wszystkie ograniczenia implementacyjne związane
z nietypowymi wymaganiami odnośnie liczby bądź standardu portów komunikacyjnych, interfejsów
sterujących oraz sygnalizacyjnych, itp.
Taka sytuacja miała miejsce przy realizacji zadania badawczego związanego z opracowaniem
sprzętowej wersji systemu bezpieczeństwa typu Firewall, filtrującego ruch w szybkich sieciach
opartych o standard Ethernet. Z racji sposobu działania wymaga on dostępności minimum dwóch
portów komunikacyjnych (z możliwością dalszego zwiększania ich liczby), pomiędzy którymi
odbywa się transmisja danych. Ponieważ na etapie prowadzenia prac projektowych autor dysponował
płytami testowymi firmy Digilent, wyposażonymi maksymalnie w jeden port sieciowy obsługujący
52
tylko standard Fast Ethernet (transmisja do 100 Mb/s), koniecznym stało się opracowanie prototypów
zewnętrznych kart sieciowych dołączanych do portów rozszerzeń.
Początkowe prace badawcze realizowano z wykorzystaniem platformy Digilent Digilab D2E
[21], bazującej na układzie FPGA Spartan 2E XC2S200 firmy Xilinx [132]. Ze względu na
stosunkowo niewielką liczbę zasobów sprzętowych oraz maksymalną szybkość pracy tego układu, dla
tak skonfigurowanego środowiska testowego zdecydowano się na opracowanie jedynie kart Fast
Ethernet. Pomimo oczywistych ograniczeń umożliwiły one weryfikację funkcjonowania kluczowych
modułów sprzętowych opracowywanego systemu, takich jak: kontroler sieciowy MAC (ang. Media
Access Control) [108] oraz blok pamięci ramkowych [115].
Kolejne etapy realizacji sprzętowej zapory ogniowej wymagały zmiany platformy testowej na
bardziej wydajną. Ostatecznie wybrano płytę Digilent XUPV2 [23] z układem Virtex II Pro XC2VP30
FPGA [135], dla której opracowano nową wersję interfejsów NIC (ang. Network Interface Card)
pozwalających na pracę w sieciach opartych o Gigabit Ethernet z przepustowością do 1000 Mb/s.
3.5.1. Karta Fast Ethernet
Kluczowym elementem karty sieciowej jest układ PHY (ang. Physical Layer Device),
odpowiedzialny za realizację operacji przynależnych najniższej warstwie modelu odniesienia łączenia
systemów otwartych ISO/OSI (ang. ISO OSI Reference Model) [42], związanych z kodowaniem,
dekodowaniem oraz synchronizacją wysyłanych bądź odbieranych danych (zależnie do typu
zastosowanego nośnika fizycznego [40]). Położenie funkcjonalne układu PHY w modelu ISO/OSI
pokazano na rysunku 3.6. Dla układów PHY, obsługujących jedynie standard Fast Ethernet,
dopuszczone są prędkości pracy do 100 Mb/s, zaś dla standardu Gigabit Ethernet do 1000 Mb/s.
WARSTWY MODELU
REFERENCYJNEGO
OSI
WARSTWY WYŻSZE
APLIKACJI
LLC – LOGICAL LINK CONTROL
PREZENTACJI
MAC CONTROL (opcjonalnie)
MAC – MEDIA ACCESS CONTROL
GMII
PCS
PMA
PMD
PMD
MDI
PMA
PCS
PMA
MDI
PMA
DOPASOWANIE
MDI
FIZYCZNA
MAU
ŁĄCZA DANYCH
PLS
AUI
SIECIOWA
DOPASOWANIE
MEDIUM
MEDIUM
MEDIUM
MEDIUM
1 Mb/s, 10Mb/s
10Mb/s
100Mb/s
1000Mb/s
AUI = ATTACHMENT UNIT INTERFACE
MDI = MEDIUM DEPENDENT INTERFACE
MII = MEDIA INDEPENDENT INTERFACE
GMII = GIGABIT MEDIA INDEPENDENT INTERFACE
MAU = MEDIUM ATTACHMENT UNIT
PHY
AUI
MII
TRANSPORTOWA
DOPASOWANIE
MDI
PLS
MII
SESJI
PLS = PHYSICAL LAYER SIGNALING
PCS = PHYSICAL CODING SUBLAYER
PMA = PHYSICAL MEDIUM ATTACHMENT
PHY = PHYSICAL LAYER DEVICE
PMD = PHYSICAL MEDIUM DEPENDENT
Rys. 3.6. Model warstwowy ISO/OSI z uwidocznionym położeniem układu PHY.
53
Spośród wielu dostępnych na rynku rozwiązań do opracowania karty Fast Ethernet wybrano
układ PHY RTL8201BL, oferowany przez firmę Realtek [84]. Jest to jednoportowy układ typu Fast
Ethernet Phyciever, wyposażonym w selektywnie wybierany interfejs MII (ang. Media Independent
Interface) lub SNI (ang. Serial Network Interface) do warstwy MAC. Posiada on następujące cechy
funkcjonalne [83]:
 zgodność ze standardami IEEE 802.3/802.u, w tym wsparcie dla interfejsu MII/7-wire SNI,
 możliwość pracy w trybie 10/100 Mb/s Half/Full Duplex z autonegocjacją parametrów,
 możliwość pracy z okablowaniem miedzianym lub światłowodami,
 niski pobór mocy, tryb oszczędny (ang. Power Down Mode),
 wsparcie dla kompensacji BLW (ang. Base Line Wander) oraz kontroli przepływu,
 konfigurowalne prędkości oraz tryb transmisji (Duplex, autonegocjacja),
 możliwość ustawiania parametrów pracy zarówno poprzez dedykowane wyprowadzenia
zewnętrzne, jak również przy pomocy linii MDC/MDIO,
 sygnalizowanie przy pomocy diod LED nawiązania poprawnego połączenia, transmisji
danych, prędkości oraz wystąpienia kolizji.
BLOK 100 Mbps
MLT-3
NRZI
Korekcja BLW
Detektor
szczytowy
Komparator
Korektor
adaptacyjny
RXIN +
RXIN -
RXD
Dekoder
5B/4B
Blok formowania
danych
Descrambler
Deserializacja
clk
data
Slave
PLL
RXC
25MHz
TXD
10/100 Mbps, Half/Full Duplex
Logika sterująca
Interfejs SNI
Interfejs MII
Dekoder
4B/5B
Scrambler
Serializacja
3-stanowy bufor
wyjsciowy
TXO +
TXO -
TXC
25MHz
Autonegocjacja 10/100 Mbps
Logika kontrolna
25MHz
Główna PLL
BLOK 10 Mbps
TXD10
Kodowanie
Menchester
Formowanie
sygnału
wyjściowego
Odtwarzanie
danych
Filtr dolnoprzepustowy
TXC10
RXD10
RXC10
Rys. 3.7. Schemat blokowy układu RTL8201BL (na podstawie [83]).
Strukturę wewnętrzną układu RTL8201BL przedstawiono na rysunku 3.7. W układzie
zaimplementowane zostały wszystkie funkcje niezbędne do obsługi warstwy fizycznej (ang. Physical
Layer) dla standardu Ethernetu 10/100 Mb/s, m.in.:
 podwarstwa kodowania PCS (ang. Physical Coding Sublayer),
54
 przyłącze medium fizycznego PMA (ang. Physical Medium Attachment),
 podwarstwa
obsługi
medium transmisyjnego
typu
skrętka
miedziana
TP-PMD
(ang. Twisted Pair Physical Medium Dependent Sublayer),
 blok kodowania/dekowania dla standardu 10Base-Tx,
 jednostka dostępu do medium typu skrętka miedziana TPMAU (ang. Twisted Pair Media
Access Unit).
W zależności od aktualnie skonfigurowanej szybkości pracy przetwarzanie danych odbywa się
w dedykowanych blokach: 10 Mb/s lub 100 Mb/s. Architektura toru obsługującego standard Fast
Ethernet jest zdecydowanie bardziej zaawansowana w porównaniu do wersji 10 Mb/s. Nad
poprawnością funkcjonowania całego układu PHY czuwa specjalny blok sterujący. Na podstawie
zadanych parametrów konfiguracyjnych komunikacja z kontrolerem MAC realizowana jest poprzez
interfejs MII lub SNI. Dzięki bogatej funkcjonalności układ może być wykorzystywany nie tylko do
budowy kart interfejsów sieciowych, lecz również w koncentratorach i przełącznikach Ethernetowych
czy też w interfejsach przyłączeniowych MAU (ang. Media Attachment Unit). Manualna konfiguracja
parametrów pracy układu idealnie odpowiada potrzebom środowiska testowo-uruchomieniowego.
Oznaczenia oraz funkcje poszczególnych sygnałów układu RTL8201BL zostały zamieszczone w pliku
fast_ethernet_phy.pdf, znajdującym się na załączonej płycie CD w katalogu \fast_ethernet_doc.
Opisany w standardzie IEEE 802.3 [40] 18-sygnałowy interfejs komunikacyjny MII ma za
zadanie zapewnić poprawną wymianę informacji pomiędzy układem PHY a kontrolerem MAC.
W celu skonfigurowania układu RTL8201BL w tryb pracy z obsługą interfejsu MII należy ustawić
wysoki poziom logiczny na wejściu MII/SNIB, jak również właściwie wysterować linie ANE, SPEED
oraz DUPLEX. Częstotliwość pracy interfejsu uzależniona jest od trybu pracy i wynosi odpowiednio:
2,5 MHz dla szybkości 10 Mb/s oraz 25 MHz dla szybkości 100 Mb/s.
Proces transmisji danych inicjowany jest przez kontroler MAC wystawieniem wysokiego
stanu logicznego na wejście TXEN oraz odpowiednią relokacją danych przeznaczonych do wysłania.
Ponieważ magistrala danych TXD układu PHY ma szerokość jednego nibla (połowy bajtu), kontroler
MAC dokonuje wstępnego formowania wysyłanych danych. Stan linii TXD jest zatrzaskiwany dla
każdego narastającego zbocza sygnału zegarowego przez cały czas aktywności sygnału TXEN. Sygnał
zegarowy TXC dla toru transmisyjnego generowany jest przez PHY, wykorzystując do tego
zewnętrzny oscylator kwarcowy o częstotliwości znamionowej 25 MHz. Dla pracy z prędkością
10 Mb/s częstotliwość zegara TXC wynosi 2,5 MHz. Poszczególne czterobitowe słowa wejściowe
TXD[3:0] w tym trybie pracy podlegają na początku konwersji z postaci równoległej na szeregową.
Tak otrzymany strumień danych NRZ (ang. Non Return to Zero) o przepływności 10 Mb/s jest
następnie poddawany kodowaniu Manchester i przesyłany do bloku transmitera, który zgodnie ze
standardem IEEE 802.3 dołącza na końcu pakietu komunikat sygnalizacyjny SOI (ang. Start Of Idle).
Ostatnim elementem całego procesu jest dodatkowa filtracja strumienia transmitowanych danych,
mająca na celu dopasowanie parametrów sygnału do wymagań medium transmisyjnego. W trybie Fast
55
Ethernet (prędkość 100 Mb/s) poszczególne nible na wejściach TXD podawane są przez kontroler
MAC synchronizowany zegarem TXC o częstotliwości 25 MHz. Dla tej prędkości transmisji każde
czterobitowe słowo danych podlega wpierw kodowaniu 4B/5B. Następnie dokonywana jest
randomizacja danych (blok scramblera), konwersja do postaci szeregowej NRZ 125 MHz oraz zmiana
kodowania na format NRZI (ang. Non Return to Zero Inverted). W kolejnym kroku strumień danych
podlega kodowaniu MLT-3 (ang. Multi-Level Transmit) i w tej postaci trafi do stopnia wyjściowego.
Blok transmitera przed wysłaniem właściwych danych aktywuje najpierw sygnał TXEN oraz nadaje
grupę kodową początku ramki /J/K/ „11000 10001” (ang. start-of-frame delimiter). Po zakończeniu
transmisji danych wysyłana jest sekwencja /T/R/ „01101 00111”
(ang. end-of-frame delimiter).
Aby zminimalizować powstawanie zakłóceń elektromagnetycznych EMI (ang. Electromagnetic
Interference) zastosowano powiązanie parametru ziarna (ang. seed) skramblera z adresem fizycznym
układu PHY. Układ RTL8201BL nie wykorzystuje sygnału błędu nadawania TXER.
Proces odbierania danych sygnalizowany jest obecnością wysokiego stanu logicznego na
wyjściu RXEN. Odebrane dane RXD[3:0] zmieniają się w takt zegara RXC odtworzonego z sygnału
przesyłanego w medium transmisyjnym. Stan sygnału CRS uzależniony jest od aktualnego trybu
pracy. Dla szybkości 100 Mb/s jest on aktywny, jeżeli odebrany symbol w kodowaniu 5B jest różny
od wartości IDLE. W przeciwnym przypadku CRS pozostaje w niskim stanie logicznym. Dla
szybkości 10 Mb/s CRS aktywuje się po odebraniu poprawnej sekwencji preambuły, zaś dezaktywuje
po wystąpieniu sekwencji IDLE. Sygnał RXDV, walidujący słowo na szynie danych RXD, osiąga
wysoki stan logiczny dla szybkości 100 Mb/s, jeżeli odebrano symbol /J/K/. W przypadku odebrania
symboli /T/R/ lub IDLE pozostaje on na poziomie niskim. Przy pracy z szybkością 10 Mb/s stan
sygnału RXDV odpowiada wartości sygnału CRS. Sygnał błędu odbioru RXER jest aktywny
w momencie odebrania niepoprawnego symbolu w kodowaniu 5B.
Przepływ danych w torze odbiorczym dla szybkości 10 Mb/s jest odwrotny do opisanego
wcześniej dla części nadawczej. Sygnał odebrany z medium fizycznego po wstępnym filtrowaniu
podlega dekodowaniu Menchester, w efekcie czego uzyskujemy szeregowy strumień informacji
kodowany NRZ. Jest on ostatecznie konwertowany do postaci równoległych słów czterobitowych
(szyna RXD[3:0]).
Przy szybkości 100 Mb/s sygnał ulega na wstępie kompensacji w adaptacyjnym korektorze,
minimalizując w ten sposób negatywne zjawiska związane z tłumieniem medium fizycznego.
Korektor BLW monitoruje nieustannie ten proces, dynamicznie reagując na zmiany sygnału
wejściowego. Pętla fazowa PLL (ang. Phase-Locked Loop) odtwarza sygnał zegarowy, niezbędny do
odzyskania strumienia danych w kodowaniu NRZI. W kolejnych krokach następuje zmiana formatu
NRZI na NRZ, proces deskramblowania, a na koniec konwersja postaci szeregowej 5B na równoległą
4B. W efekcie końcowym odebrane nible danych wystawiane są do interfejsu MII poprzez szynę
RXD[3:0].
56
32 cykle zegara
0
Preambuła
1
0
ST
1
A4
OP
A3
A2
A1
A0
R4
PHYAD[4:0]
R3
R2
R1
R0
1
REGAD[4:0]
0
D15
D14
D13
D12
D11
D10
D9
D8
TA
D7
D6
D5
D4
D3
D2
D1
D0
DANE
IDLE
Linia MDIO sterowana przez kontroler MAC; dane zapisywane do układu PHY przy narastającym zboczy zegara MDC
cykl zapisu
Z
32 cykle zegara
Preambuła
0
1
ST
1
0
OP
A4
A3
A2
A1
A0
R4
PHYAD[4:0]
R3
R2
R1
REGAD[4:0]
Linia MDIO sterowana przez kontroler MAC; dane zapisywane do układu PHY
przy narastającym zboczy zegara MDC
R0
0
D15
D14
D13
D12
TA
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
DANE
IDLE
Linia MDIO sterowana przez PHY; dane wystawiane przez PHY
przy narastającym zboczy zegara MDC
cykl odczytu
Rys. 3.8. Cykle zapisu i odczytu magistrali MDIO układu RTL8201BL (na podstawie [83]).
Szeregowa magistrala zarządzająca MDIO pozwala kontrolerowi MAC na bieżącą zmianę
oraz odczyt parametrów pracy maksymalnie 32 układów RTL8201BL, z których każdy posiada inny
adres PHY, definiowany w zakresie od „00001” do „11111” (wartość „00000” jest zarezerwowana do
przejścia w tryb oszczędzania energii). Wyprowadzenia służące konfiguracji adresu stanowią zarazem
podłączenia diod sygnalizacyjnych, stąd też konfiguracja adresu jest zatrzaskiwana podczas włączenia
napięcia zasilającego bądź resetu układu. Proces odczytu i zapisu konfiguracji z wykorzystaniem
magistrali MDIO został przedstawiony na rysunku 3.8. Opis poszczególnych pól ramki zarządzającej
zaprezentowano w tabeli 3.1.
Tab. 3.1. Opis poszczególnych pól ramki zarządzającej układu RTL8201BL (na podstawie [83]).
Nazwa
Preambuła
Opis
'1' logiczna wysyłana przez MAC podczas 32 pierwszych cykli zegara MDC od momentu rozpoczęcia
nadawania ramki sterującej. Preambuła jest niezbędna do poprawnej synchronizacji układu PHY.
ST
Początek ramki (ang. Start of Frame) wyróżniany sekwencją 01.
OP
Kod operacji (ang. Operation code). Odczyt = 10. Zapis = 01.
PHYAD
Adres układu PHY (ang. PHY Address). Pojedynczy kontroler MAC może zarządzać maksymalnie 31
układami PHY. Pięciobitowa sekwencja adresu wskazuje na konkretny PHY, którego dotyczy dana ramka.
REGAD
Adres rejestru (ang. Register Address). Pięciobitowy adres wewnętrznego rejestru układu PHY, którego
dotyczy aktualnie wykonywana operacja zapisu bądź odczytu
Pole zmiany urządzenia sterującego linią MDIO (ang. Turnaround). Dwubitowy odstęp pomiędzy polami
rejestru i danych pozwala na poprawne przejęcie sterowania linią MDIO przez układ PHY w czasie operacji
odczytu. Podczas trwania pierwszego bitu pola TA, zarówno kontroler MAC, jak i układ PHY powinny
pozostawać w stanie wysokiej impedancji. Dopiero w drugim bicie PHY może zmienić stan MDIO na
logiczne '0'.
TA
DANE
Dane (ang. Data). 16-bitowa wartość odczytanych bądź zapisywanych danych.
IDLE
Tryb bezczynności (ang. Idle).
Schemat ideowy opracowanej karty sieciowej Fast Ethernet, bazującej na układzie PHY
RTL8201BL firmy Realtek, zawarto w pliku fast_ethernet_nic.pdf, znajdującym się na załączonej
płycie CD w katalogu \fast_ethernet_doc. Uwzględniając zasygnalizowane już wcześniej specyficzne
wymagania środowiska testowo-uruchomieniowego, koniecznym stało się uzupełnienie typowej
implementacji układu RTL8201, zamieszczonej w nocie aplikacyjnej [85], o blok manualnej
57
konfiguracji parametrów pracy, pełną sygnalizację stanu układu oraz panel konfiguracji adresu PHY.
Dodatkowo, w stosunku do pierwotnego rozwiązania, zmieniono niezależne elementy U2
(transformator separujący H1251) oraz U3 (gniazdo RJ-45) na zintegrowany moduł Pulse
J0026D21B [79], oznaczony na schemacie ideowym symbolem J1. Zastosowany w prototypie blok
manualnej konfiguracji wykorzystuje 8-sekcyjny przełącznik typu DIP-switch (symbol SW1) oraz
zestaw rezystorów pull-up R11-17 i R28. Funkcje poszczególnych sekcji przełącznika SW1
przedstawiono w tabeli 3.2. Manualny reset karty realizowano za pomocą dodatkowego przełącznika
S2. Reset automatyczny następuje po włączeniu zasilania dzięki elementom R13 i C20.
Tab. 3.2. Opis funkcji poszczególnych sekcji przełącznika SW1 w karcie Fast Ethernet.
Numer
Funkcja
Pozycja przełącznika
ON ('0' logiczne)
OFF ('1' logiczna)
1
Wybór interfejsu MII/SNI
Interfejs SNI aktywny
Interfejs MII aktywny
2
Włączenie trybu ISOLATE
Tryb ISOLATE wyłączony
Tryb ISOLATE włączony
3
-
-
-
4
Włączenie trybu LDPS
Tryb LDPS wyłączony
Tryb LDPS włączony
5
Włączenie trybu repeater'a
Tryb repeater'a wyłączony
Tryb repeater'a wyłączony
6
Ustawienie szybkości pracy na 100 Mb/s Szybkość pracy 10 Mb/s
Szybkość pracy 100 Mb/s
7
Włączenie trybu Full Duplex
Praca w trybie Half Duplex
Praca w trybie Full Duplex
8
Włączenie trybu autonegocjacji
Autonegocjacja wyłączona
Autonegocjacja włączona
Konfiguracji adresu PHY dokonuje się przy montażu płytki drukowanej za pomocą zwor JP1JP10. Istotne jest zachowanie właściwej polaryzacji diod LED w zależności od ustawienia zwor
w każdej z sekcji. Funkcje poszczególnych diod sygnalizacyjnych opisano w tabeli 3.3, natomiast ich
lokalizację fizyczną na karcie interfejsu sieciowego Fast Ethernet zaprezentowano w pliku
fast_ethernet_cfg.pdf, znajdującym się na załączonej płycie CD w katalogu \fast_ethernet_doc.
Tab. 3.3. Opis funkcji poszczególnych diod sygnalizacyjnych karty Fast Ethernet.
Nazwa
Funkcja
LED 0
Link: aktywna w momencie zestawienia poprawnego połączenia do medium.
LED 1
Full Duplex: aktywna w trybie Full Duplex.
LED 2
Link 10 Mb/Active: tryb 10Base-T; pulsuje w momencie transmisji bądź odbioru danych.
LED 3
Link 100 Mb/Active: tryb 100Base-TX; pulsuje w momencie transmisji bądź odbioru danych.
LED 4
Collision: aktywna w momencie wystąpienia kolizji.
W ramach przeprowadzonych prac zaprojektowano i wykonano dwuwarstwowy obwód
drukowany interfejsu sieciowego Fast Ethernet. Matryce poszczególnych warstw zamieszczono
w pliku fast_ethernet_pcb.pdf (katalog \fast_ethernet_doc na płycie CD). Zmontowany prototyp karty
sieciowej Fast Ethernet przedstawiono na rysunku 3.9.
58
Rys. 3.9. Prototyp zmontowanej karty Fast Ethernet – skala 1:1.
Zdecydowana większość wykorzystanych do budowy karty elementów składowych była przeznaczona
do montażu powierzchniowego SMD.
Zostały one ulokowane na górnej warstwie obwodu
drukowanego (ang. top layer). Jedynie gniazdo RJ-45, złącze interfejsu MII oraz przełącznik
wymagały
DIP-switch
montażu
przewlekanego.
Rozmieszczenie
linii
zasilających
oraz
poszczególnych sygnałów interfejsu MII w złączu komunikacyjnym karty Fast Ethernet pokazano na
TXD2
TXD0
RXCLK
RXD2
5
7
9
11
13 15
17 19
21
23
25 27
29
31 33
35 37
39
2
4
6
8
10
12
14 16
18 20
22
24
26 28
30
32 34
36 38
40
COL
TXD3
TXD1
TXCLK
RXD3
RXDV
MDIO
RXER
RXD1
MDC
TXEN
3
CRS
VDD 3.3V
1
RXD0
GND
rysunku 3.10.
Rys. 3.10. Numeracja wyprowadzeń złącza interfejsu MII karty Fast Ethernet.
3.5.2. Karta Gigabit Ethernet
Karta sieciowa obsługująca standard Gigabit Ethernet została zrealizowana w oparciu o układ
DP83865 [68] firmy National Semiconductor. Jest on w pełni funkcjonalnym urządzeniem warstwy
fizycznej typu PHY, wyposażonym w wewnętrzne bloki funkcjonalne obsługujące podwarstwę PMD
(lokalizacja PHY w modelu ISO-OSI przedstawiona została na rysunku 3.6) dla standardów sieci:
10BASE-T, 100BASE-TX oraz 1000BASE-T Ethernet. Jego zaawansowana struktura wewnętrzna
oraz proces technologiczny CMOS 0.18 µm (zasilanie 1,8 V) gwarantują niewielki pobór mocy, jak
również wysoką wydajność i stabilność pracy. Typowe aplikacje układu wymagają stosunkowo
niedużej liczby elementów zewnętrznych (głównie kondensatorów odprzęgających), pozwalając na
szybką realizację kart interfejsów sieciowych, przełączników Ethernetowych, bądź portów
59
agregujących. Interfejs komunikacyjny MAC obsługuje standardy: IEEE 802.3u MII, IEEE 802.3z
GMII (ang. Gigabit Media Independent Interface) oraz RGMII (ang. Reduced GMII).
Główne cechy funkcjonalne układu DP83865 [68]:
 bardzo niski pobór mocy – typowo 1,1 W,
 pełna zgodność ze specyfikacjami IEEE 802.3 10BASE-T, 100BASETX oraz
1000BASE-T,
 wbudowane bloki PMD wyposażone w korekcję adaptacyjną oraz BWL zgodnie
z wymaganiami standardu ANSI X3.T12,
 interfejs komunikacyjny MAC 3,3 V lub 2,5 V wspierający tryby:
o
IEEE 802.3u MII,
o
IEEE 802.3z GMII,
o
RGMII wersja 1.3,
 możliwość ustalania przez użytkownika kolejności sygnałów w interfejsie GMII,
 pełna automatyczna negocjacja pomiędzy urządzeniami 1000 Mb/s, 100 Mb/s, 10 Mb/s,
Full Duplex oraz Half Duplex,
 dostosowywanie prędkości pracy do jakości połączenia (ang. Speed Fallback),
 wbudowany moduł pomiaru długości kabla,
 sygnalizacja połączenia, trybu oraz prędkości transmisji danych z wykorzystaniem diod
LED (istnieje możliwość konfiguracji opcji sygnalizacji przez użytkownika),
 wymagane jedynie dwa napięcia zasilające: 1,8 V (rdzeń i część analogowa) oraz 2,5 V
(część analogowa i blok I/O) - istnieje możliwość wykorzystania alternatywnego napięcia
3,3 V do zasilania bloku I/O,
 przerwania definiowane przez użytkownika,
 wsparcie dla automatycznego wykrywania rodzaju kabla (prosty, skrosowany) Auto-MDIX
dla wszystkich szybkości pracy 10, 100 oraz 1000 Mb/s.
Bogata funkcjonalność układu DP83865, a przede wszystkim wsparcie dla standardu Gigabit
Ethernet, czynią jego wewnętrzną architekturę zdecydowanie bardziej skomplikowaną, niż to miało
miejsce w przypadku omawianego wcześniej układu RTL8201BL. Schemat blokowy układu DP83865
przedstawiono na rysunku 3.11. Odrębne tory przetwarzania danych dla każdej z szybkości pracy
formują w odpowiedni sposób strumienie bitowe. Podsystem przetworników analogowo-cyfrowych
i cyfrowo-analogowych współpracuje z blokiem analogowych nadajników i odbiorników sygnału
z medium fizycznego. Układ
DP83865 wymaga
zastosowania
zewnętrznego transformatora
separującego. Blok 10 Mb/s oraz 100 Mb/s komunikuje się z kontrolerem MAC za pomocą interfejsu
MII, natomiast blok 1000 Mb/s za pomocą interfejsu GMII. Za właściwą obsługę poszczególnych
trybów pracy interfejsu komunikacyjnego odpowiedzialny jest blok multipleksera/demultipleksera.
Nad całością pracy układu czuwa dedykowany mikrokontroler, realizujący również funkcje
zarządzania PHY z wykorzystaniem linii MDIO oraz generowania przerwań dla układów
60
zewnętrznych użytkownika. Dokładny opis działania poszczególnych bloków układu DP83865
odnaleźć można w dokumentacji technicznej [68]. Oznaczenia i funkcje poszczególnych sygnałów
wchodzących w skład interfejsu MAC oraz panelu sygnalizacyjno-konfiguracyjnego opracowanej
karty sieciowej wraz z odpowiadającymi im numerami wyprowadzeń układu DP83865 zamieszczono
w pliku gigabit_ethernet_phy.pdf, znajdującym się na załączonej płycie CD w katalogu
\gigabit_ethernet_doc.
Mikrokontroler
zarządzający oraz
blok kontroli PHY
Blok multipleksera/
demultipleksera
MII
MII
GMII
1000BASE-T
PCS
10BASE-T
PMA
100BASE-TX
PMA
1000BASE-T
PMA
Blok 10BASE-T
100BASE-TX
PMD
MLT-3
100 Mb/s
Blok 1000BASE-T
100BASE-TX
PCS
Blok 100BASE-TX
10BASE-T
PLS
Manchester
10 Mb/s
RXD[7:0]
RX_DV
RX_ER
CRS
COL
RX_CLK
TX_CLK
TXD[7:0]
TX_EN
TX_ER
GTX_CLK
Wspólny interfejs MII/GMII/RGMII
Interrupt
MDC
MDIO
Interfejs zarządzający
PAM-5
17 poziomów
Kształtowanie PR
Podsystem
DAC/ADC
Blok DAC/ADC
oraz generator
zegara
Odbiorniki/
nadajniki
Generator
zegara
Transformator
4-parowa skrętka
CAT-5
Rys. 3.11. Schemat blokowy układu DP83865 (na podstawie [68]).
61
Schemat ideowy karty sieciowej Gigabit Ethernet, bazującej na układzie PHY DP83865 firmy
National Semiconductor, opracowano na podstawie standardowej noty aplikacyjnej [69]. Wersję
elektroniczną schematu zawarto w pliku gigabit_ethernet_nic.pdf, znajdującym się na płycie CD
w katalogu \gigabit_ethernet_doc. Ze względu na przyjęte założenia konieczne było wprowadzenie
szeregu modyfikacji dostosowujących funkcjonalność gigabitowego interfejsu sieciowego do potrzeb
środowiska testowo-uruchomieniowego. Do najistotniejszych należały:
 dodanie bloku manualnej konfiguracji umożliwiającego pełne sterowanie układem PHY,
w tym jego adresu,
 dodanie panelu sygnalizującego stan pracy, złożonego z pięciu diod LED.
Oprócz zwiększenia funkcjonalności karty Gigabit Ethernet niezbędne były również korekty
związane z zamianą niektórych podzespołów elektronicznych wykorzystanych do jej budowy
oraz zapewnieniem poprawnej współpracy interfejsu sieciowego z płytami FPGA firmy Digilent.
W tej grupie najważniejsze zmiany obejmowały:
 wydzielenie bloku zasilającego układ DP83865, obejmującego elementy LT1963EST-1.8
oraz LT1963EST-2.5 [57],
 zastosowanie zintegrowanego modułu transformatora separującego z gniazdem RJ-45 typu
Pulse JK0-0036NL [80], spełniającego wymagania standardu 1000BASE-T,
 wykorzystanie układu generatora resetu z opcją manualną typu TS825CX5E [117].
Ustalanie oraz weryfikacja bieżących parametrów pracy interfejsu sieciowego dokonywana
jest w bloku sygnalizacyjno-konfiguracyjnym, złożonym z 19 przełączników suwakowych oraz 5 diod
LED.
Wykorzystanie
przełączników
dwusekcyjnych
pozwoliło
wyeliminować
konieczność
jednorazowego definiowania adresu PHY przy montażu interfejsu sieciowego, jak to miało miejsce
w przypadku wersji Fast Ethernet. W karcie gigabitowej istnieje możliwość dowolnej konfiguracji
adresu przy jednoczesnej automatycznej zmianie polaryzacji diod sygnalizacyjnych LED. Opis funkcji
poszczególnych diod sygnalizacyjnych oraz przełączników konfiguracyjnych przedstawiono
odpowiednio w tabelach 3.4 i 3.5.
Tab. 3.4. Opis funkcji diod sygnalizacyjnych karty Fast Ethernet.
Nazwa
Funkcja
D1
ACTIVITY_LED: sygnalizacja błędu w stanie bezczynności (ang. Idle error) lub transferu pakietu.
D2
LINK10_LED: sygnalizacja poprawnego połączenia 10 Mb/s.
D3
LINK100_LED: sygnalizacja poprawnego połączenia 100 Mb/s.
D4
LINK1000_LED: sygnalizacja poprawnego połączenia 1000 Mb/s.
D5
DUPLEX_LED: sygnalizacja zestawienia poprawnego połączenia w trybie Full Duplex.
62
Tab. 3.5. Opis funkcji przełączników konfiguracyjnych w karcie Gigabit Ethernet.
Numer
1
2
3
Pozycja przełącznika
Funkcja
Reset manualny
Wybór napięcia zasilania stopnia I/O
(sygnał VDD_SEL_STRAP )
Włączenie zegara interfejsu MAC
(sygnał MAC_CLK_EN_STRAP)
A
B
-
-
2,5V
3,3V
Wyjście CLK_TO_MAC
nieaktywne
Wyjście CLK_TO_MAC
aktywne
4
Włączenie automatycznej konfiguracji par
interfejsu MDI (sygnał
MDIX_EN_STRAP)
Auto-MDIX wyłączone –
aktywne manualne ustawienia
(sygnał MAN_MDIX_STRAP)
Automatyczna konfiguracja
Auto-MDIX aktywna
5
Zezwolenie trybu wielowęzłowego
(sygnał MULTI_EN_STRAP)
Tryb jednowęzłowy
(karta sieciowa - NIC)
Tryb wielowęzłowy
(przełącznik lub koncentrator)
6
Adres PHY bit 4
(sygnał PHYADDR4_STRAP)
0
1
7
Typ interfejsu MAC
(sygnał RGMII_SEL1)
Interfejs GMII
Typ interfejsu MAC
(sygnał RGMII_SEL0)
Częstotliwość zegara kontrolera MAC
(sygnał CLK_MAC_FREQ)
Adres PHY bit 3
(sygnał PHYADDR3_STRAP)
Adres PHY bit 2
(sygnał PHYADDR2_STRAP)
Adres PHY bit 1
(sygnał PHYADDR1_STRAP)
Dla RGMII_SEL1 = ‘1’
Interfejs RGMII – HP
Interfejs RGMII o typie
zależnym od wartości sygnału
RGMII_SEL0
Dla RGMII_SEL1 = ‘1’
Interfejs RGMII – 3COM
CLOCK TO MAC = 25 MHz
CLOCK TO MAC = 125 MHz
0
1
0
1
0
1
13
Ręczna konfiguracja krosowania interfejsu
MDI (sygnał MAN_MDIX_STRAP)
Tryb skrosowany
(crossover mode MDIX)
14
Włączenie trybu niekompatybilnego z IEEE
(sygnał NON_IEEE_STRAP)
Tryb prosty
(straight mode MDI)
Zezwolenie na operacje
kompatybilne z równoczesną
blokadą operacji
niekompatybilnych z IEEE
8
9
10
11
12
Zezwolenie na operacje
kompatybilne i
niekompatybilne z IEEE
Adres PHY bit 0
0
1
(sygnał PHYADDR0_STRAP)
Włączenie autonegocjacji
16
Autonegocjacja wyłączona
Autonegocjacja włączona
(sygnał AN_EN_STRAP )
Tryb komunikacji dupleksowej
17
Half Duplex
Full Duplex
(sygnał DUPLEX_STRAP)
Ustawienie prędkości pracy
18
0
1
(sygnał SPEED1_STRAP)
Ustawienie prędkości pracy
19
0
1
(sygnał SPEED0_STRAP)
Autonegocjacja wyłączona (AN_EN_STRAP = ‘0’):
Autonegocjacja włączona (AN_EN_STRAP = ‘1’):
Speed[1] Speed[0]
Dozwolona prędkość
Speed[1] Speed[0]
Dozwolona prędkość
1
1
opcja zarezerwowana
1
1
1000BASE-T, 10BASE-T
1
0
1000BASE-T
1
0
1000BASE-T
0
1
100BASE-TX
0
1
1000BASE-T, 100BASE-TX
0
0
10BASE-T
0
0
1000BASE-T, 100BASE-TX,
10BASE-T
15
Generator resetu, wykorzystujący układ scalony TS825CX5E [117], odpowiada za
wytworzenie impulsu o właściwej charakterystyce czasowo-napięciowej resetującego układ PHY.
Pozwala on na wygenerowanie impulsu automatycznie po włączeniu zasilania, jak również poprzez
manualną inicjalizację. Opracowana karta sieciowa Gigabit Ethernet została wyposażona
63
w 40-wyprowadzeniowy interfejs MII/GMII oraz 6-wyprowadzeniowy interfejs diagnostyczny.
TXD5
TXD3
TXD1
23
25 27
29
31 33
35 37
39
2
4
6
8
10
12
14 16
18 20
22
24
26 28
30
32 34
36 38
40
TX_TCLK
CRS
RXD6
RXD4
RXD0
TX_CLK
TX_EN
TXD6
TXD2
TXD0
MAC_CLK_EN
TXD7
21
RXD2
MDC
TX_ER
17 19
CLK_TO_MAC
RXD5
13 15
MDIO
RXD7
11
TXD4
RX_ER
9
RX_CLK
COL
7
RXD1
INT_N
5
RXD3
VDD 3.3V
3
RX_DV
GND
1
RESET_N
GTX_CLK
Rozmieszczenie sygnałów w złączu interfejsu MII/GMII pokazano na rysunku 3.12.
Rys. 3.12. Numeracja wyprowadzeń złącza interfejsu MII/GMII karty Gigabit Ethernet.
Na podstawie schematu ideowego zaprojektowano obwód drukowany interfejsu sieciowego
Gigabit Ethernet. Ze względu na znaczny stopień skomplikowania układu oraz wysokie wymagania
częstotliwościowe-funkcjonalne, niezbędne było użycie druku czterowarstwowego. Matryce
poszczególnych warstw zawarto w pliku gigabit_ethernet_pcb.pdf, znajdującym się na załączonej
płycie CD w katalogu \gigabit_ethernet_doc.
Rys. 3.13. Prototyp zmontowanej karty Gigabit Ethernet (widok od góry) – skala 1:1.
Zdjęcie prototypu zmontowanej karty Gigabit Ethernet przedstawia rysunek 3.13. Duża ilość
elementów SMD użytych do budowy interfejsu sieciowego oraz wymagania funkcjonalne nie
pozwoliły na zlokalizowanie podzespołów elektronicznych tylko po jednej stronie płytki drukowanej.
Górna strona zawierała wszystkie elementy przewlekane (przełączniki konfiguracyjne i interfejsy
komunikacyjne) oraz część elementów SMD, m.in.: układ PHY, jak również diody sygnalizacyjne
LED. Na spodniej stronie płytki drukowanej zamontowane zostały przede wszystkim elementy
związane z rozprowadzeniem i filtrowaniem zasilania układu PHY. Szczegółowe rozlokowanie
elementów sygnalizacyjno-konfiguracyjnych karty zaprezentowano w pliku gigabit_ethernet_cfg.pdf,
dostępnym na załączonej płycie CD.
64
4. Sprzętowa implementacja kontrolerów
MAC dla sieci Ethernet
4.1. Wprowadzenie
Spośród wielu istniejących obecnie technologii realizacji sieci lokalnych LAN (ang. Local
Area Network) zdecydowanie najbardziej popularną jest Ethernet. Historycznie termin ten pojawił się
już w latach 70-tych ubiegłego wieku w rozwiązaniu sieci LAN opracowanym przez laboratorium
badawcze firmy Xerox. To właśnie on stał się pierwowzorem dla pierwszej wersji specyfikacji IEEE
802.3 [40], wydanej w roku 1983. Od tego czasu standard przeszedł dynamiczny rozwój, opracowano
szereg jego modyfikacji, wprowadzających coraz większe prędkości transmisji, jak również obsługę
nowych mediów komunikacyjnych. Gwałtowne rozpowszechnienie standardu Ethernet i jego
niewątpliwy sukces rynkowy wyniknęły głównie z właściwego doboru stosunku parametrów
technicznych do kosztu zakupu wszystkich elementów wchodzących w skład infrastruktury sieci
bazującej na tym standardzie [20]. Ethernet oferuje bowiem w atrakcyjnej cenie (w porównaniu do
innych standardów sieciowych, takich jak np. Infiniband, czy też Fibre Channel) bardzo dobre
przepustowości, a także odpowiednie dopasowanie do obsługi ruchu opartego o dominujący obecnie
protokół IP (ang. Internet Protocol) [72]. Negatywnym skutkiem poszukiwania kompromisu
ekonomicznego jest zredukowanie do niezbędnego minimum funkcjonalności układów PHY, szerzej
opisanych w rozdziale 3.5. W zdecydowanej większości przypadków odpowiadają one jedynie za
dopasowanie do standardu warstwy fizycznej kanału transmisyjnego, począwszy od interfejsu MII lub
GMII. Całość zadań, związanych z przygotowaniem pakietów i ramek do transmisji oraz analizą ich
zawartości po odebraniu danych przez interfejs sieciowy, jest realizowana przez procesor ogólnego
przeznaczenia. Przekłada się to na znaczny wzrost obciążenia, a tym samym na spadek efektywności
całego systemu komputerowego. Zjawisko takie możemy zaobserwować szczególnie w przypadku
standardowych komputerów osobistych. O ile trudno jest dostrzec wpływ obsługi komunikacji
sieciowej na obciążenie przy komunikacji z prędkością 100Mb/s (co ma związek z bardzo dużą
wydajnością dostępnych obecnie procesorów), to przy szybkości 1Gb/s jest on już wyraźnie
dostrzegalny. Ponadto degradacja wydajności obliczeniowej, związana z koniecznością programowej
obsługi stosu protokołów TCP/IP, wzrasta nie tylko ze zmianą szybkości przesyłu danych, lecz
również w wypadku zmniejszania się rozmiaru oraz przerw pomiędzy pojedynczymi pakietami [38].
W konsekwencji, nawet przy wykorzystaniu bardzo wydajnych procesorów, może dojść do
przypadków blokady obsługi sieci i utraty danych. Przykładowe statystyki obciążenia procesora
w zależności od rozmiaru i odstępu pomiędzy pakietami zaprezentowano na rysunku 4.1 [39].
65
S ysKonnect P 4DP 6 64 bit 66 MHz
Utracone pakiety [%]
100
80
60
40
Rozmiar pakietu
50 bajtów
20
100 bajtów
0
200 bajtów
0
5
10
15
20
25
Odstęp pomiędzy kolejnymi pakietami [μs]
30
35
40
400 bajtów
600 bajtów
Obciążenie procesora CPU1
stacji odbierającej [%]
800 bajtów
S ysKonnect P 4DP 6 64 bit 66 MHz
100
1000 bajtów
1200 bajtów
80
1400 bajtów
60
1472 bajty
40
20
0
0
5
10
15
20
25
Odstęp pomiędzy kolejnymi pakietami [μs]
30
35
40
Rys. 4.1. Procentowa utrata pakietów wraz z utylizacją procesora w funkcji rozmiaru oraz odstępu
pomiędzy poszczególnymi pakietami przy wykorzystaniu karty SysKonnect NIC 64 bit 66 MHz PCI
współpracującej z płytą główną SuperMicro P4DP6 [39].
W krytycznym przypadku, kiedy badany serwer odbierał bardzo małe ramki nadawane
w krótkich odstępach czasu, obciążenie procesora CPU1 osiągało wartość 100%. W efekcie tego
ponad 60% ramek nie zostało prawidłowo przetworzonych. Jest to sytuacja niedopuszczalna dla
systemów komputerowych świadczących usługi o wysokim poziomie dostępności bądź też
zapewniających bezpieczeństwo i integralność danych przesyłanych w sieciach teleinformatycznych.
Dla takich właśnie zastosowań niezbędnym okazało się poszukiwanie rozwiązań pozwalających na
odciążenie procesorów ogólnego przeznaczenia z konieczności obsługi komunikacji sieciowej poprzez
implementację stosu protokołów TCP/IP oraz funkcjonalności kontrolerów MAC w dedykowanych
układach sprzętowych ASIC. W przypadku seryjnie produkowanych serwerów karty NIC
wyposażone w sprzętowe wspomaganie obsługi sieci określa się jako TOE NIC (ang. TCP/IP Offload
Engine Network Interface Card) [106]. Ze względu na swą wysoką cenę nie stały się one
rozwiązaniem powszechnym i w zdecydowanej większości sytuacji problemy z przeciążaniem
jednostek obliczeniowych niweluje się poprzez zastosowanie nowych, bardziej wydajnych procesorów
ogólnego przeznaczenia.
Analogiczny problem sposobu obsługi komunikacji sieciowej stanowił punkt wyjścia do
opracowania koncepcji implementacji systemu bezpieczeństwa Firewall w układach logiki
reprogramowalnej
FPGA.
Z
jednej
strony
możliwym
byłoby
wykorzystanie
rozwiązań
programowych, tak, aby skrócić czas realizacji całego projektu i skoncentrować się na jego
zasadniczym elemencie – sprzętowym klasyfikatorze pakietów. Z drugiej strony należałoby wziąć pod
66
uwagę wpływ wszystkich komponentów tak złożonego systemu, jakim jest zapora ogniowa, na
globalną wydajność przetwarzania danych. Ogromny potencjał i elastyczność układów FPGA dawały
szansę na opracowanie kompleksowej sprzętowej implementacji pełnego systemu Firewall w jednym
układzie reprogramowalnym, począwszy od kontrolerów MAC, a skończywszy na modułach
przetwarzających politykę bezpieczeństwa. Droga ta, choć bardziej pracochłonna, pozwalała na
realizację urządzenia, w którym każdy z najdrobniejszych elementów mógł być zoptymalizowany
zarówno pod kątem wydajności i stabilności działania, jak również ilości zasobów niezbędnych do
jego realizacji. Co więcej, proporcje pomiędzy tymi czynnikami, mogły być na bieżąco kształtowane
w zależności od wymagań stawianych przez potencjalny obszar zastosowań. Biorąc pod uwagę
powyższe przesłanki, autor niniejszej rozprawy zdecydował się na kompleksową implementację
komponentów odpowiedzialnych za obsługę komunikacji sieciowej, przy zachowaniu pełnej
zgodności z zaleceniami specyfikacji IEEE 802.3. Założono, że przeniesienie warstwy 2 i 3 modelu
ISO/OSI do układu FPGA stwarza realne szanse na przyspieszenie procesu weryfikacji danych
poprzez zaporę ogniową.
WARSTWY MODELU
REFERENCYJNEGO
OSI
WARSTWA TRANSPORTOWA
APLIKACJI
LLC – LOGICAL LINK CONTROL
PREZENTACJI
MAC CONTROL (opcjonalnie)
SESJI
MAC – MEDIA ACCESS CONTROL
WARSTWA SIECIOWA
AUI
PLS
MAU
AUI
SIECIOWA
PMD
MDI
PMD
MDI
PCS
PMA
MDI
PMA
PCS
PMA
MDI
PMA
DOPASOWANIE
GMII
DOPASOWANIE
MII
DOPASOWANIE
MII
PLS
TRANSPORTOWA
ŁĄCZA DANYCH
Sprzętowy
kontroler MAC
WARSTWY WYŻSZE
MEDIUM
MEDIUM
MEDIUM
MEDIUM
1 Mb/s, 10Mb/s
10Mb/s
100Mb/s
1000Mb/s
FIZYCZNA
AUI = ATTACHMENT UNIT INTERFACE
MDI = MEDIUM DEPENDENT INTERFACE
MII = MEDIA INDEPENDENT INTERFACE
GMII = GIGABIT MEDIA INDEPENDENT INTERFACE
MAU = MEDIUM ATTACHMENT UNIT
PLS = PHYSICAL LAYER SIGNALING
PCS = PHYSICAL CODING SUBLAYER
PMA = PHYSICAL MEDIUM ATTACHMENT
PHY = PHYSICAL LAYER DEVICE
PMD = PHYSICAL MEDIUM DEPENDENT
Rys. 4.2. Lokalizacja sprzętowego kontrolera MAC w warstwowym modelu ISO/OSI sieci Ethernet
(na podstawie [40]).
Implementacja
sprzętowa
standardu
sieci
Ethernet
sprowadza
się
do
wdrożenia
funkcjonalności opisanych specyfikacją IEEE 802.3, począwszy od podwarstwy dostępu do medium
MAC, a skończywszy na wybranych elementach warstwy sieciowej i transportowej. Graficzną
ilustrację umiejscowienia sprzętowego kontrolera MAC w warstwowym schemacie ISO/OSI
przedstawiono na rysunku 4.2.
67
4.2. Struktura ramki Ethernet
Standard IEEE 802.3 definiuje dwa główne formaty ramek w sieciach Ethernet: ramki
podstawowe oraz ramki znakowane (ang. Tagged Frame). Podstawowa ramka Ethernet (Rys. 4.3)
złożona jest z dziewięciu pól: preambuły, znacznika początku ramki SFD (ang. Start Frame
Delimiter), adresu docelowego i źródłowego (ang. Destination and Source Address), pola długości lub
typu protokołu ramki (ang. Length/Type), danych klienta MAC, opcjonalnego pola dopełnienia
(ang. Pad), sekwencji kontrolnej FCS (ang. Frame Check Sequence) oraz pola rozszerzenia (tylko dla
trybu 1000 Mb/s Half Duplex).
7 Oktetów
PREAMBUŁA
1 Oktet
POLE STARTU RAMKI (SFD)
6 Oktetów
ADRES DOCELOWY
6 Oktetów
ADRES ŹRÓDŁOWY
Porządek
nadawania
bajtów ramki:
od góry do
dołu
DŁUGOŚĆ/TYP
2 Oktety
DANE KLIENTA MAC
46 – 1500
Oktetów
DOPEŁNIENIE (PAD)
4 Oktety
SUMA KONTROLNA (FCS)
ROZSZERZENIE (EXTENTION)
LSB
b0
b7
MSB
Porządek wysyłania poszczególnych
bitów: od LSB do MSB
Rys. 4.3. Struktura podstawowej ramki Ethernet.
Wszystkie pola, za wyjątkiem danych klienta, PAD oraz EXTENTION, mają ściśle ustaloną,
niezmienną długość. Poszczególne pola ramki przesyłane są w porządku od góry do dołu, czyli od
preambuły do FCS (ewentualnie EXTENTION). Pojedyncze bity w każdym z pól są natomiast
transmitowane, począwszy od najmniej znaczącego bitu LSB (ang. Least Significant Bit), aż do
najbardziej znaczącego MSB (ang. Most Significant Bit). Wartości graniczne parametrów w zależności
od szybkości pracy, zebrane w tabeli 4.1, dotyczą ramki Ethernet, złożonej ze wszystkich pól
z pominięciem preambuły (od adresu docelowego do sekwencji kontrolnej FCS włącznie).
68
Tab. 4.1. Graniczne wartości parametrów ramki Ethernet w zależności od szybkości pracy [40].
Parametr (nazwa używana w standardzie)
Szybkość 10 Mb/s
Szybkość 100 Mb/s
Szybkość 1000 Mb/s
512 okresów
bitowych
512 okresów
bitowych
4096 okresów
bitowych
9,6 μs
0,96 μs
0,096 μs
Limit prób dostępu (attemptLimit)
16
16
16
Limit ponowień algorytmu Backoff (backoffLimit)
10
10
10
Długość sygnału rozgłaszającego kolizję (jamSize)
32 bity
32 bity
32 bity
1518 oktetów
1518 oktetów
1518 oktety
Minimalna długość ramki (minFrameSize)
512 bitów
(64 oktety)
512 bitów
(64 oktety)
512 bitów
(64 oktety)
Limit nadawania w trybie burst (burstLimit)
nie używane
nie używane
65 536 bitów
Okno czasowe (slotTime)
Odstęp międzyramkowy (interFrameGap)
Maksymalna długość ramki podstawowej
(maxUntaggedFrameSize)
4.2.1. Charakterystyka pól składowych ramki podstawowej
Z punktu widzenia funkcjonowania sieci opartej o standard specyfikacji IEEE 802.3 każde
z dziewięciu pół składowych ramki Ethernet pełni istotną rolę:
a)
preambuła - pole to o długości 7 bajtów wykorzystywane jest do stabilizacji warunków
w medium transmisyjnym oraz zapewnienia poprawnej synchronizacji układu PHY
z odbieranymi danymi. Preambuła składa się z następującej sekwencji bitów: „10101010
10101010 10101010 10101010 10101010 10101010 10101010”. Są one nadawane
w kolejności od lewej do prawej. Jeżeli w trakcie nadawania pola zostanie wykryta kolizja,
proces transmisji powinien być kontynuowany aż do momentu wysłania ostatniego bitu
sekwencji preambuły;
b)
pole SFD - składa się z sekwencji bitów „10101011”. Jest ono nadawane niezwłocznie po
zakończeniu transmisji preambuły, sygnalizując początek ramki Ethernet. Jeżeli w trakcie
nadawania pola zostanie wykryta kolizja, proces transmisji powinien być kontynuowany do
momentu wysłania ostatniego bitu sekwencji SFD;
c)
pola adresów źródłowego i docelowego - adres docelowy zawiera informację o miejscu
dokąd powinna dotrzeć dana ramka, zaś adres źródłowy o stacji, która ramkę wysłała.
Strukturę wewnętrzną pól adresowych przedstawiono na rysunku 4.4.
I/G
U/L
46-bitowy adres
I/G – typ adresu (‘0’- indywidualny, ‘1’ - grupowy)
U/L – typ zarządzania (‘0’- administrowany globalnie, ‘1’ - administrowany lokalnie)
Rys. 4.4. Struktura pól adresowych ramki Ethernet.
69
Pole każdego z adresów o długości 48 bitów podzielone jest na następujące części:

typ adresu (I/G) – najmniej znaczący bit pola adresu docelowego informuje, czy
dany adres należy do puli indywidualnej czy też grupowej. Dla adresu źródłowego bit
ten jest zarezerwowany, a jego wartość wynosi ‘0’. Adres typu indywidualnego
dotyczy zawsze pojedynczej stacji, adres grupowy natomiast określa zbiór stacji
w danej sieci. Istnieją trzy jego rodzaje:
o
Multicast-Group Address – określa podgrupę logicznie powiązanych ze sobą
stacji w danej sieci LAN,
o
Broadcast Address – definiuje zbiór wszystkich stacji w danej sieci LAN.
Pole adresu docelowego dla tego typu składa się z samych jedynek;

typ zarządzania (U/L) – jeżeli bit ten ma wartość ‘0’, wówczas adres należy do
grupy globalnie (bądź też uniwersalnie) administrowanej. W przypadku, gdy wartość
bitu wynosi ‘1’, adres należy do puli administrowanej lokalnie;
d)
pole długości/typu protokołu (L/T) - pole L/T może mieć dwa znaczenia w zależności od
wartości, jaka w nim występuje:

jeżeli jest ona mniejsza bądź równa parametrowi maxUntaggedFrameSize
pomniejszonemu o 18 bajtów (suma długości pól adresowych, L/T oraz CRC),
wówczas pole L/T zawiera informację o długości ramki wyrażoną w bajtach,

jeżeli jest większa lub równa 1536 (x0600 hexadecymalnie), wówczas pole L/T
opisuje typ protokołu klienta MAC. W tej interpretacji klient MAC odpowiada za
właściwe określenie rozmiaru ramki oraz obsługę procedury użycia pola PAD;
e)
pole danych oraz PAD - pole danych użytkownika MAC zawiera dowolną sekwencję bajtów
o maksymalnej długości równej maxUntaggedFrameSize – 18 bajtów (suma długości pól
adresowych, L/T oraz CRC). Z kolei minimalny rozmiar tego pola jest wymagany dla
poprawnego funkcjonowania protokołu wielodostępu ze śledzeniem stanu dostępności
medium transmisyjnego CSMA/CD (ang. Carrier Sense Multiple Access with Collision
Detect). W razie potrzeby (dla danych krótszych od 46 bajtów) stosowane jest uzupełnianie
pola do minimalnego wymaganego standardem rozmiaru. Do tego celu wykorzystuje się
dodatkowy element ramki Ethernet – sekwencję PAD;
f)
sekwencja kontrolna FCS - zawiera 4-bajtowy wynik obliczenia cyklicznego kodu
nadmiarowego CRC (ang. Cyclic Redundancy Check) dla każdej z transmitowanych ramek
w celu zweryfikowania poprawności danych na etapie odbioru. Do wyliczania wartości CRC
używane są pola: adres źródłowy i docelowy, L/T, dane oraz PAD. Wielomian generacyjny
ma następującą postać:
. (4.1)
70
Wynik obliczenia 32-bitowego kodu CRC zawartego w polu FCS jest transmitowany
w porządku od bitu x31 do bitu x0,
g)
pole EXTENTION - sekwencja bitów rozszerzenia nadawana po polu FCS w trybie
1000 Mb/s Half Duplex. Jej długość jest zmienna i zawiera się w granicach od 0 do
slotTime-minFrameSize. Zawartość pola EXTENTION nie jest uwzględniana do obliczania
wartości FCS.
4.2.2. Format ramki znakowanej
W stosunku do ramki podstawowej, opisanej w rozdziale 4.2.1, ramka znakowana (Rys. 4.5)
zawiera dodatkowy 4-bajtowy blok, definiowany jako QTag Prefix, wstawiony pomiędzy pola adresu
źródłowego oraz L/T klienta MAC. Złożony jest on z dwóch elementów:
 2-bajtowego pola o stałej wartości identyfikującej protokół 802.1Q,
 2-bajtowego pola informacji kontrolnej.
8 7 6 5 4 3 2 1
7 Oktetów
PREAMBUŁA
1 Oktet
QTag
Prefix
POLE STARTU RAMKI (SFD)
6 Oktetów
ADRES DOCELOWY
6 Oktetów
ADRES ŹRÓDŁOWY
2 Oktety
DŁUGOŚĆ/TYP= 802.1QTagType
2 Oktety
INFORM. KONTROLNE ZNACZNIKA
2 Oktety
DŁUGOŚĆ/TYP KLIENTA MAC
Pierwszy oktet
0 0 0 0 0 0 0 0
Drugi oktet
user
priority
Pierwszy oktet
CFI
VLAN IDENTIFIER (VID, 12 bitów)
Drugi oktet
Porządek
nadawania
bajtów ramki:
od góry do
dołu
Informacja kontrolne znacznika
(ang. Tag Control Information)
DANE KLIENTA MAC
42 – 1500
Oktetów
1 0 0 0 0 0 0 1
DOPEŁNIENIE (PAD)
4 Oktety
SUMA KONTROLNA (FCS)
ROZSZERZENIE (EXTENTION)
LSB
b0
b7
MSB
Porządek wysyłania poszczególnych
bitów: od LSB do MSB
Rys. 4.5. Struktura znakowanej ramki Ethernet.
Za polem QTag Prefix, wprowadzającym przesunięcie o 4 bajty, wysyłane są pozostałe pola ramki –
analogicznie jak w wersji podstawowej. Całkowita długość ramki w związku z dodaniem prefiksu
wzrasta zatem o 4 bajty.
71
4.3. Sprzętowy kontroler MAC - wersja Fast Ethernet
W związku z wykorzystywaniem do prac badawczych różnych konfiguracji platform
badawczych z układami FPGA oraz różnych wersji kart sieciowych, szerzej opisanych
w rozdziale 3.5, zdecydowano o zrealizowaniu dwóch wersji sprzętowych kontrolerów MAC,
przeznaczonych do obsługi standardów Fast oraz Gigabit Ethernet, przy czym wersja Gigabit Ethernet
wpiera również niższe prędkości przesyłu danych. Takie podejście uniezależniło ciągłość procesu
projektowego
od
typu
płyty
testowo-uruchomieniowej.
Co
więcej,
dysponując
dwoma
implementacjami kontrolera, możliwym stał się ich precyzyjny dobór do aktualnych potrzeb
narzucanych przez docelowy obszar zastosowań systemu zabezpieczającego (wersja Fast Ethernet
alokuje kilkukrotnie mniejszą ilość zasobów sprzętowych układu FPGA).
4.3.1. Schemat blokowy
Sprzętowy kontroler MAC w wersji Fast Ethernet, którego poglądowy schemat
zaprezentowano na rysunku 4.6, składa się z trzech podstawowych bloków: toru odbiorczego RX, toru
transmisyjnego TX oraz modułu kontrolnego [108].
Tor nadawczy TX
(moduł eth_tx)
Blok kontrolny
(moduł eth_control)
Interfejs Firewalla
Tor odbiorczy RX
(moduł eth_rx)
Interfejs MII
Karta sieciowa
Kontroler MAC
Rys. 4.6. Schemat blokowy sprzętowego kontrolera MAC w wersji Fast Ethernet.
Zadaniem kontrolera jest przede wszystkim zapewnienie poprawnej komunikacji Firewalla
w sieci zgodnej ze standardem Fast Ethernet. W zależności od aktualnego trybu pracy, kontroler
inicjuje poszczególne fazy nawiązywania połączenia bądź też odbierania danych, obsługując
niezbędne mechanizmy metody dostępowej typu CSMA/CD. Funkcjonalność każdego z elementów
kontrolera MAC została zdefiniowana za pomocą języka opisu sprzętu VHDL.
Szczegółowa struktura kontrolera MAC, uwzględniająca wewnętrzne linie sygnałowe oraz
wyprowadzenia poszczególnych interfejsów została przedstawiona na rysunku 4.7. W wersji Fast
Ethernet posiada on trzy grupy połączeń z modułami zewnętrznymi: interfejs MII układu PHY,
interfejs
komunikacyjny Firewalla
oraz
interfejs
konfiguracyjny.
Dokładny
opis
funkcji
poszczególnych sygnałów kontrolera zawarto w dodatku A, punkt 8.1.
72
moduł eth_mac.vhd
eth_mac_rx_enable ←
eth_mac_rx_pause ←
eth_mac_rx_data(7:0) →
eth_mac_rx_data_valid →
eth_mac_rx_active →
eth_mac_rx_ok →
eth_mac_rx_error →
eth_mac_rx_frame_size(10:0) →
reset ←
eth_tx
→ phy_tx_clk
← phy_tx_en
← phy_tx_data(3:0)
→ phy_col
→ phy_crs
→ r_rx_mac_address(47:0)
→ r_rx_multicast_en
→ r_rx_promiscous_en
→ r_tx_crc_en
→ r_tx_padding_en
→ r_tx_crc_en
→ r_tx_padding_en
half_duplex ←
tx_enable ←
tx_running →
tx_retransmit →
tx_data(7:0) ←
tx_data_ack →
tx_ok →
tx_error →
tx_frame_size(10:0) ←
reset ←
eth_mac_tx_enable ←
eth_mac_tx_active →
eth_mac_tx_retransmit →
eth_mac_tx_data(7:0) ←
eth_mac_tx_data_ack →
eth_mac_tx_ok →
eth_mac_tx_error →
eth_mac_tx_frame_size(10:0) ←
→ r_mii_config(15:0)
eth_control
→ phy_int_n
← phy_mdc
↔ phy_mdio
INTERFEJS FIREWALLA
KONFIGURACJA
INTERFEJS PHY MII
eth_rx
rx_enable ←
→ phy_rx_clk
rx_pause ←
→ phy_rx_dv
→ phy_rx_error
rx_data_valid →
→ phy_rx_data(3:0)
rx_data(7:0) →
rx_active →
→ r_rx_mac_address(47:0)
→ r_rx_multicast_en
rx_ok →
→ r_rx_promiscous_en
rx_error →
rx_frame_size(10:0) →
→ phy_rx_clk
→ phy_rx_dv
→ phy_rx_error
→ phy_rx_data(3:0)
→ phy_tx_clk
← phy_tx_en
← phy_tx_data(3:0)
→ phy_col
→ phy_crs
→ phy_int_n
← phy_mdc
↔ phy_mdio
← phy_reset_n
eth_mac_ready →
eth_control_link →
eth_control_speed →
eth_control_half_duplex →
sys_clk ←
→ r_mii_config(15:0)
reset ←
sys_clk ←
reset ←
<= '0' when reset = reset_level
else '1';
Rys. 4.7. Struktura wewnętrzna modułu eth_mac w wersji Fast Ethernet.
4.3.2. Tor odbiorczy Rx
W skład toru odbiorczego w wersji Fast Ethernet, którego schemat blokowy zaprezentowano
na rysunku 4.8, wchodzi pięć modułów: eth_rx_bitreceiver, eth_rx_datadecap, eth_rx_recaddress,
eth_rx_crc i eth_rx_tlm. Realizują one wspólnie procedurę odczytu danych z interfejsu sieciowego
zgodnie z algorytmem wyspecyfikowanym w standardzie IEEE 802.3 [40]. Funkcje oraz sposób
Tor odbiorczy RX
Dane
eth_rx_bitreceiver
Konfiguracja
Interfejs
Firewalla
Interfejs MII
Karta sieciowa
działania poszczególnych modułów zostaną szerzej opisane w dalszej części niniejszego rozdziału.
eth_rx_datadecap
eth_rx_recaddress
eth_rx_tlm
Sygnały
kontrolne
eth_rx_crc
Rys. 4.8. Schemat blokowy toru odbiorczego RX.
73
Szczegółowy schemat strukturalny toru RX (moduł eth_rx) w wersji Fast Ethernet,
uwzględniający wewnętrzne linie sygnałowe oraz wyprowadzenia poszczególnych interfejsów,
przedstawiono na rysunku 4.9. Posiada on trzy grupy połączeń z blokami zewnętrznymi: interfejs MII
układu PHY (część odbiorcza), interfejs komunikacyjny Firewalla oraz interfejs konfiguracyjny. Opis
funkcji poszczególnych sygnałów modułu eth_rx zamieszczono w dodatku A, punkt 8.2.
moduł eth_rx.vhd
Konwersja nible->bajty
Proces 4-bajtowego
opóźniania danych
(usuwanie CRC)
eth_rx_bitreceiver
→ phy_rx_clk
→ phy_rx_dv
→ phy_rx_error
→ phy_rx_data(3:0)
→ rx_enable
→ rx_pause
→ reset
→ r_rx_promiscous_en
→ r_rx_multicast_en
→ r_rx_mac_address(47:0)
→ phy_rx_clk
→ phy_rx_dv
→ phy_rx_error
→ phy_rx_data(3:0)
→ rx_enable
→ rx_pause
→ reset
rx_fsm_idle →
rx_fsm_start_data→
rx_fsm_data →
rx_fsm_finished →
rx_frame_finished →
rx_data_out_valid →
rx_data_out(7:0) →
rx_nible_counter(11:0) →
rx_nible_frame_size(11:0) →
eth_rx_datadecap
→ phy_rx_clk
rx_len_or_type →
→ rx_fsm_idle
rx_len_or_type_field(15:0) →
→ rx_fsm_data
→ rx_fsm_finished
→ rx_frame_finished
→ rx_data_out_valid
→ rx_data_out(7:0)
→ rx_nible_counter(11:0)
→ reset
rx_frame_size(10:0) →
rx_data(7:0) →
rx_data_valid →
rx_active →
rx_ok →
rx_error →
eth_rx_crc
→ phy_rx_clk
→ rx_fsm_idle
→ rx_fsm_start_data
→ rx_fsm_data
→ rx_fsm_finished
→ rx_frame_finished
→ rx_data_out(7:0)
→ rx_nible_counter(11:0)
→ reset
rx_crc_ok →
eth_rx_recaddress
→ phy_rx_clk
→ rx_fsm_idle
→ rx_fsm_data
→ rx_data_out_valid
→ rx_data_out(7:0)
→ rx_nible_counter(11:0)
→ r_rx_promiscous_en
→ r_rx_multicast_en
→ r_rx_mac_address(47:0)
→ reset
rx_address_ok →
eth_rx_tlm
→ phy_rx_clk
→ rx_fsm_idle
→ rx_fsm_start_data
→ rx_fsm_data
→ rx_fsm_finished
→ rx_frame_finished
→ rx_nible_counter(11:0)
→ rx_address_ok
→ rx_crc_ok
→ rx_len_or_type
→ rx_len_or_type_field(15:0)
→ reset
rx_active →
rx_ok →
rx_error →
Rys. 4.9. Struktura wewnętrzna modułu eth_rx.vhd w wersji Fast Ethernet.
Pierwszy etap procedury odbioru realizowany jest przez moduł eth_rx_bitreceiver, którego
zadaniem jest przetwarzanie informacji otrzymywanych z układu PHY w celu wykrycia
poszczególnych pól ramki Ethernet oraz konwersji odbieranych danych z postaci nibli do
pojedynczych bajtów. Wewnętrzny automat stanów generuje dla pozostałych modułów toru RX
sygnały o wykryciu znacznika SFD, zakończenia ramki oraz walidacji odbieranych danych.
Dodatkową funkcją zaimplementowaną w module jest pomiar długości ramek przeprowadzany w celu
weryfikowania ich poprawności. Rysunek 4.10 przedstawia przebiegi czasowe sygnałów modułu
eth_rx_bitreceiver w trakcie odbierania testowej ramki Ethernet.
74
Dane z układu PHY
Sygnalizacja
początku ramki
Dane wyjściowe
Sygnalizacja
kooca ramki
Długośd ramki
Rys. 4.10. Przebiegi czasowe sygnałów modułu eth_rx_bitreceiver dla testowej ramki Ethernet.
Odbierane dane, przetworzone do postaci bajtowej, trafiają do modułu eth_rx_datadecap,
odpowiadającego za detekcję zawartości pola L/T, zarówno dla ramek w formacie podstawowym, jak
również dla ramek znakowanych. Jeżeli wartość pola L/T niesie ze sobą informację o długości ramki,
sygnał rx_len_or_type przyjmuje wartość ‘0’. W przeciwnym wypadku pozostaje on w wysokim
stanie logicznym. Odczytana zawartość pola L/T jest dla każdego z tych przypadków odzwierciedlona
stanem sygnału rx_len_or_type_field.
Wartośd pola L/T
Kontekst pola L/T
Rys. 4.11. Przebiegi czasowe sygnałów modułu eth_rx_datadecap dla przykładowej ramki Ethernet.
W zaprezentowanym na rysunku 4.11 przykładzie sygnał rx_len_or_type jest w stanie wysokim,
zatem oznacza to, że pole L/T określa typ protokołu ramki Ethernet. Wartość sygnału
rx_len_or_type_field wynosi x”0806”, czyli odebrano ramkę ARP.
Tor odbiorczy został zaprojektowany w sposób pozwalający na manualną konfigurację obsługi
ramek rozgłoszeniowych oraz ramek o adresie docelowym MAC różnym od przypisanego do danego
kontrolera. Funkcje te realizuje moduł eth_rx_recaddress. Przetwarzanie wszystkich przychodzących
ramek, z pominięciem analizy zgodności adresów MAC (tzw. tryb promiscous), aktywowane jest
ustawieniem wysokiego stanu logicznego na linii r_rx_promiscous_en. Z kolei akceptacja ramek
rozgłoszeniowych (tzw. tryb multicast) włączana jest sygnałem r_rx_multicast_en. W wypadku
wyłączenia obu trybów dodatkowych, tor RX odbiera jedynie ramki o adresie MAC zgodnym
z wartością
sygnału
konfiguracyjnego
r_rx_mac_address.
Jeżeli
wykryta
zostanie
ramka
o poprawnym adresie moduł aktywuje linię rx_address_ok. Rysunek 4.12 przedstawia przykładowe
przebiegi czasowe sygnałów modułu eth_rx_recaddress w trakcie odbierania ramki Ethernet.
75
Konfiguracji typów
obsługiwanych ramek
Sygnał detekcji poprawnie
zaadresowanej ramki
Rys. 4.12. Przebiegi czasowe sygnałów modułu eth_rx_recaddress dla przykładowej ramki Ethernet.
Ponieważ sygnały r_rx_promiscous_en oraz r_rx_multicast_en są w stanie wysokim, tor odbiorczy
RX akceptuje wszystkie nadchodzące ramki. Stąd też wynika fakt aktywowania sygnału
rx_address_ok niezwłocznie po rozpoczęciu odbierania ramki.
Do jednoznacznego zweryfikowania poprawności każdej z odebranych ramek niezbędne jest
wyliczenie cyklicznego kodu namiarowego CRC. Operacje takie wykonuje moduł eth_rx_crc. Jego
funkcjonowanie opiera się na nocie aplikacyjnej [129]. Jeżeli wartość kodu CRC, obliczona dla pól począwszy od adresu docelowego, a skończywszy na sekwencji kontrolnej FCS (włącznie) - jest
równa residuum x”C704DD7B” heksadecymalnie, odebraną ramkę należy uznać za poprawną [129].
Stan taki sygnalizowany jest wysokim poziomem logicznym na wyjściu rx_crc_ok. Przykładowe
przebiegi czasowe sygnałów modułu eth_rx_crc w trakcie obliczania kodu CRC dla odbieranej ramki
Ethernet zaprezentowano na rysunku 4.13.
Odbierane bajty danych
analizowanej ramki
Potwierdzenie
poprawności kodu CRC
Rys. 4.13. Przebiegi czasowe sygnałów modułu eth_rx_crc dla przykładowej ramki Ethernet.
Moduł eth_rx_tlm analizuje poszczególne sygnały kontrolne z bloków funkcjonalnych toru
RX i na ich podstawie generuje ostateczną informację o poprawności odbieranych ramek. Pod uwagę
brane są następujące czynniki:
 poprawność adresu MAC,
 zgodność długości ramki z wymaganiami definiowanymi przez standard IEEE 802.3,
 zgodność kodu CRC odebranych danych z sekwencją FCS.
Jeżeli wszystkie powyższe punkty są spełnione, moduł eth_rx_tlm po zakończeniu procesu odbierania
ramki (wyjście rx_active w stanie niskim) aktywuje sygnał rx_ok. W przeciwnym wypadku linia
rx_error sygnalizuje błąd odbioru, przyjmując wartość logiczną ‘1’. Rysunek 4.14 przedstawia
przebiegi czasowe sygnałów modułu eth_rx_tlm w trakcie odbierania testowej ramki Ethernet.
76
Adres Mac
zgodny
Sekwencja CRC
zgodna z FCS
Długośd
poprawna
Informacja o poprawnym
zweryfikowaniu ramki
Rys. 4.14. Przebiegi czasowe sygnałów modułu eth_rx_tlm dla przykładowej ramki Ethernet.
4.3.3. Tor nadawczy TX
Zadaniem toru nadawczego, którego schemat blokowy zaprezentowano na rysunku 4.15, jest
odpowiednie przygotowanie ramki Ethernetowej na podstawie danych przekazanych przez klienta
warstwy MAC [108].
Dane
eth_tx_bittran
Konfiguracja
Interfejs
Firewalla
Interfejs MII
Karta sieciowa
Tor nadawczy TX
eth_tx_crc
eth_tx_defer
eth_rx_tlm
Sygnały
kontrolne
eth_tx_backoff
Rys. 4.15. Schemat blokowy toru odbiorczego TX.
Proces ten obejmuje dołożenie niezbędnych pól, takich jak: preambuła, pole startu ramki SFD, w razie
konieczności rozszerzenie ramki do minimalnej dopuszczalnej długości (ang. padding), a na koniec
obliczenie sumy kontrolnej CRC w celu zabezpieczenia danych przed przekłamaniem. Specyfikacja
IEEE 802.3 [40] określa precyzyjnie algorytm funkcjonowania toru nadawania (Rys. 4.16), który stał
się punktem wyjścia do opracowania implementacji sprzętowej. W realizacji praktycznej modelowi
proceduralnemu odpowiada zestaw pięciu modułów opisanych za pomocą języka VHDL:
eth_tx_bittran, eth_tx_crc, eth_tx_defer, eth_tx_backoff oraz eth_tx_tlm. Funkcjonują one zgodnie
z algorytmem CSMA/CD, realizując dwie podstawowe grupy zadań [111] zdefiniowanych
w standardzie:
 enkapsulację danych klienta MAC, obejmującą dołożenie niezbędnych pól, obliczenie
sumy kontrolnej CRC – moduły eth_tx_bittran oraz eth_tx_crc,
77
 zarządzanie transmisją, obejmujące zachowywanie niezbędnych opóźnień czasowych,
wykrywanie
i
obsługiwanie
kolizji,
ponawianie
transmisji
z
wykorzystaniem
mechanizmów backoff, rozszerzenia ramek oraz obsługę trybu burst mode - moduły
eth_tx_tlm, eth_tx_backoff oraz eth_tx_defer.
TransmitFrame
Nie
Transmisja
możliwa?
Tak
Składanie ramki
Tak
Kontynuacja
syg. burst
Nie
Tak
Opóźnianie
ramki
(deffering)
Nie
Wysłanie syg. jam
Start transmisji
Inkrementacja
licznika prób
transmisji
Czy halfDuplex i
Tak
collisionDetect?
Tak
Późna kolizja i
prędkość >
100Mb/s
Nie
Nie
Nie
Transmisja
zakończona?
Tak
Za dużo
prób transmisji?
Nie
Obliczanie backoff
Oczekiwanie
przez czas równy
backoff
Zakończono:
transmitDisabled
Zakończono:
transmitOK
Zakończono:
excessiveCollisionError
Zakończono:
excessiveCollisionError
tylko dla trybu half duplex > 100Mb/s
Rys. 4.16. Algorytm funkcjonowania toru nadawczego TX (na podstawie [40]).
Szczegółowy schemat strukturalny toru TX w wersji Fast Ethernet, uwzględniający wewnętrzne linie
sygnałowe oraz wyprowadzenia poszczególnych interfejsów, przedstawiono na rysunku 4.17. Moduł
eth_tx posiada trzy grupy połączeń z blokami zewnętrznymi: interfejs MII układu PHY (część
nadawcza), interfejs komunikacyjny Firewalla oraz interfejs konfiguracyjny. Szczegółowy opis
funkcji poszczególnych linii interfejsów modułu zamieszczono w dodatku A, punkt 8.3.
78
←
←
←
tx_data_ack_process
←
tx_retransmit_process
moduł eth_rx.vhd
←
←
←r_tx_crc_en
← r_tx_padding_en
Interfejs
konfiguracyjny
←
←
←
←
tx_attempt_cnt_eqlimit ←
tx_attempt_cnt_eq0 ←
tx_backoff_cnt_eq0 ←
r_tx_padding_en ←
r_tx_crc_en ←
tx_enable ←
phy_tx_col ←
phy_tx_crs ←
half_duplex ←
phy_tx_clk ←
← tx_fsm_padding
← tx_fsm_data
← tx_fsm_sfd
← tx_fsm_preamble
← tx_fsm_ifs2
← tx_fsm_ifs1
← tx_fsm_ifs
← tx_fsm_set_defer
← tx_fsm_idle
← phy_tx_clk
→ phy_tx_en
← phy_col
← phy_crs
→ phy_tx_data(3:0)
Interfejs MII
PHY
← tx_fsm_jam
phy_tx_en_process
Interfejs
Firewall’a
eth_tx_tlm
← tx_active
← tx_ok
← tx_fsm_start_backoff
← tx_fsm_start_crc
← tx_fsm_start_jam
← tx_fsm_start_padding
← tx_fsm_start_data
reset ←
← tx_fsm_start_sfd
tx_igp_cnt_eq_ifs2 ←
← tx_fsm_start_preamble tx_igp_cnt_eq_ifs1 ←
tx_igp_cnt_eq_ifs ←
← tx_fsm_start_ifs2
tx_eq_in_frame ←
← tx_fsm_start_ifs1
tx_eq_min_frame ←
← tx_fsm_start_ifs
tx_eq_crc ←
← tx_fsm_start_set_defer
← tx_fsm_start_idle
tx_eq_jam ←
tx_eq_sfd ←
← tx_fsm_backoff
tx_eq_preamble ←
← tx_fsm_crc
→ tx_data_ack
→ tx_retransmit
→ tx_ok
→ tx_running
← tx_enable
← tx_frame_size(10:0)
→ tx_error
← tx_data(7:0)
← reset
← half_duplex
←
Konwersja
nible->bajty
→ tx_fsm_start_data
→ tx_fsm_start_jam
→ tx_fsm_start_crc
→ tx_data(7:0)
→ tx_crc_data(3:0)
→ tx_nible_frame_size(11:0)
→ reset
←
eth_tx_bittran
→ phy_tx_clk
phy_tx_data(3:0) →
→ half_duplex
tx_eq_preamble →
→ tx_fsm_idle
tx_eq_sfd →
tx_eq_jam →
→ tx_fsm_preamble
→ tx_fsm_sfd
tx_eq_crc →
→ tx_fsm_data
tx_eq_min_frame →
tx_eq_in_frame →
→ tx_fsm_padding
tx_nible_counter(11:0) →
→ tx_fsm_jam
→ tx_fsm_crc
→ tx_fsm_start_preamble
eth_tx_crc
→ phy_tx_clk
→ tx_fsm_preamble
→ tx_fsm_data
→ tx_fsm_padding
→ tx_nible_counter(11:0)
tx_crc_data(3:0) →
→ tx_data(7:0)
→ reset
eth_tx_defer
→ phy_tx_clk
→ half_duplex
→ phy_tx_crs
→ tx_fsm_ifs
→ tx_fsm_ifs1
→ tx_fsm_ifs2
→ tx_fsm_start_idle
→ tx_fsm_start_backoff
→ tx_fsm_start_ifs
→ tx_fsm_start_ifs1
tx_igp_cnt_eq_ifs →
tx_igp_cnt_eq_ifs1 →
tx_igp_cnt_eq_ifs2 →
→ tx_fsm_start_ifs2
→ reset
eth_tx_backoff
→ phy_tx_clk
→ tx_fsm_idle
→ tx_fsm_start_jam
→ tx_fsm_jam
→ reset
tx_backoff_cnt_eq0 →
tx_attempt_cnt_eq0 →
tx_attempt_cnt_eqlimit →
Rys. 4.17. Struktura wewnętrzna modułu eth_tx w wersji Fast Ethernet.
79
Pierwszą grupę zadań związanych z enkapsulacją danych klienta MAC realizuje moduł
eth_tx_bittran. Na podstawie informacji sterujących, pochodzących z bloku zarządzającego
eth_tx_tlm, generuje on poszczególne pola ramki Ethernet, takie jak: sekwencja preambuły, SFD
oraz JAM. Moduł dokonuje również niezbędnej konwersji danych klienta MAC z postaci słowa
ośmiobitowego do pojedynczych nibli (kod CRC nie wymaga konwersji, bowiem przesyłany jest od
razu w postaci czterobitowej). Dodatkową funkcjonalnością, zaimplementowaną w omawianym
module, jest główny licznik wysłanych nibli - tx_nible_counter. Jego wartość wykorzystują bloki
wchodzące w skład toru TX do synchronizacji aktualnego położenia w przetwarzanej ramce. Rysunek
4.18 przedstawia przebiegi czasowe sygnałów modułu eth_tx_bittran w trakcie transmisji
przykładowej ramki Ethernet.
Preambuła
Pole SFD
Pole FCS
Dane klienta MAC
Licznik wysłanych
nibli
Rys. 4.18. Przebiegi czasowe sygnałów modułu eth_tx_bittran
dla transmisji przykładowej ramki Ethernet.
Moduł eth_tx_crc wylicza cykliczny kod namiarowy CRC transmitowanych danych w sposób
analogiczny do przypadku omawianego przy okazji analizy funkcjonowania toru RX. Jedyna różnica
sprowadza się do pominięcia etapu porównywania wartości kodu z residuum. Wynik obliczeń jest
wysyłany bezpośrednio do modułu eth_tx_bittran w postaci słów 4-bitowych, począwszy od
najstarszego bitu MSB, tak, aby wypełnić cały obszar sekwencji kontrolnej FCS. Przykładowe
przebiegi czasowe sygnałów modułu eth_rx_crc przedstawiono na rysunku 4.19.
Początek pola
danych klienta MAC
Koniec pola danych
klienta MAC
Transmisja wyliczonego
kodu CRC
Rys. 4.19. Przebiegi czasowe sygnałów modułu eth_tx_crc dla transmisji przykładowej ramki Ethernet.
80
Moduł eth_tx_defer odpowiada funkcjonalnie procesowi Deference w modelu IEEE 802.3
[40] (Rys. 4.20), zarządzającemu opóźnianiem ramki według poniższych reguł:
 tryb Half Duplex - moduł nieustająco monitoruje stan medium (nawet wtedy, gdy ramki
nie są transmitowane), śledząc sygnał obecności nośnej eth_tx_crs (ang. carrier sense)
z układu PHY. Kiedy tylko stwierdzi, że medium jest zajęte, rozpoczyna opóźnienie
rozpoczęcia ewentualnej transmisji. W momencie, kiedy medium staje się wolne (sygnał
eth_tx_crs zmienia wartość na ‘0’ logiczne), moduł kontynuuje opóźnienie przez
wymagany standardem okres równy wartości minimalnej szczeliny czasowej, oddzielającej
kolejno transmitowane ramki (ang. interFrameSpacing). Po tym czasie transmisja jest
rozpoczynana niezależnie od stanu sygnału eth_tx_crs, a po jej zakończeniu (lub
w wypadku, gdy nie ma żadnych ramek do wysłania) moduł rozpoczyna ponowne
monitorowanie stanu medium,
 tryb Full Duplex - moduł nie monitoruje stanu sygnału eth_tx_crs. Po zakończeniu
transmisji ramki odmierza jedynie wymagane opóźnienie równe interFrameSpacing.
Nie
Kanał
zajęty?
Tak
Włącz
opóźnianie
Nie
Kanał
wolny?
Tak
Odczekaj
czas równy
interframe
delay
Wyłącz
opóźnianie
Czy ramka jest
wysyłana
(aktywny syg.
frameWaiting)?
Nie
Tak
Rys. 4.20. Algorytm opóźniania transmisji ramki (ang. deffering) [40].
Na rysunku 4.21 przedstawiono przykładowe przebiegi czasowe dla modułu eth_tx_defer przy
transmisji ramki z szybkością 100 Mb/s w trybie Full Duplex. Dla takich warunków pracy po
zakończeniu transmisji moduł odmierza jedynie czas równy szczelinie interFrameSpacing (0,96 µs).
Start transmisji
Koniec transmisji
Początek opóźniania
Koniec opóźniania
Rys. 4.21. Przebiegi czasowe sygnałów modułu eth_tx_defer dla transmisji przykładowej ramki Ethernet.
81
W module eth_tx_backoff zaimplementowano niezwykle ważny, z punktu widzenia
funkcjonowania sieci opartej o protokół rywalizacyjny CSMA/CD, algorytm z binarno-wykładniczym
rozszerzaniem czasu [72] (ang. binary-expotential backoff), randomizującym czas rozpoczęcia
retransmisji ramki po wystąpieniu kolizji. Ponowienie transmisji opóźnia się o całkowitą
wielokrotność r szczeliny czasowej, równej oknu kolizyjnemu (ang. collision window), definiowanej
jako parametr slotTime. Wartość zwielokrotnienia r stanowi liczbę losową z przedziału:
0  r  2k ,
(4.2)
gdzie k = min(n, 10).
Przy pracy w trybie Full Duplex mechanizm backoff jest nieaktywny. Wówczas sygnał
tx_attempt_cnt_eq_0, informujący o zerowej wartości licznika prób transmisji, pozostaje w wysokim
stanie
logicznym
a
sygnał
przekroczenia
liczby
dopuszczalnych
ponowień
transmisji
(tx_attempt_cnt_eq_limit) w stanie niskim. Dopiero dla trybu Half Duplex, w przypadku
występowania kolizji, moduł eth_tx_backoff zapewnia właściwe rozłożenie dostępu do medium
fizycznego. Randomizacja momentu wznowienia nadawania daje możliwość wykorzystania wolnego
kanału przez inne stacje, równolegle funkcjonujące w sieci Ethernet. Rysunek 4.22 pokazuje reakcję
modułu eth_tx_backoff na zgłoszenie wystąpienia kolizji w medium.
Kolizja – wysyłany
sygnał JAM
Inkrementacja licznika
czasu slotTime
Przepisanie losowej ilości
okresów slotTime do odmierzenia
Rys. 4.22. Przebiegi czasowe sygnałów modułu eth_tx_backoff w momencie wystąpienia kolizji
w trybie Half Duplex.
Aktywowanie sygnału phy_tx_crs powoduje przejście głównego automatu w module eth_tx_tlm
w stan tx_fsm_jam, który inicjuje wysyłanie przez PHY sekwencji JAM. Równocześnie w module
eth_tx_backoff następuje przepisanie pseudolosowej wartości liczby przedziałów czasowych slotTime
z sygnału back_random do licznika back_backoff_cnt oraz rozpoczęcie inkrementowania licznika
82
back_slot_cnt, odmierzającego czas 512 okresów bitowych (czyli 128 taktów zegara phy_tx_clk
o częstotliwości 25 MHz dla szybkości 100Mb/s lub 2,5 MHz dla szybkości 10 Mb/s).
Zakooczenie odmierzania
pojedynczego okresu slotTime
Dekrementacja licznika
back_backoff_cnt
Rys. 4.23. Dekrementacja licznika back_backoff_cnt po odmierzeniu czasu slotTime.
W momencie zakończenia odmierzania pojedynczego okresu slotTime (stan licznika
back_slot_cnt wynosi „7F” heksadecymalnie, czyli 128 dziesiętnie), w przypadku, gdy wartość
licznika back_backoff_cnt jest większa od zera, nastąpi jej dekrementacja (Rys. 4.23). Cały proces
trwa aż do momentu, kiedy licznik back_backoff_cnt osiągnie wartość zero. Wówczas aktywuje się
sygnał tx_backoff_cnt_eq_cnt, co oznacza koniec procedury losowego opóźnienia ponowienia
transmisji (Rys. 4.24).
Wyzerowanie licznika
back_backoff_cnt aktywuje
sygnał tx_backoff_cnt_eq_0
Rys. 4.24. Zakończenie procedury opóźniania backoff.
83
Proces ponawiania transmisji może być wykonany ściśle określoną liczbę razy. Definiuje ją parametr
attemptLimit (tabela 4.1), który dla wszystkich szybkości pracy wynosi 16. Po wystąpieniu kolizji
w trakcie ostatniej próby nadania ramki aktywowany jest sygnał tx_attemp_eq_limit, a tym samym tor
TX zgłasza błąd transmisji tx_error. Sytuacja taka zaprezentowana została na rysunku 4.25, gdzie
wyraźnie widoczne jest zwiększanie czasu pomiędzy kolejnymi próbami retransmisji ramki zgodnie
z algorytmem binarno-wykładniczym.
Kolejne próby
ponowienia transmisji
Inkrementacja licznika
prób dostępu
back_attempt_cnt
Kolizja w trakcie 16
próby aktywuje sygnał
tx_attempt_cnt_eq_limit
Rys. 4.25. Przekroczenie dopuszczalnej liczby prób ponowienia transmisji.
Kluczowy moduł toru transmisyjnego eth_tx_tlm realizuje mechanizmy zarządzania dostępem
do medium transmisyjnego, zgodnie z funkcjonalnością protokołu rywalizacyjnego CSMA/CD,
w szczególności obsługę kolizji. W trybie Half Duplex, w obrębie okna kolizyjnego moduł monitoruje
stan sygnału wystąpienia kolizji, pochodzącego z warstwy fizycznej. Rozmiar okna kolizyjnego jest
uzależniony od parametrów medium transmisyjnego i musi być większy od sumy podwojonego czasu
maksymalnego opóźnienia propagacyjnego oraz maksymalnego czasu trwania sygnału zakłócającego
JAM, wysyłanego w momencie wykrycia kolizji. Takie przedłużanie transmisji ma na celu
zapewnienie właściwej propagacji informacji o wystąpieniu kolizji do wszystkich stacji
współdzielących medium fizyczne.
Oprócz opisanej powyżej funkcjonalności w module eth_tx_tlm zaimplementowano główny automat
stanów FSM (ang. Finite State Machine) synchronizujący pracę wszystkich elementów toru
nadawczego. Graf przejść automatu przedstawiono na rysunku 4.26.
84
TxTransmitEnabled = '0'
TxTransmitEnabled = '1' and
((HalfDuplex = '1' and PHYTxCarrier = '0') or
HalfDuplex = '0')
IDLE
TxTransmitEnabled = '1' and
HalfDuplex = '1' and
PHYTxCarrier = '1'
BackOffCntEq0 = '1' and
AttemptCntEqLimit = '1'
IGPCounterEqIFS = '1' and
((HalfDuplex = '0') or
(HalfDuplex = '1' and
(AttemptCntEqLimit = '1' or
TxOK = '1'))
IGPCounterEqIFS2 = '1' and
PHYTxCarrier = '1'
AttemptCntEq0 = '1' and
PHYTxCarrier = '0'
SetDefer
BackOffCntEq0 = '1' and
AttemptCntEqLimit = '0' and
PHYTxCarrier = '1'
WaitIFS1
IGPCounterEqIFS1 = '1'
AttemptCntEq0 = '0' and
PHYTxCarrier = '0'
PHYTxCarrier = '1' and
AttemptCntEq0 = '0' and
IGPCounterEqIFS = '1' and
AttemptCntEqLimit = '0'
WaitIFS
BackOffCntEq0 = '1' and
PHYTxCarrier = '0' and
AttemptCntEqLimit = '0'
WaitIFS2
IGPCounterEqIFS2 = '1' and
PHYTxCarrier = '0'
Preamble
BackOff
collisionDetect = '1'
IGPCounterEqIFS = '1' and
PHYTxCarrier = '0' and
HalfDuplex = '1' and
AttemptCntEqLimit = '0' and
TxOK = '0'
EqPreambleLenght = '1' and
collisionDetect = '0'
EqJamLenght = '1' and
BackOffCntEq0 = '1'
EqJamLenght = '1' and
BackOffCntEq0 = '0'
SFD
Jam
EqSFDLenght = '1' and
collisionDetect = '0'
EqDataLenght = '1' and
PaddingNeeded = '0' and
collisionDetect = '0'
Data
collisionDetect = '1'
Padding
EqCRCLenght = '1'
CRC
EqDataLenght = '1' and
PaddingNeeded = '1' and
collisionDetect = '0'
EqPadLenght = '1' and
collisionDetect = '0'
Rys. 4.26. Graf przejść automatu FSM sterującego torem TX.
4.3.4. Moduł kontrolny
Moduł kontrolny eth_tx_control dostarcza informacji o aktualnych parametrach warstwy
fizycznej medium transmisyjnego pochodzących z PHY, niezbędnych do poprawnej konfiguracji
pracy torów RX i TX. Pozwala również zmieniać ustawienia wewnętrznych rejestrów układu PHY,
a tym samym modyfikować tryb funkcjonowania kontrolera MAC. Na etapie projektowym przyjęto
85
założenie, aby implementacja omawianego modułu była możliwie zwarta i jednocześnie nie
zajmowała dużej liczby zasobów układowych [109].
Ze względu na opracowanie dwóch różnych wersji kart interfejsów sieciowych, opisanych
szczegółowo w rozdziale 3.5, zrealizowana praktycznie implementacja sprzętowa modułu kontrolnego
może pracować w dwóch trybach, dostosowanych do funkcjonalności układów PHY, z którymi
współpracuje:
 tryb cyklicznego odświeżania – starszy typ układów PHY, np. RTL8201BL
wykorzystany do budowy kart Fast Ethernet, pozwala odczytywać konfigurację rejestrów
wewnętrznych, lecz nie informuje kontrolera MAC o zmianie parametrów w nich
zapisanych. Z tego powodu moduł kontrolny musi cyklicznie analizować konieczne
w danym przypadku rejestry układu PHY, tak, aby nieustannie aktualizować informacje
o stanie medium fizycznego;
 tryb z obsługą przerwań – nowoczesne układy PHY, np. DP83865 wykorzystany do
opracowania kart Gigabit Ethernet, umożliwiają powiadamianie kontrolera MAC
o zmianach wybranych rejestrów poprzez konfigurowalne przerwania. W tym przypadku
kontroler w trakcie procedur startowych przeprowadza konfigurację przerwań układu PHY,
a następnie oczekuje jedynie na zgłoszenie wystąpienia zmian w warunkach pracy medium.
Wybór odpowiedniego trybu działania modułu kontrolnego dokonywany jest przez odpowiednie
ustawienie sygnału r_mii_config. Opis funkcji poszczególnych sekcji konfiguracyjnych przedstawiono
na rysunku 4.27.
Sygnał r_mii_config
b11
b10
b9
b8
b7
b6
b5
b4
b3
b2
b1
b0
LSB
Zarezerwowane
b12
Tryb pracy modułu
kontrolnego
b13
zmiana okresu
odświeżania stanu
rejestrów PHY
b14
Współczynnik
podziału zegara
b15
Adres PHY
MSB
Rys. 4.27. Funkcje poszczególnych sekcji sygnału r_mii_config.
Bity od 15 do 11 określają adres PHY, z którym będzie się komunikował moduł kontrolny
(funkcjonowanie szeregowej magistrali MDIO zostało szerzej omówione w rozdziale 3.5.1). Bity od
10 do 3 definiują współczynnik podziału d zegara systemowego fsys, wyznaczając tym samym
częstotliwość odświeżania rejestrów PHY w trybie cyklicznym. Dopuszczalne współczynniki podziału
zawierają się w zakresie od 1 do 255. Częstotliwość odświeżania fr określa wówczas zależność:
fr 
f sys
d  2 20
.
(4.3)
86
Wartość bitu 2 definiuje tryb pracy modułu: ‘0’ – obsługa przerwań, ‘1’ – cykliczne odświeżanie. Do
obsługi
szeregowej
magistrali
MDIO
wykorzystano
moduł
eth_mii,
opracowany
przez
G. Sułkowskiego [108]. Przykład przebiegów czasowych w trakcie sekwencji startowej kontrolera
MAC (tryb z obsługą przerwań) zaprezentowano na rysunku 4.28.
Maskowanie
przerwao
Zerowanie
przerwao
Komunikacja
poprzez linię MDIO
Odczyt rejestrów
PHY
Tryb
połączenia
Oczekiwanie na
przerwanie PHY
Prędkośd
połączenia
Stan
połączenia
Rys. 4.28. Przykład przebiegów czasowych modułu eth_control.
4.3.5. Wyniki implementacji
Opracowany sprzętowy kontroler MAC w wersji Fast Ethernet został zaimplementowany na
dwóch platformach testowych FPGA z układem Xilinx Spartan 2E XC2S200 oraz Xilinx Virtex II Pro
XC2VP30, zaprezentowanych w rozdziałach 3.3 oraz 3.4. Wyniki sumarycznego wykorzystania
zasobów sprzętowych logiki reprogramowalnej oraz uzyskanych parametrów czasowych kompletnego
kontrolera MAC w wersji Fast Ethernet przedstawiono w tabeli 4.2. Pełne wyniki implementacji
poszczególnych modułów składowych kontrolera zamieszczono w dodatku B, punkty 9.1 do 9.4.
Tab. 4.2. Podsumowanie wykorzystania zasobów sprzętowych układów FPGA
oraz uzyskane parametry czasowe kontrolera MAC w wersji Fast Ethernet.
Rodzaj zasobów
Spartan
Virtex
Typ układu 2s200epq208-7 2vp30ff896-7
Liczba bloków Slice
295
329
Liczba 4-wejściowych LUT
555
610
547
602
8
8
użytych jako logika
użytych jako rejestry przesuwne
Parametry czasowe
Maks. częstotliwość
Maks. opóźnienie ścieżki kombinacyjnej
74,705 MHz 191,953 MHz
17,511 ns
6,864 ns
87
Zapotrzebowanie na zasoby sprzętowe logiki reprogramowalnej różni się nieznacznie
pomiędzy układem Spartan a Virtex. Natomiast uzyskana maksymalna częstotliwość pracy jest
zdecydowanie większa w wypadku bardziej zaawansowanego technicznie układu Virtex. Jednak
należy podkreślić, że zarówno jedna, jak i druga implementacja spełnia z nadmiarem wymagania
wydajnościowe standardu Fast Ethernet wykorzystującego zegar o maksymalnej częstotliwości
25 MHz.
4.4. Sprzętowy kontroler MAC - wersja Gigabit Ethernet
Główne różnice funkcjonalne pomiędzy sprzętowymi implementacjami kontrolerów MAC
w wersjach Fast Ethernet oraz Gigabit Ethernet obejmują:
 wykorzystywanie pełnego 8-bitowego interfejsu GMII,
 zwiększenie maksymalnej częstotliwości sygnału zegarowego do 125 MHz,
 możliwość pracy w seryjnym trybie transmisji (ang. burst mode),
 zaimplementowanie mechanizmów rozszerzenia nośnej (ang. carrier extension).
Konieczność tak znacznego zwiększenia częstotliwości zegara (z 25 MHz w wersji Fast Ethernet aż
do 125 MHz w wersji Gigabit) oraz zastosowania 8-bitowego interfejsu PHY GMII (w porównaniu do
4-bitowego MII) wyniknęły z 10-krotnego zwiększenia przepustowości kanału komunikacyjnego.
Nową funkcjonalnością jest również tryb burst mode, który przy szybkości 1000 Mb/s Half Duplex
pozwala na opcjonalną transmisję serii ramek bez kontrolowania stanu medium fizycznego
(Rys. 4.29). Po zakończeniu transmisji jednej ramki stacja nadawcza może rozpocząć wysyłanie
kolejnej, nie rywalizując o dostęp do medium. Jest to możliwe, ponieważ pozostałe stacje kontynuują
proces opóźniania (ang. defer), oczywiście, o ile pierwsza stacja nie dopuści do powstania przerw
między ramkami (medium nie może być w stanie idle). Aby taka sytuacja nie wystąpiła, stacja
wypełnia odstępy międzyramkowe specjalnymi bitami rozszerzeń (ang. extention bits), które są przez
stację odbiorczą w łatwy sposób odróżniane od właściwych danych. Maksymalna długość sekwencji
burst definiowana jest przez parametr burstLimit (Tab. 4.1). Pierwsza ramka w trybie burst może być
w razie konieczności uzupełniona bitami rozszerzeń, natomiast kolejno nadawane ramki nie wymagają
ich dodawania. W poprawnie działającej sieci kolizja nie może wystąpić po zakończeniu transmisji
pierwszej ramki wraz z rozszerzeniem. Z tego powodu kontroler MAC potraktuje każde kolizje
występujące po wysłaniu pierwszej ramki sekwencji lub po osiągnięciu okresu slotTime w trakcie
transmisji pierwszej ramki jako tzw. późne kolizje (ang. late collisions).
Ramka MAC z rozszerzeniem
InterFrame Ramka MAC InterFrame
Ramka MAC
burstLimit
okres zajętości medium
Rys. 4.29. Tryb transmisji seryjnej burst mode [40].
88
Dodatkową funkcjonalnością, nie występującą w kontrolerze Fast Ethernet, jest tzw.
rozszerzanie nośnej (ang. carrier extention) dla trybu pracy 1000 Mb/s Half Duplex (Rys. 4.30),
wynikające z niedostosowania okresu slotTime do wymagań topologii sieci Gigabit Ethernet.
Używając rozszerzeń nośnej, możliwym staje się zwiększenie tego przedziału czasu bez zmian
minimalnej długości ramki minFrameSize. Jeżeli długość wysyłanej ramki jest mniejsza od okresu slot
time, dodawane są do niej specjalne bity rozszerzeń, tak, aby sumarycznie osiągnąć wymagany
standardem rozmiar. Rozszerzanie nośnej realizowane jest jedynie wówczas, gdy układ PHY wspiera
taką funkcjonalność. Maksymalna długość rozszerzenia wynosi: slotTime – minFrameSize.
Preambuła
SFD
DA
SA
L/T
Dane/PAD
FCS
Rozszerzenie
minFrameSize
slotTime
okres obliczania FCS
próg występowania późnych kolizji (slotTime)
okres zajętości medium
Rys. 4.30. Mechanizm rozszerzania nośnej [40].
4.4.1. Schemat blokowy
Znaczne zwiększenie przepustowości kanału komunikacyjnego dla trybu Gigabit Ethernet
oraz implementacja opisanych powyżej dodatkowych funkcjonalności wymusiły konieczność
reorganizacji i optymalizacji wydajnościowej wszystkich modułów wchodzących w skład kontrolera
MAC w stosunku do opracowanej pierwotnie wersji Fast Ethernet. Z tego powodu zmianie uległ
również typ zewnętrznego interfejsu komunikacyjnego Firewalla, którego koncepcja działania oparta
została o magistralę LocalLink [130]. Na najwyższym poziomie organizacji kontrolera (Rys. 4.31)
zachowano podział na trzy główne bloki:
 tor odbiorczy RX,
 tor transmisyjny TX,
 moduł kontrolny.
Tor nadawczy TX
(moduł eth_tx)
Blok kontrolny
(moduł eth_control)
Konfiguracja Interfejs Local Link
Kontroler
Kontroler MAC
MAC
Tor odbiorczy RX
(moduł eth_rx)
Interfejs
InterfejsGMII
MII
Karta sieciowa
Układ PHY
Rys. 4.31. Schemat blokowy sprzętowego kontrolera MAC w wersji Gigabit Ethernet.
89
Szczegółowa struktura kontrolera MAC uwzględniająca wewnętrzne linie sygnałowe
oraz wyprowadzenia poszczególnych interfejsów została przedstawiona na rysunku 4.32. W wersji
Gigabit Ethernet kontroler posiada trzy grupy połączeń z modułami zewnętrznymi: interfejs GMII
układu PHY, interfejs komunikacyjny Firewalla oraz interfejs konfiguracyjny. Dokładny opis funkcji
poszczególnych sygnałów kontrolera MAC zawarto w dodatku A, punkt 8.4.
→ phy_rx_clk
→ phy_crs
→ phy_rx_error
→ phy_rx_dv
→ phy_rx_data(7:0)
→ phy_col
← phy_tx_en
← phy_tx_error
← phy_tx_data(7:0)
← phy_int_n
← phy_mdc
↔ phy_mdio
← phy_reset_n
mac_ce_in ←
sys_clk ←
reset ←
rx_data_out(31:0) →
rx_rem_out(3:0) →
rx_sof_out →
rx_eof_out →
rx_rd_en_in ←
rx_rdy_out →
rx_ok_out →
rx_err_out →
rx_tag_out →
rx_lenght_out(10:0) →
sys_clk ←
reset ←
rx_data_out(31:0) →
rx_rem_out(3:0) →
rx_sof_out →
rx_eof_out →
rx_ce_in ←
rx_rd_en_in ←
rx_rdy_out →
rx_ok_out →
rx_err_out →
rx_tag_out →
rx_lenght_out(10:0) →
rx_pause_cnt_eq0 →
tx_data_in(31:0) ←
tx_rem_in(3:0) ←
tx_sof_in ←
tx_eof_in ←
tx_wr_en_in ←
tx_rdy_out →
tx_ok_out →
tx_err_out →
tx_lenght_in ←
cfg_rx_mac_addr(47:0) ←
cfg_rx_prmsc_en ←
cfg_rx_mltc_en ←
cfg_speed(1:0) ←
cfg_link ←
cfg_rx_mac_addr(47:0) ←
cfg_rx_prmsc_en ←
cfg_rx_mltc_en ←
cfg_tx_pause_en ←
cfg_mii(15:0) ←
eth_tx
→ phy_tx_clk
← phy_gtx_clk
→ phy_crs
→ phy_col
← phy_tx_en
← phy_tx_error
← phy_tx_data(7:0)
sys_clk ←
reset ←
tx_data_in(31:0) ←
tx_rem_in(3:0) ←
tx_sof_in ←
tx_eof_in ←
tx_ce_in ←
tx_wr_en_in ←
tx_rdy_out →
tx_ok_out →
tx_err_out →
tx_lenght_in ←
tx_pause_cnt_eq0 ←
stat_speed(1:0) →
stat_link →
stat_duplex →
KONFIGURACJA
INTERFEJS PHY GMII
eth_rx
→ phy_rx_clk
→ phy_crs
→ phy_rx_error
→ phy_rx_dv
→ phy_rx_data(7:0)
→ phy_tx_clk
← phy_gtx_clk
INTERFEJS LOCAL LINK
moduł eth_mac.vhd
cfg_tx_pause_en ←
cfg_speed(1:0) ←
cfg_link ←
cfg_duplex ←
eth_control
sys_clk ←
reset ←
mii_en_in ←
← phy_int_n
← phy_mdc
↔ phy_mdio
cfg_mii(15:0) ←
cfg_link →
cfg_speed(1:0) →
cfg_duplex →
<= '0' when reset = reset_level
else '1';
Rys. 4.32. Struktura wewnętrzna modułu eth_mac.vhd w wersji Gigabit Ethernet.
4.4.2. Tor odbiorczy Rx
W skład toru odczytu RX Gigabit Ethernet, którego schemat blokowy przedstawiono na
rysunku 4.33, wchodzi siedem modułów: eth_rx_bitreceive, eth_rx_pattern_detect, eth_rx_crc,
eth_rx_frame_control, eth_rx_fsm, eth_rx_pause_control, eth_rx_fifo_control realizujących wspólnie
proces
odczytu
danych
z
interfejsu
sieciowego
zgodnie
z
modelem
proceduralnym
wyspecyfikowanym w standardzie IEEE 802.3 [40] .
90
eth_rx_fifo_control
eth_rx_pattern_detect
eth_rx_frame_control
eth_rx_crc
eth_rx_fsm
Interfejs
LocalLink
eth_rx_bitreceiver
eth_rx_pause_control
Konfiguracja
Interfejs GMII
Karta sieciowa
Tor odbiorczy RX
Rys. 4.33. Schemat blokowy toru odbiorczego RX w wersji Gigabit Ethernet.
Część funkcjonalności realizowanych przez elementy składowe toru RX jest tożsama
z odpowiednikami wersji Fast Ethernet, omówionymi szczegółowo w rozdziale 4.3.2. Jednakże ze
względu na zdecydowanie większe wymagania wydajnościowe standardu Gigabit Ethernet, a co za
tym idzie, większą częstotliwość pracy poszczególnych modułów, już na etapie tworzenia koncepcji
budowy kontrolera koniecznym okazało się zrewidowanie wcześniej przyjętych rozwiązań. Celem
tych zabiegów było przede wszystkim zoptymalizowanie szybkości oraz stabilności działania
modułów przy jednoczesnej minimalizacji ilości zasobów sprzętowych układów reprogramowalnych
FPGA, niezbędnych do ich implementacji. Wykorzystanie zegara o częstotliwości 125 MHz zwiększa
istotnie znaczenie opóźnień wnoszonych przez logikę kombinacyjną, szczególnie w sytuacji
synchronizacji działania wielu bloków funkcjonalnych przetwarzających potokowo odbierane dane.
Warto przy tej okazji zwrócić uwagę na fakt, że optymalizacja sprzętowej implementacji
kontrolerów MAC jest zagadnieniem bardzo szerokim, wykraczającym poza ramy niniejszej
rozprawy. W wypadku systemu bezpieczeństwa Firewall kontroler jest jedynie niewielkim
fragmentem złożonej architektury, w której wiele elementów decyduje o całkowitej efektywności
przetwarzania danych. Z tego powodu w toku prac badawczych większy nacisk położono na kwestie
realizacji szybkiego sprzętowego klasyfikatora pakietów. Natomiast doświadczenia zebrane podczas
opracowywania kontrolerów MAC są niezwykle cenne, pozwalają bowiem w perspektywie na dalsze
udoskonalanie projektu i dostosowywanie go do dynamiczne rozwijającego się standardu Ethernet (od
roku 2007 trwają prace nad wersją standardu IEEE P802.3ba, który będzie pozwalał na transmisję
danych z prędkościami rzędu 100 Gb/s [105]).
Szczegółowy schemat blokowy toru RX w wersji Gigabit Ethernet, uwzględniający
wewnętrzne linie sygnałowe oraz wyprowadzenia poszczególnych interfejsów, przedstawiono na
rysunku 4.34. Moduł eth_rx posiada trzy grupy połączeń z blokami zewnętrznymi: interfejs GMII
układu PHY (część odbiorcza), interfejs komunikacyjny Firewalla oraz interfejs konfiguracyjny.
Funkcje poszczególnych sygnałów modułu zawarto w dodatku A, punkt 8.5.
91
INTERFEJS PHY GMII
→ phy_rx_clk
→ phy_rx_dv
→ phy_rx_error
→ phy_crs
→ phy_rx_data(7:0)
eth_rx_bitreceiver
rx_data_8_val →
→ phy_rx_clk
rx_data_8(7:0) →
→ phy_rx_dv
rx_data_32_val →
→ phy_rx_data(7:0)
rx_data_32(31:0) →
rx_data_32_rem(1:0) →
rx_byte_counter(10:0) →
rx_data_32_val_d →
rx_data_32_d(31:0) →
rx_data_32_rem_d(1:0) →
rx_byte_counter_d(10:0) →
→ rx_read_enable
→ rx_state
→ rx_next_state
→ rx_sfd_detect
→ cfg_speed(1:0)
→ reset
eth_rx_pattern_detect
→ phy_rx_clk
→ rx_state
→ rx_next_state
→ rx_byte_counter(10:0)
→ rx_data_8_val
→ rx_data_8(7:0)
rx_crc_ok →
rx_sfd_detect →
rx_src_detect →
rx_lt_detect →
rx_data_detect →
rx_tag_detect →
rx_mac_detect →
rx_bcast_detect →
rx_pause_detect →
rx_under_len →
rx_over_len →
eth_rx_crc
→ cfg_rx_mac_addr(47:0)
→ reset
→ phy_rx_clk
→ rx_state
→ rx_next_state
→ rx_data_8_val
→ rx_data_8(7:0)
→ reset
moduł eth_rx.vhd
rx_state →
rx_next_state →
rx_frame_ok →
rx_frame_err →
eth_rx_frame_control
→ rx_crc_ok
→ rx_mac_detect
→ rx_bcast_detect
→ rx_pause_detect
→ rx_under_len
→ rx_over_len
eth_rx_fsm
→ cfg_rx_prmsc_en
→ cfg_rx_mltc_en
→ reset
→ phy_rx_clk
→ phy_rx_dv
→ rx_sfd_detect
→ rx_src_detect
→ rx_lt_detect
→ rx_data_detect
→ rx_read_enable
→ cfg_speed(1:0)
→ cfg_link
→ reset
rx_read_enable →
rx_data_out(31:0) →
rx_rem_out(3:0) →
rx_sof_out →
rx_eof_out →
eth_rx_fifo_control
→ phy_rx_clk
→ phy_rx_dv
→ phy_rx_error
→ phy_crs
rx_rdy_out →
→ rx_state
rx_ok_out →
→ rx_next_state
rx_err_out →
→ rx_tag_detect
rx_tag_out →
→ rx_frame_ok
rx_lenght_out(10:0) →
→ rx_frame_err
→ rx_data_32_val_d
→ rx_data_32_d(31:0)
→ rx_data_32_rem_d(1:0)
→ rx_byte_counter_d(10:0)
→ rx_ce_in
→ rx_rd_en_in
→ cfg_link
→ sys_clk
→ reset
rx_pause_cnt_eq0 →
eth_rx_pause_control
→ phy_rx_clk
→ rx_state
→ rx_next_state
→ rx_pause_detect
→ rx_frame_ok
→ rx_frame_err
→ rx_data_32_val
→ rx_data_32(31:0)
→ rx_byte_counter(10:0)
→ cfg_link
→ cfg_speed(1:0)
→ reset
rx_data_out(31:0) →
rx_rem_out(3:0) →
rx_sof_out →
rx_eof_out →
rx_ok_out →
rx_rdy_out →
rx_err_out →
rx_tag_out →
rx_lenght_out(10:0) →
sys_clk ←
reset ←
rx_rd_en_in ←
rx_ce_in ←
rx_pause_cnt_eq0 →
cfg_link ←
cfg_rx_mltc_en ←
cfg_rx_prmsc_en ←
cfg_rx_mac_addr(47:0) ←
cfg_speed(1:0) ←
INTERFEJS LOCAL LINK
KONFIGURACJA
Rys. 4.34. Struktura wewnętrzna modułu eth_rx w wersji Gigabit Ethernet.
92
Proces przetwarzania danych odbieranych z układu PHY rozpoczyna się w module
eth_rx_bitreceiver. Jego podstawowym zadaniem jest konwersja 4-bitowych nibli (dla szybkości
10/100 Mb/s) lub pełnych bajtów (dla szybkości 1000 Mb/s) do 32-bitowego słowa wyjściowego
nieopóźnionego rx_data_32 oraz opóźnionego o cztery bajty rx_data_32_d. Takie rozwiązanie
wynika z konieczności dostarczenia do modułu eth_rx_fifo_control informacji walidującej odebraną
ramkę wraz z odebraniem ostatniego bitu danych klienta MAC. Ponieważ ramkę kończy 4-bajtowa
sekwencja FCE (pozwalająca na ostateczną weryfikację poprawności), niezbędne jest wprowadzenie
odpowiedniego opóźnienia względem pierwotnego strumienia danych. Przełączanie trybu pracy
pomiędzy Fast a Gigabit Ethernetem dokonywane jest na podstawie informacji pochodzących z układu
PHY przekazywanych do modułu sygnałem cfg_speed. Dodatkowo w module zaimplementowano
główne
liczniki
odbieranych
bajtów:
rx_byte_counter
(nieopóźniony)
i rx_byte_counter_d
(opóźniony), pozwalające na synchronizację poszczególnych bloków toru RX. Rysunek 4.35
przedstawia przykładowe przebiegi czasowe sygnałów modułu eth_rx_bitreceiver w trakcie odbierania
ramki Ethernet.
Sygnał sterujące z głównego FSM
kontrolującego odbiór
poszczególnych pól ramki
32-bitowe dane nieopóźnione
Sygnały walidacji danych
32-bitowe dane opóźnione
Rys. 4.35. Przebiegi czasowe sygnałów modułu eth_rx_bitreceiver
w trakcie odbierania przykładowej ramki Ethernet.
W wersji Gigabit Ethernet funkcje detekcji poszczególnych pól oraz typów odbieranych
ramek zgrupowano w module eth_rx_pattern_detect. Sygnalizuje on następujące zdarzenia:
 detekcję sekwencji SFD – aktywny sygnał rx_sfd_detect,
 detekcję pola adresu źródłowego MAC – aktywny sygnał rx_src_detect,
 wykrycie pola Lenght/Type – aktywny sygnał rx_lt_detect,
 osiągnięcie początku pola danych – aktywny sygnał rx_data_detect,
 detekcję ramki znakowanej – aktywny sygnał rx_tag_detect,
 detekcję ramki z polem adresu docelowego MAC odpowiadającym danemu kontrolerowi
(zgodnym ze stanem linii cfg_rx_mac_add) – aktywny sygnał rx_mac_detect,
93
 wykrycie adresu rozgłoszeniowego typu broadcast – aktywny sygnał rx_bcast_detect,
 wykrycie ramki kontroli przepływu typu PAUSE – aktywny sygnał rx_pause_detect,
 nieosiągnięcie minimalnej wymaganej standardem długości ramki – aktywny sygnał
rx_under_len,
 przekroczenie dopuszczalnej długości ramki – aktywny sygnał rx_over_len.
Rysunek 4.36 przedstawia przykładowe przebiegi czasowe sygnałów modułu eth_rx_pattern_detect
w trakcie odbierania ramki Ethernet.
Detekcja pola
SFD
Detekcja pola
adresu MAC
Detekcja pola
L/T
Detekcja pola
danych
Osiągnięto
minimalną długośd
Odebrano ramkę
typu broadcast
Rys. 4.36. Przebiegi czasowe sygnałów modułu eth_rx_pattern_detect
w trakcie odbierania przykładowej ramki Ethernet.
Weryfikacja poprawności odbieranych ramek, w stosunku do wymagań narzucanych przez
standard oraz aktualnie obowiązujące parametry konfiguracyjne realizowana jest przez moduł
eth_rx_frame_control. Do tego celu wykorzystywane są sygnały: rx_mac_detect, rx_bcast_detect,
rx_pause_detect,
rx_under_len,
rx_over_len,
pochodzące
z
opisanego
wcześniej
bloku
eth_rx_pattern_detect oraz sygnał eth_crc_ok generowany w module eth_rx_crc, funkcjonującym
identycznie jak w kontrolerze typu Fast Ethernet (patrz rozdział 4.3.2). Jeżeli dla zadanej konfiguracji
toru RX wszystkie wymagane standardem parametry są spełnione, aktywowany jest sygnał
rx_frame_ok (Rys. 4.37). W przeciwnym wypadku zgłoszony zostaje błąd rx_frame_error, niezbędny
do powiadomienia pozostałych bloków przetwarzających odbierane dane o konieczności zignorowania
danej ramki Ethernet.
Potwierdzenie poprawności
odebranej ramki
Rys. 4.37. Przebiegi czasowe sygnałów modułu eth_rx_frame_control
w trakcie odbierania przykładowej ramki Ethernet.
94
Działaniem toru RX steruje główny automat stanów FSM zaimplementowany w module
eth_rx_fsm. Na podstawie informacji o detekcji poszczególnych pól odbieranej ramki, pochodzących
z bloku eth_rx_pattern_detect, generuje on sygnały kontrolne synchronizujące proces przetwarzania
danych przez wszystkie elementy toru odbiorczego.
Rysunek 4.38 przedstawia przebiegi czasowe sygnałów modułu eth_rx_fsm w trakcie odbierania
przykładowej ramki Ethernet.
Sygnalizacja detekcji
poszczególnych pól ramki
Sygnał kodujący stan automatu, sterujący
poszczególnymi modułami toru RX
Rys. 4.38. Przebiegi czasowe sygnałów modułu eth_rx_fsm
w trakcie odbierania przykładowej ramki Ethernet.
Standard IEEE 802.3 [40] definiuje w Aneksie 31B specjalny typ ramek kontrolnych,
zwanych PAUSE Frame. Ich zadaniem jest przesyłanie do stacji nadającej w trybie Full Duplex
żądania wstrzymania transmisji na określony przedział czasu, zdefiniowany zawartością specjalnego
pola informacyjnego ramki. Ramka PAUSE posiada zawsze stały, multicastowy adres wynoszący
heksadecymalnie 01-80-C2-00-00-01. Pole określające czas wstrzymania transmisji złożone jest
z dwóch bajtów danych i może przyjmować wartości od 0 do 65535 kwantów, tzw. pause_quanta,
czyli przedziałów czasu niezbędnego do wysłania porcji 512 bitów (specyficzny dla każdej
z dopuszczalnych szybkości pracy).
W opracowanym rozwiązaniu funkcjonalność obsługi ramek typu PAUSE zaimplementowano
w module eth_rx_pause_control. Po odebraniu żądania wstrzymania transmisji moduł rozpoczyna
odliczanie kwantów czasu, przepisując wartość pause_quanta do specjalnego licznika. Zakończenie
odmierzania
opóźnienia sygnalizowane jest
przez wysoki
poziom logiczny na
wyjściu
rx_pause_cnt_eq_0. Informacja ta przekazywana jest dalej do toru nadawczego, umożliwiając
kontynuowanie transmisji danych.
Ostatnim z elementów składowych toru odbiorczego jest moduł eth_rx_fifo_control
odpowiadający za właściwą synchronizację dwóch domen zegarowych, obejmujących zegar układu
PHY rx_clk taktujący cały blok RX (125MHz dla trybu 1 Gb/s, 25 MHz dla trybu 100 Mb/s
lub 2,5 MHz dla szybkości 10 Mb/s) oraz zegar sys_clk (100 MHz), taktujący blok sprzętowego
klasyfikatora pakietów. Do tego celu wykorzystano kolejkę buforującą FIFO (ang. First In, First Out),
opartą na pamięci BRAM dostępnej w zasobach układu Xilinx Virtex II Pro [126, 134, 135]. Oprócz
odbieranych danych synchronizacji podlegają również pozostałe sygnały kontrolne toru RX, dlatego
w module zastosowano dwie odrębne kolejki FIFO: 512 słów 32-bitowych dla danych oraz 512 słów
95
16-bitowych dla sygnałów kontrolnych. Każdemu 32-bitowemu słowu odbieranych danych
rx_data_out odpowiada 4-bitowa linia rx_rem_out walidująca poszczególne bajty (długość ramek nie
jest wyrównywana do wielokrotności 4 bajtów, stąd konieczność dodatkowego potwierdzania
ważności). Przebiegi czasowe dla modułu eth_rx_fifo_control podczas odbierania przykładowej ramki
Ethernet przedstawiono na rysunku 4.39.
Zegar rx_clk 125 MHz
Zegar sys_clk 100 MHz
Walidacja słowa wyjściowego
32-bitowe słowo
wyjściowe
Sygnał walidujący bajty w 32bitowym słowie wyjściowym
Rys. 4.39. Przebiegi czasowe sygnałów modułu eth_rx_fifo_control
w trakcie odbierania przykładowej ramki w trybie Gigabit Ethernet.
4.4.3. Tor nadawczy Tx
Schemat blokowy toru transmisyjnego TX w wersji Gigabit Ethernet przedstawiono na
rysunku 4.40.
Interfejs
LocalLink
eth_tx_bittransmiter
eth_tx_fifo_control
eth_tx_crc
eth_tx_clk_mgmt
eth_tx_counters
eth_tx_fsm
Konfiguracja
Interfejs GMII
Karta sieciowa
Tor nadawczy TX
Rys. 4.40. Schemat blokowy toru transmisyjnego TX w wersji Gigabit Ethernet.
96
W skład toru TX w wersji Gigabit Ethernet wchodzi sześć modułów: eth_tx_bittransmiter,
eth_tx_clk_mgmt, eth_tx_crc, eth_tx_fsm, eth_tx_counters, eth_tx_fifo_control, realizujących proces
transmisji danych do interfejsu sieciowego zgodnie z modelem proceduralnym wyspecyfikowanym
w standardzie IEEE 802.3 [40] (Rys. 4.41).
Proces transmisji ramki
(FrameTransmitter)
KLIENT WARSTWY MAC
(ang. MAC CLIENT)
Enkapsulacja
transmitowanej ramki
(TransmitDataEncap)
Transmisja ramki
(TransmitFrame)
Zarządzanie procesem transmisji
(TransmitLinkMgmt)
Dodawanie
uzupełnienia
(ComputePad)
Obliczanie
CRC
(CRC32)
Monitorowanie kolizji
(WatchForCollision)
Rozpoczęcie
transmisji
(StartTransmit)
Ponawianie
transmisji
(BackOff)
Randomizacja
(Random)
Obsługa trybu burst
(BurstTimer)
Proces transmisji danych
(BitTransmitter)
Opóźnienie transmisji
(Deference)
Rozszerzanie ramki
(InterFrameSignal)
Sterowanie transmisją
pól ramki
(PhisicalSignalEncap)
Opóźnienie czasu
rzeczywistego
(RealTimeDelay)
Transmisja
sygnału jam
(StartJam)
PODWARSTWA
DOSTĘPU DO MEDIUM
(ang. MEDIA ACCESS
SUBLAYER)
Transmisja
kolejnego bitu
(NextBit)
Transmisja bitu danych
(TransmitBit)
Oczekiwanie na
transmisję
(Wait)
WARSTWA FIZYCZNA
(ang. PHYSICAL LAYER)
tylko dla trybu half duplex
tylko dla trybu half duplex > 100Mb/s
Rys. 4.41. Model proceduralny toru odbiorczego TX w wersji Gigabit Ethernet (na podstawie [40]).
Blok transmisyjny eth_tx, podobnie jak w wersji Fast Ethernet, posiada trzy grupy połączeń
z modułami zewnętrznymi: interfejs GMII układu PHY (część nadawcza), interfejs komunikacyjny
Firewalla oraz interfejs konfiguracyjny. Funkcje poszczególnych sygnałów toru TX w wersji Gigabit
Ethernet opisano szczegółowo w dodatku A, punkt 8.6, zaś wewnętrzny schemat strukturalny,
97
uwzględniający linie oraz wyprowadzenia interfejsów komunikacyjnych, przedstawiono na
rysunku 4.42.
eth_tx_clk_mgmt
moduł eth_tx.vhd
→ cfg_speed(1:0)
→ sys_clk
→ reset
eth_tx_bittransmiter
eth_tx_crc
→ tx_clk
→ tx_state
→ tx_next_state
→ tx_fifo_data(31:0)
→ tx_word_ptr(2:0)
tx_crc(31:0) →
→ tx_clk
→ tx_state
→ tx_next_state
→ tx_word_ptr(2:0)
→ tx_fifo_data(31:0)
→ tx_fifo_rem(3:0)
→ tx_crc_ptr(2:0)
→ tx_crc(31:0)
phy_tx_en →
phy_tx_error →
phy_tx_data(7:0) →
phy_tx_clk ←
phy_gtx_clk →
phy_col ←
phy_crs ←
phy_tx_en →
phy_tx_error →
phy_tx_data(7:0) →
INTERFEJS PHY GMII
phy_gtx_clk →
tx_clk →
→ phy_tx_clk
→ cfg_duplex
→ cfg_link
→ cfg_speed(1:0)
→ sys_clk
→ reset
→ cfg_speed(1:0)
→ reset
eth_tx_fsm
tx_state →
tx_next_state →
→ phy_crs
→ phy_col
eth_tx_counters
→ phy_crs
→ phy_col
→ tx_clk
→ tx_state
→ tx_next_state
→ tx_eof
→ tx_lenght(10:0)
→ tx_empty
→ tx_fifo_rem(3:0)
→ cfg_duplex
→ cfg_speed(1:0)
→ reset
tx_ok →
tx_err →
preamble_done →
sfd_done →
data_done →
crc_done →
tx_done →
jam_done →
extent_done →
burst_done →
defer_cnt_eqifg →
defer_cnt_eqifg1 →
attmp_cnt_eq0 →
attmp_cnt_eqmax →
backoff_cnt_eq0 →
tx_rd_word_en →
tx_word_ptr(2:0) →
tx_crc_ptr(2:0) →
tx_byte_counter(10:0) →
→ tx_clk
→ tx_ok
→ tx_err
→ preamble_done
→ sfd_done
→ data_done
→ crc_done
→ tx_done
→ jam_done
→ extent_done
→ burst_done
→ defer_cnt_eqifg
→ defer_cnt_eqifg1
→ attmp_cnt_eq0
→ attmp_cnt_eqmax
→ backoff_cnt_eq0
→ tx_pause_sync
→ tx_ce_sync
→ tx_sof
→ tx_eof
→ tx_lenght(10:0)
→ tx_empty
→ cfg_tx_pause_en
→ cfg_duplex
→ cfg_link
→ cfg_speed(1:0)
→ sys_clk
→ reset
eth_tx_fifo_control
→ cfg_duplex
→ cfg_link
→ cfg_speed(1:0)
→ sys_clk
→ reset
tx_rdy_out →
tx_ok_out →
tx_err_out →
tx_lenght_in ←
tx_wr_en_in ←
tx_ce_in ←
tx_eof_in ←
tx_sof_in ←
tx_rem_in(3:0) ←
tx_data_in(31:0) ←
tx_pause_cnt_eq0 ←
reset ←
sys_clk ←
cfg_speed(1:0) ←
cfg_link ←
cfg_duplex ←
cfg_tx_pause_en ←
INTERFEJS LOCAL LINK
tx_ce_sync →
tx_sof →
tx_eof →
tx_lenght(10:0) →
tx_empty →
tx_fifo_data(31:0) →
tx_fifo_rem(3:0) →
tx_pause_sync →
tx_rdy_out →
tx_ok_out →
tx_err_out →
KONFIGURACJA
→ tx_clk
→ tx_state
→ tx_next_state
→ tx_rd_word_en
→ tx_ok
→ tx_err
→ tx_byte_counter(10:0)
→ attmp_cnt_eqmax
→ tx_pause_cnt_eq0
→ tx_data_in(31:0)
→ tx_rem_in(3:0)
→ tx_sof_in
→ tx_eof_in
→ tx_ce_in
→ tx_wr_en_in
→ tx_lenght_in(10:0)
Rys. 4.42. Struktura wewnętrzna modułu eth_tx w wersji Gigabit Ethernet.
98
Za poprawne generowanie i zarządzanie sygnałami zegarowymi toru transmisyjnego
odpowiada moduł eth_tx_clk_mgmt. W zależności od aktualnych warunków pracy układu PHY
częstotliwość zegara przyjmuje różne wartości:
 dla szybkości 10 Mb/s tor TX wykorzystuje zegar phy_tx_clk o częstotliwości 2,5 MHz
generowany przez układ PHY,
 dla szybkości 100 Mb/s tor TX wykorzystuje zegar phy_tx_clk o częstotliwości 25 MHz
generowany przez układ PHY,
 dla szybkości 1000 Mb/s tor TX generuje dla układu PHY sygnał zegarowy phy_gtx_clk
o częstotliwości 125 MHz (Rys. 4.43).
Proces wytwarzania sygnału zegarowego 125 MHz na bazie zegara systemowego sys_clk,
o częstotliwości 100 MHz, realizowany jest w oparciu o blok DCM (ang. Digital Clock Management),
wchodzący w skład zasobów sprzętowych układu Virtex II Pro [128, 133].
Sygnał cfg_speed
równy „10”
Zegar sys_clk
100 MHz
Zegar z bloku DCM
125 MHz
Rys. 4.43. Przebiegi czasowe sygnałów modułu eth_tx_clk_mgmt dla transmisji z szybkością 1000 Mb/s.
Takie duże zróżnicowanie sygnałów taktujących w torze TX prowadzi do powstania dwóch
niezależnych domen zegarowych: systemowej – o stałej częstotliwości zegara wynoszącej 100 MHz
oraz wewnętrznej o częstotliwości warunkowanej aktualnym trybem pracy układu PHY (od 2,5 MHz
do 125 MHz). Z tej przyczyny, podobnie jak to miało miejsce w wypadku toru RX, konieczne jest
zastosowanie specjalnego modułu eth_rx_fifo_control, odpowiadającego przede wszystkim za
zapewnienie właściwej synchronizacji domen zegarowych, wykorzystując do tego celu kolejki
buforujące FIFO, oparte o pamięci BRAM. Analogicznie do toru odbiorczego, oprócz wysyłanych
danych, synchronizacji podlegają również pozostałe sygnały kontrolne toru TX, dlatego moduł
wykorzystuje dwie kolejki FIFO: 512 słów 32-bitowych dla danych oraz 512 słów 16-bitowych dla
sygnałów kontrolnych. Każdemu 32-bitowemu transmitowanemu słowu tx_data_in odpowiada
4-bitowa linia tx_rem_in walidująca poszczególne bajty. Gotowość toru transmisyjnego do
rozpoczęcia nadawania sygnalizowana jest wysokim poziomem logicznym na wyjściu tx_rdy_out
(Rys. 4.44). W takim stanie tor TX oczekuje na przyjęcie danych pochodzących od klienta MAC
(bloku Firewalla). Uruchomienie procedury transmisji następuje po wystawieniu wysokiego poziomu
na linię tx_sof. Wówczas do układu PHY przekazana zostaje sekwencja preambuły, a równocześnie
rozpoczyna się buforowanie 32-bitowych słów danych klienta MAC (linia tx_data_in) walidowanych
sygnałem tx_wr_en_in. Jeżeli w trakcie nadawania, w związku z występowaniem kolizji
99
i koniecznością obsługi mechanizmu backoff, nastąpi chwilowe przepełnienie kolejki FIFO, sygnał
tx_rdy_out zmienia wartość na niski poziom logiczny. Buforowanie danych wejściowych trwa do
momentu aktywowania sygnału tx_eof_in. Długość transmitowanej ramki podawana jest na wejście
tx_lenght_in. Poprawne zakończenie przesyłania danych do układu PHY sygnalizuje wysoki poziom
logiczny na linii tx_ok_out, zaś niepowodzenie tego procesu wysoki poziom logiczny na linii
tx_err_out.
Sygnał sterujący
z FSM
Rozpoczęcia buforowania
danych klienta MAC
Dane klienta
MAC
Walidacja danych
klienta MAC
Zakooczenie buforowania
danych klienta MAC
Poprawne zakooczenie
transmisji
Rys. 4.44. Przebiegi czasowe sygnałów modułu eth_tx_fifo_control
w trakcie transmisji przykładowej ramki Ethernet.
Zbuforowane dane przeznaczone do wysłania trafiają do modułu eth_tx_bittransmiter, który
na podstawie informacji sterujących pochodzących z bloku zarządzającego eth_tx_tlm generuje
poszczególne pola ramki Ethernet (Rys. 4.45) oraz konwertuje transmitowane informacje z postaci
32-bitowych słów do formatu określanego aktualnymi warunkami pracy układu PHY (nible dla
prędkości 10/100 Mb/s lub bajty dla prędkości 1000 Mb/s). Sposób konwersji ustalany jest na
podstawie stanu sygnału cfg_speed, kodującego informację o szybkości transmisji medium
fizycznego. Po zakończeniu wysyłania danych klienta MAC moduł rozpoczyna przetwarzanie
32-bitowej sekwencji FCS, generowanej przez blok eth_tx_crc. Funkcjonuje on w sposób analogiczny
do wersji Fast Ethernet, opisanej w rozdziale 4.3.3.
100
Pole preambuły
Dane klienta MAC razem
z polami adresowymi
Pole FCS
Pole SFD
Rys. 4.45. Przebiegi czasowe sygnałów modułu eth_tx_bittransmiter
w trakcie transmisji przykładowej ramki Ethernet.
Nowym rozwiązaniem w stosunku do wcześniejszej implementacji kontrolera MAC jest
zgrupowanie w jednym module eth_tx_clk_counters kluczowych liczników (Rys. 4.46), niezbędnych
do poprawnego działania wszystkich mechanizmów toru transmisyjnego, m.in.:
 opóźniania transmisji (ang. defer),
 algorytmu z binarno-wykładniczym rozszerzaniem czasu (ang. back-off),
 zliczania prób ponowienia transmisji (ang. attempt limit),
 zliczania liczby wysłanych bajtów.
Sygnalizacja kooca
pola preambuły
Sygnał osiągnięcia limitu
ponowieo transmisji
Sygnalizacja kooca
pola SFD
Sygnalizacja kooca
pola danych
Sygnalizacja kooca
pola FCS
Sygnał zakooczenia
odmierzania back-off
Rys. 4.46. Przebiegi czasowe sygnałów modułu eth_tx_counters
w trakcie transmisji przykładowej ramki Ethernet.
Poszczególne sygnały informacyjne generowane w torze TX przekazywane są ostatecznie do
modułu eth_tx_fsm. Zaimplementowano w nim główny automat sterujący przebiegiem transmisji
danych. Trzynaście stanów pracy: IDLE, pause, flush, defer, ifs, ifs1, preamble, sfd, data, crc, jam,
101
extent oraz backoff realizuje wszelkie wymagane standardem operacje, w tym obsługę ramek kontroli
przepływu typu PAUSE oraz wysyłanie ramek w trybie BURST. Przed przystąpieniem do nadawania
konieczne jest wyzerowanie kolejki FIFO z ewentualnych niepożądanych informacji, pozostałych po
zakończonym niepowodzeniem lub arbitralnie przerwanym procesie wysyłania wcześniejszych ramek.
Aktywna linia zezwolenia nadawania tx_en wraz ze zgłoszeniem obecności danych klienta MAC
w buforze FIFO, sygnalizowanym niskim stanem logicznym linii tx_empty oraz flagą początku ramki
(wysoki stan na linii tx_sof), inicjuje rozpoczęcie procedury transmisji (Rys. 4.47). Przejścia pomiędzy
poszczególnymi stanami pracy automatu, wyzwalane zmianami stanów liczników w opisywanym
wcześniej module eth_tx_clk_counters, realizowane są według schematu zaprezentowanego na
rysunku 4.48. W przypadku braku zewnętrznych czynników zaburzających transmisję (np. kolizja
w medium fizycznym, przepełnienie kolejki FIFO, itp.) zmiany stanów automatu tożsame są
z przemieszczaniem się pomiędzy poszczególnymi polami ramki Ethernet. Jeżeli pojawi się
konieczność obsługi któregokolwiek ze wspieranych wyjątków, automat natychmiast przechodzi we
właściwą zaistniałej sytuacji sekwencję sterującą.
Zakończenie procedury transmisji danych klienta
MAC wyzwalane jest aktywacją flagi końca ramki (wysoki poziom linii tx_eof). Wówczas rozpoczyna
się wysyłanie obliczanej na bieżąco sekwencji kontrolnej CRC (pole FCS w ramce Ethernet).
Zezwolenia na
transmisję
Transmisja
sekwencji FCS
Konfiguracja toru
TX
Sygnalizacja aktualnego
stanu automatu FSM
Sygnał początku
ramki
Dane do wysłania
obecne w FIFO
Sygnał kooca
ramki
Rys. 4.47. Przebiegi czasowe sygnałów modułu eth_tx_fsm w trakcie transmisji ramki Ethernet.
102
tx_en = '1' and tx_empty = '0' and
cfg_tx_pause_en = '1' and
tx_pause_sync = '1'
tx_en = '0' or
tx_empty = '1'
tx_en = '1' and tx_empty = '0' and
(cfg_tx_pause_en = '0' or tx_pause_sync = '0')
and tx_sof = '0'
tx_en = '1' and
cfg_tx_pause_en = '1'
and tx_pause_sync = '1'
tx_en = '1' and tx_empty =
'0' and tx_sof = '0'
pause
flush
tx_en = '1' and
(cfg_tx_pause_en = 0' or
tx_pause_sync = '0') or tx_en
= '0'
IDLE
tx_en = '0' or (tx_en = '1' and
(tx_empty = '1' or tx_sof = '1'))
tx_en = '1' and tx_empty = '0'
and (cfg_tx_pause_en = '0'
or tx_pause_sync = '0') and
tx_sof = '1' and ((cfg_duplex
= '1' or phy_crs = '1') and
cfg_duplex = '0')
tx_en = '1' and tx_empty = '0' and
(cfg_tx_pause_en = '0' or tx_pause_sync = '0')
and tx_sof = '1' and ((cfg_duplex = '0' and
phy_crs = '0') or cfg_duplex = '1')
tx_en = '1' and colision = '0'
and preamble_done = '0'
tx_en = '1' and phy_crs = '1'
tx_en = '1' and phy_crs = '0'
and attmp_cnt_eq0 = '1'
defer
preamble
tx_en = '1' and colision = '0'
and preamble_done = '1'
tx_en = '1' and phy_crs = '0'
and attmp_cnt_eq0 = ‘0'
tx_en = '1' and
colision = '1'
tx_en = '1' and
defer_cnt_eqifg1 = '0'
tx_en = '0'
tx_en = '1' and
colision = ‘0' and
sfd_done = '0'
tx_en = '1' and
defer_cnt_eqifg = '1' and
tx_done = '0' and
((cfg_duplex = '1' or phy_crs
= '1') and cfg_duplex = '0')
ifs1
sfd
tx_en = '1' and
colision = '1'
tx_en = '1' and
colision = ‘0' and
sfd_done = '1'
ifs
jam
tx_en = '1' and
defer_cnt_eqifg = '0'
data
tx_en = '1' and
tx_empty = '0'
colision = '1'
tx_en = '0'
tx_en = '1' and
defer_cnt_eqifg1 = ‘1'
tx_en = '1' and
defer_cnt_eqifg = '1'
and tx_done = '0' and
((cfg_duplex = '0' and
phy_crs = '0') or
cfg_duplex = '1')
tx_en = '0' or
tx_empty = '1'
tx_en = '1' and
colision = '1'
tx_en = '1' and tx_empty
= '0' colision = '0' and
data_done = '0'
crc
tx_en = '1' and
colision = '0' and
crc_done = '0'
tx_en = '0'
tx_en = '1' and colision = '0'
and extent_done = '1' and
(burst_done = '1' or tx_sof
= '0')
tx_en = '1' and
colision = '1'
extent
tx_en = '1' and colision = '0'
and extent_done = '1' and
burst_done = '0' and tx_sof
= '1'
tx_en = '1' and
colision = '0' and
extent_done = '0'
tx_en = '1' and colision = '0'
and crc_done = '1' and
cfg_speed = "10" and
cfg_duplex = '0' and
extent_done = '0'
tx_en = '1' and
backoff_cnt_eq0 = '1' and
attmp_cnt_eqmax = '0' and
phy_crs = '1'
tx_en = '1' and
tx_empty = '0'
colision = '0' and
data_done = '1'
tx_en = '0'
tx_en = '0' or (tx_en =
'1' and defer_cnt_eqifg
= '1' and tx_done = '1'
tx_en = '1' and colision
= '0' and crc_done = '1'
and (cfg_speed = "10"
and cfg_duplex = '0'
and (extent_done = '1'
or burst_done = '1' or
tx_sof = '0') or
(cfg_speed = "00" or
cfg_speed = "01" or
cfg_duplex = '0')))
tx_en = '1' and colision = '0'
and crc_done = '1' and
cfg_speed = "10" and
cfg_duplex = '0' and
extent_done = '1' and
burst_done = '0' and tx_sof
= '1'
tx_en = '1' and
jam_done = '1'
backoff
tx_en = '0' or (tx_en = '1' and
backoff_cnt_eq0 = '1' and
attmp_cnt_eqmax = '1')
tx_en = '1' and
backoff_cnt_eq0 = '1' and
attmp_cnt_eqmax = '0' and
phy_crs = '0'
tx_en = '1' and
backoff_cnt_eq0 = '0'
Rys. 4.48. Graf przejść automatu FSM sterującego torem TX.
103
4.4.4. Moduł kontrolny
Sposób funkcjonowania oraz implementacji sprzętowej modułu kontrolnego w wersji Gigabit
Ethernet jest identyczny z opisanym w rozdziale 4.3.4. Większa o około 27% wielkość alokowanych
zasobów układu reprogramowalnego FPGA w omawianej wersji modułu kontrolnego (dodatek B,
punkt 9.5) w porównaniu do wersji Fast Ethernet (dodatek B, punkt 9.1), wynika z wykorzystania
pełnej dwubitowej linii cfg_speed, kodującej bieżącą szybkość pracy układu PHY.
4.4.5. Wyniki implementacji
Opracowany sprzętowy kontroler MAC w wersji Gigabit Ethernet został zaimplementowany
jedynie na platformie testowej FPGA z układem Xilinx Virtex II Pro XC2VP30. Wykorzystanie płyty
Digilent D2E z układem Spartan 2E XC2S200 do weryfikacji funkcjonowania było niemożliwe ze
względu na wysoką częstotliwość pracy modułu w trybie 1000 Mb/s. Wyniki sumarycznego
wykorzystania zasobów sprzętowych logiki reprogramowalnej oraz uzyskanych parametrów
czasowych kompletnego kontrolera MAC w wersji Fast Ethernet przedstawiono w tabeli 4.3. Pełne
wyniki implementacji poszczególnych modułów składowych kontrolera zamieszczono w dodatku B,
punkty 9.5 do 9.8.
Tab. 4.3. Podsumowanie wykorzystania zasobów sprzętowych układów FPGA
oraz parametry czasowe kontrolera MAC w wersji Gigabit Ethernet.
Rodzaj zasobów
Virtex
Typ układu 2vp30ff896-7
Liczba bloków Slice
812
1502
Liczba 4-wejściowych LUT
Parametry czasowe
Maks. częstotliwość
146,342 MHz
Maks. opóźnienie ścieżki kombinacyjnej
6,783 ns
Teoretyczna maksymalna częstotliwość pracy kontrolera MAC w wersji Gigabit Ethernet,
raportowana przez narzędzia do syntezy logicznej (około 146 MHz), pozwala na jego poprawne
funkcjonowanie przy maksymalnej szybkości transmisji danych 1000 Mb/s (częstotliwość sygnału
zegarowego układu PHY dla tego przypadku jest równa 125 MHz).
104
5. Sprzętowy system bezpieczeństwa typu
Firewall
5.1. Wprowadzenie
W pierwszym etapie prac badawczych autor skoncentrował się na przygotowaniu
odpowiedniej platformy testowo-uruchomieniowej oraz opracowaniu niezbędnych elementów
warstwy komunikacyjnej, pozwalających na eksploatację systemu bezpieczeństwa w infrastrukturze
sieci Ethernet [108, 109]. Kwestie te, jakkolwiek bardzo istotne z punktu widzenia kompleksowej
realizacji założonego celu, stanowiły jedynie wstęp do właściwego obszaru badawczego,
obejmującego klasyfikację pakietów z wykorzystaniem układów FPGA, a w szczególności praktyczną
realizację w pełni funkcjonalnego sprzętowego systemu Firewall implementowanego w logice
reprogramowalnej.
Podstawowymi założeniami, przyjętymi przy tworzeniu koncepcji architektury sprzętowego
Firewalla,
było
przede
wszystkim
zachowanie
dużego
bezpieczeństwa
systemu
oraz
zmaksymalizowanie jego wydajności. O ile spełnienie pierwszego z założeń jest już osiągalne poprzez
przeniesie funkcjonalności Firewalla do logiki reprogramowalnej, eliminując tym samym
oprogramowanie posiadające luki wewnętrzne, to w przypadku optymalizacji wydajności konieczne
jest szczegółowe przeanalizowanie słabych stron konwencjonalnych rozwiązań po to, aby móc je
wyeliminować dodatkowymi mechanizmami, jakie zyskujemy po przejściu w implementację
sprzętową. Powszechnie eksploatowane programowe systemy bezpieczeństwa wykorzystują w swym
działaniu procesory ogólnego przeznaczenia, które stanowią główny punkt ograniczający efektywność.
Procesor w takim przypadku jest wykorzystywany nie tylko do realizacji algorytmów analizy
pakietów, ale również przez system operacyjny zapory ogniowej, aplikacje zarządzające, obsługę
komunikacji sieciowej, itp. Tak znaczne obciążenie procesora zadaniami pobocznymi w stosunku do
zasadniczego celu działania urządzenia skutkuje jego przeciążeniami i ograniczeniem maksymalnej
przepustowości transmisji. Co więcej, możemy obserwować eskalację tego problemu przy dodawaniu
kolejnych interfejsów sieciowych, generujących dodatkowe obciążenie związane z trasowaniem
pakietów (ang. routing). Taka sytuacja sprowokowała autora do poszukiwań sprzętowych rozwiązań
eliminujących opisane problemy. Opracowana koncepcja architektury Firewalla opiera się na
założeniu tworzenia dedykowanych kanałów komunikacyjnych [115], tak jak ma to miejsce
w przypadku mechanizmu mikrosegmentacji, wykorzystywanego praktycznie we wszystkich
obecnych na rynku przełącznikach sieci Ethernet [15]. Każdy taki kanał zawiera w sobie pełny tor
przetwarzania i analizy bezpieczeństwa danych. Poszczególne moduły elementarnych zapór
ogniowych dla wszystkich istniejących ścieżek komunikacyjnych bazują w takim przypadku na
jednym, globalnym zestawie reguł bezpieczeństwa. W momencie ich modyfikacji, wszelkie zmiany
105
propagowane są do każdego modułu weryfikującego przetwarzane dane. Jeżeli w systemie
bezpieczeństwa zainstalowane zostaną więcej niż dwa interfejsy sieciowe NIC, konieczne jest
zaimplementowanie
dodatkowego
bloku,
realizującego
trasowanie
pakietów.
Optymalnym
rozwiązaniem byłby w tej sytuacji oczywiście router w pełni sprzętowy, natomiast zagadnienie to
wykracza poza tematykę niniejszej rozprawy i z racji swej obszerności może stać się celem
oddzielnych badań.
W związku z prototypowym charakterem realizowanego sytemu autor założył, iż minimalna
funkcjonalnie wersja konfiguracji zapory ogniowej, zawierająca dwa interfejsy sieciowe, pozwoli
w pełni na zweryfikowanie poprawności działania opracowanej koncepcji architektury sprzętowego
Firewalla, umożliwiając zarazem jego dalszą rozbudowę o moduł trasujący [110].
Ogólny schemat
koncepcji
architektury Firewalla
z
równoległym przetwarzaniem
wielościeżkowym przedstawiono na rysunku 5.1.
Pamięć
reguł
Kontroler
pamięci
NIC eth2
NIC eth1
NIC eth0
FW 2
MAC 2
MAC 1
MAC 0
FW 1
FW 0
Router
Rys. 5.1. Schemat koncepcyjny architektury sprzętowego Firewalla.
Poszczególne karty interfejsów sieciowych obsługiwane są przez opisane w rozdziale 4
sprzętowe bloki MAC, realizujące funkcjonalności wymagane przez standard opisujący sieć Ethernet
802.3. Dane z odbieranych ramek trafiają następnie do dedykowanych modułów weryfikacji reguł
bezpieczeństwa (bloki FW). Ramki, które zostały zaakceptowane, przekazywane są w kolejności do
modułu trasującego, przełączającego strumień danych do toru transmisyjnego odpowiedniej karty
sieciowej. W przypadku dwóch kart sieciowych moduł trasujący nie występuje. Bloki FW
poszczególnych torów komunikacyjnych pobierają reguły bezpieczeństwa z głównej pamięci reguł
106
poprzez specjalny kontroler pamięci. Taka komunikacja ma miejsce tylko w momencie pierwszego
uruchomienia systemu lub po każdorazowej zmianie polityki bezpieczeństwa. Zmiany takie nie
występują jednak w praktyce na tyle często, aby opisana koncepcja dystrybucji reguł rzutowała na
spadek wydajności przetwarzania danych. Przepływ danych w systemie z dwoma interfejsami
sieciowymi przedstawiono na rysunku 5.2.
FW 0
TX
RX
NIC eth0
MAC 0
MAC 1
TX
NIC eth1
RX
FW 1
Rys. 5.2. Przepływ danych w sprzętowym Firewallu z dwoma interfejsami sieciowymi.
Podobnie jak to miało miejsce w przypadku kontrolerów MAC, analiza funkcjonowania części
weryfikującej przetwarzane pakiety przeprowadzona zostanie począwszy od najwyższego poziomu
hierarchii projektu, obejmującej strukturę blokową kompletnego systemu bezpieczeństwa typu
Firewall, zaimplementowanego w logice reprogramowalnej FPGA (Rys. 5.3), a skończywszy na
omówieniu budowy wewnętrznej najmniejszych elementów składowych.
W stosunku do nakreślonej wcześniej koncepcji wykorzystania dedykowanych modułów
weryfikujących pakiety dla każdej ze ścieżek komunikacyjnych pewnym odstępstwem wydawać się
może zastosowanie w klasyfikatorze wewnętrznego mechanizmu kolejkowania typu Round-Robin.
Jednakże, jak to zostanie wykazane, uzyskane w praktyce bardzo duże przepustowości prototypowych
wersji filtrów adresów i portów sieciowych pozwoliły zastosować pojedynczy klasyfikator do
równoczesnej analizy danych pochodzących z wielu ścieżek. Wpłynęło to na znaczne ograniczenie
ilości alokowanych zasobów sprzętowych logiki reprogramowalnej FPGA przy jednoczesnym
zapewnieniu niezbędnej wydajności przetwarzania informacji. Co więcej, ogromna elastyczność
opracowanego rozwiązania pozwala w łatwy sposób dostosować system bezpieczeństwa do realnych
wymagań użytkownika, wyłączając, w razie potrzeby, mechanizm kolejkowania i dedykując każdemu
kanałowi transmisyjnemu oddzielny blok klasyfikujący.
Na rysunku 5.3 linią przerywaną zaznaczono docelową lokalizację modułu trasującego. Jego
implementacja, jak to zostało zasygnalizowane już wcześniej, jest niezbędna w sytuacji zwiększenia
liczby obsługiwanych interfejsów sieciowych. Istotnym jest fakt przygotowania koncepcji architektury
sprzętowego Firewalla do wdrożenia w przyszłości takiego rozszerzenia funkcjonalnego.
107
pin_phy_0_reset_n ←
pin_phy_0_col →
pin_phy_0_crs →
pin_phy_0_rx_clk →
pin_phy_0_rx_dv →
pin_phy_0_rx_error →
pin_phy_0_rx_data(3:0) →
pin_phy_0_tx_clk →
pin_phy_0_tx_en ←
pin_phy_0_tx_data(3:0) ←
pin_phy_0_int_n →
pin_phy_0_mdc ←
pin_phy_0_mdio ↔
pin_phy_1_reset_n ←
pin_phy_1_col →
pin_phy_1_crs →
pin_phy_1_rx_clk →
pin_phy_1_rx_dv →
pin_phy_1_rx_error →
pin_phy_1_rx_data(3:0) →
pin_phy_1_tx_clk →
pin_phy_1_tx_en ←
pin_phy_1_tx_data(3:0) ←
pin_phy_1_int_n →
pin_phy_1_mdc ←
pin_phy_1_mdio ↔
eth_0_config
eth_mac_0_mii_config(15:0)
eth_mac_0_mac_address(47:0)
eth_mac_0_multicast_en
eth_mac_0_padding_en
eth_mac_0_crc_en
eth_mac_0_promiscous_en
eth_1_config
eth_mac_1_mii_config(15:0)
eth_mac_1_multicast_en
eth_mac_1_mac_address(47:0)
eth_mac_1_padding_en
eth_mac_1_crc_en
eth_mac_1_promiscous_en
moduł fw_top.vhd
eth_0 :
fw_engine_0 :
address_wr_data((tcam_width/4)-1:0) ←
policy_we ←
address_wr_addr(log2_ceil(number_of_rules-1)+3:0) ←
classifier_main
→ clas_0_IP_SA(31:0)
→ clas_0_ETH_frame_type(15:0)
→ clas_0_IP_DA(31:0)
Classifier :
clas_IP_SA(31:0) →
clas_ETH_frame_type(15:0) →
→ eth_mac_ready_rx
clas_IP_DA(31:0) →
clas_IP_protocol(7:0) →
fw_engine
eth_mac_ready →
← eth_mac_rx_enable
eth_mac
← eth_mac_rx_pause
← phy_reset_n
→ eth_mac_rx_active
clas_S_port(15:0) →
→ clas_0_D_port(15:0)
→ clas_0_S_port(15:0)
port_we ←
address_we ←
eth_mac_rx_active →
eth_mac_rx_pause ←
eth_mac_rx_enable ←
clas_D_port(15:0) →
→ clas_0_IP_protocol(7:0)
→ phy_col
→ eth_mac_rx_data_valid
→ eth_mac_rx_data(7:0)
→ phy_rx_clk
eth_mac_rx_data(7:0) →
clas_S_port(15:0) →
→ clas_1_ETH_frame_type(15:0)
→ clas_1_IP_protocol(7:0)
→ clas_1_IP_SA(31:0)
action_ram_data(7:0) ←
action_wr_addr(log2_ceil(number_of_rules-1)-1:0) ←
action_we →
action_ram_data(7:0) →
action_wr_addr(log2_ceil(number_of_rules-1)-1:0) →
fw_policy_loader
port_we →
port_wr_data(27:0) →
port_wr_addr(log2_ceil(number_of_rules-1)+3:0) →
led_1 →
led_0 →
→ phy_tx_clk
sw_3 ←
sw_2 ←
sw_1 ←
sw_0 ←
RS232_RxD ←
RS232_TxD →
policy_we →
address_we →
address_wr_data((tcam_width/4)-1:0) →
address_wr_addr(log2_ceil(number_of_rules-1)+3:0) →
led_2 →
→ sys_clk
→ reset
→ sys_clk
← rs232_active
action_we ←
port_wr_data(27:0) ←
eth_mac_rx_data_valid →
port_wr_addr(log2_ceil(number_of_rules-1)+3:0) ←
← clas_0_ready
→ clas_0_desc_ready
clas_ready ←
clas_desc_ready →
→ eth_mac_rx_error
→ eth_mac_rx_ok
→ phy_rx_dv
eth_mac_rx_error →
eth_mac_rx_ok →
→ phy_tx_clk
← clas_0_result(7:0)
→ clas_1_IP_DA(31:0)
clas_result(7:0) ←
→ clas_1_S_port(15:0)
→ eth_mac_ready_tx
→ eth_mac_rx_frame_size(10:0)
← eth_mac_tx_enable
→ clas_1_D_port(15:0)
→ phy_rx_clk
→ eth_mac_tx_active
eth_mac_tx_active →
eth_mac_tx_retransmit →
→ eth_mac_tx_retransmit
eth_mac_tx_enable ←
eth_mac_rx_frame_size(10:0) →
← eth_mac_tx_data(7:0)
→ clas_1_desc_ready
eth_mac_tx_data_ack →
eth_mac_tx_data(7:0) ←
eth_mac_tx_ok →
→ r_mii_config(15:0)
→ r_rx_mac_address(47:0)
→ eth_mac_tx_data_ack
← clas_1_result(7:0)
→ r_rx_multicast_en
clas_IP_SA(31:0) →
clas_ETH_frame_type(15:0) →
→ eth_mac_rx_data(7:0)
clas_D_port(15:0) →
→ eth_mac_0_ready
clas_result(7:0) ←
→ reset
← clas_1_ready
eth_mac_tx_frame_size(10:0) ←
→ eth_mac_tx_ok
→ r_rx_promiscous_en
→ phy_tx_clk
→ eth_mac_tx_error
→ reset
← eth_mac_tx_frame_size(10:0)
→ sys_clk
→ eth_mac_ready_rx
clas_IP_protocol(7:0) →
fw_engine_1 :
← eth_mac_rx_enable
clas_IP_DA(31:0) →
← eth_mac_rx_pause
→ eth_mac_rx_active
→ eth_mac_rx_data_valid
clas_desc_ready →
→ eth_mac_ready_tx
clas_ready ←
→ eth_mac_rx_ok
→ eth_mac_rx_frame_size(10:0)
→ eth_mac_rx_error
→ phy_rx_clk
→ eth_mac_tx_active
← eth_mac_tx_enable
→ eth_mac_1_ready
monitoring
← eth_mac_tx_data(7:0)
→ rs232_active
→ reset
led_3 →
→ eth_mac_tx_data_ack
→ sys_clk
← eth_mac_tx_frame_size(10:0)
→ eth_mac_tx_error
→ eth_mac_tx_ok
→ eth_mac_tx_retransmit
PolicyLoader :
→ r_tx_crc_en
eth_mac_tx_active →
fw_engine
→ r_tx_padding_en
→ sys_clk
eth_1 :
← phy_reset_n
eth_mac_rx_pause ←
eth_mac_rx_enable ←
eth_mac_rx_data(7:0) →
eth_mac_rx_active →
→ phy_col
→ phy_rx_dv
eth_mac_rx_data_valid →
eth_mac_rx_error →
eth_mac_rx_ok →
eth_mac_rx_frame_size(10:0) →
eth_mac_tx_enable ←
← phy_tx_en
eth_mac_tx_data(7:0) ←
eth_mac_tx_retransmit →
eth_mac_tx_frame_size(10:0) ←
eth_mac_tx_error →
eth_mac_tx_ok →
eth_mac_tx_data_ack →
← phy_mdc
→ sys_clk
→ reset
→ r_tx_padding_en
→ r_tx_crc_en
→ r_rx_promiscous_en
→ r_rx_multicast_en
→ r_rx_mac_address(47:0)
→ r_mii_config(15:0)
↔ phy_mdio
→ phy_int_n
← phy_tx_data(3:0)
→ phy_tx_clk
→ phy_rx_data(3:0)
→ phy_rx_error
→ phy_rx_clk
→ phy_crs
eth_mac_ready →
→ reset
eth_mac_tx_error →
↔ phy_mdio
← phy_mdc
→ phy_int_n
← phy_tx_data(3:0)
← phy_tx_en
→ phy_rx_data(3:0)
→ phy_rx_error
eth_mac
→ phy_crs
Router
← pin_sys_clk
← pin_reset
→ pin_rs232_tx
← pin_rs232_rx
→ pin_led_0
→ pin_led_1
→ pin_led_2
→ pin_led_3
← pin_sw_0
← pin_sw_1
← pin_sw_2
← pin_sw_3
Rys. 5.3. Struktura wewnętrzna kompletnego systemu zabezpieczania transmisji danych typu Firewall
108
5.2. Silnik sprzętowego systemu typu Firewall
Mianem silnika systemu Firewall określono w niniejszej rozprawie zbiór modułów, które
funkcjonalnie odpowiadają za wszelkie operacje związane z odpowiednim przygotowaniem
analizowanych danych do procesu ich weryfikacji w sprzętowym klasyfikatorze pakietów. Do operacji
tych zaliczamy przede wszystkim wygenerowanie deskryptorów bezpieczeństwa oraz wspomaganie
klasyfikacji poprzez mechanizmy pamięci podręcznej (ang. cache memory).
5.2.1. Schemat blokowy
Silnik sprzętowego Firewalla, którego poglądowy schemat blokowy zaprezentowano na
rysunku 5.4, składa się z czterech podstawowych elementów:
 kontrolera pamięci ramkowej – moduł fw_page_mgr,
 bloku generującego deskryptor bezpieczeństwa – moduł fw_parser,
 pamięci podręcznej cache wspomagającej klasyfikację – moduł fw_cache,
 modułu kontrolnego fw_control.
fw_parser
Deskryptor
MAC 0
RX
Silnik Firewalla
Klasyfikator
fw_cache
fw_control
Akcja
MAC 1
TX
fw_page_mgr
Rys. 5.4. Schemat blokowy silnika Firewalla.
Dane odbierane z kontrolera MAC trafiają do specjalnie zorganizowanej pamięci ramkowej,
w której każdej ramce odpowiada dedykowana strona pamięci. Zarówno klasyfikator pakietów, jak
i tor transmisyjny TX kontrolera MAC dysponuje własną kopią zawartości ramek, stąd możliwa jest
ich niezależna praca. W efekcie uzyskiwany jest znaczny wzrost wydajności przetwarzania danych –
proces klasyfikacji informacji nie wpływa na transmisję ramek wcześniej zweryfikowanych.
Do przeprowadzenia oceny zgodności ramki z definicjami reguł bezpieczeństwa niezbędny jest
jedynie niewielki fragment jej zawartości. Moduł fw_parser generuje z odpowiednich pól odbieranych
ramek specjalny deskryptor bezpieczeństwa, używany do dalszego procesu klasyfikacji informacji.
109
Dodatkowym elementem optymalizującym szybkość pracy silnika Firewalla jest pamięć podręczna
cache. Trafiają do niej dane z deskryptorów bezpieczeństwa wraz z informacją o akcji, jaką zgodnie
z obowiązującym schematem reguł bezpieczeństwa należy wykonać z przetwarzaną ramką.
W przypadku trafienia w pamięć cache, czyli odebrania tego samego deskryptora bezpieczeństwa,
który został już wcześniej w pamięci zapisany, wynik klasyfikacji dostępny jest w ciągu jednego taktu
zegara. Jest to możliwe dzięki wykorzystaniu do budowy pamięci wspomagającej architektury typu
CAM (ang. Content Addressable Memory).
Pełny schemat strukturalny silnika zapory ogniowej, uwzględniający wewnętrzne linie
sygnałowe oraz wyprowadzenia poszczególnych interfejsów, przedstawiono na rysunku 5.5.
Szczegółowy opis funkcji poszczególnych sygnałów zawarto w dodatku A, punkt 8.7.
Interfejs klasyfikatora pakietów
fw_page_mgr
→ eth_mac_ready_rx
→ phy_rx_clk
← eth_mac_rx_enable
← eth_mac_rx_pause
→ eth_mac_rx_active
→ eth_mac_rx_data(7:0)
→ eth_mac_rx_data_valid
→ eth_mac_rx_ok
→ eth_mac_rx_error
→ eth_mac_rx_frame_size(10:0)
→ eth_mac_ready_rx
→ phy_rx_clk
← eth_mac_rx_enable
← eth_mac_rx_pause
→ eth_mac_rx_active
→ eth_mac_rx_data(7:0)
→ eth_mac_rx_data_valid
→ eth_mac_rx_ok
→ eth_mac_rx_error
→ eth_mac_rx_frame_size(10:0)
→ eth_mac_ready_tx
→ phy_tx_clk
← eth_mac_tx_enable
→ eth_mac_tx_active
→ eth_mac_tx_retransmit
← eth_mac_tx_data(7:0)
→ eth_mac_tx_data_ack
→ eth_mac_tx_ok
→ eth_mac_tx_error
← eth_mac_tx_frame_size(10:0)
→ eth_mac_ready_tx
→ phy_tx_clk
← eth_mac_tx_enable
→ eth_mac_tx_active
→ eth_mac_tx_retransmit
← eth_mac_tx_data(7:0)
→ eth_mac_tx_data_ack
→ eth_mac_tx_ok
→ eth_mac_tx_error
← eth_mac_tx_frame_size(10:0)
fw_fifo_tx_wr_en ←
fw_fifo_tx_descr_wr(15:0) ←
fw_fifo_tx_full →
fw_fifo_rx_rd_en ←
fw_fifo_rx_descr_rd(15:0) →
fw_fifo_rx_empty →
fw_frame_mem_page(3:0) ←
fw_frame_mem_data(31:0) →
fw_frame_mem_addr(8:0) ←
fw_frame_mem_rd_en ←
fw_drop_page ←
fw_drop_page_ack →
fw_parser
← clas_ETH_frame_type(15:0)
← clas_IP_header_leght(3:0)
← clas_IP_protocol(7:0)
← clas_IP_SA(31:0)
← clas_IP_DA(31:0)
← clas_S_port(15:0)
← clas_D_port(15:0)
→ clas_ready
→ clas_result
← clas_desc_ready
← fw_tagged_frame
← fw_ETH_frame_type(15:0)
← fw_IP_header_leght(3:0)
← fw_IP_protocol(7:0)
← fw_IP_SA(31:0)
← fw_IP_DA(31:0)
← fw_S_port(15:0)
← fw_D_port(15:0)
sys_clk ←
reset ←
sys_clk ←
reset ←
fw_drop_page_ack ←
fw_drop_page →
fw_frame_mem_rd_en →
fw_frame_mem_addr(8:0) →
fw_frame_mem_data(31:0) ←
fw_frame_mem_page(3:0) →
fw_fifo_rx_empty ←
fw_fifo_rx_descr_rd(15:0) ←
fw_fifo_rx_rd_en →
fw_fifo_tx_full ←
fw_fifo_tx_descr_wr(15:0) →
fw_fifo_tx_wr_en →
fw_sec_check_ack ←
fw_sec_action ←
fw_desc_ready →
fw_cache
→ fw_D_port(15:0)
→ fw_S_port(15:0)
→ fw_IP_DA(31:0)
→ fw_IP_SA(31:0)
→ fw_IP_protocol(7:0)
→ fw_IP_header_leght(3:0)
→ fw_ETH_frame_type(15:0)
→ fw_classify_ready
→ fw_classify_result
sys_clk ←
reset ←
Zegar i reset
systemowy
Interfejs kontrolerów MAC
moduł fw_engine.vhd
fw_control
sys_clk ←
reset ←
fw_cache_ready →
fw_cache_clr ←
fw_cache_wr_en ←
fw_cache_wr_action ←
fw_cache_hit →
fw_cache_action →
sys_clk ←
reset ←
fw_cache_action ←
fw_cache_hit ←
fw_cache_wr_action →
fw_cache_wr_en →
fw_cache_clr →
fw_cache_ready ←
fw_desc_ready ←
fw_sec_action →
fw_sec_check_ack →
Rys. 5.5. Struktura wewnętrzna modułu fw_engine.
110
5.2.2. Kontroler pamięci ramkowej
Pamięć ramkowa (Rys. 5.6) zbudowana w oparciu o wewnętrzne zasoby pamięci blokowej
Block SelectRAM+ układu Virtex II Pro firmy Xilinx [134] , podzielona jest na strony. Każdej stronie
odpowiada dedykowany blok pamięci BRAM o pojemności 2304 bajtów. Rozmiar taki pozwala na
zapisanie do pojedynczej strony ramki Ethernetowej o maksymalnej dopuszczonej standardem
długości wynoszącej 1518 bajtów [40]. Liczba stron pamięci ramek dla danego bloku FW jest
parametryzowana i zależy od typu zastosowanego układu FPGA. Opracowana koncepcja organizacji
pamięci ramkowej oraz modułu zarządzającego zwiększa wydajność pracy Firewalla poprzez
umożliwienie transmisji ramek zweryfikowanych pod kątem zgodności z regułami bezpieczeństwa,
niezależnie od analizowania bieżąco napływających danych. Taką funkcjonalność osiągnięto dzięki
wykorzystaniu dwóch niezależnych pamięci ramkowych: jednej dla modułu analizującego ramki,
a drugiej dla toru transmisyjnego TX właściwej karty sieciowej.
MAC 0
MAC 1
RX
TX
FSM sterujący
toru RX
FIFO
deskryptorów RX
Pamięć ramek
Firewall’a
FSM
zarządzający
pustymi stronami
Pamięć ramek
toru TX
FIFO pustych
stron
FSM sterujący
toru TX
FIFO
deskryptorów TX
Moduł weryfikujący reguły
bezpieczeństwa
Kontroler pamięci ramkowej
Rys. 5.6. Schemat blokowy modułu pamięci ramkowej fw_page_mgr.
Dane każdej odebranej ramki trafiają z modułu MAC - kontrolera sieci Ethernet –
jednocześnie do obydwu pamięci pod ten sam adres strony. W tym samym momencie utworzony
zostaje deskryptor parametryczny ramki, zawierający informację o jej długości i numerze strony, pod
jaką została ona zapisana. Deskryptor ten zapisywany jest następnie do kolejki FIFO toru RX, z której
zostanie pobierany przez moduł analizy bezpieczeństwa. Silnik Firewalla posiada w tej sytuacji
niezbędny zestaw informacji, aby rozpocząć pobieranie nagłówka ramki Ethernetowej, na podstawie
którego dokona weryfikacji jej zgodności ze schematem reguł bezpieczeństwa. Taka analiza,
w zależności od liczby reguł wprowadzonych do Firewalla oraz od zastosowanych algorytmów
wyszukujących, może trwać przez czas przekraczający odbiór ramki Ethernetowej o minimalnej
111
długości (60 bajtów). W najbardziej niekorzystnym przypadku, kiedy w trakcie weryfikacji
bezpieczeństwa odbieramy ciąg krótkich następujących po sobie ramek, pamięć może ulec
przepełnieniu (zabraknie wolnych stron), co może skutkować utratą części przesyłanych danych. Aby
temu zapobiec, można w trakcie analizowania ramek transmitować równolegle wszystkie te, które
zostały już zaakceptowane przez moduł weryfikujący, zwalniając tym samym strony w pamięci
ramkowej (Rys. 5.7).
Odczyt pierwszej
ramki
Odczyt drugiej ramki oraz
równoległa transmisja
pierwszej, która została już
wcześniej zweryfikowana
Rys. 5.7. Przebiegi czasowe sygnałów modułu fw_page_mgr w trakcie pracy Firewalla.
Po zakończeniu analizy ramki w klasyfikatorze moduł weryfikujący generuje deskryptor,
który zapisany zostaje do kolejki FIFO TX. Tor nadawczy kontrolera MAC sięga do niej, pobierając
dane o kolejnych ramkach wymagających przesłania, niezależnie od zadań wykonywanych przez
moduł weryfikujący. Zakończenie transmisji danej ramki przez tor TX kończy się zwolnieniem
odpowiedniej strony w pamięci ramkowej i próbą pobrania kolejnego deskryptora z FIFO TX, o ile
istnieją jakiekolwiek dane do przesłania. Zwalnianie stron następuje nie tylko po zakończeniu
transmisji ramki przez tor TX kontrolera MAC, lecz również w momencie odrzucenia danej ramki
w module weryfikującym reguły bezpieczeństwa. Lista pustych stron pamięci ramkowej
przechowywana jest w specjalnej kolejce FIFO, zarządzanej przez dedykowany automat stanów FSM.
Moduł został zaprojektowany w sposób umożliwiający łatwe zwiększenie liczby dostępnych stron
w przypadku wykorzystania nowszych technologicznie układów FPGA.
112
5.2.3. Moduł generujący deskryptor bezpieczeństwa
Zadaniem modułu fw_parser jest generowanie dla każdej przetwarzanej ramki deskryptora
bezpieczeństwa złożonego z następujących pól:
 fw_ETH_frame_type (15:0) – typ ramki Ethernet,
 fw_IP_header_legth (3:0) – długość nagłówka IP,
 fw_IP_protocol (7:0) – typ protokołu IP,
 fw_IP_SA (31:0) – adres źródłowy nagłówka IP,
 fw_IP_DA (31:0) – adres docelowy nagłówka IP,
 fw_S_port (15:0) – port źródłowy nagłówka TCP/UDP,
 fw_D_port (15:0) – port docelowy nagłówka TCP/UDP.
Moduł parsujący odczytuje z kolejki FIFO RX kontrolera pamięci ramkowej fw_page_mgr kolejne
16-bitowe deskryptory parametryczne, zawierające 5-bitowy numer strony pamięci oraz 11-bitowe
pole długości danej ramki. Po zakończeniu procesu weryfikacji danych, sygnalizowanego wysokim
stanem linii fw_sec_check_ack (Rys. 5.8), moduł fw_parser przesyła deskryptor parametryczny dla
toru TX (sygnał fw_fifo_tx_descr_wr) wraz z informacją o akceptacji bądź odrzuceniu analizowanej
ramki (sygnał fw_sec_action).
Zgłoszenie gotowości
deskryptora bezpieczeostwa
Potwierdzenie zakooczenia
weryfikacji ramki
Rys. 5.8. Przebiegi czasowe sygnałów modułu fw_parser w trakcie pracy Firewalla.
5.2.4. Pamięć wspomagająca cache
Poszukując różnorodnych dróg zwiększenia maksymalnej wydajności przetwarzania
danych [114] autor opracował dodatkowy moduł pamięci podręcznej cache (Rys. 5.9), wspomagającej
proces weryfikacji pakietów.
113
Cache Memory
CAM_A : pamięć CAM na
ramki zaakceptowane
clk
← fw_classify_result
fw_sec_drop_page
← fw_classify_ready
→
→ fw_sec_check_ack
← fw_desc_ready
← reset
← sys_clk
← reset
din
sys_clk
- typ ramki ethernetowej
- długość nagłówka IP
- typ protokołu IP
- adres źródłowy nagłówka IP
- adres docelowy nagłówka IP
- port źródłowy nagłówka TCP/UDP
- port docelowy nagłówka TCP/UDP
←
←
fw_ETH_frame_type (15:0)
fw_IP_header_leght (3:0)
fw_IP_protocol (7: 0)
fw_IP_SA (31:0)
fw_IP_DA (31:0)
fw_S_portin (15:0)
fw_D_port (15:0)
Cache Control
myCAM
124 x 32
busy
din (123:0)
match
we
rst
Cache Memory
FSM
Cache Control
FSM
match_addr (31:0)
wr_addr (4:0)
sys_clk
clk
fw_cache_ready
fw_cache_clr
cam_a_wr_addr (4:0)
fw_cache_wr_en
cam_a_wr_en
cam_d_wr_addr (4:0)
CAM_D : pamięć CAM na
ramki odrzucane
clk
fw_cache_wr_drop
fw_cache_ready
CACHE CONTROL
cam_a_busy
reset
fw_desc_ready
fw_cache_clr
fw_cache_wr_en
fw_sec_check_ack
fw_cache_wr_drop
fw_sec_drop_page
cam_d_wr_en
fw_cache_hit
fw_classify_ready
cam_d_busy
fw_cache_drop_page
fw_classify_result
myCAM
124 x 32
busy
din (123:0)
match
CacheHit
we
match_addr (31:0)
cam_a_match
wr_addr (4:0)
fw_cache_hit
fw_cache_hit
cam_d_match
fw_cache_drop_page
Rys. 5.9. Poglądowy schemat blokowy pamięci wspomagającej cache.
Koncepcja funkcjonowania pamięci wspomagającej opiera się na zapamiętywaniu
deskryptorów bezpieczeństwa wraz z odpowiadającą im akcją (odrzucenie lub zaakceptowanie)
w specjalnie do tego celu zaprojektowanym module. Idealnie w ten typ zastosowań wpasowują się
pamięci adresowane zawartością typu CAM, w których informację wyjściową stanowi potwierdzenie
obecności w pamięci danych podanych na jej wejście. W przypadku opracowanego rozwiązania
sygnał wejściowy o szerokości 124 bitów stanowi złożenie wszystkich pól deskryptora
bezpieczeństwa. Aby zapisać w pamięci informację o odrzuceniu ramki bądź jej akceptacji,
wykorzystano dwa niezależne bloki CAM, każdy o pojemności 32 słów, umożliwiające zapamiętanie
łącznie do 32 ramek. Wartość ta jest w pełni parametryzowana, co pozwala na łatwe skalowanie
rozmiaru
pamięci
podręcznej
w przypadku
wykorzystywania
nowszych
układów
FPGA
dysponujących zdecydowanie większą ilością zasobów wewnętrznych.
W przypadku stwierdzenia obecności analizowanego deskryptora w którejkolwiek z komórek
pamięci ramek zaakceptowanych (oznaczonych na rysunku 5.9 jako CAM_A) lub ramek odrzuconych
(oznaczonych na rysunku 5.9 jako CAM_D), sygnał fw_cache_hit przyjmuje wysoki poziom logiczny.
Informacja o akcji, jaka powinna być wykonana w odniesieniu do analizowanej ramki, przenoszona
jest przez sygnały cam_a_match oraz cam_d_match. Ich aktywacja oznacza odpowiednio konieczność
przesłania danych z pamięci ramkowej do toru TX (Rys. 5.10) albo skasowania danej strony pamięci
(dla ramek odrzuconych). W sytuacji niestwierdzenia obecności deskryptora w pamięci
wspomagającej cache, sygnał fw_cache_hit pozostaje na niskim poziomie logicznym, co jest
równoznaczne z wymogiem weryfikacji danej ramki w klasyfikatorze. Wówczas moduł zarządzający
114
fw_control, omówiony szerzej w rozdziale 5.2.5, zgłasza konieczność zapisu nowego deskryptora
bezpieczeństwa pod kolejną dostępną lokalizację w pamięci cache. Jeżeli pamięć wspomagająca
zostanie wypełniona w całości, zapis kolejnych deskryptorów rozpoczyna się ponownie od pierwszego
adresu, tym samym wcześniejsze dane zostają nadpisane.
Sygnalizacja trafienia w pamięd
ramek zaakceptowanych
Sygnalizacja trafienia w cache
Rys. 5.10. Przebiegi czasowe sygnałów modułu fw_cache w trakcie pracy Firewalla.
W pierwszym etapie prac badawczych wykorzystywano pamięci CAM wygenerowane przy
użyciu komercyjnego oprogramowania COREGenerator firmy Xilinx [136]. Jednak ze względu na
brak możliwości zmiany wewnętrznej struktury otrzymanego w ten sposób modułu, autor opracował
alternatywną koncepcję realizacji pamięci CAM, pozwalającą zarówno na optymalizację
wydajnościową, jak również minimalizację ilości niezbędnych zasobów sprzętowych. Bazuje ona na
referencyjnych dokumentacjach pamięci CAM firmy Xilinx [127, 131], wykorzystujących generatory
funkcji z konfigurowalnych bloków logicznych CLB (ang. Configurable Logic Blocks) układów
Virtex II Pro firmy Xilinx, pracujące jako rejestry przesuwne typu SRL16E. Każdy z wierszy matrycy
komórek pamięci CAM (Rys. 5.11) złożony jest z kaskady elementarnych rejestrów SRL16E
włączonych do łańcucha przeniesień (ang. Carry Chain) zbudowanego przy pomocy multiplekserów
MUXCY. Blok kontrolera CAM odpowiada za buforowanie danych wejściowych, a także
generowanie i dekodowanie sygnału trafienia oraz obsługę procesu zapisu danych do pamięci.
Spośród tych trzech funkcjonalności najbardziej złożoną, a zarazem czasochłonną jest zapis danych.
Adres, pod który ma zostać zapisana ramka, odzwierciedla stan sygnału wr_addr. Po konwersji
w dekoderze „gorącej jedynki” (ang. hot one) aktywuje on właściwy wiersz matrycy komórek CAM.
Zapis pojedynczego słowa wejściowego zajmuje 16 cykli sygnału zegarowego. Wynika to
z konieczności wprowadzenia do rejestrów SRL16E 16-bitowych wektorów kodujących części słowa
115
wejściowego. Wewnętrzny licznik zapisu wr_cnt porównywany jest w sekcji komparatorów
z 4-bitowymi fragmentami sygnału wejściowego din. Dzięki temu, dla adresów składowych zgodnych
z danymi wejściowymi, w słowach wpisywanych do poszczególnych rejestrów ustawione zostają
Q
Q Q
...
Q
D D
...
D
...
...
out(n)
match_addr(n)
match_addr(0)
match_addr(1)
din
match
wr_addr
wr_en
clk
busy
jedynki logiczne.
in
Binary to
Hot One
D
en
D
CLK
...
D
CLK
Latches
wr_busy
CE Q
wr_latch
Q
CE
Q
...
Latches
D
wr_counter
...
INIT X”1111"
Comparator
wr_cnt
...
Comparator
In_A(3:0)
out
Comparator
In_A(3:0)
In_A(3:0)
...
CE(0)
CE(1)
CE(n)
...
CLK
CAM Controller
COLUMN 0
In(1)
In(0)
match_addr(0)
match_addr(1)
out
D(n)
din(n)(3:0)
In_B(3:0)
out
D(1)
din(1)(3:0)
In_B(3:0)
out
D(0)
din(0)(3:0)
In_B(3:0)
COLUMN 1
MUXCY
In(n)
Match
Decoder
...
wr_cnt
wr_cnt(3:0)
match
wr_en
clk
...
match_addr(n)
out(1)
out(0)
COLUMN <m>
MUXCY
MUXCY
1
CI
CI
O
D
...
O
DI
S
0
A(3:0)
...
ROW 0
CI
O
DI
S
0
A(3:0)
SRL16E
D
Q
CE INIT X"0000"
A(3:0)
SRL16E
CE INIT X"0000"
CLK
DI
S
0
D
Q
SRL16E
CE INIT X"0000"
CLK
Q
CLK
...
...
MUXCY
1
MUXCY
CI
O
D
ROW 1
...
O
DI
S
0
A(3:0)
SRL16E
D
Q
A(3:0)
SRL16E
CE INIT X"0000"
CLK
DI
S
0
A(3:0)
CE INIT X"0000"
...
CI
O
DI
S
0
MUXCY
CI
D
Q
SRL16E
CE INIT X"0000"
CLK
Q
CLK
...
...
...
..
.
..
.
..
.
..
.
..
.
..
.
MUXCY
1
CI
O
A(3:0)
D
ROW <n>
SRL16E
CE INIT X"0000"
CLK
MUXCY
CI
CI
O
DI
S
0
...
0
D
SRL16E
CE INIT X"0000"
O
DI
S
DI
S
0
A(3:0)
Q
..
.
MUXCY
A(3:0)
D
Q
SRL16E
CE INIT X"0000"
CLK
CLK
Q
CAM Storage
Elements
...
...
Rys. 5.11. Schemat blokowy implementacji pamięci CAM opartej o rejestry przesuwne SRL16E.
116
Po przejściu pamięci CAM w tryb odczytu podane słowo wejściowe adresuje kolumny
rejestrów wewnętrznych we wszystkich wierszach matrycy. Jeżeli wyjście Q każdego z rejestrów
w danym wierszu jest w wysokim stanie logicznym, kontroler pamięci CAM sygnalizuje trafienie
(wysoki poziom logiczny na wyjściu match). Kodowanie wierszy, które zawierają dane zgodne ze
słowem wejściowym, realizowane jest w formie binarnej poprzez sygnał match_addr.
Opracowane rozwiązanie pamięci CAM, w porównaniu do wersji uzyskanej za pomocą
oprogramowania COREGenerator, charakteryzuje się nieznacznie mniejszym zapotrzebowaniem na
zasoby sprzętowe (rzędu kilku procent). Jego główną zaletą jest natomiast możliwość
parametryzowania, pozwalająca na elastyczne dostosowywanie do konfiguracji całego systemu
Firewall, jak również możliwość dalszego rozwoju podnoszącego maksymalną wydajność czy też
redukującego ilość zasobów logicznych niezbędnych do realizacji pamięci.
Porównanie wyników syntezy obu wersji pamięci CAM przedstawia tabela 5.1. Pełny raport
syntezy uwzględniający szczegółową informację o wszystkich rodzajach wykorzystanych zasobów
sprzętowych zamieszczono w dodatku A, punkt 9.9.
Tab. 5.1. Porównanie wykorzystania zasobów sprzętowych komercyjnej wersji pamięci CAM
z opracowaniem własnym autora dla układu Xilinx 2vp30ff896-7.
Wersja pamięci
CAM 124 bity
Opracowanie własne autora
CAM CoreGen 6
Liczba wierszy
pamięci
16
32
64
128
256
16
32
64
128
256
Liczba bloków
Slice
675
1172
2257
4442
8792
632
1119
2180
4310
8568
709
1240
2312
4483
8790
622
1141
2173
4247
8393
148,252
139,019
133,501
123,075
106,736
148,252
139,019
121,370
124,320
124,320
Liczba
4-wejściowych
LUT
Maksymalna
częstotliwość
pracy [MHz]
5.2.5. Moduł zarządzający
Funkcjonowaniem bloku silnika systemu Firewall steruje moduł zarządzający fw_control.
Monitoruje on nieustająco kolejkę deskryptorów bezpieczeństwa, tak, aby po pojawieniu się nowych
danych niezwłocznie rozpocząć procedurę ich analizy, według algorytmu zaprezentowanego na
rysunku 5.12. Wpierw sprawdzana jest obecność danego deskryptora w pamięci wspomagającej
cache. Jeżeli taka sytuacja ma miejsce, w ciągu jednego cyklu zegara systemowego odczytywana jest
akcja, jaką należy dokonać wobec analizowanej ramki. Proces przetwarzania ramki od momentu
otrzymania nowego deskryptora bezpieczeństwa do wysłania potwierdzenia zakończenia weryfikacji
zajmuje w tym wypadku trzy pełne cykle zegarowe (Rys. 5.13).
Przy braku obecności danego deskryptora w pamięci wspomagającej cache moduł fw_control
oczekuje na zakończenie weryfikacji danych w klasyfikatorze sprzętowym, sygnalizowane wysokim
117
poziomem logicznym na linii fw_classify_ready. Klasyfikator przekazuje do modułu zarządzającego,
za pomocą sygnału fw_classify_result, informację o akcji niezbędnej do wykonania wobec
przetwarzanej ramki (odrzucenie bądź transmisja do stacji docelowej).
Sprawdź deskryptor
Czy jest nowy
deskryptor?
Nie
Tak
Sprawdź cache
Czy
deskryptor
jest
w cache’u?
Nie
Oczekuj na
weryfikację
Tak
Wyślij
potwierdzenie
weryfikacji
Ramka
zweryfikowana?
Nie
Tak
Zapisz deskryptor
do pamięci cache
Rys. 5.12. Algorytm funkcjonowania modułu zarządzającego fw_control.
Wówczas moduł zarządzający inicjuje zapis nowego deskryptora bezpieczeństwa do pamięci cache,
a następnie wysyła potwierdzenie zakończenia weryfikacji danych (wysoki poziom logiczny na linii
fw_sec_check_ack).
Otrzymanie
deskryptora
Oczekiwanie na
deskryptor
Wysłanie potwierdzenia
weryfikacji
Trafienie w
cache
Informacja o
akcji
Rys. 5.13. Przebiegi czasowe sygnałów modułu fw_control w trakcie pracy Firewalla.
118
5.2.6. Wyniki implementacji
Opracowany moduł silnika Firewalla został zaimplementowany na platformie testowej FPGA
z układem Xilinx Virtex II Pro XC2VP30. Wyniki wykorzystania zasobów sprzętowych logiki
reprogramowalnej oraz uzyskane parametry czasowe bloku silnika przedstawiono w tabeli 5.2. Pełne
wyniki implementacji poszczególnych modułów składowych zamieszczono w dodatku B, punkt 9.10.
Tab. 5.2. Podsumowanie wykorzystania zasobów sprzętowych układów FPGA przez silnik Firewalla.
Rodzaj zasobów
Virtex
Typ układu 2vp30ff896-7
Liczba bloków Slice
2492
Liczba 4-wejściowych LUT
2527
Parametry czasowe
Maks. częstotliwość
Maks. opóźnienie ścieżki kombinacyjnej
190,422 MHz
3,867 ns
Maksymalna częstotliwość pracy układu raportowana przez narzędzia do syntezy logicznej,
wynosi około 190 MHz. Jest ona limitowana głównie wydajnością zastosowanej pamięci CAM. Warto
w tym miejscu zwrócić uwagę na fakt, że częstotliwość uzyskana przy analizie całego bloku silnika
jest większa o około 50 MHz (dla pamięci CAM o pojemności 32 słów) od wskazanej w tabeli 5.1,
zawierającej dane dotyczące syntezy różnych wariantów pamięci CAM. Wynika to z rezygnacji
z implementacji bloku dekodera adresu trafienia wewnątrz struktury kontrolera CAM w finalnej wersji
silnika. Usunięcie zbędnej logiki kombinacyjnej zwiększa w tym wypadku efektywność pracy układu
o ponad 35%.
5.3. Sprzętowy klasyfikator pakietów
Zadaniem klasyfikatora pakietów w sprzętowym systemie bezpieczeństwa typu Firewall jest
weryfikacja zgodności przetwarzanych danych z obowiązującym schematem polityki bezpieczeństwa.
Dokonuje się ona poprzez przyporządkowanie analizowanych pakietów do zestawu odpowiadających
im reguł bezpieczeństwa na podstawie informacji zawartych w nagłówkach protokołu IP. Ze względu
na uwarunkowania implementacyjne proces klasyfikacji podzielony jest na dwa odrębne obszary:
adresację sieciową wraz z informacją o typie protokołu oraz porty sieciowe.
Najbardziej popularną metodą sprzętowego klasyfikowania adresów jest wykorzystanie
pamięci trójwartościowych TCAM [31, 32, 33, 81, 94, 97]. Wynika to ze specyficznych własności
tego typu pamięci, a przede wszystkim z ich zdolności do przechowywania informacji o wartościach
nieistotnych, oznaczanych w opisach znakiem gwiazdki „*”. Taka funkcjonalność idealnie odpowiada
119
potrzebom klasyfikatora adresów sieciowych. Definicje reguł bezpieczeństwa w części dotyczącej
adresacji pakietów złożone są z dwóch elementów: 32-bitowego adresu sieciowego protokołu IP
oraz 32-bitowej maski podsieci (ang. Subnetwork Mask), wyodrębniającej z adresu IP część sieciową
oraz część hosta. Pamięć TCAM umożliwia zapisanie tych dwóch wartości dla poszczególnych reguł
bezpieczeństwa i bardzo szybkie uzyskanie informacji o trafieniu (w przeciągu jednego cyklu
zegarowego).
Pomimo wielu zalet pamięci TCAM nie są optymalnym rozwiązaniem dla celów klasyfikacji
portów, w szczególności dla reguł zawierających ich zakresy [5, 58, 62, 97]. Niestety, takie przypadki
są powszechne w produkcyjnych systemach Firewall, gdzie dla uzyskania zamierzonego kształtu
polityki bezpieczeństwa administratorzy wielokrotnie posługują się definicjami zawierającymi
szerokie przedziały portów. Aktualnie wiele zespołów badawczych na całym świecie koncentruje się
na poszukiwaniu szybkich oraz efektywnych (od strony zapotrzebowania na zasoby pamięciowe)
rozwiązań analizowania zakresów portów [1, 5, 58, 62, 93, 97].
5.3.1. Schemat blokowy
Poglądowy schemat blokowy modułu klasyfikatora pakietów został przedstawiony na rysunku
5.14, a opis funkcji poszczególnych sygnałów zamieszczono w dodatku A, punkt 8.8. Niezbędne
do przeprowadzenia weryfikacji przetwarzanych pakietów informacje wejściowe przekazywane są do
modułu ze specjalnego bloku pamięci ramkowej, szerzej omawianego w rozdziale 5.2.2. Opracowane
przez autora rozwiązanie pozwala na równoczesną analizę danych pochodzących z wielu interfejsów
sieciowych, przy wykorzystaniu algorytmu karuzelowego (ang. Round-Robin), sprawdzającego
cyklicznie dostępność nowych deskryptorów. Jeżeli dla aktualnie monitorowanego wejścia zgłoszony
zostanie sygnał obecności deskryptora, główny automat sterujący rozpoczyna procedurę weryfikacji
pakietu, blokując proces kolejkowania na czas niezbędny do jej przeprowadzenia. Odczytywane
deskryptory bezpieczeństwa składają się z następujących pól nagłówków przetwarzanych pakietów:
 typu protokołu sieciowego (16 bitów),
 typu protokołu transportowego (8 bitów),
 adresu źródłowego (32 bity),
 adresu docelowego (32 bity),
 numeru portu źródłowego (16 bitów),
 numeru portu docelowego (16 bitów).
Pierwsze cztery pola o łącznej długości 88 bitów trafiają do modułu filtrującego adresy oraz typ
protokołu. Dwa ostatnie, o łącznej długości 32 bitów, kierowane są do modułu filtrującego porty.
Ponieważ wynikowa informacja o trafionych regułach generowana jest na podstawie iloczynu
wektorów pochodzących z dwóch niezależnych bloków filtrujących, niezbędne jest, aby każdy z nich
dostarczał informację wyjściową w formie binarnej niekodowanej (poszczególnym regułom
120
odpowiadają dedykowane wyjścia sygnałowe). Wynik iloczynu logicznego jest następnie zamieniany
w priorytetowym dekoderze „gorącej jedynki” (ang. hot one) na adres binarny trafionej reguły,
znajdującej się najwyżej w hierarchii. Na jego podstawie z pamięci akcji odczytywana jest informacja
o dalszym postępowaniu z analizowanym pakietem.
Ilość obsługiwanych interfejsów zależy od ich szybkości pracy
(suma przepustowości nie powinna przekraczać maksymalnej
wydajności klasyfikatora)
Konfiguracja pamięci akcji
Konfiguracja filtra portów
Konfiguracja filtra adresów
Inicjalizacja polityki
Akcja dla pakietu
Zakończenie analizy
Nagłówek IP eth<n>
Nagłówek IP eth1
Nagłówek IP eth0
...
FSM sterujący
Round-Robin
konfiguracja
port źródłowy
port docelowy
konfiguracja
adr. źródłowy
adr. docelowy
typ protokołu
Filtracja adresów
i typu protokołu
Filtracja portów
trafione
reguły portów
trafione
reguły adresów
i protokołu
Sygnalizacja trafienia w
jakąkolwiek regułę
...
reguły którym odpowiada
analizowany pakiet
Detektor trafienia
Priorytetowy
dekoder Hot-One
Informacja o akcji dla
analizowanego pakietu
konfiguracja
Adres najwyższej w
hierarchii trafionej reguły
Pamięć akcji
Rys. 5.14. Schemat blokowy sprzętowego klasyfikatora pakietów.
W obecnej implementacji możliwe są dwa scenariusze: odrzucenie bądź akceptacja i w jej
efekcie - retransmisja pakietu. Równocześnie w bloku detektora trafienia generowany jest sygnał
potwierdzający wystąpienie przynajmniej jednej reguły, której odpowiada analizowany pakiet.
W wypadku, gdyby taka reguła nie istniała, pakiet domyślnie ulega odrzuceniu. Ostatecznie
informacja o zakończeniu analizy wraz z potwierdzeniem akcji trafia z modułu klasyfikatora do bloku
pamięci ramkowej. Dla pakietów zaakceptowanych rozpoczyna się wówczas procedura przesyłania
danych z pamięci do interfejsu nadawczego, zaś w przypadku odrzucenia pakietu - odpowiadająca mu
strona pamięci zostaje zwolniona.
Szczegółowa struktura sprzętowego klasyfikatora pakietów, uwzględniająca wewnętrzne linie
sygnałowe oraz wyprowadzenia poszczególnych interfejsów została przedstawiona na rysunku 5.15.
121
action_we
action_ram_data
action_wr_addr
clas_0_result
clas_0_ready
clas_0_desc_ready
clas_0_D_port
clas_0_S_port
clas_0_IP_DA
clas_0_IP_SA
clas_0_IP_protocol
clas_0_ETH_frame_type
clk
rst
port_wr_addr
port_wr_data
port_we
address_wr_addr
address_wr_data
address_we
policy_we
clas_1_result
clas_1_ready
clas_1_desc_ready
clas_1_D_port
clas_1_S_port
clas_1_IP_DA
clas_1_IP_SA
clas_1_IP_protocol
clas_1_ETH_frame_type
clas_0_ETH_frame_type(15:0)
clas_0_IP_protocol(7:0)
clas_0_IP_SA(31:0)
clas_0_IP_DA(31:0)
clas_0_S_port(15:0)
clas_0_D_port(15:0)
clas_0_desc_ready
clas_0_ready
clas_0_result
clas_1_ETH_frame_type(15:0)
clas_1_IP_protocol(7:0)
clas_1_IP_SA(31:0)
clas_1_IP_DA(31:0)
clas_1_S_port(15:0)
clas_1_D_port(15:0)
clas_1_desc_ready
clas_1_ready
clas_1_result
policy_we
rst
clk
address_data_in
source_port_in
dest_port_in
Main FSM
action
is_matched
Round-Robin
rst
clk
Address Filter
in(n)
port_match
wr_data(21:0)
wr_addr(8:0)
din_in(87:0)
in(n)
wr_data(27:0)
wr_addr(8:0)
WEA
Hot One to
binary
ENA
DOA(7:0)
DOPA
DOB(7:0)
ADDRB(10:0)
DIB(7:0)
"0"
out(3:0)
DOPB
open
open
open
DIPB
WEB
CLKB
in(1)
in(0)
we
DIPA
SSRA
'1'
...
port_filter
...
clk
...
Port Filter
DIA(7:0)
CLKA
in(1)
in(0)
(nr_rules-1:0)
"00000000"
"0"
'0'
Match
out
detector
matched_addr
we
RAMB16_S9_S9
ADDRA(10:0)
address_filter
...
clk
Action RAM
matched_addr
SSRB
'1'
match
ENB
(nr_rules-1:0)
rule_match(nr_rules-1:0)
source_port_in(15:0)
destination_port_in(15:0)
Rys. 5.15. Struktura wewnętrzna sprzętowego klasyfikatora pakietów.
5.3.2. Filtr adresów sieciowych
Moduł address_filter filtrujący adresy sieciowe oraz typ protokołu został zrealizowany
w oparciu o pamięci trójwartościowe TCAM [107]. Jego schemat blokowy przedstawiono na rysunku
5.16. Zasadniczym elementem filtru jest matryca komórek pamięci TCAM (opisana szerzej w dalszej
części
rozdziału)
uzupełniona
niezbędnymi
elementami
sterującymi.
Część
deskryptora
bezpieczeństwa o długości 88 bitów, zawierająca informację o adresach sieciowych oraz typie
protokołu, zostaje podana na wejście multipleksera bloku sterującego. Jeżeli sygnał inicjalizacji
polityki bezpieczeństwa (address_we) jest w niskim stanie logicznym, matryca pamięci TCAM
pracuje w trybie odczytu. Na jej wejście poprzez multiplekser trafiają dane deskryptora. Z kolei na
wyjściu pamięci pojawia się informacja o regułach, którym odpowiada weryfikowany pakiet. Czas
trwania procesu odczytu jest typowy dla TCAM i wynosi jeden cykl zegara. Natomiast, gdy sygnał
inicjalizacji jest w stanie wysokim, pamięć przechodzi do trybu zapisu. Wówczas na wejścia matrycy
komórek podawane są z multipleksera adresy inkrementowane w zakresie od 0 do 15, służące
zapisaniu wewnętrznych wartości poszczególnych komórek pamięci TCAM danymi konfiguracji
odpowiadającymi definicjom poszczególnych reguł bezpieczeństwa. Na podstawie numeru reguły
122
podawanego na wejście bloku sterującego, dekoder „gorącej jedynki” generuje sygnał zezwalający na
zapis odpowiedniego wiersza. Proces zapisu definicji pojedynczej reguły zajmuje 16 cykli
zegarowych.
Adres pamięci RAM16X1S
Sygnał zezwolenia
zapisu dla
poszczególnych reguł
Multiplekser
Weryfikowany adres wraz z typem protokołu
Numer reguły
Inicjalizacja
Dane konfiguracji
Dekoder
Hot-One
Weryfikowany adres
wraz z typem protokołu
lub dla aktywnej inicjalizacji
adresacja pamięci RAM16X1S
Sterowanie filtra adresów i typu protokołu
Dane wejściowe/
adres dla danych
konfiguracji
Wiersz 0
Zapis konfiguracji
(dane reguły 0)
Reguła 0
Dane wejściowe/
adres dla danych
konfiguracji
(dane reguły 1)
Dane wejściowe/
adres dla danych
konfiguracji
Dane konfiguracji
Wiersz <n>
Zapis konfiguracji
(dane reguły <n>)
Reguła 1
...
Wiersz 1
Zapis konfiguracji
...
Dane konfiguracji
Reguła <n>
Reguły, którym odpowiada analizowany pakiet
Dane konfiguracji
Matryca komórek pamięci TCAM
Rys. 5.16. Schemat blokowy filtru adresów.
Ponieważ wynikowa informacja o trafionych regułach generowana jest na podstawie iloczynu
wektorów pochodzących z dwóch niezależnych bloków filtrujących, niezbędne jest, aby każdy z nich
dostarczał informację wyjściową w formie binarnej niekodowanej (każdej regule odpowiada
dedykowane wyjście sygnałowe). Ten wymóg funkcjonalny narzuca duże ograniczenia odnośnie
sposobu realizacji matrycy komórek TCAM, uniemożliwiając wykorzystanie algorytmów grupowania
filtrów [97] bądź złożonych kaskad bloków LUT [81].
Na początku realizacji projektu, jako referencyjną metodę implementacji pamięci TCAM,
wybrano rozwiązanie wykorzystujące komercyjne oprogramowanie COREGenerator firmy Xilinx.
Jednak, ze względu na brak możliwości zmiany wewnętrznej struktury otrzymanego w ten sposób
modułu pamięci, autor opracował alternatywną koncepcję realizacji TCAM, pozwalającą zarówno na
optymalizację wydajnościową, jak również minimalizację ilości niezbędnych zasobów sprzętowych.
Opiera się ona na wykorzystaniu generatorów funkcji z konfigurowalnych bloków logicznych CLB
układów Virtex II Pro firmy Xilinx, pracujących jako pamięci RAM16X1S (jednowejściowa pamięć
123
RAM przechowująca 16 wartości jednobitowych). Każdy z wierszy TCAM zbudowany jest z kaskady
elementarnych pamięci RAM16X1S włączonych do łańcucha przeniesień (ang. Carry Chain),
zbudowanego przy pomocy multiplekserów MUXCY, wchodzących w skład bloków CLB. Strukturę
...
match_addr(n)
match_addr(0)
match_addr(1)
wr_data(tcam_width/4)–1:0)
din(tcam_width-1:0)
we
wr_addr
clk
<rule_nr>&<3:0 ram addr>
opisywanej pamięci TCAM przedstawiono na rysunku 5.17.
en
<rule_nr>
WE(0:n)
out(n)
Binary to
Hot One
..
.
<3:0 ram addr>
...
out(1)
out(0)
in_A
en
Data
Multiplexer
in
Address Filter
out
in_B
COLUMN 0
D(m)
A(m)(3:0)
D(1)
A(1)(3:0)
WE(0)
D(0)
A(0)(3:0)
WE(1)
WE(n)
...
COLUMN 1
MUXCY
...
match_addr(n)
match_addr(0)
match_addr(1)
A(0:(m*4)-1)
COLUMN <m>
MUXCY
MUXCY
1
CI
CI
O
WE
WCLK
A(3:0)
D
O
WE
WCLK
INIT X"0000"
D
O
DI
S
0
RAM16X1S
WCLK
A(3:0)
O
INIT X"0000"
WE
...
DI
S
0
RAM16X1S
D
INIT X"0000"
A(3:0)
...
ROW 0
RAM16X1S
0
CI
O
DI
S
O
...
...
MUXCY
MUXCY
CI
O
WE
WCLK
O
DI
S
0
A(3:0)
D
O
WE
WCLK
INIT X"0000"
D
INIT X"0000"
WCLK
A(3:0)
O
RAM16X1S
WE
INIT X"0000"
D
RAM16X1S
A(3:0)
ROW 1
...
DI
S
0
...
CI
O
DI
S
0
MUXCY
CI
RAM16X1S
1
O
...
...
...
..
.
..
.
..
.
..
.
MUXCY
1
MUXCY
CI
O
WE
WCLK
INIT X"0000"
WCLK
D
...
O
DI
S
0
A(3:0)
O
CI
O
RAM16X1S
WE
INIT X"0000"
D
RAM16X1S
A(3:0)
ROW <n>
MUXCY
CI
DI
S
0
..
.
DI
S
0
A(3:0)
D
O
WE
WCLK
...
...
INIT X"0000"
..
.
RAM16X1S
..
.
O
TCAM
Storage
Elements
Rys. 5.17. Struktura wewnętrzna opracowanej pamięci TCAM opartej o elementy RAM16X1S.
Do poszczególnych komórek pamięci filtru adresów zapisane zostają odpowiednio
przygotowane definicje reguł bezpieczeństwa. Przykładowa konfiguracja wewnętrzna pojedynczej
124
czterowejściowej komórki pamięci TCAM, wykrywającej adres „10**” (gdzie „*” oznacza wartość
nieistotną), została przedstawiona w tabeli 5.3.
Tab. 5.3. Przykładowa konfiguracja pojedynczej pamięci RAM16X1S.
Adres
Wartość
Adres
Wartość
0000
0
1000
1
0001
0
1001
1
0010
0
1010
1
0011
0
1011
1
0100
0101
0
0
1100
1101
0
0
0110
0
1110
0
0111
0
1111
0
Dla wszystkich kombinacji danych wejściowych rozpoczynających się wartością „10”
(zaciemniona część tabeli 5.3) pamięć zwraca jedynkę logiczną. Chcąc uzyskać większą szerokość
szyny wejściowej, konieczne jest połączenie niezbędnej ilości elementów RAM16X1S w łańcuch
przeniesień (wymagana szerokość wejścia podzielona przez 4). Każde z wyjść pojedynczych pamięci
steruje multiplekserem MUXCY. Jeżeli pamięć zwraca wartość ‘1’, jest ona propagowana przez
MUXCY do kolejnej pozycji w łańcuchu, pod warunkiem, że na wyjściu poprzedzającego
multipleksera również występowała jedynka logiczna. Sygnał trafienia w regułę jest aktywny jedynie
wówczas, kiedy wyjścia wszystkich pamięci RAM16X1S w łańcuchu przeniesień są w stanie
wysokim. Ponieważ szerokość szyny danych modułu filtrującego adresy i typ protokołu wynosi 88
bitów, pojedynczy wiersz pamięci TCAM musi zawierać 22 elementy RAM16X1S. Zgodnie
z przyjętymi założeniami poszczególnym regułom odpowiadają dedykowane linie sygnalizujące
trafienie (Rys. 5.18) wchodzące w skład wektora match. Kompletna informacja o regułach, którym
odpowiada analizowany pakiet, dostępna jest już po jednym takcie zegara systemowego.
Trafienie w reguły nr
0 oraz 6
Rys. 5.18. Przebiegi czasowe sygnałów modułu filtrującego adresy w trakcie pracy Firewalla.
Opisane rozwiązanie zostało zaimplementowane i przetestowane praktycznie przy pomocy
płyty uruchomieniowej Digilent XUP z układem Virtex II Pro XC2VP30. W tabeli 5.4 przedstawiono
125
porównanie wykorzystania zasobów przez różne warianty realizacji pamięci TCAM o szerokości 88
bitów zawierającej 32 wiersze danych. Pełny raport syntezy, uwzględniający szczegółową informację
o wszystkich rodzajach wykorzystanych zasobów sprzętowych, zamieszczono w dodatku B, punkt
9.11.
Tab. 5.4. Porównanie wykorzystania zasobów sprzętowych komercyjnej wersji pamięci TCAM
z koncepcją autorską dla układu Xilinx 2vp30ff896-7.
Wersja pamięci CAM 124 bity
CAM CoreGen 6
Liczba wierszy pamięci
Opracowanie własne
autora
88
88
Liczba bloków Slice
1795
810
Liczba 4-wejściowych LUT
2073
1536
130,416 MHz
257,732 MHz
Maksymalna częstotliwość pracy
Opracowana przez autora metoda implementacji pamięci TCAM bazująca na elementach
RAM16X1S jest ponad dwukrotnie bardziej efektywna od strony zapotrzebowania na zasoby
sprzętowe w porównaniu do wersji modułu pamięci wygenerowanego za pomocą oprogramowania
Xilinx COREGenerator. Współczynnik liczby bloków Slice na pojedynczy wiersz TCAM
wynosi [112]:
 25,3 dla wersji z pamięciami RAM16X1S,
 56,1 dla pamięci TCAM wygenerowanej za pomocą oprogramowania CoreGen 6 firmy
Xilinx.
Dodatkową korzyścią płynącą ze zredukowania niezbędnych zasobów logiki reprogramowalnej jest
uzyskanie lepszych parametrów czasowych. W związku ze sposobem funkcjonowania filtru
o ostatecznej wydajności przetwarzania danych decyduje minimalny czas ustalenia poziomu sygnału
wejściowego przed zmianą zbocza zegara. Teoretycznie wyliczona maksymalna częstotliwość pracy
modułu filtrującego wynosi na tej podstawie około:
 257 MHz dla wersji TCAM z pamięciami RAM16X1S,
 130 MHz dla modułu TCAM wygenerowanego za pomocą oprogramowania CoreGen 6
firmy Xilinx [112].
5.3.3. Filtr portów sieciowych
Koncepcja realizacji szybkiego i skalowalnego filtru portów opiera się na zastosowaniu
równoległego przetwarzania bazy reguł bezpieczeństwa. Kluczowym elementem opracowanego
rozwiązania, przedstawionego schematycznie na rysunku 5.19, jest matryca bloków filtrujących.
126
Dane wejściowe
Konfiguracja
Dekoder
Hot-One
Sygnał zezwolenia
zapisu dla
poszczególnych reguł
Filtry portów docelowych
Filtry portów źródłowych
Adresacja
Filtry portów źródłowych
Filtry portów docelowych
Numer reguły
Inicjalizacja
Sterowanie filtra portów
Adres dla danych
konfiguracji
Dane konfiguracji
Filtr portu
źródłowego
Adres dla danych
konfiguracji
Filtr portu
docelowego
Adres dla danych
konfiguracji
Dane konfiguracji
Reguła <n>
Zapis konfiguracji
Dane
wejściowe
...
...
Zapis konfiguracji
...
Dane konfiguracji
Dane
wejściowe
Filtr portu
źródłowego
Reguły, którym odpowiada analizowany pakiet
Reguła 0
Zapis konfiguracji
Dane
wejściowe
Adres dla danych
konfiguracji
Dane konfiguracji
Zapis konfiguracji
Filtr portu
docelowego
Dane
wejściowe
Matryca elementów filtrujących
Rys. 5.19. Schemat blokowy filtru portów.
Każdy wiersz odpowiadający pojedynczej regule zawiera po dwa takie elementy: jeden
weryfikujący porty źródłowe, drugi - porty docelowe [113]. Końcowy rezultat klasyfikacji jest
wynikiem iloczynu logicznego wyjść bloków filtrujących. Jeżeli sygnał inicjalizacji polityki
bezpieczeństwa config_wr jest w niskim stanie logicznym, filtr portów pracuje w trybie odczytu.
Wówczas część deskryptora bezpieczeństwa o długości 32 bitów, zawierająca informację o portach
źródłowych i docelowych, zostaje podana na wejście matrycy elementów filtrujących. Na jej wyjściu
pojawia się informacja o regułach, którym odpowiada weryfikowany pakiet (Rys. 5.20). Czas trwania
procesu odczytu wynosi jeden cykl zegara. Jest on niezależny od liczby reguł, jak również od ilości
i szerokości zakresów portów w nich zdefiniowanych.
Dla aktywnego sygnału inicjalizacji filtr przechodzi do trybu zapisu konfiguracji wewnętrznej.
Wówczas na wejścia matrycy elementów filtrujących podawane są z bloku sterującego adresy
inkrementowane w zakresie od 0 do 15. Służą one wpisaniu do poszczególnych komórek pamięci
filtru danych konfiguracji odzwierciedlającej obowiązujący schemat polityki bezpieczeństwa. Na
podstawie numeru reguły obecnego na wejściu bloku sterującego, dekoder „gorącej jedynki” generuje
sygnał zezwolenia na zapis odpowiedniego wiersza. Proces zapisu definicji pojedynczej reguły
zajmuje 16 cykli zegarowych.
127
Trafione reguły
portów źródłowych
Wynikowy zestaw
trafionych reguł
Trafione reguły
portów docelowych
Rys. 5.20. Przebiegi czasowe sygnałów modułu filtrującego porty w trakcie pracy Firewalla.
Element filtrujący, którego schemat wewnętrzny przedstawiono na rysunku 5.20,
wykorzystuje ideę łańcucha komparatorów zaprezentowaną w [97]. Wariant opracowany przez autora
nie bazuje jednak na zmodyfikowanej pamięci TCAM, lecz opiera się na zastosowaniu kaskad
dwuportowych pamięci RAM16X1D, wchodzących w skład zasobów sprzętowych układów
reprogramowalnych FPGA produkcji firmy Xilinx [125]. Poszczególne pamięci pracują jako
elementarne komparatory zakresów cząstkowych.
Działanie
czterobitowego
komparatora
0,
złożonego
z
pary
pamięci
RAM_A_0
oraz RAM_B_0 (Rys. 5.21), można przedstawić za pomocą następującej zależności:
(5.1)
QBA0  f 0 ( D0 , L0 , H 0 ) ,
gdzie:
QBA0 – stan wyjścia komparatora 0,
 00, ( D0  L0  H 0  L0 )  ( D0  L0  H 0 )
,
 01, L0  D0  H 0

f 0 ( D0 , L0 , H 0 )  
10, D0  H 0  H 0  L0

 11, D0  L0  D0  H 0

(5.2)
D0 – dane wejściowe komparatora 0,
L0 – dolna granica zakresu cząstkowego komparatora 0,
H0 – górna granica zakresu cząstkowego komparatora 0.
Szerokość analizowanego zakresu dla komparatora 0, oznaczona jako W0, wynosi:
 H  L0 , ( H 0  L0 )  2
W0   0
2, ( H 0  L0 )  2

,
(5.3)
Pozostałe komparatory, oprócz dwubitowych danych wejściowych, wykorzystują również
informację o stanie wyjść komparatora poprzedzającego QBA
i-1
oraz o szerokości poprzedzającego
zakresu cząstkowego Wi-1. Do opisu sposobu ich działania zdefiniujmy następujące funkcje:
 00, ( Di  Li  H i  Li )  ( Di  Li  H i )
,

 01, Li  Di  H i
f 1 ( Di , Li , H i )  
10, Di  H i  H i  Li


 11, Di  Li  Di  H i
(5.4)
128
Config_data(13:0)
<RAM_B_00> & <RAM_A_00>,
<RAM_B_01> & <RAM_A_01>,
…
<RAM_B_15> & <RAM_A_15>,
RAM_A_0
DPRA0
DPRA1
DPRA2
DPRA3
SPO
A3
A2
A1
A0
DPO
SPO
A3
A2
A1
A0
port_in(15:0)
DPO
wr_data_A(0:7)
wr_data_B(0:7)
DPO
SPO
A3
A2
A1
A0
DPO
SPO
A3
A2
A1
A0
port_in(15:0)
RAM_A_1
DPRA0
DPRA1
DPRA2
DPRA3
D
WE
WCLK
RAM_B_1
DPRA0
DPRA1
DPRA2
DPRA3
D
WE
WCLK
RAM_A_2
DPRA0
DPRA1
DPRA2
DPRA3
D
WE
WCLK
RAM_B_2
DPRA0
DPRA1
DPRA2
DPRA3
D
WE
WCLK
A0
A1
A2
A3
SPO
DPO
A0
A1
A2
A3
SPO
DPO
...
...
...
...
...
...
...
...
...
...
...
RAM_A_6
DPRA0
DPRA1
DPRA2
DPRA3
D
WE
WCLK
RAM_B_6
DPRA0
DPRA1
DPRA2
DPRA3
D
WE
WCLK
INIT X"0000"
INIT X"0000"
D
WE
WCLK
INIT X"0000"
INIT X"0000"
config_addr(0)
RAM16X1D
RAM_B_0
DPRA0
DPRA1
DPRA2
DPRA3
D
INIT X"0000"
INIT X"0000"
config_addr(3:0)
config_addr(3)
config_addr(2)
config_addr(1)
WE
...
...
RAM16X1D
RAM16X1D
RAM16X1D
RAM16X1D
config_data(13:0)
WCLK
INIT X"0000"
INIT X"0000"
wr_data_A(0)
RAM16X1D
RAM16X1D
RAM16X1D
clk
config_wr
Conf_address:
0:
1:
...
F:
port_in(12)
clk
config_wr
wr_data_B(0)
port_in(15)
port_in(14)
port_in(13)
wr_data_B(1)
wr_data_A(1)
port_in(11)
port_in(10)
wr_data_B(2)
wr_data_A(2)
port_in(9)
port_in(8)
wr_data_B(6)
wr_data_A(6)
port_in(1)
port_in(0)
A0
A1
A2
A3
SPO
DPO
A0
A1
A2
A3
SPO
DPO
match
Rys. 5.21. Schemat wewnętrzny pojedynczego elementu filtrującego.
129
 00, Di  Li

f 2 ( Di , Li , H i )   01, Di  Li

 11, Di  Li
,
(5.5)
 01, Di  H i

f 3 ( Di , Li , H i )   10, Di  H i

 11, Di  H i
,
(5.6)
 H i  Li , Li  H i  ( H i  Li )  2  ( H i  Li )  Wi 1

Wi   Wi 1 , Li  H i  ( H i  Li )  2  Wi 1  ( H i  Li ) ,

2, Li  H i  ( H i  Li )  2

(5.7)
gdzie:
Wi – szerokość przedziału cząstkowego dla i-tego komparatora,
Di – dane wejściowe,
Li – dolna granica zakresu cząstkowego,
Hi – górna granica zakresu cząstkowego.
Możemy wyróżnić trzy przypadki funkcjonowania komparatora QBA i dla i >0 w zależności od
szerokości przedziału poprzedzającego:
dla Wi-1=0
 f ( D , L , H ), QBA i 1  00 ,
QBA i   1 i i i
11, QBA i 1  11

(5.8)
dla Wi-1=1
 f 2 ( Di , Li , H i ), QBA i 1  00

QBA i   f3 ( Di , Li , H i ), QBA i 1  10 ,

11, QBA i 1  11

(5.9)
dla Wi-1=2
QBA i
 f 2 ( Di , Li , H i ),

01,


f 3 ( Di , Li , H i ),

11,


QBA i 1  00
QBA i 1  01 .
QBA i 1  10
QBA i 1  11
(5.10)
Analizowany port odpowiada danej regule, jeżeli stan wyjść ostatniego komparatora jest różny
od wartości „11”. Sygnał trafienia dla takiego przypadku generuje dodatkowa bramka NAND.
Ponieważ pojedynczy port sieciowy ma szerokość 16 bitów, element filtrujący składa się z 7
komparatorów (1 czterobitowy oraz 6 dwubitowych). Każdy z nich wykorzystuje po dwie pamięci
RAM16X1D, co daje sumaryczną liczbę 28 pamięci na jedną regułę opisującą dwa porty: źródłowy
i docelowy. Pamięci dwuportowe (litera D w nazwie komponentu) wybrano ze względu na łatwiejszą
realizację procesu zapisu konfiguracji.
Implementacja oraz praktyczne testy opracowanego rozwiązania na platformie Digilent XUP
z układem Virtex II Pro XC2VP30 wykazały, że badany moduł o pojemności 32 reguł bezpieczeństwa
130
alokował 1829 bloków Slice (Tab. 5.5), co stanowi 13% wszystkich dostępnych zasobów sprzętowych
układu FPGA. Maksymalna częstotliwość jego pracy wynosi około 162 MHz; ponieważ proces
weryfikacji zajmuje jeden cykl zegara, teoretyczna przepustowość opracowanego filtru portów to
około 160 milionów pakietów na sekundę [113]. Pełny raport syntezy zamieszczono w dodatki B,
punkt 9.12.
Tab. 5.5. Wykorzystanie zasobów logiki reprogramowalnej FPGA przez filtr portów.
Rodzaj zasobów
Virtex
2vp30ff896-7
Typ układu
Liczba bloków Slice
1829
Liczba 4-wejściowych LUT
1856
Parametry czasowe
Maks. częstotliwość
Maks. opóźnienie ścieżki kombinacyjnej
162,973 MHz
0,878 ns
5.3.4. Moduł sterujący
Moduł classifier_main integruje działanie niezależnych bloków filtrujących adresację
oraz porty sieciowe, uzupełniając je o kilka istotnych elementów, niezbędnych do poprawnego
zakończenia procesu klasyfikacji. Należą do nich m.in.:
 pamięć akcji zrealizowana przy wykorzystaniu pamięci blokowych typu RAMB16_S9_S9,
dostępnych w zasobach układów reprogramowalnych Virtex,
 automat stanów sterujący pracą klasyfikatora, a w szczególności obsługą algorytmu
karuzelowej analizy deskryptorów bezpieczeństwa z wielu kanałów komunikacyjnych
oraz inicjalizacją konfiguracji wewnętrznej elementarnych jednostek filtrujących.
Pamięć akcji przechowuje informacje o sposobie postępowania z analizowanymi pakietami.
Każdy adres pamięci odpowiada konkretnej regule bezpieczeństwa. Dzięki temu, na podstawie
wynikowego wektora trafionych reguł generowanego przez zestaw filtrów adresów oraz portów
sieciowych, klasyfikator jest w stanie podjąć właściwą decyzję odnośnie dalszej obsługi
przetwarzanego pakietu. Proces weryfikacji inicjowany jest wystąpieniem wysokiego poziomu
logicznego na liniach zgłaszających obecność deskryptorów bezpieczeństwa clas_0_desc_ready lub
clas_1_desc_ready (Rys. 5.22). Klasyfikator naprzemiennie sprawdza stan tych sygnałów,
wykorzystując do tego celu dedykowany licznik mechanizmu Round-Robin rr_cnt.
131
Licznik mechanizmu
Round-Robin
Zgłoszenie deskryptora
do weryfikacji
Bieżący stan
automatu FSM
Potwierdzenie
zakooczenia weryfikacji
Rezultat weryfikacji
Rys. 5.22. Funkcjonowanie modułu sterującego w trakcie procesu weryfikacji danych.
W opracowanym rozwiązaniu pojedynczy klasyfikator obsługuje dwa interfejsy sieciowe,
natomiast uwzględnienie w toku procedury projektowej założeń dotyczących skalowalności systemu,
pozwala w łatwy sposób zwiększyć ich liczbę do poziomu nie degradującego wydajności
przetwarzania danych.
Funkcjonowanie automatu FSM, sterującego działaniem klasyfikatora, kodowane jest
pięcioma stanami pracy (Rys. 5.23):
 check_desc – oczekiwanie na zgłoszenie deskryptora bezpieczeństwa do analizy,
 classify – zapis wyniku weryfikacji deskryptora do pamięci ramkowej,
 tcam_delay – oczekiwanie na wynik klasyfikacji z pamięci TCAM,
 action_delay – oczekiwanie na odczyt z pamięci akcji,
 load_policy – obsługa ładowania konfiguracji filtrów klasyfikatora.
Wczytywanie konfiguracji wewnętrznej filtrów klasyfikatora realizowane jest zawsze po włączeniu
bądź restarcie urządzenia, jak również po wymuszeniu ładowania nowych definicji reguł
bezpieczeństwa przez zewnętrzną aplikację zarządzającą. W tym stanie pracy klasyfikator domyślnie
blokuje cały ruch sieciowy. Dalsze prace projektowe zakładają wdrożenie funkcjonalności
pozwalającej na przełączanie zestawów definicji reguł bezpieczeństwa bez przerywania normalnego
funkcjonowania klasyfikatora.
132
Reset, power up
W trakcie ładowania
konfiguracji filtrów cały
ruch sieciowy jest
blokowany
policy_we = '1'
load_policy
policy_we = '0'
policy_we = '1'
policy_we = '0' and (rr_cnt = "1" and
clas_0_desc_ready = '0' or rr_cnt = "1" and
clas_1_desc_ready = '1' )
check_desc
policy_we = '0' and ((rr_cnt = "0" and
clas_0_desc_ready = '0') or (rr_cnt = "1" and
clas_0_desc_ready = '0') or
(rr_cnt = "1" and clas_1_desc_ready = '0') or
(rr_cnt = "1" and clas_1_desc_ready = '0'))
tcam_delay
policy_we = '0'
policy_we = '0' and ((rr_cnt = "0" and
clas_0_desc_ready = '0') or (rr_cnt = "1" and
clas_1_desc_ready = '0'))
action_delay
policy_we = '0'
policy_we = '0' and ((rr_cnt = "0" and
clas_0_desc_ready = '1') or (rr_cnt = "1" and
clas_1_desc_ready = '1'))
classify
Rys. 5.23. Graf przejść automatu FSM sterującego pracą klasyfikatora.
5.3.5. Wyniki implementacji oraz ocena wydajności sprzętowego klasyfikatora
pakietów
Opracowany sprzętowy klasyfikator pakietów został zaimplementowany i przetestowany
praktycznie przy pomocy płyty uruchomieniowej Digilent XUP z układem Virtex II Pro XC2VP30.
W
tabeli
5.6
przedstawiono
podsumowanie
wykorzystania
zasobów
sprzętowych
logiki
reprogramowalnej FPGA oraz uzyskane parametry czasowe. Pełny raport syntezy zamieszczono
w dodatku B, punkt 9.12.
Teoretyczna maksymalna częstotliwość pracy klasyfikatora, raportowana przez narzędzia do
syntezy logicznej, wynosi około 160 MHz (Tab. 5.6). Jest ona w praktyce limitowana głównie przez
wydajności filtrów adresów oraz portów sieciowych, a w szczególności przez zastosowane metody
implementacji pamięci TCAM, jak również łańcuchów komparatorów zakresów cząstkowych w filtrze
portów. Z tego powodu dalsze prace optymalizacyjne powinny być skoncentrowane właśnie na tym
obszarze.
133
Uzyskana maksymalna częstotliwość pracy wpływa na całkowitą wydajność przetwarzania
danych sprzętowego klasyfikatora. Do oszacowania tego parametru należy jednak uwzględnić jeszcze
kilka dodatkowy czynników:
a) opóźnienia wynikające ze sposobu działania mechanizmu karuzelowego obsługi kontrolerów
MAC,
b)
czas trwania analizy deskryptora w blokach filtrujących adresy oraz porty sieciowe,
c) opóźnienie związane z odczytem danych z pamięci akcji,
d) zapis wyniku klasyfikacji do pamięci ramkowej.
Tab. 5.6. Wykorzystanie zasobów logiki reprogramowalnej FPGA
przez sprzętowy klasyfikator pakietów.
Virtex
Typ układu 2vp30ff896-7
Rodzaj zasobów
Liczba bloków Slice
2771
Liczba 4-wejściowych LUT
3660
Parametry czasowe
Maks. częstotliwość
160,433 MHz
Maks. opóźnienie ścieżki kombinacyjnej
1,674 ns
W badanym prototypowym systemie bezpieczeństwa typu Firewall, w konfiguracji z dwoma
interfejsami sieciowymi, całkowity czas klasyfikacji pojedynczego pakietu zajmował w skrajnym
przypadku 8 cykli zegara systemowego sys_clk (Rys. 5.24). Przy maksymalnej częstotliwości pracy
rzędu 160 MHz efektywna wydajność przetwarzania danych klasyfikatora wynosi około 20 milionów
ramek na sekundę. W sieci 10Gb Ethernet największa dopuszczalna liczba ramek przesyłanych
w ciągu sekundy jest równa 14 880 952 [96]. Wynika stąd, że omawiany moduł bez problemu i ze
znacznym zapasem wydajności jest w stanie znaleźć zastosowanie do weryfikacji danych we
współczesnych sieciach teleinformatycznych o dużych przepustowościach.
Zgłoszenie
deskryptora toru 0
Przełączenie analizy
na tor 0
Zakooczenie
klasyfikacji
5 taktów zegara sys_clk
Zakooczenie zapisu wyniku
do pamięci ramkowej
3 takty zegara sys_clk
CAŁKOWITY CZAS KLASYFIKACJI: 8 taktów zegara sys_clk
Rys. 5.24. Całkowity czas weryfikacji pakietu.
134
5.4. Blok ładowania polityki bezpieczeństwa
Do poprawnej pracy systemu typu Firewall niezbędne jest wbudowanie funkcjonalności
umożliwiającej w dowolnym momencie ładowanie do bloków filtrujących nowych definicji reguł
bezpieczeństwa. Rolę taką w opracowanym prototypie spełnia moduł fw_policy_loader, którego
wewnętrzny schemat blokowy przedstawiono na rysunku 5.25.
fw_policy_loader.vhd
Interfejs
klasyfikatora
← rs232_active
← policy_we
→ reset
→ sys_clk
← address_we
← address_wr_data(21:0)
← address_wr_addr(log2_ceil(l_reguł-1)+3:0)
← port_we
← port_wr_data(27:0)
← port_wr_addr(log2_ceil(l_reguł-1)+3:0)
← action_we
← action_wr_data(7:0)
← action_wr_addr(log2_ceil(l_reguł-1)-1:0)
rd_data(29:8)
rules_cnt & ram_addr_cnt
rd_data(59:32)
rules_cnt & ram_addr_cnt
rd_data(7:0)
rules_cnt
rs_fsm (process)
fw_policy_ram
← rd_data(63:0)
sys_clk ←
reset ←
ram_0_we ←
ram_0_wr_address (10:0) ←
ram_0_wr_data(7:0) ←
ram_1_we ←
ram_1_wr_address (10:0) ←
ram_1_wr_data(7:0) ←
rd_address(8:0) ←
(10:0)
(10:0)
rules_cnt & ram_addr_cnt
← rs232_active
sys_clk ←
← ram_0_we
reset ←
← ram_1_we
← write_cnt(11:0)
uart_IntRx_O ←
uart_WB_DAT_O(7:0) ←
← policy_load
uart_WB_WE_I →
→ wr_active
uart_WB_STB_I →
policy_fsm (process)
Interfejs
RS232
sys_clk ←
← wr_active
reset ←
→ policy_load
← ram_addr_cnt(3:0)
← rules_cnt(log2_ceil(l_reguł-1)-1:0)
← address_we
← port_we
← action_we
uart
← RS232_TxD
→ RS232_Rx
← TxD_PAD_O
→ RxD_PAD_I
BR_Clk_I ←
WB_CLK_I ←
WB_RST_I ←
WB_ADR_I(1:0) ←
IntRx_O →
WB_DAT_O(7:0) →
WB_WE_I ←
WB_STB_I ←
WB_ACK_O →
WB_DAT_I(7:0) ←
IntTx_O →
„00"
Rys. 5.25. Schemat wewnętrzny modułu fw_policy_loader.
Tabelaryczne definicje polityki bezpieczeństwa zostają zamienione na odpowiednią postać
binarną w specjalnie przygotowanej zewnętrznej aplikacji zarządzającej, omówionej szerzej
w rozdziale 5.5. Dane konfiguracyjne są przesyłane do modułu fw_policy_loader za pomocą interfejsu
RS232. Do obsługi transmisji szeregowej zaadaptowano otwarty pakiet miniUART, opracowany przez
Philippe Cartona, a udostępniony w zasobach organizacji OpenCores [74]. Odebranie każdego bajtu
przesyłanego poprzez RS232 sygnalizowane jest wysokim stanem logicznym na linii IntRx_O
magistrali WISHBONE [73] bloku uart. Dedykowany automat stanów rs_fsm (Rys. 5.25),
nadzorujący funkcjonowanie szeregowego odbioru danych konfiguracyjnych, generuje sygnały
adresacji oraz zezwolenia zapisu (write_cnt, ram_0_we, ram_1_we) binarnych definicji reguł
bezpieczeństwa do specjalnej pamięci buforującej fw_policy_ram. Zbudowana jest ona w oparciu
o dwie dwuportowe pamięci synchroniczne typu BlockRAM RAMB16_S9_S36, o pojemności 2048 x 8
bitów każda, dostępne w zasobach układów Virtex. Zastosowanie pamięci dwuportowych upraszcza
realizację procesu zapisu informacji pochodzących z interfejsu RS232 oraz ich dalszej transmisji do
filtrów bloku klasyfikatora.
135
Tab. 5.7. Zawartość pamięci RAM0 przechowującej konfigurację filtru adresów, typu protokołu
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
RAM16x1S nr 0
RAM16x1S nr 2
RAM16x1S nr 3
RAM16x1S nr 4
RAM16x1S nr 5
RAM16x1S nr 6
RAM16x1S nr 7
RAM16x1S nr 8
RAM16x1S nr 9
RAM16x1S nr 10
RAM16x1S nr 11
RAM16x1S nr 12
RAM16x1S nr 13
RAM16x1S nr 14
RAM16x1S nr 15
RAM16x1S nr 16
RAM16x1S nr 17
RAM16x1S nr 18
RAM16x1S nr 19
RAM16x1S nr 20
RAM16x1S nr 21
22 -bitowe słowo konfiguracji pamięci TCAM filtru adresów
(22 pamięci RAM16x1S na pojedynczą regułę)
RAM16x1S nr 1
1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 -bitowe słowo danych pamięci konfiguracji RAM0
Dopełnienie (nieużywane)
Nr reguły
0
Adres pamięci konfiguracji RAM0
oraz akcji dla dwóch przykładowych reguł bezpieczeństwa.
9
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
8
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
8 -bitowe słowo konfiguracji
pamięci akcji
7
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Jedna z pamięci RAMB16_S9_S36, opisana w projekcie jako RAM0, służy do
przechowywania konfiguracji wewnętrznej filtru adresów oraz typu protokołu. Pojedyncze słowo
pamięci RAM0 zbudowane jest z dwóch kluczowych części: 22-bitowego wiersza konfiguracji
wewnętrznej modułu TCAM, opisanego w rozdziale 5.3.2 (po jednym bicie dla każdego z 22
elementów RAM16x1S) oraz 8-bitowego słowa konfiguracji pamięci akcji. Dwa najstarsze bity
dopełnienia (nr 31 oraz 30) pozostają niewykorzystane. Ponieważ zaprogramowanie pamięci TCAM,
zbudowanej w oparciu o elementy RAM16x1S, wymaga zapisania wszystkich 16 komórek, definicja
jednej reguły bezpieczeństwa alokuje w sumie 16 wierszy pamięci RAM0.
Przykładową zawartość mapy konfiguracji dla dwóch reguł zawarto w tabeli 5.7.
Reguła nr 0:
 typ ramki – dowolny,
 protokół – TCP,
 adres źródłowy IP –192.168.0.0,
136
 maska adresu źródłowego – 255.255.255.0,
 adres docelowy IP – dowolny,
 maska adresu docelowego – dowolna,
 akcja – zaakceptuj.
Reguła nr 1:
 typ ramki – dowolny,
 protokół – ICMP,
 adres źródłowy IP – dowolny,
 maska adresu źródłowego – dowolna,
 adres docelowy IP – 172.0.0.0,
 maska adresu docelowego – 255.0.0.0,
 akcja – odrzuć.
Tab. 5.8. Zawartość pamięci RAM1 przechowującej konfigurację filtrów portów sieciowych dla dwóch
RAM_A_6
RAM_A_5
RAM_A_4
RAM_A_3
RAM_A_2
RAM_A_1
RAM_A_0
30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1
0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
RAM_B_0
RAM_B_3
RAM_B_4
RAM_B_5
RAM_B_6
RAM_A_0
RAM_A_1
RAM_A_2
RAM_A_3
RAM_A_4
RAM_A_5
RAM_B_0
RAM_A_6
RAM_B_1
RAM_B_2
RAM_B_3
RAM_B_4
RAM_B_5
RAM_B_6
28 -bitowe słowo konfiguracji filtru portów docelowych
(28 pamięci RAM16x1D)
RAM_B_1
31
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
28 -bitowe słowo konfiguracji filtru portów źródłowych
(28 pamięci RAM16x1D)
RAM_B_2
1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32- bitowe słowo danych pamięci konfiguracji RAM1
Dopełnienie (nieużywane)
Nr reguły
0
Adres pamięci konfiguracji RAM1
przykładowych reguł bezpieczeństwa.
9
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
8
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
7
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
6
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
5
1
1
0
1
1
1
1
1
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
4
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
3
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
2
1
1
1
0
1
1
1
1
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
0
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
137
Druga pamięć RAMB16_S9_S36, oznaczana jako RAM1, buforuje dane konfiguracji filtrów
portów sieciowych, opisanych w rozdziale 5.3.3. Ponieważ w skład bloku filtrującego dla jednej
reguły wchodzi łącznie 28 elementów typu RAM16x1D, słowo danych konfiguracji ma długość 28
bitów. Nadmiarowe 4 bity dopełnienia pozostają niewykorzystane. Podobnie, jak w wypadku filtrów
adresów, pełna definicja reguły alokuje 16 słów 32-bitowych pamięci RAM1.
Przykładową zawartość mapy konfiguracji dla dwóch reguł zawarto w tabeli 5.8.
Reguła nr 0:
 port źródłowy – zakres od 1 do 100,
 port docelowy – zakres od 1000 do 10000.
Reguła nr 1:
 port źródłowy – port nr 50,
 port docelowy – dowolny.
Po zakończeniu transmisji danych konfiguracyjnych z aplikacji zarządzającej do pamięci
buforujących RAM0 oraz RAM1 automat stanów policy_fsm (Rys. 5.25) rozpoczyna procedurę
inicjalizacji filtrów adresów i portów sieciowych, jak również pamięci akcji. W tym celu aktywuje on
odpowiednie linie zezwolenia zapisu (address_we, port_we, action_we) oraz generuje sygnały
adresowe dla poszczególnych bloków (address_wr_add, port_wr_add, action_wr_add). Mapy
konfiguracji filtrów dostarczane są bezpośrednio z modułu pamięci buforującej fw_policy_ram (sygnał
rd_data).
Inicjalizacja filtru
portów
Inicjalizacja filtru
adresów
Inicjalizacja
pamięci akcji
Rys. 5.26. Przebiegi czasowe sygnałów modułu fw_policy_loader
w trakcie inicjowania konfiguracji filtrów.
138
W trakcie trwania procedury inicjalizacji klasyfikator pakietów przechodzi w stan blokowania
całego ruchu sieciowego. Ma to na celu wyeliminowanie ewentualnej możliwości złamania
zabezpieczeń systemu Firewall w krótkim okresie braku spójności definicji polityki bezpieczeństwa.
Proces inicjalizacji konfiguracji filtrów zachodzi także każdorazowo po restarcie systemu (Rys. 5.26).
W dalszym etapie rozwoju zapory sieciowej konieczne jest dodanie funkcjonalności
przechowywania definicji reguł bezpieczeństwa w pamięci nieulotnej, tak, aby po włączeniu
urządzenie automatycznie ładowało właściwe parametry pracy. Dodatkowo należy wdrożyć
mechanizmy
autoryzacji
dostępu
administracyjnego,
uniemożliwiając
niepowołane
zmiany
konfiguracji Firewalla. Ze względu na specyfikę architektury wewnętrznej opracowanych modułów
klasyfikatora pakietów, proces ładowania konfiguracji pojedynczej reguły zajmuje 16 cykli
zegarowych. Znając częstotliwość zegara systemowego oraz rozmiar tabeli z definicjami reguł, łatwo
jest wyliczyć sumaryczny czas wczytywania konfiguracji, przy założeniu przechowywania jej
w dodatkowej pamięci nieulotnej. Przy wykorzystaniu zewnętrznej aplikacji zarządzającej czas
ładowania danych konfiguracyjnych zależy od prędkości pracy medium transmisyjnego (w wypadku
portu szeregowego domyślnie jest to 9600 b/s) oraz sumarycznego rozmiaru bitowego
skonwertowanej tabeli definicji polityki bezpieczeństwa. Wykorzystanie do tego celu interfejsu
RS232, pomimo zapewnienia oczekiwanej funkcjonalności, nie jest rozwiązaniem docelowym.
W dalszym etapie rozbudowy systemu autor zamierza wdrożyć mechanizmy zarządzania Firewallem
poprzez sieć Ethernet. Pozwoli to nie tylko na zwiększenie efektywności oraz bezpieczeństwa
administrowania urządzeniem, ale również otworzy możliwości integracji nowych usług, jak choćby
monitoring bieżących parametrów pracy.
Opracowany
moduł
ładujący
politykę
bezpieczeństwa
został
zaimplementowany
i przetestowany praktycznie przy pomocy płyty uruchomieniowej Digilent XUP z układem Virtex II
Pro XC2VP30. W tabeli 5.9 przedstawiono podsumowanie wykorzystania zasobów sprzętowych
logiki reprogramowalnej FPGA oraz uzyskane parametry czasowe. Pełny raport syntezy zamieszczono
w dodatku B, punkt 9.13.
Tab. 5.9. Wykorzystanie zasobów logiki reprogramowalnej FPGA
przez moduł ładowania polityki bezpieczeństwa.
Rodzaj zasobów
Virtex
2vp30ff896-7
Typ układu
Liczba bloków Slice
Liczba 4-wejściowych LUT
Liczba pamięci RAMB16_S9_S36
68
120
2
Parametry czasowe
Maks. częstotliwość
291,414 MHz
139
5.5. Aplikacja zarządzająca
Definicje reguł bezpieczeństwa przesyłane są do modułu ładującego z zewnętrznej aplikacji
zarządzającej. Ze względu na konieczność szybkiej weryfikacji funkcjonowania opracowanych
modułów sprzętowego Firewalla, autor poszukiwał środowiska programistycznego umożliwiającego
łatwą budowę tymczasowego interfejsu użytkownika. Ostateczny wybór padł na ogólnie dostępne
oprogramowanie Microsoft Excel – tabelaryczne ujęcie definicji reguł bezpieczeństwa jest
powszechne wśród narzędzi do zarządzania zaporami sieciowymi, zaś łatwa składnia języka VBA
(ang. Visual Basic for Applications) umożliwia szybkie opracowanie konwertera reguł oraz bloku
szeregowej transmisji RS232. Oczywistym jest fakt, że taka postać systemu zarządzającego ma
charakter testowy – docelowo powinna być to dedykowana aplikacja napisana w języku wyższego
poziomu, kompatybilna zarówno z komercyjnymi systemami operacyjnymi (np. Microsoft Windows),
jak również z otwartymi rozwiązaniami (np. różnymi dystrybucjami systemu Linux). Jednakże
opracowanie takiego programu z racji ograniczeń czasowych nie zostało wykonane w ramach
przeprowadzonych badań i stanowić będzie przedmiot przyszłych prac nad rozwojem systemu.
Przykładowe okno aplikacji zawierające tabelę z definicjami reguł bezpieczeństwa pokazano na
rysunku 5.27. Oprócz funkcji ładowania polityki aplikacja udostępnia dodatkowe narzędzia
ułatwiające opracowywanie kodu VHDL poszczególnych modułów sprzętowego Firewalla.
Rys. 5.27. Aplikacja konwertująca reguły bezpieczeństwa.
140
W skład pojedynczej reguły wchodzą następujące pola:
 Frame type – typ ramki Ethernet; w wersji prototypowej aplikacja dekoduje ramki ARP
oraz ramki dowolnego typu, opisywane za pomocą symbolu „x”. Pozostałe rodzaje ramek
zostaną sukcesywnie uzupełniane w dalszych pracach nad rozwojem systemu;
 Protocol – typ protokołu; w wersji prototypowej możliwe jest specyfikowanie protokołów
ICMP, TCP, UDP oraz dowolnego typu poprzez zastosowanie znaku „x”;
 Source IP – adres źródłowy protokołu IP, zapisywany w postaci 4 sekcji dziesiętnych, np.
„192.168.0.0”. Adres dowolny definiuje symbol „x”;
 Source Mask – maska sieciowa adresu źródłowego, określająca zakres adresów podsieci.
Maska definiowana jest analogicznie do adresów IP poprzez 4 sekcje dziesiętne, np.
„255.255.0.0”; maska dowolna oznaczana jest symbolem „x”;
 Destination IP – adres docelowy protokołu IP. Opis analogiczny jak w przypadku Source
IP;
 Destination Mask – maska sieciowa adresu docelowego. Opis analogiczny jak
w przypadku Source Mask;
 Source Port – adres portu źródłowego protokołu TCP/UDP; opis dziesiętny od 0 do 65535.
Dopuszczalne jest definiowanie przedziałów zapisywanych z użyciem znaku „-”, np.
„1-100”. Port dowolny specyfikowany jest za pomocą symbolu „x”;
 Destination Port – adres portu docelowego protokołu TCP/UDP. Opis jak w przypadku
Source Port;
 Action – akcja do wykonania. W opracowanej wersji prototypowej możliwe są dwa
warianty: „A” – akceptacja bądź „D” – odrzucenie pakietu.
Głównym zadaniem aplikacji zarządzającej systemem Firewall jest odpowiednia translacja
definicji polityki bezpieczeństwa z formy czytelnej dla administratora urządzenia do mapy zawartości
wewnętrznej konfiguracji poszczególnych komórek pamięci filtrów adresów i portów sieciowych
klasyfikatora
pakietów.
W
opracowanej
implementacji
schemat
polityki
bezpieczeństwa
w skonwertowanej formie binarnej, jak to zostało zasygnalizowane wcześniej, jest przesyłany do
pamięci Firewalla poprzez port RS232. Do obsługi komunikacji szeregowej wykorzystano
ewaluacyjną wersję biblioteki WSC4VB (ang. Windows Standard Serial Communications Library for
Visual Basic) firmy MarshallSoft [65].
Proces konwersji definicji reguł jest podzielony, zgodnie ze sposobem funkcjonowania
bloków filtrujących, na trzy etapy:
 tworzenie mapy konfiguracji filtru adresów,
 tworzenie mapy konfiguracji filtru portów,
 tworzenie mapy konfiguracji pamięci akcji.
141
5.6. Ocena wyników implementacji kompletnej zapory sieciowej
Kompletny funkcjonalnie sprzętowy system bezpieczeństwa typu Firewall, obejmujący dwa
kontrolery MAC, dwa moduły silników, jeden klasyfikator oraz moduł ładujący definicję polityki
bezpieczeństwa składającej się z 32 reguł, zaimplementowano i przetestowano praktycznie przy
pomocy płyty uruchomieniowej Digilent XUP z układem Virtex II Pro XC2VP30. W tabeli 5.10
przedstawiono podsumowanie wykorzystania zasobów sprzętowych logiki reprogramowalnej FPGA
oraz uzyskane parametry czasowe kompletnego sprzętowego Firewalla. Pełny raport syntezy
zamieszczono w dodatku B, punkt 9.14.
Tab. 5.10. Wykorzystanie zasobów sprzętowych i parametry czasowe
kompletnego systemu sprzętowego Firewalla.
Rodzaj zasobów
Virtex
Typ układu 2vp30ff896-7
Liczba bloków Slice
9164
11384
Liczba 4-wejściowych LUT
Liczba rejestrów przesuwnych SRL16E
3983
Liczba pamięci RAM16X1S
704
Liczba pamięci RAM16X1D
896
Liczba pamięci RAMB16_S9_S9
35
Liczba pamięci RAMB16_S9_S36
34
Liczba pamięci RAMB16_S18_S18
4
Parametry czasowe
Maks. częstotliwość
139,019 MHz
Maks. opóźnienie ścieżki kombinacyjnej
4,183 ns
Raportowana przez narzędzia do syntezy logicznej maksymalna teoretyczna częstotliwość
pracy zrealizowanego systemu bezpieczeństwa typu Firewall, wynosząca około 139 MHz, pozwala na
jego wykorzystanie w sieciach Gigabit Ethernet. Co więcej, rezygnacja z zastosowania mechanizmu
karuzelowego poprzez dedykowanie każdej ścieżce komunikacyjnej indywidualnego modułu
klasyfikującego pakiety, umożliwia zwiększenie szybkości medium komunikacyjnego do 10 Gb/s.
Celem praktycznego potwierdzenia poprawności funkcjonowania systemu w rzeczywistej
infrastrukturze sieci Ethernet zestawiono specjalne środowisko testowe obejmujące cztery różne
konfiguracje składowe (Rys. 5.28). Pierwszy wariant połączenia bezpośredniego dwóch komputerów,
oznaczonych na rysunku 5.28 jako „Host 1” oraz „Host 2”, posłużył oszacowaniu referencyjnej
maksymalnej
przepustowości
zabezpieczających.
transmisji
danych
przy
braku
jakichkolwiek
systemów
W drugim wariancie na komputerze „Host 2” zainstalowano dwie wersje
programowych zapór ogniowych: produkcji Sygate Personal Firewall [116] (firma Sygate została
142
przejęta w roku 2005 przez koncern Symantec) oraz Sunbelt Personal Firewall [104]. Dzięki temu
możliwym stało się zbadanie wpływu oprogramowania zabezpieczającego transmisję danych na
ogólne obciążenie systemu operacyjnego komputera. Trzecia konfiguracja wykorzystywała
dedykowane
komercyjne
urządzenie
zabezpieczające
(tzw.
appliance)
typu
Safe@Office
100B SBX-166LHGE-2 [103] produkcji firmy SofaWare z oprogramowaniem wewnętrznym
opracowanym przez firmę Check Point. W ostatnim wariancie przetestowano opisany w niniejszej
pracy sprzętowy system bezpieczeństwa typu Firewall.
a) połączenie bezpośrednie – brak systemów zabezpieczenia transmisji
Host 1
Host 2
Ethernet
100 Mbps
b) połączenie bezpośrednie – host 2 wykorzystuje programowy Firewall
Host 1
Host 2
Ethernet
100 Mbps
Programowy
Firewall
c) połączenie poprzez Firewall CheckPoint SBX-166LHGE-2
Host 1
Firewall Safe@Office
SBX-166LHGE-2
Ethernet
100 Mbps
Host 2
Ethernet
100 Mbps
d) połączenie poprzez sprzętowego Firewalla
Host 1
Firewall sprzętowy
Ethernet
100 Mbps
Host 2
Ethernet
100 Mbps
Rys. 5.28. Konfiguracja środowiska testowego.
Do przeprowadzenia testów zdecydowano się wykorzystać konfigurację sprzętowego
Firewalla w opcji z kontrolerami MAC typu FastEthernet. Spowodowane było to maksymalną
przepustowością portów komunikacyjnych referencyjnego urządzenia Safe@Office 100B (Ethernet
10/100 Mb/s). Takie podejście pozwoliło jednak na ocenę poprawności działania kluczowego bloku
sprzętowego Firewalla, tj. modułu klasyfikującego pakiety, umożliwiając równocześnie porównanie
wydajności trzech różnych systemów zabezpieczających w celu zweryfikowania stopnia realizacji
założeń projektowych.
143
Jako komputery „Host 1” i „Host 2” zastosowano profesjonalne serwery typu RackSaver,
przeznaczone do instalacji w szafach teleinformatycznych. Każdy z nich zbudowany był w oparciu
o płytę główną produkcji firmy SuperMicro z zainstalowanym procesorem Intel Xeon 2,4 GHz
oraz 1 GB pamięci RAM. Komputer „Host 1” pracował pod kontrolą systemu operacyjnego Scientific
Linux w wersji 5.5, zaś „Host 2”, ze względu na wymagania testowanych programowych zapór
ogniowych, pod kontrolą Windows XP Professional. W każdym z wymienionych systemów usunięto
zbędne oprogramowanie czy też serwisy tak, aby uzyskać jak największą wydajność pracy. Podobnie
w badanych zaporach ogniowych zdefiniowano jedynie minimalny zestaw reguł, pozwalający na
przeprowadzenie testów przepustowości oraz czasu kopiowania zbiorów plików za pomocą protokołu
SMB (ang. Server Message Block). W przypadku urządzenia Safe@Office 100B dezaktywowano także
usługi analizy antyspamowej i antywirusowej.
Dla poszczególnych konfiguracji badanych systemów, przedstawionych na rysunku 5.28,
wykonano następujące procedury testowe:
a) badanie przepustowości transmisji, w zależności od rozmiaru datagramu MTU (ang.
Maximum Transmission Unit), przy wykorzystaniu oprogramowania iperf [101],
b) pomiar średniej przepustowości przy kopiowaniu zbioru 3 tysięcy małych plików
o łącznej pojemności 211 MB,
c) pomiar średniej przepustowości przy kopiowaniu pojedynczego dużego pliku o rozmiarze
211 MB.
Do przeprowadzenia testu wpływu systemów zabezpieczających na wartość przepustowości
transmisji danych zdecydowano się wykorzystać aplikację iperf. Jest to otwarty program działający
w architekturze klient – serwer, umożliwiający badanie szybkości przesyłania danych w sieciach
Ethernet przy pomocy protokołu TCP bądź UDP. Co ważne, dostępny jest on zarówno w wersji
działającej na platformie systemów operacyjnych z rodziny Linux, jak również w wersji wpierającej
systemy Windows. Bogata funkcjonalność pozwala na elastyczne definiowanie scenariuszy testów
oraz ich praktyczną realizację. W celu zweryfikowania wpływu zastosowania poszczególnych
systemów zabezpieczających na wydajność transmisji danych na komputerze „Host 2” uruchomiono
oprogramowanie ipref w trybie serwera (polecenie iperf –s). Z kolei na komputerze „Host 1”
wydawano cyklicznie komendę iperf –c <adres IP Host 2> –t 30 –M <MTU w bajtach>, zmieniając za
każdym razem wartość parametru MTU w zakresie od 100 do 1470 B z krokiem 100 B (za wyjątkiem
ostatniej maksymalnej wartości 1470 B). W jej efekcie uzyskiwano średnią wartość przepustowości
rejestrowanej w czasie 30 sekund dla danego MTU. Taki podział ról komputerów wyniknął
z niemożności sterowania wielkością datagramów wysyłanych pakietów w wypadku uruchomienia
aplikacji iperf jako klienta na systemie operacyjnym Windows. Klient iperf funkcjonujący w systemie
Linux pozwalał modyfikować wartość MTU, dzięki czemu, w związku z wzajemną kompatybilnością
wersji oprogramowania, pozwolił na pomiar wydajności także w środowisku Windows. Uzyskane
144
wyniki przepustowości transmisji danych dla poszczególnych konfiguracji środowiska testowego
przedstawiono na rysunku 5.29.
Przepustowośd transmisji danych dla testów iperf
100
90
Przepustowośd *Mb/s+
80
70
60
50
40
30
20
10
0
100
200
300
400
500
600
700
800
900
1000
1100
1200
1300
1400
1470
Maksymalny rozmiar datagramu MTU [B]
Bez zabezpieczeo
Firewall sprzętowy
Firewall CheckPoint
Sunbelt Personal Firewall (z opcją IDS)
Sygate Personal Firewall (bez IDS)
Rys. 5.29. Przepustowość transmisji danych dla poszczególnych konfiguracja środowiska testowego.
Referencyjna wartość przepustowości transmisji badanych komputerów została wyznaczona
dla bezpośredniego ich połączenia przy braku jakichkolwiek systemów zabezpieczających.
Największą szybkość transmisji, wynoszącą około 93,7 Mb/s, osiągnięto przy MTU równym 1470 B.
Zmniejszając wielkość datagramu do granicy 400 B obserwowano niewielki kilkuprocentowy spadek
mierzonej przepustowości. Poniżej tego progu nastąpiło gwałtowne ograniczenie szybkości
przesyłania danych, osiągając jedynie 30,1 Mb/s dla MTU równego 100 B. Sytuacja taka powodowana
jest prawdopodobnie przez dwa najważniejsze czynniki:
 duża liczba coraz mniejszych pakietów zwiększa pasmo zajmowane przez nagłówki
poszczególnych warstw modelu ISO/OSI kosztem enkapsulowanych danych,
 coraz większa liczba pakietów generuje duże obciążenie procesora (Rys. 5.30), redukując
tym samym wydajność programowej obsługi stosu protokołów TCP/IP.
Znając wartość maksymalnej przepustowości testowej konfiguracji badanych komputerów,
przystąpiono do weryfikacji programowych zapór ogniowych. Jako pierwsze sprawdzono
oprogramowanie Sygate Personal Firewall charakteryzujące się z jednej strony stosunkowo niewielką
funkcjonalnością, ale za to wykazujące bardzo małe zapotrzebowanie na zasoby pamięciowe oraz
wydajność procesora. Uzyskana krzywa przepustowości w funkcji wielkości datagramu odwzorowała
145
przebieg konfiguracji referencyjnej, przy czym w zakresie MTU od 300 B do 1470 B szybkość
transmisji spadła o około 3 %. Dla najmniejszej badanej wartości datagramu zarejestrowana
przepustowość wyniosła 26,9 Mb/s. Na tej podstawie można więc stwierdzić, że instalacja
programowego Firewalla nie spowodowała drastycznego pogorszenia parametrów transmisyjnych.
Watro jednak zwrócić uwagę, że odbyło się to kosztem ponad dwukrotnego zwiększenia obciążenia
procesora komputera „Host 2” (Rys. 5.30). Już przy MTU równym 900 B obserwowano 100%
obciążenie procesora, a poniżej 400 B komputer przestawał odpowiadać na komendy użytkownika.
Obciążenie procesora serwera dla testów iperf
100
Obciążenie procesora *%+
90
80
70
60
50
40
30
20
10
0
100
200
300
400
500
600
700
800
900 1000 1100 1200 1300 1400 1470
Maksymalny rozmiar datagramu MTU [B]
Bez zabezpieczeo
Sunbelt Personal Firewall (z opcją IDS)
Sygate Personal Firewall (bez IDS)
Rys. 5.30. Obciążenie procesora komputera „Host 2” w trakcie testów oprogramowaniem iperf.
Druga z badanych programowych zapór ogniowych - Sunbelt Personal Firewall – oprócz
konwencjonalnej funkcjonalności Firewalla wyposażona była w system wykrywania intruzów IDS.
Dodatkowa usługa zwiększyła obciążenie procesora, w stosunku do oprogramowania Sygate Personal
Firewall jedynie o około 10 %. Zdecydowanie bardziej destrukcyjnie wpłynęła natomiast na
przepustowość transmisji danych. Dla dużych pakietów (MTU powyżej 1000 B) maksymalny spadek
przepustowości względem referencyjnej konfiguracji nie przekraczał 1,5 Mb/s. Dla mniejszych
datagramów szybkość transmisji malała praktycznie liniowo aż do poziomu 10,4 Mb/s, przy MTU
równym 100 B. Uruchomienie programowego Firewalla spowodowało więc w tym przypadku prawie
trzykrotną redukcję przepustowości dla skrajnych warunków transmisji.
Najbardziej zaskakujące wyniki uzyskano w trakcie analizy wydajności Firewalla
Safe@Office 100B. Dedykowana platforma sprzętowa oraz oprogramowanie renomowanej firmy
Check Point pozwalały przypuszczać, że, pomimo przeznaczenia urządzenia do zabezpieczania sieci
komputerowych niewielkich organizacji, powinno ono bez problemu osiągnąć przepustowość
146
standardu Fast Ethernet. Tymczasem, nawet w przypadku wyłączenia dodatkowych usług analizy
danych (system IDS oraz kontrola antywirusowa), omawiany Firewall osiągnął najgorsze wyniki
szybkości transmisji danych spośród wszystkich badanych konfiguracji. Podobnie, jak dla zapory
programowej Sunbelt Personal Firewall, przy MTU mniejszym od 1000 B zaobserwowano liniowy
spadek przepustowości aż do granicznej wartości 9,1 Mb/s dla datagramu o rozmiarze 100 B.
Maksymalną przepustowość wynoszącą 93,5 Mb/s zarejestrowano przy MTU równym 1470 B.
W teście tym zrezygnowano z pomiaru obciążenia procesora, ponieważ na komputerze „Host 2” nie
funkcjonowało żadne oprogramowanie zabezpieczające.
Średnia przepustowośd w testach kopiowania plików
70,5
69,4
64,6
Przepustowośdd*Mb/s+
80,0
70,0
23,3
22,4
60,0
22,3
50,0
58,6
55,5
19,2
40,0
21,0
30,0
20,0
10,0
0,0
3 tys. małych plików
Jeden duży plik
Sunbelt Personal Firewall (z opcją IDS)
Firewall CheckPoint
Firewall sprzętowy
Bez zabezpieczeo
Sygate Personal Firewall (bez IDS)
Rys. 5.31. Średnia przepustowość w testach kopiowania plików.
Ostatnim z badanych systemów była sprzętowa zapora ogniowa implementowana w logice
reprogramowalne j FPGA. Zmierzone poziomy przepustowości dla datagramów większych od 300 B
są identyczne z uzyskanymi w konfiguracji referencyjnej. Jedynie w przypadku małych MTU (od 100
do 300 B) zarejestrowano niewielki spadek wydajności (maksymalnie 0,4 Mb/s), co może wynikać
z opóźnień wnoszonych przez sprzętowego Firewalla pracującego w trybie „store and forward”.
Opracowany sprzętowy Firewall osiągnął najlepsze wyniki w testach iperf spośród wszystkich
badanych konfiguracji systemów zabezpieczających, potwierdzając teoretycznie oszacowane
parametry wydajnościowe.
147
Rezultaty kolejnego etapu testów, polegającego na kopiowaniu dwóch zestawów plików za
pomocą protokołu SMB również wykazały, że opracowana zapora ogniowa uzyskała poziom
przepustowości najbliższy warunkom referencyjnym. Taka sytuacja miała miejsce zarówno przy
kopiowaniu 3 tysięcy niewielkich zbiorów danych, jak również w czasie ciągłego transferu
pojedynczego dużego pliku. Przy braku jakichkolwiek systemów zabezpieczających zmierzone
maksymalne wartości przepustowości dla obydwu zestawów plików wyniosły odpowiednio:
23,3 Mb/s oraz 70,5 Mb/s (Rys. 5.31). Zastosowanie sprzętowego Firewalla zmniejszyło szybkość
transmisji jedynie o 0,9 Mb/s dla małych plików i o 1,1 Mb/s dla pojedynczego pliku. Najgorzej
w pierwszym przypadku wypadło urządzenie Safe@Office 100B, redukując przepustowość do
poziomu 19,2 Mb/s, zaś w drugim programowa zapora Sunbelt Personal Firewall z wartością
przepustowości równą 55,5 Mb/s.
Obciążenie procesora komputera "Host 2" w testach kopiowania plików
66,5
46
Obciążenie procesora *%+
70
50
60
33,5
50
40
30
20
13,7
15,9
10
0
3 tys. małych plików
Jeden duży plik
Bez zabezpieczeo
Sygate Personal Firewall (bez IDS)
Sunbelt Personal Firewall (z opcją IDS)
Rys. 5.32. Obciążenie procesora komputera „Host 2” w trakcie testów kopiowania plików.
Pomiar obciążenia procesora w trakcie testów kopiowania plików potwierdził obserwacje
dokonane podczas badania przepustowości za pomocą aplikacji iperf. Także i tym razem zastosowanie
programowych zapór ogniowych w bardzo widoczny sposób ograniczało dostępne zasoby
obliczeniowe komputera (Rys. 5.32) . Najgorzej prezentował się pod tym względem Sunbelt Personal
Firewall, zwiększając obciążenie procesora z poziomu 13,7% do wartości 46% dla małych plików
oraz z poziomu 15,9% do wartości 66,5% dla pojedynczego dużego pliku.
148
6. Podsumowanie
Celem planowanych badań było poszukiwanie optymalnej architektury wewnętrznej
oraz
metod
implementacji
systemów
bezpieczeństwa
informatycznego
typu
Firewall,
realizowanych dotychczasowo na drodze programowej, w układach logiki programowalnej
FPGA. W efekcie końcowym realizacji prac projektowych powstała kompletna, w pełni
funkcjonalna, sprzętowa zapora ogniowa, charakteryzująca się bardzo dużą wydajnością pracy,
jak również zapewniająca wysoki poziom bezpieczeństwa procesu weryfikacji danych, adekwatny
do wymagań współczesnych sieci teleinformatycznych o dużych przepływnościach.
Ponieważ jednym z głównych priorytetów projektu było uzyskanie maksymalnej
wydajności funkcjonowania rozwiązania, zdecydowano się na pełną realizację sprzętową
wszystkich niezbędnych bloków sprzętowych architektury Firewalla. Zaprojektowanie od
początku wszystkich modułów funkcjonalnych z wykorzystaniem układów FPGA pozwoliło na
optymalizację szybkości działania każdego elementu składowego zapory ogniowej, co jest
niemożliwe do osiągnięcia przy zastosowaniu komercyjnych, zamkniętych modułów, tzw. IP
Cores. Do realizacji założonego celu należało najpierw przygotować niezbędne środowisko
uruchomieniowo-testowe, w skład którego wchodziły dedykowane płyty wyposażone w układy
FPGA oraz oprogramowanie
umożliwiające
opisywanie i
testowanie funkcjonalności
opracowywanego urządzenia przy pomocy kodu w języku VHDL, a następnie jego implementację
w układach logiki reprogramowalnej. Niezwykle ważny etap wstępnych prac przygotowawczych
dotyczył zaprojektowania, wykonania i przetestowania kart interfejsów sieciowych niezbędnych
do prawidłowego działania zapory ogniowej w infrastrukturze sieci Ethernet.
Przed przystąpieniem do realizacji zasadniczej części projektu – opracowania architektury
sprzętowego Firewalla wraz z implementacją poszczególnych jego elementów w układach FPGA,
autor dokonał szczegółowego funkcjonalnego przeglądu dostępnych typów zapór ogniowych oraz
algorytmów weryfikacji przetwarzanych danych, wykorzystywanych do budowy kluczowego
modułu klasyfikującego pakiety. Na podstawie przeprowadzonych analiz udało się zebrać
niezwykle istotne wnioski odnośnie słabych stron poszczególnych rozwiązań, będące punktem
wyjścia do poszukiwań optymalnej koncepcji organizacji wewnętrznej struktury sprzętowego
Firewalla. Pierwszym krokiem w tym kierunku była decyzja o implementacji w układach FPGA
kontrolerów MAC dla sieci Fast oraz Gigabit Ethernet. Teoretycznie istniała możliwość
skoncentrowania prac badawczych tylko na zasadniczym elemencie systemu - klasyfikatorze
pakietów, tym samym znacznie skracając czas realizacji całego przedsięwzięcia. W takim
przypadku do obsługi komunikacji sieciowej można byłoby wykorzystać rozwiązania
149
programowe bazujące na procesorach GPP. Jednak zaobserwowane negatywne skutki takiego
podejścia oraz świadomość wpływu wszystkich komponentów tak złożonego systemu, jakim jest
zapora ogniowa, na globalną wydajność przetwarzania danych, doprowadziły do wybrania drogi
bardziej pracochłonnej. Pozwalała ona jednak na zaprojektowanie urządzenia, w którym każdy
z najdrobniejszych elementów, począwszy od kontrolerów MAC a skończywszy na modułach
przetwarzających politykę bezpieczeństwa, zoptymalizowano zarówno pod kątem wydajności
i stabilności działania, jak również ilości zasobów niezbędnych do jego realizacji.
Co więcej, proporcje pomiędzy tymi czynnikami mogły być przy takim podejściu kształtowane na
bieżąco, w zależności od wymagań stawianych przez potencjalny obszar zastosowań. Wykonane
w ramach prac badawczych sprzętowe moduły kontrolerów sieci Ethernet umożliwiły
przeprowadzenie testów praktycznych weryfikujących wydajność oraz stabilność działania
Firewalla implementowanego w układach FPGA.
Główny etap projektu stanowiło opracowanie koncepcji oraz implementacja silnika
Firewalla zawierającego moduł klasyfikacji pakietów. Nadrzędne cele projektowe: optymalizacja
wydajności oraz zapewnienie wysokiego poziomu bezpieczeństwa przetwarzania danych
wymusiły konieczność zastosowania szeregu mechanizmów, wykorzystujących w jak
największym stopniu potencjał i elastyczność logiki reprogramowalnej FPGA. Zaproponowana
przez autora koncepcja architektury Firewalla opierała się na tworzeniu dedykowanych kanałów
komunikacyjnych pomiędzy segmentami chronionych sieci. Dzięki temu, że każdy taki kanał
zawierał w sobie pełny tor przetwarzania i analizy bezpieczeństwa danych, możliwym stało się
zwiększanie
całkowitej
szybkości
pracy
zapory
poprzez
implementowanie
kolejnych
klasyfikatorów wraz z dodawaniem nowych interfejsów NIC. Koncepcja ta pozwalała również na
pełną separację ścieżek weryfikacji pakietów, tym samym zniwelowano zagrożenie degradacji
szybkości klasyfikacji w przypadku niesymetrycznych obciążeń interfejsów sieciowych. Na
wzrost ogólnej wydajności opracowanego systemu wpłynęło także zastosowanie potokowego
przetwarzania danych w silniku Firewalla. Specjalnie zorganizowana pamięć ramkowa wraz
z modułem zarządzającym umożliwiły transmisję ramek zweryfikowanych pod kątem zgodności
z regułami bezpieczeństwa, niezależnie od analizowania nieustająco napływających danych. Taką
funkcjonalność osiągnięto dzięki wykorzystaniu dwóch niezależnych pamięci ramkowych: jednej
dla modułu analizującego ramki, a drugiej dla toru transmisyjnego właściwej karty sieciowej.
Poszukując dalszych dróg optymalizacji procesu klasyfikacji pakietów,
dodatkowy
moduł
pamięci
podręcznej
cache,
przechowujący
autor opracował
informację
o
ostatnio
analizowanych deskryptorach bezpieczeństwa wraz z odpowiadającą im akcją (odrzucenie
lub zaakceptowanie). Dzięki zastosowaniu opracowanej specjalnie do tego celu pamięci
adresowanej zawartością typu CAM, już po jednym cyklu zegara systemowego w pamięci cache
dostępna była informacja o obecności deskryptora zgodnego z aktualnie weryfikowanym
nagłówkiem. W przypadku wymiany danych pomiędzy ograniczoną grupą komputerów,
150
rozwiązanie takie w znaczny sposób odciążyło blok klasyfikatora pakietów. W testowanej
praktycznie zaporze ogniowej zaimplementowano pamięć podręczną o pojemności 32
deskryptorów, aczkolwiek wartość ta była w pełni parametryzowana, co pozwoliło na łatwe jej
skalowanie w przypadku wykorzystywania nowszych generacji układów FPGA, dysponujących
zdecydowanie większą ilością zasobów sprzętowych.
Zdecydowanie najbardziej istotny i pracochłonny etap badań dotyczył opracowania
modułu
klasyfikacji
pakietów,
weryfikującego
zgodność
przetwarzanych
danych
z obowiązującym schematem polityki bezpieczeństwa. Na podstawie przeprowadzonych analiz
dostępnych rozwiązań oraz uwarunkowań implementacyjnych autor zdecydował o podziale
funkcjonalnym procesu klasyfikacji na dwa odrębne obszary: adresację sieciową wraz
z informacją o typie protokołu oraz porty sieciowe. Do celów weryfikacji adresacji sieciowej
w sprzętowej zaporze ogniowej wykorzystana została specjalnie zmodyfikowana pamięć
trójwartościowa TCAM, bazująca na elementach RAM16X1S dostępnych w zasobach układów
FPGA serii Virtex II Pro. Dzięki wprowadzonym zmianom udało się ponad dwukrotnie
zmniejszyć zapotrzebowanie na zasoby sprzętowe w porównaniu do komercyjnej wersji pamięci
wygenerowanej za pomocą oprogramowania Xilinx COREGenerator. Redukcja alokowanych
zasobów sprzętowych wpłynęła korzystnie na maksymalną częstotliwość pracy filtru adresów,
zwiększając ją do wartości około 257 MHz. W przypadku bardziej skomplikowanego
i problematycznego
zagadnienia
weryfikacji
portów
protokołów
transportowych
autor
zaproponował również nowatorskie rozwiązanie równoległego przetwarzania bazy reguł
bezpieczeństwa przy wykorzystaniu łańcuchów elementarnych komparatorów zakresów
cząstkowych. Bazowały one na kaskadach dwuportowych pamięci RAM16X1D, wchodzących
w skład zasobów sprzętowych układów reprogramowalnych FPGA firmy Xilinx. Teoretyczna
maksymalna częstotliwość pracy zrealizowanego filtru portów wyniosła około 162 MHz.
Ponieważ proces weryfikacji dokonywany był w trakcie pojedynczego cyklu zegara
systemowego, przepustowość filtru portów osiągnęła poziom około 160 milionów pakietów na
sekundę. Wartość ta stanowiła główny czynnik, warunkujący szybkość pracy kompletnego
modułu klasyfikującego, którego maksymalna wydajność raportowana przez narzędzia syntezy
logicznej była tożsama w tym wypadku z wydajnością filtru portów. Należy podkreślić,
że osiągnięto w pełni zadowalające parametry pracy sprzętowego klasyfikatora, umożliwiające
funkcjonowanie z ogromnym zapasem wydajności w infrastrukturze sieciowej, wykorzystującej
standard 10 Gb Ethernet. Z tego względu autor zdecydował o zastosowaniu w prototypowej
wersji Firewalla pojedynczego modułu klasyfikatora, weryfikującego za pomocą algorytmu
karuzelowego ruch pochodzący z dwóch interfejsów sieciowych. Całkowity czas klasyfikacji
pojedynczego pakietu zajmował wówczas dla najbardziej niekorzystnego przypadku 8 cykli
zegara systemowego, co przy maksymalnej częstotliwości pracy rzędu 160 MHz pozwoliło na
151
przetwarzanie danych z szybkością 20 milionów pakietów na sekundę (w sieci 10Gb Ethernet
największa dopuszczalna liczba ramek przesyłanych w ciągu sekundy wynosi 14 880 952).
Celem udowodnienia tezy oraz testowania kompletnej i funkcjonalnej zapory ogniowej,
autor zaimplementował odpowiednie moduły zarządzające jej pracą oraz ładowaniem bazy reguł
bezpieczeństwa. W ramach prowadzonych prac powstała także prototypowa wersja aplikacji
konwertującej tabelaryczne zestawienia polityki bezpieczeństwa do postaci binarnych map
konfiguracji wewnętrznej poszczególnych filtrów.
Opracowany sprzętowy Firewall został poddany praktycznym testom porównawczym
z komercyjnymi rozwiązaniami zabezpieczającymi. Osiągnął on najlepsze wyniki spośród
wszystkich
konfiguracji,
badanych
potwierdzając
teoretycznie
oszacowane
parametry
wydajnościowe oraz ogromny potencjał wykorzystania technologii logiki reprogramowalnej
FPGA w obszarze bezpieczeństwa systemów teleinformatycznych.
Do oryginalnych osiągnięć autora, zaprezentowanych w tej pracy, należy zaliczyć:
–
opracowanie koncepcji kompletnej, skalowalnej i elastycznej architektury sprzętowej
zapory ogniowej implementowanej w układach FPGA,
–
opracowanie koncepcji zrównoleglenia przetwarzania danych przy wykorzystaniu
dedykowanych kanałów transmisyjnych,
–
opracowanie zasady pracy modułu pamięci ramkowej minimalizującego opóźnienia
związane z weryfikacją pakietów,
–
opracowanie
dedykowanego
bloku
pamięci
podręcznej
cache,
wspomagającej
klasyfikator pakietów, a w konsekwencji zwiększającej całkowitą wydajność Firewalla,
–
optymalizację struktury pamięci CAM (przy wykorzystaniu rejestrów przesuwnych),
umożliwiającej łatwe dostosowanie konfiguracji pamięci do wymagań systemu Firewall,
redukującej zapotrzebowanie na zasoby układu FPGA oraz zwiększającej maksymalną
szybkość pracy,
–
opracowanie struktury wydajnego, skalowalnego oraz w pełni deterministycznego
sprzętowego klasyfikatora pakietów, opartego na dwóch niezależnych blokach
filtrujących adresy i porty sieciowe, umożliwiającego przetwarzanie do 160 milionów
pakietów na sekundę,
–
opracowanie na potrzeby szybkiej filtracji adresów autorskiej metody implementacji
pamięci TCAM, charakteryzującej się ponad dwukrotnie bardziej efektywnym
wykorzystaniem zasobów sprzętowych oraz o około 30% większą szybkością pracy
w porównaniu z wersją pamięci uzyskaną za pomocą Xilinx COREGeneratora,
–
opracowanie specjalnej, autorskiej metody szybkiego filtrowania zakresów portów
w oparciu o kaskady elementarnych komparatorów zbudowanych z pamięci RAM16X1D,
wchodzących w skład zasobów sprzętowych układów reprogramowalnych FPGA,
152
–
zaprojektowanie, realizacja i testowanie kompletnej architektury sprzętowej zapory
ogniowej implementowanej w układach FPGA,
–
zaprojektowanie, wykonanie i uruchomienie kart sieciowych obsługujących standardy
Fast oraz Gigabit Ethernet, współpracujących z płytami FPGA oraz implementacja
wysokowydajnych sprzętowych kontrolerów MAC dla standardu sieci Ethernet.
Zaprezentowane w niniejszej pracy rezultaty prowadzonych badań pozwalają stwierdzić,
że postawiona na wstępie teza: „Implementacja w układach FPGA rekonfigurowanego systemu
ochrony transmisji danych typu Firewall dla sieci Ethernet o wielkich przepływnościach pozwala
uzyskać wysoki poziom bezpieczeństwa, dużą szybkość przetwarzania danych oraz możliwość
dynamicznej zmiany parametrów” została w pełni wykazana.
Pozytywna weryfikacja tezy pracy w połączeniu ze stale rosnącymi wymaganiami
wydajnościowymi, które stawia się kolejnym generacjom urządzeń zabezpieczających sieci
teleinformatyczne, motywuje do kontynuowania rozwoju i optymalizacji sprzętowego Firewalla.
Dalsze prace badawcze, zdaniem autora, powinny koncentrować się przede wszystkim na
następujących zagadnieniach:
–
implementacji sprzętowych kontrolerów 10 Gb Ethernet,
–
realizacji funkcjonalności analizy pakietów typu „stateful inspection” lub DPI,
–
wdrożeniu dodatkowych usług, takich jak: system IPS, ochrona antywirusowa, itp.,
–
wprowadzeniu szczegółowego monitorowania parametrów pracy,
–
optymalizacji wydajności oraz zapotrzebowania na zasoby sprzętowe klasyfikatora
pakietów,
–
rozbudowie funkcjonalności aplikacji zarządzającej.
Tak nakreślony obszar rozwoju sprzętowej zapory ogniowej ma na celu z jednej strony
jak najlepsze dostosowanie jej parametrów użytkowych do rzeczywistych potrzeb produkcyjnych
systemów przetwarzania danych, z drugiej zaś zapewnienie ciągłej optymalizacji wydajności
analizy pakietów, odpowiadającej niezwykle dynamicznemu wzrostowi szybkości transmisji
danych we współczesnych sieciach teleinformatycznych.
153
7. Bibliografia
[1] Abdelghani M., Sezer S., Garcia E., Jun M.: Packet Classification Using Adaptive Rules Cutting
(ARC), Advanced Industrial Conference on Telecommunications/Service Assurance with Partial
and Intermittent Resources Conference/E-Learning on Telecommunications Workshop, IEEE, 2005
[2] Abie H.: An Overview of Firewall Technologies, Telektronikk, vol. 96, 2000, pp.47-52
[3] Aho A., Hopcroft J., Ullman J.: Algorytmy i struktury danych, Wydawnictwo Helion, Gliwice, 2003
[4] Aldec, Active-HDL, http://www.aldec.com/Products/Product.aspx?productid=77a6c939-42b0-4c57a8a0-7d9714b054d4
[5] Baboescu F., Singh S., Varghese G.: Packet Classification for Core Routers: Is there an alternative
to CAMs?, Proceedings of Infocom, 2003
[6] Baboescu F., Varghese G.: Scalable Packet Classification, IEEE/ACM Trans. Netw., 2005, pp. 2-14
[7] Baker Z., Prasanna V.: Highthroughput LinkedPattern Matching for Intrusion Detection Systems,
Proceedings of the 2005 ACM symposium on Architecture for networking and communications
systems, 2005
[8] Banachowski L., Diks K., Rytter W.: Algorytmy i struktury danych, Wydawnictwa NaukowoTechniczne, Warszawa, 2006
[9] Bell D., LaPadula L.: Secure Computer Systems: Mathematical Foundations, MITRE Technical
Report 2547, Volume I, 1973
[10] Bhagchandka D.: Classification of Firewalls and Proxies, Computer Science Research and Writing,
2003
[11] Bremler-Barr A., Hendler D.: Space-Efficient TCAM-based Classification Using Gray Coding, IEEE
INFOCOM, 2007, pp. 1388–1396
[12] Buddhikot M., Suri S., Waldvogel M.: Space decomposition techniques for fast layer-4 switching,
Proceedings of Conference on Protocols for High Speed Networks, 1999, pp. 25-41
[13] Chadwick D.: Network Firewall Technologies, Proceedings of the NATO Advanced Networking
Workshop on Advanced Security Technologies in Networking, Slovenia, 2000
[14] Check Point Software Technologies Ltd.: Smarter, Not Harder: Many Cores are Faster than One,
http://www.checkpoint.com/securitycafe/readingroom/general/multi_core_processors.html
[15] Cisco, Internetworking Technology Handbook - LAN Switching,
http://www.cisco.com/en/US/docs/internetworking/technology/handbook/LAN-Switching.html
[16] DARPA: Transmission Control Protocol - DARPA Internet Program Protocol Specification,
Information Sciences Institute, University of Southern California, 1981,
154
http://tools.ietf.org/pdf/rfc793.pdf
[17] DatacenterDynamic: Report: More than 1m 10GbE switch ports shipped during Q2 for first time
ever, http://www.datacenterdynamics.com/ME2/dirmod.asp?sid=&nm=&type=news&
mod=News&mid=9A02E3B96F2A415ABC72CB5F516B4C10&tier=3&nid=
99557444C0CE4DC1B28736EC811B171D
[18] De Berg M., Van Kreveld M., Overmars M., Schwarzkopf O.: Geometria obliczeniowa: algorytmy
i zastosowania, Wydawnictwa Naukowo-Techniczne, Warszawa, 2007
[19] Department of Defense: Trusted Computer System Evaluation Criteria, DOD 5200.28-STD, 1985
[20] Derfler F.: Sieci komputerowe dla każdego, Gliwice, Wydawnictwo Helion, 2001
[21] Digilent Inc., Digilab 2E FPGA Development Board,
http://www.digilentinc.com/Data/Products/D2E/D2E-brochure.pdf
[22] Digilent Inc., Product Categories, http://www.digilentinc.com/nav1index.cfm?NavTop=2
[23] Digilent Inc., Virtex-II Pro Development System,
http://www.digilentinc.com/Products/Detail.cfm?Prod=XUPV2P
[24] Drozdek A.: C++ Algorytmy i struktury danych, Wydawnictwo Helion, Gliwice, 2004
[25] Dubrawsky I.: Firewall Evolution - Deep Packet Inspection, Symantec, 2003,
http://www.symantec.com/connect/articles/firewall-evolution-deep-packet-inspection
[26] Feldmann A., Muthukrishnan S.: Tradeoffs for Packet Classification, Proceedings of IEEE
INFOCOM, 2000, pp. 1193-1202
[27] Ferraiolo D., Kuhn D.: Role-Based Access Controls, 15th National Computer Security Conference,
1992, pp. 554 - 563
[28] Finkel R., Bentley J.: Quad Trees: A Data Structure for Retrieval on Composite Keys, Acta
Informatica 4 (1974), Springer-Verlag , 1974, pp. 1-9
[29] Fortinet: Firewall solutions, http://www.fortinet.com/solutions/firewall.html
[30] Frantzen M., Kerschbaum F., Schultz E., Fahmy S.: A Framework for Understanding Vulnerabilities
in Firewalls Using a Dataflow Model of Firewall Internals, Computers & Security, vol. 20, no. 3,
2001, pp. 263-270
[31] Gao M., Zhang K., Lu J.: Efficient Packet Matching for Gigabit Network Intrusion Detection using
TCAMs, Proceedings of the 20th International Conference on Advanced Information Networking
and Applications (AINA’06), IEEE, 2006
[32] Girija N., Basu A., Zane F.: CoolCAMs: Power-Efficient TCAMs for Forwarding Engines,
Proceedings of Infocom, 2003
[33] Gupta P., McKeown N.: Algorithms for packet classification, IEEE Network, vol. 15, no. 2, 2001,
pp. 24–32
155
[34] Gupta P., Mckeown N.: Packet Classification on Multiple Fields, ACM Sigcomm, 1999, pp. 147-160
[35] Gupta P., McKeown N.: Packet Classification using Hierarchical Intelligent Cuttings, Proceedings
of the Hot Interconnects VII, 1999, pp. 34-41
[36] Henry P.: Handbook od Firewall Architecture, Secure Computing White Paper,
www.securecomputing.com
[37] HiTechGlobal, Prototyping Boards, http://www.hitechglobal.com/boards/allboards.htm
[38] Hughes-Jones R., Dallison S., Fairey G., Clarke P., Bridge and I.: Performance Measurements
on Gigabit Ethernet NICs and Server Quality Motherboards, In Proceedings of the 1st International
Workshop on Protocols for Fast Long-Distance Networks (PFLDnet 2003), Geneva, Switzerland,
February 2003
[39] Hughes-Jones R., Clarke P., Dallison S.: Performance of 1 and 10 Gigabit Ethernet cards with server
quality motherboards, Future Gener. Comput. Syst. 21, 4 (Apr. 2005), s.469-488
[40] IEEE, 802.3 IEEE Standard for Information technology - Telecommunications and information
exchange between systems - Local and metropolitan area networks, 2005
[41] Info-Tech Research Group, Vendor Landscape: IT Security Appliances, 2009,
http://www.sonicwall.nl/downloads/WP-ENG-047_Vendor-Landscape-IT-Security-Appliances.pdf
[42] International Organization for Standardization, Information technology – Open Systems
Interconnection – Basic Reference Model,
http://standards.iso.org/ittf/PubliclyAvailableStandards/s020269_ISO_IEC_7498-1_1994(E).zip
[43] Jedhe G., Ramamoorthy A., Varghese K.: A scalable high throughput firewall in FPGA, Proceedings
of the 2008 16th International Symposium on Field-Programmable Custom Computing Machines,
2008, pp. 43-52
[44] Jiang W., Prasanna V.: A FPGA-based Parallel Architecture for Scalable High-Speed Packet
Classification 20th IEEE International Conference on Application-specific Systems, Architectures
and Processors, ASAP, 2009, pp. 24-31
[45] Jiang W., Prasanna V.: Large-scale wire-speed packet classification on FPGAs, Proceedings
of the ACM/SIGDA international symposium on Field programmable gate arrays, 2009, pp. 219-228
[46] Kennedy A., Wang X., Liu B.: Energy efficient packet classification hardware accelerator,
Proceedings of the IEEE International Symposium on Parallel and Distributed Processing, 2008
[47] Kennedy A., Liu Z., Wang X., Liu B.: Multi-Engine Packet Classification Hardware Accelerator,
Proceedings of 18th International Conference on Computer Communications and Networks, 2009,
pp. 1-6
[48] Kijewski P., Szczypiorski K.: Bezpieczeństwo w sieciach TCP/IP, Przegląd Telekomunikacyjny,
no. 5–6, 2001, s. 367-373
[49] Knuth D.: The Art of Computer Programming. Volume 3: Sorting and Searchning, Addison-Wesley
156
Publishing Company, 1973
[50] Kolehmainen A.: Optimizing firewall performance, TKK T-110.5190 Seminar on Internetworking,
2007
[51] Kumar, S. Dharmapurikar S. , Yu F. , Crowley P., Turner J.: Algorithms to Accelerate Multiple
Regular Expressions Matching for Deep Packet Inspection, In Proceedings of the Annual Conference
of the ACM Special Interest Group on Data Communication, 2006, pp. 339-350
[52] Lakshman T., Stiliadis D.: High-Speed Policy-based Packet Forwarding Using Efficient Multidimensional Range Matching, Proceedings of ACM Sigcomm, 1998, pp. 191-202
[53] Lakshminarayanan K., Anand Rangarajan A., Venkatachary S.: Algorithms for advanced packet
classification with Ternary CAMs, ACM SIGCOMM, 2005, pp. 193-204
[54] LeClaire J.: Google: Malware Runs Rampant on the Web, Enterprise Security Today, 2007,
http://www.enterprise-security-today.com/news/Google-Malware-Rampant-on-theWeb/story.xhtml?story_id=100000A0CEHC
[55] Levin T., Irvine C., Weissman C., Weissman T.: Analysis of Three Multilevel Security Architectures,
Proceedings of the 2007 ACM workshop on Computer security architecture, 2007, pp. 37-46
[56] Ligatti J., Gage C.: Dimension-independent Table-based Firewalls, Technical Report CSE-111108NS, 2008, http://www.cse.usf.edu/~ligatti/papers/fw-tr.pdf
[57] Linear Technology, LT1963 Series,
http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1003,C1040, C1055,P2222,D3148
[58] Liu H.: Efficient Mapping of Range Classifier into Ternary-CAM, Proceedings of the 10th
Symposium on High Performance Interconnects HOT Interconnects, IEEE, 2002
[59] Loinig J., Wolkerstorfer J., Szekely A.: Packet Filtering in Gigabit Networks Using FPGAs,
Proceedings of the 15th Austrian Workshop on Microelectronics (2007), Austrochip, 2007,
pp. 53 - 60
[60] Loscocco P., Smalley S., Muckelbauer P., Taylor R., Turner S., Farrell J.: The Inevitability
of Failure: The Flawed Assumption of Security in Modern Computing Environments, In Proceedings
of the 21st National Information Systems Security Conference, 1998, pp. 303–314
[61] Lu J., Moscola J., Song H.: Control Packet Security for CAM based Firewall, Washington University,
2002
[62] Lunteren J., Engbersen T.: Fast and Scalable Packet Classification, IEEE Journal on selected areas
in communications, vol. 21, no. 4, 2003
[63] Luo Y., Xiang K., Li S.,: Acceleration of Decision Tree Searching for IP Traffic Classification ,
ACM/IEEE Symposium on Architectures for Networking and Communications Systems, 2008,
pp. 40-49
[64] Mahini H., Berangi R., Mahini A.: MLET: A Power Efficient Approach for TCAM Based, IP Lookup
157
Engines in Internet Routers, International Journal of Computer Networks & Communications, 2010,
pp. 13-26
[65] MarshallSoft, Windows Standard Serial Communications Library for Visual Basic (WSC4VB),
http://www.marshallsoft.com/wsc4vb.htm
[66] McAfee, McAfee Threats Report: First Quarter 2010,
http://www.mcafee.com/us/local_content/reports/2010q1_threats_report.pdf
[67] McAfee: TrustedSource: The Next Generation Reputation System for Enterprise Gateway Security,
http://nwtechusa.com/pdf/mcafee_wp_trustedsource.pdf
[68] National Semiconductor Corp., DP83865 Data Sheet, http://www.national.com/ds/DP/DP83865.pdf
[69] National Semiconductor Corp., DP83865 Reference Design,
http://www.national.com/appinfo/networks/files/dp83865_refdesign.pdf
[70] Niederberger R., Allcock W., Gommans L., Grünter E., Metsch T., Monga I., Volpato G., Grimm C.:
Firewall Issues overview, Open Grid Forum, 2006, http://www.ogf.org/documents/GFD.83.pdf
[71] Nikitakis A., Papaefstathiou I.: A Multi Gigabit FPGA-based 5-tuple classification system, IEEE
International Conference on Communications, 2008, pp. 2081-2085
[72] Nowicki K.: Ethernet – sieci, mechanizmy, Gdańsk , Infotech, 2006
[73] Opencores, WISHBONE System-on-Chip (SoC) Interconnection Architecture for Portable IP Cores,
http://opencores.org/downloads/wbspec_b3.pdf
[74] OpenCores, www.opencores.org
[75] Papaefstathiou I., Papaefstathiou V.: Memory-efficient 5D packet classification at 40 Gbps, 26th
IEEE International Conference on Computer Communications INFOCOM, 2007, pp. 1370–1378
[76] Pereira J.: Comparison of Firewall, Intrusion Prevention and Antivirus Technologies, White Paper,
Juniper Networks Inc., http://www.juniper.net/solutions/literature/white_papers/200063.pdf
[77] Piotrowski M.: Bezpieczny Linux – przegląd projektów, hakin9, Nr 2/2006, Software-Wydawnictwo,
Warszawa, 2006
[78] Pradhan P.: Hardening of UNIX Operating System, International Journal of Computer
Communication and Technology, vol. 1, no. 1, 2009
[79] Pulse, PulseJack 1x1 Tab-Down RJ45 Data Sheet,
http://ww2.pulseeng.com/products/datasheets/J403.pdf
[80] Pulse, PulseJack Gigabit Data Sheet, http://ww2.pulseeng.com/products/datasheets/J411.pdf
[81] Qin H., Sasao T., Butler J.,: Implementation of LPM Address Generators on FPGAs, Reconfigurable
Computing: Architectures and Applications, vol. 3985/2006, Springer, 2006, p.170-181
[82] Qiu L., Varghese G., Suri S.: Fast firewall implementations for software and hardware-based
158
routers, Network Protocols Ninth International Conference on ICNP, 2001, pp. 241-250
[83] Realtek, RTL8201BL Data Sheet, http://www.alldatasheet.com/datasheetpdf/pdf/82934/ETC/RTL8201BL.html
[84] Realtek, RTL8201BL General Description,
http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=13&Level=5
&Conn=4&ProdID=24
[85] Realtek, RTL8201BL/CL/CP application circuit - interface with MAC(MII),
http://www.wiznet.co.kr/rg4_board/down.php?&bbs_code=en_qna&page=106
&bd_num=13185&key=0&mode=down
[86] Runge C.: The Path to Multi-Level Security in Red Hat Enterprise Linux, Red Hat, 2006,
http://www.redhat.com/f/pdf/sec/path_to_mlsec.pdf
[87] SC Magazine, Multi-function appliances, 2006, http://www.scmagazineus.com/multi-functionappliances-2006/printgrouptest/20/
[88] Secunia: Vulnerability Report: Cisco Intrusion Prevention System (IPS) 5.x,
http://secunia.com/advisories/product/5600/?task=statistics
[89] Secunia: Vulnerability Report: Cisco IOS 12.x,
http://secunia.com/advisories/product/182/?task=statistics
[90] Secunia: Vulnerability Report: Cisco PIX 6.x, http://secunia.com/advisories/product/56/?task=statistic
[91] Sedgewick R.: Algorithms in C, Addison-Wesley Publishing Company, 1990
[92] Singh S., Baboescu F., Varghese G., Wang J.: Packet classification using multidimensional cutting,
Proceedings of ACM SIGCOMM, 2003, pp. 213–224
[93] Song H., Lockwood J.: Efficient Packet Classification for Network Intrusion Detection using FPGA,
International Symposium on Field-Programmable Gate Arrays (FPGA'05), Monterey, CA, 2005
[94] Sourdis I., Pnevmatikatos D.: Pre-decoded CAMs for Efficient and High-Speed NIDS Pattern
Matching, IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM), Napa,
CA, 2004
[95] Spencer R., Smalley S., Loscocco P., Hibler M., Andersen D., Lepreau J.: The Flask Security
Architecture: System Support for Diverse Security Policies, In The Eighth USENIX Security
Symposium, 1999, pp. 123–139
[96] Spirent Communications Inc., How to Test 10 Gigabit Ethernet Performance,
http://gospirent.com/whitepaper/10GE_Perf_Testing.pdf
[97] Spitznagel E., Taylor D., Turner J.: Packet Classification Using Extended TCAM, Proceedings
of the 11th IEEE International Conference on Network Protocol, 2003, p.120
[98] Srinivasan V., Vargheset G., SuriS S., Waldvogelg M.: Fast and Scalable Layer Four Switching,
159
ACM SIGCOMM '98, 1998, pp. 191-202
[99] Srinivasan V., Suri S., Varghese G.: Packet Classification using Tuple Space Search, Proceedings
of ACM Sigcomm, 1999, pp. 135-46
[100] Stawoski M.: Zapory sieciowe firewal. Projektowanie i praktyczne implementacje na bazie
zabezpieczeń Check Point NGX, ArsKom, Warszawa, 2006
[101] Strona domowa aplikacji iperf, http://iperf.sourceforge.net/
[102] Strona domowa firmy Secunia, http://secunia.com/
[103] Strona domowa firmy SofaWare, http://www.sofaware.com/uploadFiles/[email protected]
[104] Strona domowa firmy Sunbelt Software, Sunbelt Personal Firewall,
http://www.sunbeltsoftware.com/Home-Home-Office/Sunbelt-Personal-Firewall/
[105] Strona domowa IEEE P802.3ba 40Gb/s oraz 100Gb/s Ethernet Task Force,
http://grouper.ieee.org/groups/802/3/ba/index.html
[106] Strona domowa organizacji 10GEA, Introduction to the TCP/IP offload Engine,
http://www.10gea.org/tcp-ip-offload-engine-toe.htm
[107] Sułkowski G., Twardy M., Wiatr K.: Filtrowanie adresów sieciowych w sprzętowym systemie
bezpieczeństwa typu Firewall, Kwartalnik Pomiary, Automatyka i Kontrola nr 7, 2009, s.479-481
[108] Sułkowski G., Twardy M., Wiatr K.: Implementacja standardu sieci Ethernet IEEE 802.3 w układach
FPGA na potrzeby systemu bezpieczeństwa typu Firewall, Kwartalnik Pomiary Automatyka
i Kontrola nr 7, 2007, s. 30-32
[109] Sułkowski G., Twardy M., Wiatr K.: Implementacja systemu bezpieczeństwa typu Firewall dla
potrzeb sieci Ethernet w oparciu o układy reprogramowalne FPGA, Kwartalnik Pomiary,
Automatyka i Kontrola nr 5, 2007, s. 114-116
[110] Sułkowski G., Twardy M., Wiatr K.: Implementation of a hardware Firewall Security System using
FPGA Technology, Materiały z konferencji Sieci i Systemy Informatyczne 2008 (SIS’08). Wydanie
elektroniczne (ISBN 978-83-909161-1-8), 2008
[111] Sułkowski G., Twardy M., Wiatr K.: Implementation of the Ethernet Network IEEE 802.3 standard
in the FPGA devices for a security system of the Firewall type, Materiały konferencji Narzędzia
Technologii Informacyjnych 2007 (NTI’07), 2007, s. 57-63
[112] Sułkowski G., Twardy M., Wiatr K.: Implementation of the Hardware Packet Classification System,
Journal of Applied Computer Science, vol. 17, no. 2, 2009, pp.97-111
[113] Sułkowski G., Twardy M., Wiatr K.: Szybka filtracja portów sieciowych w sprzętowym systemie
bezpieczeństwa typu Firewall, Kwartalnik Pomiary, Automatyka i Kontrola nr 8, 2009, s. 615-617
[114] Sułkowski G., Twardy M., Wiatr K.: Weryfikacja reguł bezpieczeństwa wspomagana mechanizmami
pamięci podręcznej w sprzętowej implementacji systemu bezpieczeństwa typu firewall, Kwartalnik
160
Pomiary, Automatyka i Kontrola nr 8, 2008, s. 511-513
[115] Sułkowski G., Twardy M., Wiatr K.: Wielościeżkowe równoległe przetwarzanie danych
w sprzętowym systemie bezpieczeństwa klasy Firewall, Przegląd Telekomunikacyjny nr 6, 2008,
s.726-728
[116] Sygate: Sygate Personal Firewall, http://sygate-personal-firewall.brothersoft.com/
[117] Taiwan Semiconductor, TS823/824/825 Series Data Sheet,
http://www.ts.com.tw/db/pictures/modules/PDT/PDT060207001/TS823_24_25_B07.pdf
[118] Taylor D., Turner J.: Scalable packet classification using distributed crossproducing of field labels,
24th Annual Joint Conference of the IEEE Computer and Communications Societies, INFOCOM,
2005, pp. 269 - 280
[119] Taylor D.: Survey and taxonomy of packet classification techniques, ACM Computer Surverys, 2005,
pp. 238–275
[120] Terasic Technologies, FPGA Systems, http://www.terasic.com.tw
[121] Tsuchiya P.: A Search Algorithm for Table Entries with Non-contiguous Wildcarding, Bellcore,
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.37.3234&rep=rep1&type=pdf
[122] Wiatr K.: Akceleracja obliczeń w systemach wizyjnych, Wydawnictwa Naukowo-Techniczne,
Warszawa, 2003
[123] Wiatr K.: Sprzętowe implementacje algorytmów przetwarzania obrazów w systemach wizyjnych czasu
rzeczywistego, Kraków, Wyd. Naukowo-Dydaktyczne AGH, 2002
[124] Wikberg M.: Secure computing: SELinux, TKK T-110.5290 Seminar on Network Security, 2007,
http://www.tml.tkk.fi/Publications/C/25/papers/Wikberg_final.pdf
[125] Xilinx, 16-Deep by 1-Wide Static Dual Port Synchronous RAM,
http://www.xilinx.com/itp/xilinx5/data/docs/lib/lib0345_329.html
[126] Xilinx, 170 MHz FIFOs Using the Virtex Block SelectRAM+ Feature,
http://www.xilinx.com/support/documentation/application_notes/xapp131.pdf
[127] Xilinx, Designing Flexible, Fast CAMs with Virtex Family FPGAs,
http://www.xilinx.com/support/documentation/application_notes/xapp203.pdf
[128] Xilinx, Digital Clock Manager (DCM) Module,
http://www.xilinx.com/support/documentation/ip_documentation/dcm_module.pdf
[129] Xilinx, IEEE 802.3 Cyclic Redundancy Check,
http://www.xilinx.com/support/documentation/application_notes/xapp209.pdf
[130] Xilinx, LocalLink Interface Specification, SP006 (v2.0), 2005,
http://www.xilinx.com/products/ipcenter/LocalLink_UserInterface.htm
[131] Xilinx, An Overview of Multiple CAM Designs in Virtex Family Devices,
161
http://www.xilinx.com/support/documentation/application_notes/xapp201.pdf
[132] Xilinx, Spartan-II FPGA Family Data Sheet,
http://www.xilinx.com/support/documentation/data_sheets/ds001.pdf
[133] Xilinx, System Clock Management Simplified with Virtex-II Pro FPGAs,
http://www.xilinx.com/support/documentation/white_papers/wp190.pdf
[134] Xilinx, Using the Virtex Block SelectRAM+ Features,
http://www.xilinx.com/support/documentation/application_notes/xapp130.pdf
[135] Xilinx, Virtex-II Pro and Virtex-II Pro X Platform FPGAs: Complete Data Sheet,
http://www.xilinx.com/support/documentation/data_sheets/ds083.pdf
[136] Xilinx, Xilinx CORE Generator System, http://www.xilinx.com/tools/coregen.htm
[137] Yu H.: A Memory- and Time-efficient On-chip TCAM Minimizer for IP Lookup, Design, Automation
& Test in Europe Conference & Exhibition (DATE), 2010, pp. 926-931
[138] Zane F., Narlikar G., Basu A.: CoolCAMs: Power-Efficient TCAMs for Forwarding Engines,
INFOCOM 2003, Twenty-Second Annual Joint Conference of the IEEE Computer and
Communications , vol. 1, 2003, pp. 42-52
[139] Zheng K., Che H., Wang Z., Liu B., Zhang X.: DPPC-RE: TCAM-Based Distributed Parallel Packet
Classification with Range Encoding, IEEE Transactions on Computers, vol. 55, 2006, pp. 947-961
162
8. Dodatek A – opis funkcji sygnałów
poszczególnych modułów sprzętowego
systemu Firewall
8.1. Sygnały modułu eth_mac w wersji Fast Ethernet
Interfejs PHY MII:

phy_rx_clk - zegar toru odbiorczego (25 MHz dla szybkości 100 Mb/s oraz 2,5 MHz dla trybu
10 Mb/s),

phy_rx_dv - sygnał potwierdzający przy narastającym zboczu zegara phy_rx_clk obecność
poprawnych danych na wejściu phy_rx_data(3:0),

phy_rx_error - sygnał zgłoszenia błędu odbioru (przyjmuje wysoki poziom logiczny
w momencie wystąpienia jakiegokolwiek błędnego symbolu w kodzie 5B),

phy_rx_data(3:0) – odbierane nible (połówki bajtu) danych,

phy_tx_clk - zegar toru nadawczego (25 MHz dla szybkości 100 Mb/s oraz 2,5 MHz dla trybu
10 Mb/s),

phy_tx_en – sygnał zezwolenia transmisji,

phy_tx_data(3:0) – nible danych przeznaczonych do wysłania,

phy_col – sygnał zgłoszenia kolizji w medium fizycznym,

phy_crs – sygnał detekcji nośnej,

phy_int_n – sygnał zgłoszenia przerwania (tylko dla kart Gigabit Ethernet),

phy_mdc - zegar synchronizujący linię MDIO,

phy_mdio - dwukierunkowa linia służąca przesyłaniu informacji sterujących pracą PHY,

phy_reset_n – sygnał resetu układu PHY (tylko dla kart Gigabit Ethernet).
Interfejs komunikacyjny Firewalla:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset kontrolera MAC,

eth_mac_ready - kontroler MAC zestawił poprawne połączenie ze stacją docelową,

eth_mac_rx_enable – zezwolenie na odbiór danych,

eth_mac_rx_pause – zatrzymanie procesu odbioru (reset toru RX w związku z przepełnieniem
buforu FIFO),

eth_mac_rx_active – sygnał informujący o aktywności toru RX,

eth_mac_rx_data(7:0) – odebrany bajt danych,

eth_mac_rx_data_valid – sygnał walidujący odebrany bajt danych,

eth_mac_rx_ok – informacja o poprawnie odebranej ramce,
163

eth_mac_rx_error – zgłoszenie błędu podczas odbierania ramki,

eth_mac_rx_frame_size(10:0) – długość odebranej ramki w bajtach,

eth_mac_tx_enable – zezwolenie na transmisję danych,

eth_mac_tx_active – sygnał informujący o aktywności toru TX,

eth_mac_tx_retransmit – konieczna retransmisja ramki w związku z wystąpieniem kolizji,

eth_mac_tx_data(7:0) – wejście transmitowanych danych,

eth_mac_tx_data_ack – potwierdzenie wysłania bajtu danych,

eth_mac_tx_ok – poprawne zakończenie transmisji ramki,

eth_mac_tx_error – transmisja ramki zakończona błędem,

eth_mac_tx_frame_size(10:0) – długość transmitowanej ramki w bajtach.
Interfejs konfiguracyjny:

r_rx_promiscous_en – praca
w trybie promiscous (akceptacja
wszystkich ramek
przychodzących),

r_rx_multicast_en – akceptacja ramek rozgłoszeniowych typu multicast,

r_rx_mac_address(47:0) – adres MAC kontrolera,

r_tx_crc_en – włączenie obliczania sumy kontrolnej CRC dla transmitowanej ramki,

r_tx_padding_en – włączenie trybu automatycznego dopełniania ramek krótszych od długości
minimalnej,

r_mii_config(15:0) – wektor konfiguracyjny zarządzania PHY poprzez magistralę MDIO:
o
(15:11) – adres PHY,
o
(10:3) – okres odświeżania linii MDIO,
o
(2) – tryb pracy MDIO,
o
(1:0) – zarezerwowane.
8.2. Sygnały modułu eth_rx w wersji Fast Ethernet
Interfejs PHY MII:

phy_rx_clk - zegar toru odbiorczego (25 MHz dla szybkości 100 Mb/s oraz 2,5 MHz dla trybu
10 Mb/s),

phy_rx_dv - sygnał potwierdzający przy narastającym zboczu zegara phy_rx_clk obecność
poprawnych danych na wejściu phy_rx_data(3:0),

phy_rx_error - sygnał zgłoszenia błędu odbioru (przyjmuje wysoki poziom logiczny
w momencie wystąpienia jakiegokolwiek błędnego symbolu w kodzie 5B),

phy_rx_data(3:0) – odbierane nible (połówki bajtu) danych.
Interfejsu komunikacyjny Firewalla:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset modułu,

eth_mac_rx_enable – zezwolenie na odbiór danych,
164

eth_mac_rx_pause – zatrzymanie procesu odbioru (reset toru RX w związku z przepełnieniem
buforu FIFO),

eth_mac_rx_active – sygnał informujący o aktywności toru RX,

eth_mac_rx_data(7:0) – odebrany bajt danych,

eth_mac_rx_data_valid – sygnał walidujący odebrany bajt danych,

eth_mac_rx_ok – informacja o poprawnie odebranej ramce,

eth_mac_rx_error – zgłoszenie błędu podczas odbierania ramki,

eth_mac_rx_frame_size(10:0) – długość odebranej ramki w bajtach.
Interfejs konfiguracyjny:

r_rx_promiscous_en – praca
w trybie promiscous (akceptacja
wszystkich ramek
przychodzących),

r_rx_multicast_en – akceptacja ramek rozgłoszeniowych typu multicast,

r_rx_mac_address(47:0) – adres MAC kontrolera.

8.3. Sygnały modułu eth_tx w wersji Fast Ethernet
Interfejs PHY MII:

phy_tx_clk - zegar toru nadawczego (25 MHz dla szybkości 100 Mb/s oraz 2,5 MHz dla trybu
10 Mb/s),

phy_tx_col – sygnał zgłoszenia kolizji w medium fizycznym,

phy_tx_crs – sygnał detekcji nośnej,

phy_tx_en – zezwolenie na transmisję danych,

phy_tx_data(3:0) – nible danych przeznaczonych do wysłania,
Interfejsu komunikacyjny Firewalla:

reset – reset modułu,

half_duplex – sygnał informujący o pracy w trybie Half Duplex,

tx_enable – zezwolenie na transmisję danych,

tx_running – sygnał informujący o aktywności toru TX,

tx_data_ack – potwierdzenie wysłania bajtu danych,

tx_data(7:0) – wejście transmitowanych danych,

tx_ok – poprawne zakończenie transmisji ramki,

tx_retransmit – konieczna retransmisja ramki w związku z wystąpieniem kolizji,

tx_error – transmisja ramki zakończona błędem,

tx_frame_size(10:0) – długość transmitowanej ramki.
Interfejs konfiguracyjny:

r_tx_crc_en – włączenie obliczania sumy kontrolnej CRC dla transmitowanej ramki,

r_tx_padding_en – włączenie trybu automatycznego dopełniania ramek krótszych od długości
minimalnej.
165
8.4. Sygnały modułu eth_mac w wersji Gigabit Ethernet
Interfejs PHY GMII:

phy_rx_clk - zegar toru odbiorczego (125 MHz dla 1000 Mb/s GMII, 25 MHz dla szybkości
100 Mb/s oraz 2,5 MHz dla trybu 10 Mb/s),

phy_rx_dv - sygnał potwierdzający przy narastającym zboczu zegara phy_rx_clk obecność
poprawnych danych na wejściu phy_rx_data(3:0) dla interfejsu MII oraz phy_rx_data(7:0) dla
interfejsu GMII,

phy_rx_error - sygnał zgłoszenia błędu odbioru (przyjmuje wysoki poziom logiczny
w momencie wystąpienia jakiegokolwiek błędnego symbolu w kodzie 5B),

phy_rx_data(7:0) – odbierane
dane o szerokości phy_rx_data(3:0) dla interfejsu MII
oraz phy_rx_data(7:0) dla interfejsu GMII,

phy_tx_clk - zegar toru nadawczego w trybie MII (25 MHz dla szybkości 100 Mb/s
oraz 2,5 MHz dla trybu 10 Mb/s),

phy_gtx_clk - zegar toru nadawczego 125 MHz w trybie GMII generowany przez kontroler
MAC,

phy_tx_en – sygnał zezwolenia transmisji,

phy_tx_data(3/7:0) – dane do transmisji o szerokości phy_tx_data(3:0) dla interfejsu MII
oraz phy_tx_data(7:0) dla interfejsu GMII,

phy_tx_error – wymuszenie transmisji niepoprawnych symboli,

phy_col – sygnał zgłoszenia kolizji w medium fizycznym,

phy_crs – sygnał detekcji nośnej,

phy_int_n – sygnał zgłoszenia przerwania (tylko dla kart Gigabit Ethernet),

phy_mdc - zegar synchronizujący linię MDIO,

phy_mdio - dwukierunkowa linia służąca przesyłaniu informacji sterujących pracą PHY,

phy_reset_n – sygnał resetu układu PHY (tylko dla kart Gigabit Ethernet).
Interfejs komunikacyjny Firewalla:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset kontrolera MAC,

mac_ce_in – sygnał Chip Enable dla kontrolera MAC,

rx_data_out(31:0) – 32-bitowe dane wyjściowe,

rx_rem_out(3:0) – walidacja pełnych bajtów w 32-bitowowym słowie danych wyjściowych,

rx_sof_out – potwierdzenie rozpoczęcia odbierania ramki,

rx_eof_out – potwierdzenie zakończenia odbierania ramki,

rx_rd_en_in – sygnał zezwolenia odbierania ramek,

rx_rdy_out – potwierdzenie gotowości toru RX,

rx_ok_out – potwierdzenie poprawności odebranej ramki,

rx_err_out – zgłoszenie błędu w odebranej ramce,

rx_tag_out – informacja o odebraniu ramki znakowanej,

rx_lenght_out(10:0) – długość odebranej ramki (w bajtach),
166

tx_data_in(31:0) – 32-bitowe słowo danych wejściowych przeznaczonych do transmisji,

tx_rem_in(3:0) – walidacja pełnych bajtów w 32-bitowowym słowie danych wejściowych,

tx_sof_in – początek transmisji ramki,

tx_eof_in – koniec transmisji ramki,

tx_wr_en_in – zezwolenie na transmisję ramki,

tx_rdy_out – zgłoszenie gotowości toru TX,

tx_ok_out – informacja o poprawnym zakończeniu transmisji ramki,

tx_err_out – zgłoszenie błędu podczas transmisji ramki,

tx_lenght_in(10:0) – długość wysyłanej ramki (w bajtach).
Interfejs konfiguracyjny:

cfg_rx_prmsc_en
–
praca
w
trybie
promiscous
(akceptacja
wszystkich
ramek
przychodzących),

cfg_rx_mltc_en – akceptacja ramek rozgłoszeniowych typu multicast,

cfg_rx_mac_addr(47:0) – adres MAC kontrolera,

cfg_tx_pause_en – zezwolenie na obsługę ramek kontroli przepływu typu PAUSE,

cfg_mii (15:0) – wektor konfiguracyjny zarządzania PHY poprzez magistralę MDIO:

o
(15:11) – adres PHY,
o
(10:3) – okres odświeżania linii MDIO,
o
(2) – tryb pracy MDIO,
o
(1:0) – zarezerwowane.
stat_speed(1:0) – sygnał informujący o bieżącej szybkości pracy kontrolera MAC („00” –
10 MB/s, „01” – 100 Mb/s, „10” – 1000 Mb/s).

stat_link – sygnał informujący o zestawieniu poprawnego połączenia (‘0’ – brak połączenia,
‘1’ – połączenie zestawione),

stat_duplex – sygnał informujący o trybie Duplex (‘0’ – Half Duplex, ‘1’ – Full Duplex).
8.5. Sygnały modułu eth_rx w wersji Gigabit Ethernet
Interfejs PHY GMII:

phy_rx_clk - zegar toru odbiorczego (125 MHz dla 1000 Mb/s GMII, 25 MHz dla szybkości
100 Mb/s oraz 2,5 MHz dla trybu 10 Mb/s),

phy_rx_dv - sygnał potwierdzający przy narastającym zboczu zegara phy_rx_clk obecność
poprawnych danych na wejściu phy_rx_data(3:0) dla interfejsu MII oraz phy_rx_data(7:0) dla
interfejsu GMII,

phy_rx_error - sygnał zgłoszenia błędu odbioru (przyjmuje wysoki poziom logiczny
w momencie wystąpienia jakiegokolwiek błędnego symbolu w kodzie 5B),

phy_rx_data(7:0) – odbierane
dane o szerokości phy_rx_data(3:0) dla interfejsu MII
oraz phy_rx_data(7:0) dla interfejsu GMII,

phy_crs – sygnał detekcji nośnej.
167
Interfejs komunikacyjny Firewalla:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset kontrolera MAC,

rx_ce_in – sygnał Chip Enable dla toru RX,

rx_data_out(31:0) – 32-bitowe dane wyjściowe,

rx_rem_out(3:0) – walidacja pełnych bajtów w 32-bitowowym słowie danych wyjściowych,

rx_sof_out – potwierdzenie rozpoczęcia odbierania ramki,

rx_eof_out – potwierdzenie zakończenia odbierania ramki,

rx_rd_en_in – sygnał zezwolenia odbierania ramek,

rx_rdy_out – potwierdzenie gotowości toru RX,

rx_ok_out – potwierdzenie poprawności odebranej ramki,

rx_err_out – zgłoszenie błędu w odebranej ramce,

rx_tag_out – informacja o odebraniu ramki znakowanej,

rx_lenght_out(10:0) – długość odebranej ramki (w bajtach).
Interfejs konfiguracyjny:

rx_prmsc_en – praca w trybie promiscous (akceptacja wszystkich ramek przychodzących),

rx_mltc_en – akceptacja ramek rozgłoszeniowych typu multicast,

rx_mac_addr(47:0) – adres MAC kontrolera,

cfg_speed(1:0) – sygnał informujący o bieżącej szybkości pracy kontrolera MAC („00” –
10 MB/s, „01” – 100 Mb/s, „10” – 1000 Mb/s).

cfg_link – sygnał informujący o zestawieniu poprawnego połączenia (‘0’ – brak połączenia,
‘1’ – połączenie zestawione).
8.6. Sygnały modułu eth_tx w wersji Gigabit Ethernet
Interfejs PHY GMII:

phy_tx_clk - zegar toru nadawczego w trybie MII (25 MHz dla szybkości 100 Mb/s
oraz 2,5 MHz dla trybu 10 Mb/s),

phy_gtx_clk - zegar toru nadawczego 125 MHz w trybie GMII generowany przez kontroler
MAC,

phy_col – sygnał zgłoszenia kolizji w medium fizycznym,

phy_crs – sygnał detekcji nośnej,

phy_tx_en – sygnał zezwolenia transmisji,

phy_tx_data(3/7:0) – dane do transmisji o szerokości phy_tx_data(3:0) dla interfejsu MII
oraz phy_tx_data(7:0) dla interfejsu GMII,

phy_tx_error – wymuszenie transmisji niepoprawnych symboli.
Interfejs komunikacyjny Firewalla:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset kontrolera MAC,
168

tx_ce_in – sygnał Chip Enable dla toru RX,

tx_data_in(31:0) – 32-bitowe słowo danych wejściowych przeznaczonych do transmisji,

tx_rem_in(3:0) – walidacja pełnych bajtów w 32-bitowowym słowie danych wejściowych,

tx_sof_in – początek transmisji ramki,

tx_eof_in – koniec transmisji ramki,

tx_wr_en_in – zezwolenie na transmisję ramki,

tx_rdy_out – zgłoszenie gotowości toru TX,

tx_ok_out – informacja o poprawnym zakończeniu transmisji ramki,

tx_err_out – zgłoszenie błędu podczas transmisji ramki,

tx_lenght_in(10:0) – długość wysyłanej ramki (w bajtach),

tx_pause_cnt_eq0 – zgłoszenie zakończenia obsługi ramki typu PAUSE.
Interfejs konfiguracyjny:

cfg_tx_pause_en – zezwolenie na obsługę ramek kontroli przepływu typu PAUSE,

cfg_speed(1:0) – sygnał informujący o bieżącej szybkości pracy kontrolera MAC („00” –
10 MB/s, „01” – 100 Mb/s, „10” – 1000 Mb/s),

cfg_link – sygnał informujący o zestawieniu poprawnego połączenia (‘0’ – brak połączenia,
‘1’ – połączenie zestawione),

cfg_duplex – sygnał informujący o trybie Duplex (‘0’ – Half Duplex, ‘1’ – Full Duplex).
8.7. Sygnały modułu fw_engine
Interfejs MAC:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset silnika,

phy_rx_clk - zegar toru odbiorczego

eth_mac_ready_rx - kontroler MAC toru RX zestawił poprawne połączenie ze stacją
docelową,

eth_mac_rx_enable – zezwolenie na odbiór danych,

eth_mac_rx_pause – zatrzymanie procesu odbioru (reset toru RX w związku z przepełnieniem
buforu FIFO),

eth_mac_rx_active – sygnał informujący o aktywności toru RX,

eth_mac_rx_data(7:0) – odebrany bajt danych,

eth_mac_rx_data_valid – sygnał walidujący odebrany bajt danych,

eth_mac_rx_ok – informacja o poprawnie odebranej ramce,

eth_mac_rx_error – zgłoszenie błędu podczas odbierania ramki,

eth_mac_rx_frame_size(10:0) – długość odebranej ramki w bajtach,

phy_tx_clk - zegar toru nadawczego

eth_mac_tx_enable – zezwolenie na transmisję danych,
169

eth_mac_ready_rx - kontroler MAC toru TX zestawił poprawne połączenie ze stacją
docelową,

eth_mac_tx_active – sygnał informujący o aktywności toru TX,

eth_mac_tx_retransmit – konieczna retransmisja ramki w związku z wystąpieniem kolizji,

eth_mac_tx_data(7:0) – wejście transmitowanych danych,

eth_mac_tx_data_ack – potwierdzenie wysłania bajtu danych,

eth_mac_tx_ok – poprawne zakończenie transmisji ramki,

eth_mac_tx_error – transmisja ramki zakończona błędem,

eth_mac_tx_frame_size(10:0) – długość transmitowanej ramki w bajtach.
Interfejs klasyfikatora:

clas_ETH_frame_type(15:0) – typ ramki Ethernet,

clas_IP_protocol(7:0) – typ protokołu IP,

clas_IP_SA(31:0) – adres źródłowy nagłówka IP,

clas_IP_DA(31:0) – adres docelowy nagłówka IP,

clas_S_port(15:0) – port źródłowy nagłówka TCP/UDP,

clas_D_port(15:0) – port docelowy nagłówka TCP/UDP,

clas_desc_ready – zgłoszenie deskryptora do analizy,

clas_ready – potwierdzenie zakończenia weryfikacji,

clas_result(7:0) – wynik (akcja) klasyfikacji (aktualnie: „00000000” – pakiet zaakceptowany,
„00000001” – pakiet odrzucony; pozostałe stany zarezerwowane).
8.8. Sygnały modułu classifier_main
Interfejs systemowy:

sys_clk – zegar systemowy (w przypadku płyty XUPV 100 MHz),

reset – reset klasyfikatora.
Interfejs silnika toru 0:

clas_0_ETH_frame_type(15:0) – typ ramki Ethernet,

clas_0_IP_protocol(7:0) – typ protokołu IP,

clas_0_IP_SA(31:0) – adres źródłowy nagłówka IP,

clas_0_IP_DA(31:0) – adres docelowy nagłówka IP,

clas_0_S_port(15:0) – port źródłowy nagłówka TCP/UDP,

clas_0_D_port(15:0) – port docelowy nagłówka TCP/UDP,

clas_0_desc_ready – zgłoszenie deskryptora do analizy,

clas_0_ready – potwierdzenie zakończenia weryfikacji,

clas_0_result(7:0)
–
wynik (akcja) klasyfikacji (aktualnie: „00000000” – pakiet
zaakceptowany, „00000001” – pakiet odrzucony; pozostałe stany zarezerwowane).
Interfejs silnika toru 1:

clas_1_ETH_frame_type(15:0) – typ ramki Ethernet,
170

clas_1_IP_protocol(7:0) – typ protokołu IP,

clas_1_IP_SA(31:0) – adres źródłowy nagłówka IP,

clas_1_IP_DA(31:0) – adres docelowy nagłówka IP,

clas_1_S_port(15:0) – port źródłowy nagłówka TCP/UDP,

clas_1_D_port(15:0) – port docelowy nagłówka TCP/UDP,

clas_1_desc_ready – zgłoszenie deskryptora do analizy,

clas_1_ready – potwierdzenie zakończenia weryfikacji,

clas_1_result(7:0)
–
wynik (akcja) klasyfikacji (aktualnie: „00000000” – pakiet
zaakceptowany, „00000001” – pakiet odrzucony; pozostałe stany zarezerwowane).
Interfejs bloku ładowania konfiguracji:

policy_we – inicjalizacja ładowania definicji reguł bezpieczeństwa,

address_we – zezwolenie na zapis konfiguracji wewnętrznej filtru adresów,

address_wr_data(87:0) – szyna danych konfiguracji wewnętrznej filtru adresów,

address_wr_addr(log2_ceil(liczba_reguł-1)+3:0) – szyna adresowa dla zapisu konfiguracji
wewnętrznej filtru adresów,

port_we – zezwolenie na zapis konfiguracji wewnętrznej filtru portów,

port_wr_data(27:0) – szyna danych konfiguracji wewnętrznej filtru portów,

port_wr_addr(log2_ceil(liczba_reguł-1)+3:0) – szyna adresowa dla zapisu konfiguracji
wewnętrznej filtru portów,

action_we – zezwolenie na zapis konfiguracji wewnętrznej pamięci akcji,

action_ram_data(7:0) – szyna danych konfiguracji wewnętrznej pamięci akcji,

action_wr_addr(log2_ceil(liczba_reguł-1)-1:0) – szyna adresowa dla zapisu konfiguracji
wewnętrznej pamięci akcji.
171
9. Dodatek B - szczegółowe wyniki syntezy
modułów sprzętowego Firewalla
9.1. Wykorzystanie zasobów sprzętowych układów FPGA
oraz parametry czasowe implementacji modułu kontrolnego
dla wersji Fast Ethernet.
Moduł
Typ układu
eth_control
Spartan
Virtex
2s200epq208-7 2vp30ff896-7
Number of Slices
69
Number of Slice Flip Flops
86
86
125
128
Number of IOs
25
25
Number of bonded IOBs
15
15
1
1
Number of 4 input LUTs
67
Number used as logic
Number used as Shift registers
Number of GCLKs
Timing Summary
8,114ns
3,087ns
123,244MHz
323,950MHz
Minimum input arrival time before clock
7,286ns
3,302ns
Maximum output required time after clock
9,443ns
4,521ns
Minimum period
Maximum Frequency
Maximum combinational path delay
No path found No path found
Cell Usage
BELS
150
146
GND
1
1
INV
2
2
LUT2
8
8
LUT2_D
4
4
33
31
LUT3_D
2
4
LUT3_L
2
2
66
63
LUT4_D
6
7
LUT4_L
2
5
MUXCY
5
5
MUXF5
12
6
LUT1
2
LUT2_L
LUT3
LUT4
VCC
1
FlipFlops/Latches
86
86
FDC
33
33
FDE
4
4
FDP
2
2
Clock Buffers
1
1
BUFGP
1
1
IO Buffers
8
8
IBUF
8
8
OBUF
5
5
172
9.2. Wykorzystanie zasobów sprzętowych układów FPGA oraz parametry czasowe modułów toru RX
w wersji Fast Ethernet.
Moduł
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
Number used as logic
Number used as Shift registers
Number of IOs
Number of bonded IOBs
Number of GCLKs
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
Cell Usage
BELS
GND
INV
LUT2
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
LUT4_L
MUXCY
MUXF5
VCC
FlipFlops/Latches
FDC
FDE
Shift Registers
SRL16E
Clock Buffers
BUFGP
IO Buffers
IBUF
OBUF
eth_rx_bitreceiver
eth_rx_crc
eth_rx_datadecap
eth_rx_recaddress
eth_rx_tlm
eth_rx
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7
31
30
41
59
29
27
33
36
2
2
83
101
43
43
34
34
23
22
4
4
3
3
105
105
58
57
78
111
50
47
58
62
4
4
157
190
149
182
8
8
48
48
28
28
44
44
76
76
41
41
83
83
48
48
17
17
36
36
68
68
8
8
33
33
1
1
1
1
1
1
1
1
1
1
1
1
9,262ns
3,271ns
107,968MHz 305,689MHz
7,236ns
3,810ns
8,610ns
4,131ns
7,836ns
4,656ns
6,829ns
2,237ns
146,434MHz 447,117MHz
7,853ns
3,529ns
9,096ns
5,114ns
7,730ns
5,159ns
7,160ns
3,464ns
139,655MHz 288,675MHz
7,255ns
4,076ns
6,500ns
3,359ns
No path found No path found
84
1
1
17
82
1
1
15
89
1
122
1
59
1
55
1
3
5
9
22
8
2
20
21
1
1
6
16
1
1
11
2
20
1
1
14
1
4
11
1
22
1
1
6
1
44
9
7
9
11
54
2
12
9
16
43
4
43
4
1
34
1
1
9
9
38
1
1
9
9
38
1
1
15
15
1
4,452ns
2,062ns
224,618MHz 484,966MHz
11,334ns
5,879ns
6,140ns
3,293ns
No path found No path found
67
1
1
4
72
1
1
7
8
5
16
43
47
1
34
4
5
2
1
23
2
5
1
1
22
2
5
2
1
4
2
5
3
1
4
1
1
15
15
1
1
1
18
18
17
1
1
18
18
17
1
1
66
66
1
1
1
66
66
1
No path found No path found
9,127ns
3,302ns
109,565MHz 302,879MHz
4,204ns
2,343ns
7,277ns
3,712ns
6,140ns
3,293ns
8,493ns
4,203ns
No path found No path found No path found No path found
4
4
1
3
1
3
3
1
3
1
1
1
4
4
3
1
1
4
4
3
185
1
3
41
3
220
1
3
40
1
26
44
1
11
62
4
16
20
4
1
105
12
8
8
8
1
1
9
9
23
2
66
5
3
20
2
1
105
12
8
8
8
1
1
9
9
23
173
9.3. Wykorzystanie zasobów sprzętowych układów FPGA oraz parametry czasowe modułów toru TX
w wersji Fast Ethernet.
Moduł
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
Number used as logic
Number used as Shift registers
Number of IOs
Number of bonded IOBs
Number of GCLKs
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
Cell Usage
BELS
GND
INV
LUT1
LUT2
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
LUT4_L
MUXCY
MUXF5
VCC
FlipFlops/Latches
FDC
Shift Registers
SRL16E
Clock Buffers
BUFGP
IO Buffers
IBUF
OBUF
eth_tx_backoff
eth_tx_bittran
eth_tx_crc
eth_tx_defer
eth_tx_tlm
eth_tx
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
Spartan
Virtex
2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7 2s200epq208-7 2vp30ff896-7
25
26
21
21
49
68
9
9
34
34
143
163
43
43
16
16
32
32
5
5
14
14
112
111
45
45
39
39
92
125
16
16
65
65
270
299
8
8
1
8
8
1
7,407ns
3,249ns
135,007MHz 307,801MHz
7,066ns
3,451ns
9,046ns
4,872ns
No path found No path found
60
59
1
60
59
1
5,447ns
2,777ns
183,587MHz 360,107MHz
9,000ns
4,822ns
9,214ns
5,099ns
7,990ns
5,401ns
72
1
29
21
1
29
21
1
6,829ns
2,237ns
146,434MHz 447,117MHz
7,763ns
3,529ns
9,829ns
4,914ns
11,408ns
6,278ns
79
1
3
79
1
3
72
1
92
125
18
18
4
4
1
5
8
8
14
14
5
2
17
15
1
18
18
1
43
10
3
17
2
1
16
4
11
74
2
12
1
43
10
3
17
2
1
16
4
1
64
9
7
15
14
1
1
15
1
1
4
4
3
1
1
4
4
3
1
1
36
36
22
1
1
36
36
22
7
15
14
1
15
14
1
4,566ns
2,010ns
219,010MHz 497,401MHz
6,055ns
3,363ns
8,106ns
4,132ns
No path found No path found
16
16
46
46
1
46
46
1
10,903ns
3,976ns
91,718MHz 251,487MHz
11,552ns
5,322ns
12,092ns
5,326ns
12,223ns
6,444ns
67
66
1
1
3
3
10
1
8
1
5
1
5
1
11
2
7
7
32
4
4
10
2
2
31
4
6
2
1
32
32
5
5
14
14
1
1
16
16
4
1
1
16
16
4
1
1
10
10
3
1
1
10
10
3
1
1
19
19
26
1
1
19
19
26
37
37
1
37
37
1
13,386ns
5,168ns
74,705MHz 193,487MHz
13,198ns
5,601ns
13,622ns
6,531ns
14,072ns
6,882ns
336
1
3
11
38
1
1
27
4
3
152
19
11
33
2
1
112
15
377
1
3
11
32
1
1
28
3
2
186
20
12
33
14
1
111
15
1
1
26
26
10
1
1
26
26
10
174
9.4. Podsumowanie wykorzystania zasobów sprzętowych układów
FPGA oraz parametrów czasowe pełnego kontrolera MAC
w wersji Fast Ethernet.
Moduł
Typ układu
eth_mac
Spartan
Virtex
2s200epq208-7 2vp30ff896-7
Number of Slices
295
329
Number of Slice Flip Flops
299
298
Number of 4 input LUTs
555
610
Number used as logic
547
602
Number used as Shift registers
Number of IOs
Number of bonded IOBs
Number of GCLKs
8
8
140
140
80
80
3
3
13,386ns
5,210ns
Timing Summary
Minimum period
Maximum Frequency
74,705MHz 191,953MHz
Minimum input arrival time before clock
14,617ns
5,561ns
Maximum output required time after clock
14,257ns
6,512ns
Maximum combinational path delay
17,511ns
6,864ns
BELS
672
743
GND
1
1
INV
8
8
LUT1
11
11
LUT2
Cell Usage
91
84
LUT2_D
4
3
LUT2_L
1
3
97
109
LUT3_D
6
6
LUT3_L
2
2
294
342
LUT4_D
20
21
LUT4_L
13
13
MUXCY
58
58
MUXF5
18
34
LUT3
LUT4
1
1
299
298
FDC
60
60
FDE
12
12
FDP
2
2
Shift Registers
8
8
SRL16E
8
8
Clock Buffers
3
3
BUFGP
3
3
IO Buffers
40
40
IBUF
40
40
OBUF
36
36
VCC
FlipFlops/Latches
175
9.5. Wykorzystanie zasobów sprzętowych układów FPGA
oraz parametry czasowe modułu kontrolnego
dla wersji Gigabit Ethernet.
Moduł
Typ układu
Number of Slices
eth_control
Virtex 2vp30ff896-7
85
Number of Slice Flip Flops
116
Number of 4 input LUTs
151
Number used as logic
Number used as Shift registers
Number of IOs
26
Number of bonded IOBs
24
Number of GCLKs
1
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
3,431ns
291,426MHz
3,357ns
4,521ns
No path found
Cell Usage
BELS
221
GND
1
INV
1
LUT2
10
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
3
1
31
3
1
90
7
LUT4_L
4
MUXCY
27
MUXF5
13
VCC
FlipFlops/Latches
1
116
FDC
63
FDE
4
FDP
2
Clock Buffers
1
BUFGP
1
IO Buffers
17
IBUF
17
OBUF
5
176
9.6. Wykorzystanie zasobów sprzętowych układów FPGA oraz parametry czasowe modułów toru RX
w wersji Gigabit Ethernet.
Moduł
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
Number used as logic
Number used as Shift registers
Number of IOs
Number of bonded IOBs
Number of BRAMs
Number of GCLKs
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
Cell Usage
BELS
GND
INV
LUT1
LUT2
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
LUT4_L
MUXCY
MUXF5
VCC
FlipFlops/Latches
FDC
FDP
RAMS
RAMB16_S18_S18
RAMB16_S36_S36
Clock Buffers
BUFGP
IO Buffers
IBUF
OBUF
eth_rx_bitreceiver
eth_rx_pattern_detect
Virtex 2vp30ff896-7
Virtex 2vp30ff896-7
65
56
101
62
68
97
eth_rx_crc
Virtex 2vp30ff896-7
62
32
114
eth_rx_frame_control
Virtex 2vp30ff896-7
2
4
eth_rx_fsm
Virtex 2vp30ff896-7
9
8
16
eth_rx_pause_control
Virtex 2vp30ff896-7
49
46
89
eth_rx_fifo_control
Virtex 2vp30ff896-7
101
89
185
eth_rx
Virtex 2vp30ff896-7
316
339
582
11
10
17
13
60
57
1
1
118
118
2
2
139
139
2
2
3,481ns
287,233MHz
5,199ns
5,007ns
No path found
3,553ns
281,464MHz
4,391ns
4,150ns
5,189ns
6,217ns
160,861MHz
7,410ns
7,489ns
6,497ns
147
1
1
12
2
279
1
7
34
14
27
46
4
3
66
6
5
44
10
1
89
40
4
2
1
1
2
2
62
62
54
776
1
23
47
32
8
1
146
4
2
277
25
17
91
12
1
339
60
5
2
1
1
2
2
67
67
70
122
122
86
86
18
15
1
1
1
3,063ns
326,499MHz
3,999ns
4,336ns
5,301ns
2,925ns
341,910MHz
4,739ns
4,036ns
6,693ns
2,868ns
348,663MHz
3,451ns
8,100ns
8,634ns
No path found
No path found
No path found
5,333ns
1,757ns
569,120MHz
2,268ns
5,281ns
5,792ns
112
1
100
1
116
4
16
7
1
3
6
2
47
3
6
4
12
2
2
3
48
2
2
20
1
43
2
11
4
75
10
4
2
2
105
17
63
32
8
7
1
1
1
20
20
101
1
1
75
75
10
1
1
13
13
1
1
1
6
6
6
8
8
2
45
1
1
27
1
46
1
1
55
55
1
177
9.7. Wykorzystanie zasobów sprzętowych układów FPGA oraz parametry czasowe elementów toru TX
w wersji Gigabit Ethernet.
Moduł
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
Number of IOs
Number of bonded IOBs
Number of BRAMs
Number of GCLKs
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
Cell Usage
BELS
GND
INV
LUT1
LUT2
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
LUT4_L
MUXCY
MUXF5
VCC
FlipFlops/Latches
FDC
FDP
RAMS
RAMB16_S18_S18
RAMB16_S36_S36
Clock Buffers
BUFGP
IO Buffers
IBUF
OBUF
DCMs
DCM
eth_tx_bittransmiter
Virtex 2vp30ff896-7
56
eth_tx_clk_mgmt
Virtex 2vp30ff896-7
1
1
7
6
eth_tx_crc
Virtex 2vp30ff896-7
52
32
129
79
75
eth_tx_fsm
Virtex 2vp30ff896-7
37
13
65
49
34
eth_tx_counters
Virtex 2vp30ff896-7
117
108
215
65
58
102
99
86
1
eth_tx_fifo_control
Virtex 2vp30ff896-7
119
135
188
137
122
2
2
eth_tx
Virtex 2vp30ff896-7
424
288
782
92
80
2
3
1
1
1
No path found
No path found
No path found
No path found
9,226ns
No path found
No path found
3,802ns
2,681ns
372,933MHz
6,487ns
4,090ns
No path found
2,612ns
382,826MHz
4,110ns
6,439ns
7,880ns
4,052ns
246,770MHz
4,858ns
6,489ns
7,274ns
3,356ns
297,938MHz
5,430ns
4,080ns
5,030ns
7,463ns
134,001MHz
8,290ns
9,443ns
7,075ns
119
2
1
129
71
328
1
2
12
38
289
1
7
34
12
1
992
1
11
79
102
2
5
129
9
13
355
30
47
95
26
1
288
71
5
2
1
1
2
1
60
60
18
1
1
32
4
1
24
3
4
13
1
65
1
10
74
17
76
76
10
3
3
2
1
1
7
1
11
4
34
2
6
32
5
1
13
12
1
1
1
42
42
32
1
1
25
25
8
2
78
1
2
77
2
1
51
11
1
108
10
1
1
24
24
33
40
1
5
74
2
12
44
17
1
135
49
4
2
1
1
2
2
65
65
55
178
9.8. Wykorzystanie zasobów sprzętowych układów FPGA
oraz parametrów czasowe dla całego kontrolera MAC
w wersji Gigabit Ethernet.
Moduł
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
eth_mac
Virtex 2vp30ff896-7
812
735
1502
Number used as logic
Number used as Shift registers
Number of IOs
242
Number of bonded IOBs
240
Number of BRAMs
4
Number of GCLKs
4
Timing Summary
Minimum period
Maximum Frequency
6,833ns
146,342MHz
Minimum input arrival time before clock
8,059ns
Maximum output required time after clock
9,489ns
Maximum combinational path delay
6,783ns
Cell Usage
BELS
BUF
1969
1
GND
1
INV
35
LUT1
126
LUT2
145
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
9
7
321
10
12
719
55
LUT4_L
63
MUXCY
213
MUXF5
47
VCC
1
FlipFlops/Latches
735
FDC
186
FDE
4
FDP
12
RAMS
4
RAMB16_S18_S18
2
RAMB16_S36_S36
2
Clock Buffers
3
BUFGP
2
IO Buffers
131
IBUF
131
OBUF
105
DCMs
1
DCM
1
179
9.9. Porównanie wykorzystania zasobów sprzętowych
komercyjnej wersji pamięci CAM z rozwiązaniem autorskim.
Wersja pamięci CAM 124
bity
124 x (liczba wierszy)
CAM CoreGen 6
16
32
Typ układu FPGA
64
Koncepcja autorska
128
256
16
32
2vp30ff896-7
64
128
256
8568
2vp30ff896-7
Number of Slices
675
1172
2257
4442
8792
632
1119
2180
4310
Number of Slice Flip Flops
154
174
208
273
403
147
163
195
259
387
Number of 4 input LUTs
709
1240
2312
4483
8790
622
1141
2173
4247
8393
Number used as logic
213
248
328
515
854
126
149
189
279
457
496
992
1984
3968
7936
496
992
1984
3968
7936
148
165
198
263
392
148
165
198
263
392
148
165
198
263
392
148
165
198
263
392
1
1
1
1
1
1
1
1
1
1
Number used as
Shift registers
Number of IOs
Number of bonded IOBs
Number of GCLKs
Speed Grade -7
Minimum period
6,745ns
7,193ns
7,491ns
8,125ns
9,369ns
6,745ns
7,193ns
8,239ns
8,044ns
8,044ns
Maximum Frequency
148,252
MHz
139,019
MHz
133,501
MHz
123,075
MHz
106,736
MHz
148,252
MHz
139,019
MHz
121,370
MHz
124,320
MHz
124,320
MHz
6,946ns
7,502ns
7,961ns
8,718ns
9,936ns
3,371ns
3,356ns
3,440ns
4,289ns
4,286ns
Minimum input arrival time
before clock
Maximum output required
time after clock
Maximum combinational
path delay
3,461ns
3,461ns
3,483ns
3,461ns
3,461ns
3,580ns
3,483ns
3,483ns
3,390ns
3,427ns
No path
found
No path
found
No path
found
No path
found
No path
found
No path
found
No path
found
No path
found
No path
found
No path
found
BELS
775
1314
2394
4581
8920
626
1153
2191
4281
8459
GND
1
1
1
1
1
1
1
1
1
1
2
2
2
1
1
37
33
32
35
32
1
33
3
3
7
81
152
240
417
2000
4000
8000
Cell Usage
INV
LUT2
32
32
65
319
606
LUT2_D
1
1
1
1
LUT3
3
69
4
4
4
LUT3_D
4
2
4
5
6
168
137
246
167
202
85
2
1
LUT4
LUT4_L
1
2
LUT4_D
4
7
6
19
33
MUXCY
496
1000
2000
4000
8000
496
1000
MUXF5
64
64
64
64
64
2
2
VCC
1
1
1
1
1
1
1
1
1
1
154
174
208
273
403
147
163
195
259
387
20
37
69
133
261
1
1
1
1
1
128
129
130
131
132
141
157
189
253
381
FDR
1
1
1
1
1
1
1
1
1
1
FDRE
3
6
7
7
8
FDS
1
4
4
4
4
4
FDSE
1
1
1
1
1
Shift Registers
496
992
1984
3968
7936
496
992
1984
3968
7936
SRL16E
496
992
1984
3968
7936
496
992
1984
3968
7936
Clock Buffers
1
1
1
1
1
1
1
1
1
1
BUFGP
1
1
1
1
1
1
1
1
1
1
IO Buffers
129
130
131
132
133
129
130
131
132
133
IBUF
129
130
131
132
133
129
130
131
132
133
OBUF
18
34
66
130
258
18
34
66
130
258
FlipFlops/Latches
FD
FDC
FDE
FDP
180
9.10. Wykorzystanie zasobów sprzętowych przez moduły
wchodzące w skład silnik Firewalla.
Nazwa modułu
Typ układu
Number of Slices
fw_page_mgr
2vp30ff896-7
139
fw_paresr
2vp30ff896-7
137
Number of Slice Flip Flops
169
Number of 4 input LUTs
Number used as logic
255
140
138
221
212
1984
146
146
41
40
1984
186
184
3
1
1
1
3
Number used as Shift registers
Number of IOs
Number of bonded IOBs
Number of GCLKs
fw_cache
2vp30ff896-7
2110
fw_control
2vp30ff896-7
24
fw_engine
2vp30ff896-7
2492
178
342
22
683
247
2043
59
44
2527
543
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
3,083ns
3,430ns
5,251ns
1,763ns
5,251ns
324,316MHz
3,763ns
3,375ns
3,867ns
291,571MHz
4,509ns
3,514ns
No path found
190,422MHz
4,420ns
5,375ns
No path found
567,231MHz
3,193ns
3,340ns
No path found
190,422MHz
4,166ns
5,375ns
3,867ns
269
1
7
22
5
1
38
12
2
145
3
20
257
1
2049
1
4
7
45
1
10
3
2
31
2
1
2569
1
11
39
4
1
76
4
5
374
18
11
1984
39
1
683
4
310
314
9
8
1984
1984
35
17
16
2
Cell Usage
BELS
GND
INV
LUT2
LUT2_D
LUT2_L
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
LUT4_L
MUXCY
MUXF5
VCC
FlipFlops/Latches
FD
FDC
FDE
FDP
FDS
Shift Registers
SRL16E
RAMS
RAMB16_S9_S9
RAMB16_S9_S36
RAMB16_S18_S18
Clock Buffers
BUFGP
IO Buffers
IBUF
OBUF
5
1
4
14
2
2
196
13
10
12
1
169
7
1
178
123
178
16
1
18
8
1984
4
1
342
4
16
314
7
22
20
2
8
1984
1984
35
17
16
2
3
3
62
62
73
1
1
52
52
159
1
1
135
135
10
1
1
20
20
19
3
3
38
38
143
181
9.11. Porównanie wykorzystania zasobów sprzętowych
komercyjnej wersji pamięci TCAM z rozwiązaniem autorskim.
Typ pamięci TCAM
(88 bitów x 32 wiersze)
Typ układu FPGA
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
Number used as logic
Number used as Shift registers
Number of IOs
Number of bonded IOBs
Number of GCLKs
TCAM CoreGen 6
Rozwiązanie autorskie
2vp30ff896-7
1795
229
2073
665
1408
217
217
1
2vp30ff896-7
810
32
1536
832
7,668ns
130,416MHz
3,880ns
257,732MHz
Minimum input arrival time before clock
7,977ns
6,121ns
Maximum output required time after clock
3,461ns
3,293ns
No path found
No path found
2173
1
1538
1
704
Timing Summary
Minimum period
Maximum Frequency
Maximum combinational path delay
Cell Usage
BELS
GND
LUT1
LUT2
LUT2_D
LUT3
LUT3_D
LUT4
LUT4_D
MUXCY
MUXF5
VCC
FlipFlops/Latches
FD
FDE
FDR
FDRE
FDSE
Shift Registers
SRL16E
RAMS
RAM16X1S
Clock Buffers
BUFGP
IO Buffers
IBUF
OBUF
1
1
157
2
497
7
1416
90
1
229
37
181
1
9
1
1408
1408
1
1
182
182
34
153
153
1
120
8
704
1
32
32
704
704
1
1
120
120
32
182
9.12. Wykorzystanie zasobów sprzętowych przez moduły
wchodzące w skład klasyfikatora pakietów.
Nazwa modułu
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
address_filter
port_filter
classifier_main
2vp30ff896-7
2vp30ff896-7
2vp30ff896-7
787
1829
2771
32
32
206
1496
1856
3660
Number used as logic
792
64
1164
Number of IOs
153
103
347
Number of bonded IOBs
153
103
347
1
1
1
Number of GCLKs
Timing Summary
Minimum period
3,880ns
6,136ns
6,233ns
257,732MHz
162,973MHz
160,433MHz
Minimum input arrival time before clock
6,110ns
6,740ns
6,110ns
Maximum output required time after clock
3,293ns
3,293ns
3,293ns
Maximum combinational path delay
1,674ns
0,878ns
1,674ns
1498
84
1890
20
20
Maximum Frequency
Cell Usage
BELS
BUF
GND
1
1
LUT1
704
704
LUT2
LUT3
32
80
32
288
88
LUT4
91
LUT4_L
MUXCY
VCC
FlipFlops/Latches
1
704
704
1
32
1
32
FDC
137
FDP
FDR
206
5
32
32
64
RAMS
704
896
1601
RAM16X1S
704
RAM16X1D
704
896
RAMB16_S9_S9
896
1
Clock Buffers
1
1
BUFGP
1
1
1
1
IO Buffers
120
70
328
IBUF
120
70
328
OBUF
32
32
18
183
9.13. Wykorzystanie zasobów sprzętowych modułu
fw_policy_loader.
Nazwa modułu
Typ układu
Number of Slices
Number of Slice Flip Flops
Number of 4 input LUTs
fw_policy_loader
2vp30ff896-7
68
78
120
Number of IOs
90
Number of bonded IOBs
90
Number of GCLKs
1
Timing Summary
Minimum period
Maximum Frequency
Minimum input arrival time before clock
Maximum output required time after clock
Maximum combinational path delay
3,432ns
291,414MHz
3,975ns
3,555ns
No path found
Cell Usage
BELS
177
GND
1
INV
13
LUT1
12
LUT2
15
LUT2_D
LUT3
LUT3_D
LUT3_L
LUT4
LUT4_D
1
24
1
1
46
6
LUT4_L
1
MUXCY
22
MUXF5
9
VCC
1
FlipFlops/Latches
78
FDC
32
FDE
18
FDR
9
FDS
6
FDSE
2
RAMS
2
RAMB16_S9_S36
2
Clock Buffers
1
BUFGP
1
IO Buffers
2
IBUF
2
OBUF
87
184
9.14. Wykorzystanie zasobów sprzętowych kompletnego systemu
sprzętowego Firewalla.
Nazwa modułu:
Typ układu
Kompletny Firewall
2vp30ff896-7
Nazwa modułu:
Typ układu
Kompletny Firewall
2vp30ff896-7
Number of Slices
9164
FlipFlops/Latches
Number of Slice Flip Flops
2258
FD
11384
FDC
923
Number used as logic
4905
FDE
669
Number used as Shift registers
3983
FDP
27
Number of IOs
50
FDR
73
Number of bonded IOBs
46
FDS
22
5
FDSE
2
FDCE
363
Number of 4 input LUTs
Number of GCLKs
Timing Summary
Minimum period
Maximum Frequency
7,193ns
139,019MHz
2258
8
FDCP
12
FDPE
153
LDC_1
6
Minimum input arrival time before clock
6,028ns
Shift Registers
3983
Maximum output required time after clock
4,521ns
SRL16E
3983
Maximum combinational path delay
4,183ns
RAMS
1673
Cell Usage
BELS
10634
GND
RAM16X1S
704
RAM16X1D
896
RAMB16_S9_S9
35
1
RAMB16_S9_S36
34
INV
47
RAMB16_S18_S18
4
LUT1
716
Clock Buffers
5
LUT2
435
BUFG
LUT2_D
LUT3
21
1265
5
IO Buffers
23
IBUF
23
LUT3_D
14
IBUFG
LUT3_L
14
IOBUF
2
2282
OBUF
19
LUT4
LUT4_D
56
LUT4_L
55
MUXCY
4840
MUXF5
527
MUXF6
162
MUXF7
80
VCC
2
1
185
10. Dodatek C – zawartość płyty CD
Katalog fast_ethernet_doc – dokumentacja karty sieciowej Fast Ethernet:




fast_ethernet_cfg.pdf – rozlokowanie elementów sygnalizacyjno-konfiguracyjnych,
fast_ethernet_nic.pdf – schemat ideowy karty,
fast_ethernet_pcb.pdf – matryce poszczególnych warstw obwodu drukowanego,
fast_ethernet_phy.pdf – opis wyprowadzeń układu RTL8201BL.
Katalog gigabit_ethernet_doc – dokumentacja karty sieciowej Gigabit Ethernet:




gigabit_ethernet_cfg.pdf – rozlokowanie elementów sygnalizacyjno-konfiguracyjnych,
gigabit _ethernet_nic.pdf – schemat ideowy karty,
gigabit _ethernet_pcb.pdf – matryce poszczególnych warstw obwodu drukowanego,
gigabit _ethernet_phy.pdf – opis wyprowadzeń układu DP83865.
Katalog source_code – kod źródłowy modułów składowych sprzętowej zapory ogniowej:






podkatalog firewall_engine – pliki VHDL opisujące silnik Firewalla,
podkatalog mac_fast_ethernet – pliki VHDL opisujące kontroler MAC w wersji Fast Ethernet,
podkatalog mac_gigabit_ethernet – pliki VHDL kontrolera MAC w wersji Gigabit Ethernet,
podkatalog packets_classifier – pliki VHDL opisujące klasyfikator pakietów,
podkatalog rs232 – pliki VHDL kontrolera interfejsu RS232,
podkatalog utilities – pliki VHDL modułów dodatkowych.
186
Download