OSI层在代码中的实际实现

Practical Implementation of OSI layers into code

从理论上了解七层如何交互和操作数据的理论是一回事,但如何在现实世界中使用实际代码实现这一点又是另一回事。

我想知道这些层在实践中是如何实现的(以 PC 为例,因为它使用所有的层,而不像路由器等)——每一层都是一个独立的过程,有一个标准化的 API(所以有很多软件可以协同工作)或者像特定 HW/SW 设置的网络驱动程序负责所有这些使用共享库等?或者是其他一些完全不同的方法?

我问这个问题的原因是因为我想在 868MHz 频段上创建自己的网络,并且我想使用一些现有代码(例如 DataLink 纠错和此类代码 - 因为那是远远超出了我的技能范围)而且还编写了我自己的网络层代码来自定义设备交互的方式。

is something like a network Driver for a specific HW/SW setup responsible for all of this

是的。在大多数现代操作系统中,出于性能和安全原因,网络堆栈是在内核中实现的。

性能:处理数据包需要做大量工作,因此在将应用层数据分派给绑定到给定套接字的应用程序之前,在内核中完成这些工作效率更高。

安全性:内核会阻止非特权用户做 "bad" 事情,例如欺骗他们的 IP 地址或向另一台主机发送 ICMP 消息。

Linux kernel source code.

是一个很好的参考资源
  • net - 在这里您可以找到所有核心设备和协议实现(IP、TCP、UDP 等)
    • dev.c - 设备管理
    • ipv4 - IPv4 和 UDP、TCP v4
    • ipv6 - IPv6 和 UDP、TCP v6
  • drivers/net - 网络设备驱动程序