Co w sieci piszczy
Przed nami pierwszy raz. Jeśli to czytasz, to pewnie nigdy wcześniej nie chciało ci się trudzić, żeby łapać pakiety. Co innego pokemony ????
Zresztą, z pakietami jest trochę jak z yeti – wszyscy, czyli głównie sieciowcy i admini, o nich gadają, ale nikt ich nie widział. Pierwsze podejście zrobimy z twojego komputera, bo w końcu to tylko eksperyment. Tymczasem uruchom Wiresharka. Jego ekran startowy nadzwyczajną urodą nie powala, ale w końcu to nie konkurs piękności na Mistera Desktopu.
W sekcji Capture wybierz interfejs sieciowy, na którym będziemy łapać pakiety. Mój komputer działa w sieci Wi-Fi (interfejs en0)
, ale w twoim przypadku (inny system, inne połączenie z siecią) też łatwo ustalisz, którym interfejsem trzeba się posłużyć. Wystarczy podwójny klik w nazwę interfejsu rekin zaczyna łykać pakiety.
Żeby zatrzymać proces przechwytywania pakietów, wystarczy nacisnąć czerwony kwadracik na pasku narzędzi u góry okna Wiresharka. Wówczas zielona płetwa grzbietowa rekina stanie się niebieska, a dump zostanie zapisany w pamięci tymczasowej pod kryptyczną nazwą w stylu wireshark_ifc_datetime_ID
, np. wireshark_en0_20171106151510_74e1Qk
. Tak długo, jak nie zapiszesz dumpa na dysku, jest on dostępny do następnego uruchomienia Wiresharka albo kolejnego przechwytywania pakietów.
Przy okazji praktyczna uwaga: łap pakiety w możliwie krótkim czasie i możliwie blisko w czasie od aktywności, która cię interesuje. Wireshark jest skuteczny i potrafi przetwarzać dumpy w bardzo dużym rozmiarze, ale analiza pakietów w dumpie przekraczającym 70-100 MB staje się drogą przez mękę. Z drugiej strony, czasem dostaniesz wielki dump i nie masz na to wpływu, bo sieć, w którym go złapano, ma wielką przepustowość. Wówczas warto jest odfiltrować tylko interesujący cię ruch i takiego dumpa zapisać pod nową nazwą. Metodami filtrowania wielkich dumpów zajmiemy się w późniejszych odcinkach.
Jeśli popatrzysz dokładniej na powyższy obrazek zauważysz, że różni się od twego, jak wygląda twój Wireshark. I nie mam na myśli zawartości (pakietów), tylko sam UI. Tak, mój UI jest trochę zmieniony i tym właśnie się teraz zajmiemy.
Zmiana domyślnych kolumn
Zestaw kolumn dostępnych jest znacznie większy niż to, co Wireshark pokazuje domyślnie po instalacji. Jedną z najbardziej przydatnych kolumn jest taka, która błyskawicznie będzie nam załatwiać identyfikację tytułowego przypadku, czyli pokazywać opóźnienia. Ja tę kolumnę nazwę Delta T i będzie ona prezentować czas, jaki upłynął od poprzedniego pakietu w dumpie.
Żeby dodać nową kolumnę, kliknij prawym guzikiem myszy na nagłówku jednej z kolumn i wybierz opcję Column Preferences.
Otworzy się okno z konfiguracją kolumn. Musisz dodać nową kolumnę (guzik [+] u dołu) i nadać nowo otworzonej kolumnie nazwę Delta T.
Ostatnim krokiem jest zmiana typu kolumny. Teraz ma ona typ Number, a trzeba to zmienić przed podwójne kliknięcie w Number i zamiana na Delta time displayed. Na koniec przeciągnij pole Delta T zaraz pod pole Time. Dzięki temu będziesz widzieć czas względny każdego pakietu w dumpie w kolumnie Time i czas, jaki upłynął od poprzedniego pakietu w kolumnie Delta T.
Po zatwierdzeniu zmian, ekran Wiresharka powinien wyglądać mniej więcej tak:
Definicja przydatnych filtrów
Interfejs graficzny Wiresharka w wersji od 2.0 pomaga w identyfikacji problemów z siecią, ale warto skorzystać z trików, które sprawiają, że używanie go jest jeszcze wygodniejsze i szybsze.
Jednym z bardzo przydatnych filtrów jest taki, który pokazuje pakiety, które mają ustawione flagi TCP, albo prościej, takie, które są problematyczne. Np. retransmisje, zduplikowane pakiety ACK i inne.
W czasie wpisywania filtrów, Wireshark podpowiada składnię, co pomaga wyeliminować pomyłki, a jednocześnie prowadzi walidację filtra, co daje pewność, że wpisana fraza jest poprawna składniowo. W polu filtra wpisz frazę tcp.analysis.flags
lub wybierz ją z listy. Zależnie od tego, co zrobisz, możesz musieć nacisnąć Enter albo strzałkę na końcu pola filtrów:
Jeśli w twoim dumpie są pakiety problematyczne, zobaczysz widok podobny do poniższego.
Ten filtr pozwala błyskawicznie wyświetlić problemy w dumpie. Moim zdaniem, jest bardzo przydatny, dlatego warto go sobie zapisać na stałe. Żeby to zrobić, naciśnij znak „+” na końcu wiersza filtrów i nadaj nazwę nowemu filtrowi, np. TCP problems.
Po zapisaniu filtra, pojawi się on na końcu wiersza filtrów i działa jak klasyczny przycisk ekranowy.
Przy okazji możesz sprawdzić, co zmieniło się w twoim profilu. Wejdź do edycji, kliknij link, który prowadzi do pliku konfiguracyjnego i zobacz, co Wireshark tam wpisał. Taki plik możesz mieć zawsze ze sobą, wystarczy go podłożyć w odpowiednie miejsce i twoja konfiguracja pojawi się w UI błyskawicznie.
Może zadajesz sobie teraz pytanie, jak długo będzie jeszcze trwał ten przydługi wstęp? W zasadzie to wstęp się skończył w momencie, kiedy zobaczyliśmy pakiety pierwszego dumpa.
Po co, zatem, te zmiany w UI? Dzięki dodatkowej kolumnie Delta T zobaczysz, czy strony konwersacji TCP reagują szybko. Jeśli czas pomiędzy kolejnymi pakietami jest podejrzanie długi, to albo serwer, albo klient niezbyt spieszą się z transmisją (wolny serwer lub klient, ale niekoniecznie sieć). Ale możliwe, że sieć jest wolna. Będzie to widać, jeśli czasy pomiędzy kolejnymi pakietami będą długie. Nie rzędu milisekund, ale raczej setek milisekund czy nawet pojedynczych sekund.
Przydatne triki
Wireshark posiada funkcję, która pozwala na graficzną reprezentację konwersacji TCP. Ale uwaga, to się sprawdza dla niezbyt długich konwersacji i wygląda w przybliżeniu tak:
Pamiętasz diagram sesji HTTP z poprzedniej części? Może nie taki malowniczy, ale robi, co powinien. Tu też mamy sesję HTTP, a dokładniej otwarcie strony www.omnilogy.pl. Co zrobić, żeby narysować taki diagram, który może ułatwić analizę konwersacji?
W pierwszym dumpie, który złapaliśmy, znajdź pakiet SYN. W polu filtra wpisz frazę:
tcp.flags.syn == 1
Po zaaplikowaniu tego filtra zobaczysz tylko te pakiety, które maja ustawioną flagę SYN, co oznacza początek sesji TCP. Jest szansa, że u ciebie, jeśli łapanie pakietów było uruchomione przed otwarciem nowej sesji, będzie to wyglądać podobnie:
Sprawdziłem pierwszy pakiet na liście i wszystko się zgadza, to było nawiązanie sesji z serwerem webowym o adresie IP 79.96.177.144, na którym stoi strona www.omnilogy.pl.
Następnie, po zaznaczeniu tego pakietu i kliknięciu prawym guzikiem myszy wybieram opcję Follow -> TCP Stream.
To z kolei otworzy okno z treścią konwersacji TCP:
Teraz nie jest ono potrzebne, więc spokojnie można je zamknąć, ale ważne jest to, co zmieniło się w polu filtru.
Wireshark automatycznie zmienił filtr tak, żeby pokazać tylko tę wybraną sesję. I został już ostatni krok do narysowania diagramu. Z menu Statistics wybierz opcję Flow Graph i gotowe! Twój diagram powinien wyglądać podobnie:
Jeszcze trochę za dużo, ale to już drobiazgi. Z listy Show wybierz Displayed packets. I gotowe!
A gdyby przyszło ci do głowy zilustrować tylko TCP flow control, czyli pakiety sterujące sesją, bez danych, to wybierz z listy Flow type -> TCP Flows.Na koniec możesz sobie zapisać ten diagram w postaci graficznej lub jako ASCII art. Będzie co pokazywać kolegom developerom :).W następnych częściach zajmiemy się konkretnymi problemami i ich diagnozą. Stay tuned.