[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