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 消息。
是一个很好的参考资源
net
- 在这里您可以找到所有核心设备和协议实现(IP、TCP、UDP 等)
drivers/net
- 网络设备驱动程序
从理论上了解七层如何交互和操作数据的理论是一回事,但如何在现实世界中使用实际代码实现这一点又是另一回事。
我想知道这些层在实践中是如何实现的(以 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 消息。
是一个很好的参考资源net
- 在这里您可以找到所有核心设备和协议实现(IP、TCP、UDP 等)drivers/net
- 网络设备驱动程序