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

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

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

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

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


person Jakub Jakubowski    schedule 03.04.2018    source источник


Ответы (1)


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

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

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

person Malt    schedule 03.04.2018