next up previous contents
Następny: Tablica priorytetów Nadrzędny: Moduł tl_db Poprzedni: Moduł tl_db   Spis rzeczy

Dane o zrealizowanym ruchu

Na potrzeby zbierania danych o realizowanym ruchu moduł udostępnia funkcję tl_db_add_packet( sk_buff* ), która zapisuje informacje o pakiecie przekazanym jako parametr. Obsługiwane są tylko pakiety protokołu IP, przy czym rozpoznawane i szczególnie traktowane są protokoły TCP i UDP. W tej chwili jedynym źródłem danych o ruchu są pliki w katalogu /proc/.

Na potrzeby zbierania informacji moduł tl_db dokonuje wstępnej agregacji, łącząc je w przepływy. Przepływ (ang. flow) jest zdefiniowany jako strumień danych przesłanych pomiędzy komputerem w sieci lokalnej (zwanym dalej nadawcą, niezależnie od faktycznego kierunku nawiązania połączenia) a drugim, poza nią (odbiorcą). Opisywany jest przez strukturę tl_flow_t, zawierającą:

Informacje te przechowywane są w tablicy haszującej indeksowanej identyfikatorami przepływów, co pozwala na szybką implementację funkcji tl_db_add_packet. Stemple czasowe zapisywane są z rozdzielczością sekundową jako wartość $jiffies / HZ$ w momencie dodawania pakietu do przepływu - czas ten jest względny (liczony od momentu uruchomienia komputera) i przeliczany jest na rzeczywisty dopiero przez program pośrednika.

Dostęp do zbieranych tu danych możliwy jest za pośrednictwem zebranych w tabeli 3.3 plików rejestrowanych przez tl_db w systemie procfs.


Tablica: Wykaz plików do odczytu danych w /procfs
Nazwa pliku Zawartość
/proc/net/traffic/tl_db_bin dane w postaci binarnej
/proc/net/traffic/tl_db_txt dane w czytelnej dla
  człowieka postaci tekstowej


Operacje odczytu z tych dwóch plików przebiegają identycznie, w sposób opisany poniżej; różnica polega jedynie na zmianie formatu wypisywania danych. Oba udostępniają ten sam zestaw informacji:

Wypisywane są tylko przepływy zamknięte, to znaczy takie, w których upłynęła odpowiednia ilość czasu od momentu otrzymania pierwszego lub ostatniego pakietu (ustawione obecnie na 60 i 120 sekund). Przepływ wypisany zostaje usunięty z bazy tl_db.

Jeśli zamkniętych przepływów jest dostatecznie dużo, może okazać się niemożliwe obsłużenie ich wszystkich w pojedynczej operacji odczytu. W takiej sytuacji w pliku pojawia się informacja (wspomniany wyżej znacznik), że powinno się go przeczytać ponownie.


next up previous contents
Następny: Tablica priorytetów Nadrzędny: Moduł tl_db Poprzedni: Moduł tl_db   Spis rzeczy
Marcin Kaszyński, Krzysztof Lorek