Proszę znaleźć mały plik pcap tutaj ilustrujący mój problem.
Mam trójstronny uścisk dłoni TCP, po którym następuje dwa logowanie FIX. (FIX jest protokołem używanym w handlu.) Pierwsze logowanie FIX (ramka 4) jest interpretowane i analizowane przez WireShark, ale drugie logowanie (ramka 6) jest interpretowane jako TCP segment of a reassembled PDU
.
Jednak ramka 6 nie jest segmentem TCP ponownie złożonej jednostki PDU. Zawiera pełny TCP PDU, który powinien być interpretowany i analizowany jako logowanie FIX. Sprawdziłem, czy wszystkie numery sekwencyjne, numery ACK, całkowite długości IP itp. Są dobre.
Dlaczego ramka 6 jest interpretowana jako segment TCP ponownie złożonej PDU?
Odpowiedzi:
Posiadanie hostów ponumerowanych .76 i .67 jest nieco przytłaczające.
Wireshark nazywa ramkę 6 „segmentem TCP ponownie złożonego PDU”, ponieważ implementacja protokołu TCP w dniu 10.10.10.67 decyduje się na wysłanie ACK bez ładunku („nagiego” ACK) zamiast uwzględniać ładunek, który jest wysyłany w ramce 6 w / ACK w ramce 5. (Jest to zachowanie zależne od stosu OS / IP). To z kolei wyzwala zachowanie w sektorze TCP, aby przekazać ładunki z wielu segmentów TCP do sekretarza FIX. Z jakiegokolwiek powodu, sekator FIX nie interpretuje ramki 6.
Jeśli wyłączysz opcję „Zezwalaj subdissektorowi na desegmentowanie strumieni TCP” w opcjach sekatora TCP, przekonasz się, że Wireshark interpretuje to inaczej:
Oto dyskusja z listy użytkowników wireshark na ten sam temat .
źródło