Сетевой уровень нуждается в качестве входного IP-адреса источника / назначения и порта источника / назначения, то есть он должен представлять собой последовательность байтов в стандартной форме IP-пакета. Таким образом, верхние и нижние колонтитулы Ethernet должны быть удалены перед тем, как их получит сетевой уровень, в противном случае, когда сетевой уровень просматривает определенные смещения для нужных ему данных, таких как IP-адрес источника и т.д., Он может получить их неправильно.
Нет ничего, что "помечает" поля в IP-пакете, они идентифицируются по позиции в пакете. Поэтому нижнему уровню необходимо предоставить сетевому уровню поток данных, совместимый с IP, а не поток данных, совместимый с Ethernet.
Концептуально это то, что должно / должно произойти, но только изучение исходного кода или разборка реализации TCP / IP дадут вам точные ответы или точное разделение "труда" в программном обеспечении. В ситуации, когда у вас есть встроенное устройство, которое будет работать только с одним возможным аппаратным устройством NIC, вы, вероятно, можете очень тесно соединить сеть, канал передачи данных и физические уровни, и я уверен, что выделенные аппаратные маршрутизаторы и т.д. Делают это. В ситуации, когда у вас есть операционная система общего назначения, поддерживающая широкий спектр аппаратного обеспечения, вы не сможете этого сделать.
Что касается передачи, то применяется то же самое. Карта NIC нуждается в MAC-адресе источника и назначения, который появляется в определенных местах в кадре Ethernet. Таким образом, если сетевой уровень напрямую отправит пакет на NIC, произойдет сбой, поскольку к нему не будет подключен заголовок Ethernet, содержащий MAC-адрес источника / назначения.