Разбираю логи TCPDUMP и столкнулся вот с каким вопросом: Вначале у каждого пакета идет Ethernet-заголовок - 6+6 байт MAC адресов и 2 байта - тип пакета. А где размер?!! Если IP - все логично и понятно - размер берем из заголовка IP. Если другой протокол то в принципе тоже можно прочитать его спецификацию и поглядеть. А если не IP? Вообще свой тип пакетов какой-нибудь? То есть получается, что размер Ethernet пакета нельзя узнать, не посмотрев пакет, который в нем "инкапсулирован"?!
mtu - размер фрейма канального уровня ~ 1500 байт. неважно какой объём данных передаётся - нарезаться будет всегда на фреймы по размеру mtu
Это может "по проводам" так передается. А анализатор трафика вида tcpdump - он же не пишет в дамп каждый пакет по 1514 байт - пишет столько, сколько есть. А как он определяет, сколько есть? Только анализируя вложенные данные?
Нет размера. Только маки и протокол. А зачем он вам? Ну, когда минипорт получает пакет, он получает и размер тоже. И передает это дело дальше в ндис. (в случае виндоуса, в никсах не разбирался, но могу с уверенностью сказать, что там так же). подробностей аппаратуры, к сожалению, не знаю, но очевидно, что размер фрейма получается аппаратно
эзернет еще и нескольких стандартов бывает, и размер заголовка фрейма еще узнать нужно (как это все считается это в гугл, рфц и иже с ними) Если известно что среда эзернет, то на пользовательском уровне (NDIS) на размер длины пакета будет указывать длина инкапсулированного фрейма протокола сетевого уровня (или вообще размер данных в буфферах пакета), а на уровне драйвера карты на это укажет обрамление фрагмента, эзернет пакет в том виде который виден на уровне ндис, уже очищен от лишней информации, такой как байты синхронизации, метки начала и конца данных, контрольная сумма. Эти данные вобщем-то есть не только на физ уровне сетевых карт, а вообще любых устройств, более менее сложных устройств. Можно погуглить связь физического и канального уровней и все станет ясно.
Мне нужно следующее - у меня есть лог TCPDUMPа. Ну или WINDUMPа. Там стандартный Ethernet-в нем IP - в нем TCP - в нем HTTP. В лучшем случае. Или другие протоколы. Как определить размер Ethernet пакета, чтобы в случае, если мы не знаем протокола, в нем используемого, его можно было бы просто пропустить. Ведь поля размер то нет
В большинстве своем все возможные протоколы инкапсулированные в эзернет известны, но если уж протокол точно не известен, то в общем случае никак, нужна более полная информация
Все эти сниферы отслеживают ethernet фреймы и их размер лежит в самом дампе. В чём проблема у ТС, не понятно.
Итак, спасибо за ответы. Действительно, в дампе как оказалось размеры есть. Всем отвечавшим спасибо. Теперь еще один вопрос: - Во всех спецификациях написано, что типы Ethernet-пакетов выбраны >=0800, а если меньше, то это не тип, а размер (для совместимости с предыдущими версиями видимо) - У меня во всех пакетах типы >=0800, так что все в соответствии с нормой - Но! Иногда встречается тип 8100, который, как написано, в интернете, используется для разграничения VLANов друг от друга. VLANы у нас дейстивтельно имеются, так что все как бы в норме. - Опять же Но! Тогда после типа (8100) идет еще два байта - они меня (пока) не интересуют. А потом снова Ethernet-тип, но уже "нормальный". Так вот - там 0032. Или 0050. Вполне может быть, что это и есть размер, раз меньше 0800. Но тогда где брать тип? Что это за пакет - IP/ARP или что-то еще?
blueboar Может и зря, что не интересуют, т.к. первый из этих двух байтов должен быть тип протокола -если 0x45 это IPv4, если 0x60 - IPv6, и в зависимости от этого парсить далее.
Судя по http://en.wikipedia.org/wiki/IEEE_802.1Q, в этих двух байтах только 3 бита - приоритет 1 бит - флаг и 12 бит - индентификатор VLANа А потом два бита - тип/размер как обычно? И я не знаю как определить тип, если там размер
Хотя вот сейчас скачал IEEE 802.1Q-2005. Там написано, что если в начале AA-AA-03, то это RFC_1042, SNAP_8021H или SNAP_Other. Что это все такое и зачем оно надо вообще не понятно . Зато хотя бы понятно куда теперь копать.
В общем удалось выяснить, что это "The 802.2 Sub-Network Access Protocol (SNAP)" (смотреть тут http://stason.org/TULARC/networking/lans-ethernet/4-1-What-are-the-different-Ethernet-frame-formats-Etherne.html) OUI вендора в моем случае 00-00-0C, что по списку есть CISCO Systems. Действительно, так. Только вот дальше чего-то не сходится. Ну да ладно. Будем копать дальше. Сам себе задал вопрос, сам себе отвечаю XD