Пакет фрагментирован, но стоит флаг «Не фрагментировать».

У меня есть следующие 2 TCP-пакета, которые я получаю на winpcap:

http://pastebin.com/FUAs3UZ7 или в формате pcap https://www.dropbox.com/s/0ss4j0weszy92no/SO.pcap

Эти 2 пакета должны быть повторно собраны, но их IP-флаги «010», что означает «Не фрагментировать», а смещение фрагмента равно 0. У них есть последовательный идентификационный номер, но, если я правильно понимаю, это не само по себе. достаточно, чтобы определить фрагментированный пакет.

Wireshark собирает эти пакеты, и я не могу понять, почему.

Что мне здесь не хватает? Как Wireshark знает, как собрать эти 2 пакета?


person Nitay    schedule 01.10.2013    source источник


Ответы (1)


Первый пакет:

00 80 f4 09 e6 a5 — адрес назначения Ethernet

00 50 56 26 ab 04 - Адрес источника Ethernet

08 00 - тип Ethernet, то есть IPv4

45 - версия IP (4, для IPv4) и длина заголовка (5, для 5*4 = 20 байт)

00 - DSCP/ECN (или TOS, в старые времена)

02 40 - общая длина (576 байт)

74 и далее - идентификация

40 00 - флаги и смещение фрагмента; DF и смещение фрагмента 0

80 - время жить

06 - протокол, то есть TCP

Когда вы говорите «Wireshark собирает эти пакеты», вы имеете в виду сборку IP или сборку TCP? Это происходит на разных уровнях, и я подозреваю, что Wireshark повторно собирает весь или часть сегмента TCP в первом пакете и сегмент TCP во втором пакете, чтобы создать пакет для протокола, работающего поверх< /em> TCP; TCP — это протокол потока байтов, поэтому нет гарантии, что границы сегментов TCP (которые почти во всех случаях превращаются в границы кадров канального уровня) соответствуют границам пакетов для протоколов, работающих поверх TCP.

person Community    schedule 01.10.2013
comment
Может быть, я искал не тот слой! Не могли бы вы указать, где в данных TCP появляется эта фрагментация? - person Nitay; 01.10.2013
comment
Это форма фрагментации, отличная от фрагментации IP. Как уже говорилось, сервис, предлагаемый TCP, представляет собой просто последовательность байтов без границ пакета; протокол, работающий поверх TCP, просто отправляет последовательность байтов через TCP-соединение, считывает байты из TCP-соединения и собирает их в пакеты. - person ; 02.10.2013