Распознавание транспортного уровня кадра Ethernet

Недавно я работал над поддержкой raw ethernet во встроенных системах. В основном для образовательных целей и ноу-хау. Используя некоторые данные, найденные в Google, я смог реализовать поддержку ARP и отдельную поддержку транспортного уровня UDP/TCP. К сожалению, у меня есть проблема с поддержкой их обоих (UDP/TCP) одновременно. По сути, я не могу распознать протокол входящего кадра, поэтому не могу решить, отправлять ли его обработчику UDP или TCP. Невозможно отправить его обоим без риска получения искаженных данных. Я ожидал какое-то битовое поле, обозначающее эту информацию, но не могу ее найти.

Я ищу эту информацию в течение нескольких дней, но не могу найти источник, вероятно, потому что я что-то неправильно понимаю.

Могу ли я попросить помощи у более опытных ИТ-специалистов, объяснив тему / подсказку, где искать? Я чувствую, что нахожусь в тупике.

Заранее спасибо.

1 ответ

Решение

TCP/UDP не должен быть непосредственно встроен в кадр Ethernet. Сегмент TCP должен находиться внутри IP-пакета с типом = 6, а IP-пакет должен находиться внутри фрейма Ethernet с EtherType= 0x800 (для IPv4):

     Ethernet EtherType=0x800 (IPv4)
   +----------------------------------+
   |          IP Type=6 (TCP)         |
   |     +-------------------------+  |
   |     |                         |  |
   |     |     +---------------+   |  |
   |     |     |   TCP         |   |  |
   |     |     |               |   |  |
   |     |     +---------------+   |  |
   |     |                         |  |
   |     +-------------------------+  |
   |                                  |
   +----------------------------------+

Для UDP это то же самое, только тип IP - 17 вместо 6.

Другие вопросы по тегам