Tworze sniffer TCP lecz mam problemy

Po przyjściu/wysłaniu(bo własne pakiety tez nasłuchuje) pierwszego pakietu program zapisuje w buforze (na jego początku) dane z pakietu TCP w odpowiednich zmiennych zapisuje sequence number który jest początkiem bufora i sequence number który jest jego końcem, kiedy z jakimś pakietem przychodzi flaga PSH zapisuje sequence tego pakietu, tak samo z flaga ACK (tylko w tym przypadku zapisuje ja kiedy przychodzi od drugiej strony Server<->Client, ponieważ ta druga stroną musi odesłać potwierdzenie odebrania pakietu) w miedzy czasie na okrągło do bufora dopisywane są nowe pakiety a kiedy zmienne z flagami PSH i ACK są większe od zmiennej która zawiera początek bufora to zostaje skopiowana cześć bufora od jego początku do zmiennej z flagi PSH i przetworzona w programie, i tak w kolko, jednak problem jest w tym ze ten sposób gubi pakiety lub coś w ten deseń bo nie dostaje wszystkich danych, prosił bym o wskazówki bądź jakieś strony z opisem działania protokołu TCP ale taka na której znalazł bym odpowiedz na moja zagwozdkę bo kilka sam znalazłem ale nic nowego się z nich nie dowiedziałem :/