Знание теории о том, как эти семь уровней взаимодействуют и манипулируют данными в теории, — это одно, а то, как реализовать это в реальном мире с помощью реального кода, — другое.
Я хочу знать, как эти уровни реализованы на практике (например, ПК, потому что он использует все слои, в отличие от маршрутизатора и т. Д.) — каждый слой — это отдельный процесс, имеющий стандартизированный API (так что существует множество программное обеспечение, которое работает вместе) или это что-то вроде сетевого драйвера для конкретной установки HW / SW, ответственного за все это с использованием общих библиотек и тому подобного? Или это какой-то другой совершенно другой подход?
Причина, по которой я спрашиваю об этом, заключается в том, что я хочу создать свою собственную сеть в диапазоне 868 МГц, и я хочу использовать некоторый существующий код (например, исправление ошибок DataLink и такой код — потому что это просто далеко от моих навыков ), но также пишу свой собственный код сетевого уровня, чтобы настроить взаимодействие устройств.
это что-то вроде сетевого драйвера для конкретной установки HW / SW, ответственного за все это
Да. В большинстве современных операционных систем сетевой стек реализован в ядре по соображениям производительности и безопасности.
Производительность: много работы уходит на обработку пакета, поэтому более эффективно выполнять эту работу в ядре, прежде чем отправлять данные уровня приложения приложению, привязанному к данному сокету.
Безопасность: ядро не позволяет непривилегированным пользователям совершать «плохие» действия, такие как подмена их IP-адреса или заполнение другого хоста сообщениями ICMP.
Хороший ресурс, на который можно посмотреть Исходный код ядра Linux.
net
— Здесь вы найдете все основные реализации устройств и протоколов (IP, TCP, UDP и т. Д.)
drivers/net
— Драйверы сетевых устройствДругих решений пока нет …