[długie+OT] Jak wiarygodnie dumpować ruch z interfejsu sieciowego (tudzież, coś mi się tu nie zgadza, wytłumaczcie)
Łukasz Maśko
masko w ipipan.waw.pl
Czw, 4 Gru 2014, 11:52:31 CET
Zajmuje mnie ostatnio kwestia rozmiaru ramki w sieci lokalnej. Nieważne
dlaczego (wywodzi się z dyskusji o MTU). Chodzi o to, że w celu zbadania
sprawy zrobiłem taki eksperyment:
1. Na dwóch komputerach podłączonych do tego samego switcha (w routerze
MikroTik 750G) zapuściłem tcpdump z zapisem do pliku: tcpdump -w plik host
ip_drugiego_kompa (to ostatnie w celu wyizolowania testowych danych).
2. Na jednym kompie uruchomiłem
$ nc -l -p 9999 > /dev/null
a na drugim
$ cat plik | nc ip_drugiego_kompa 9999
3. Po zakończeniu transmisji zatrzymałem oba tcprobe.
4. Otworzyłem zapisane dumpy przez tcpdump -r plik.
No i teraz porównuję to, co mam w obu. Początek jest OK - wysyłane są
pakiety, identyczne są odbierane, potwierdzane - jest fajnie. Pomijam
kwestię, że pomimo tego, że MTU jest ustawione na 1500, to tcpdump łapie
paczki o rozmiarach dość dowolnych (nawet kilkanaście KB po stronie nadawcy,
maksymalnie 7240 baktów po stronie odbiorcy).
Ale potem następuje coś, czego nie rozumiem. Na nadawcy:
[...]
10:28:13.295901 IP geralt-ipi.48726 > laptok.distinct: Flags [.], seq
19425:28113, ack 1, win 229, options [nop,nop,TS val 154404456 ecr 8316569],
length 8688
10:28:13.295919 IP geralt-ipi.48726 > laptok.distinct: Flags [.], seq
28113:36801, ack 1, win 229, options [nop,nop,TS val 154404456 ecr 8316569],
length 8688
[...]
A na odbiorcy:
10:28:17.133362 IP geralt-ipi.48726 > laptok.distinct: Flags [.], seq
19425:26665, ack 1, win 229, options [nop,nop,TS val 154404456 ecr 8316569],
length 7240
10:28:17.133378 IP laptok.distinct > geralt-ipi.48726: Flags [.], ack 26665,
win 643, options [nop,nop,TS val 8316569 ecr 154404456], length 0
10:28:17.133422 IP geralt-ipi.48726 > laptok.distinct: Flags [.], seq
26665:33905, ack 1, win 229, options [nop,nop,TS val 154404456 ecr 8316569],
length 7240
10:28:17.133437 IP laptok.distinct > geralt-ipi.48726: Flags [.], ack 33905,
win 756, options [nop,nop,TS val 8316569 ecr 154404456], length 0
10:28:17.133462 IP geralt-ipi.48726 > laptok.distinct: Flags [.], seq
33905:36801, ack 1, win 229, options [nop,nop,TS val 154404456 ecr 8316569],
length 2896
Jak widać, wysyłane są dane z przedziału 19425-36801, ale wysyłane są w dwóch
paczkach, a odbierane w trzech. Podział nie wynika z chamskiej fragmentacji
IP, ale wygląda, jakby po wygenerowaniu dwóch paczek o rozmiarze 8688, gdzieś
w międzyczasie zostały one złożone ponownie w jeden ciąg o długości 17376, a
potem ponownie pocięte na 7240+7240+2896. I to na poziomie TCP, czyli warstwy
4-tej! Pomiędzy nadawcą a odbiorcą jest tylko switch w routerze Mikrotik.
I tu się pojawiają moje pytania:
1. Co tak na prawdę łapie tcpdump (wireshark zresztą też, w nim jest
identycznie)?
2. Co może dokonywać ponownego przepakowania danych na poziomie warstwy 4?
Jak to ewentualnie sprawdzić?
3. Jak złapać rzeczywiście przesyłane fizyczne ramki danych (jeśli to co
łapie tcpdump ty nie jest)?
--
Łukasz Maśko _o)
Lukasz.Masko(at)ipipan.waw.pl /\\
Registered Linux User #61028 _\_V
Ubuntu: staroafrykańskie słowo oznaczające "Nie umiem zainstalować Debiana"
Więcej informacji o liście pld-users-pl