OSI层在代码

时间:2016-11-26 15:02:01

标签: c++ c networking osi

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

我想知道这些层在实践中是如何实现的(PC就是一个例子,因为它使用了与路由器不同的所有层等) - 每一层都是一个单独的过程,它有一个标准化的API(所以有许多软件协同工作)或类似于网络驱动程序,用于特定的硬件/软件设置负责所有这些使用共享库等?还是其他一些完全不同的方法?

我问这个的原因是因为我想在868MHz频段创建自己的网络,我想使用一些现有代码(例如DataLink纠错和这样的代码 - 因为这只是方式超出我的技能)但也写我自己的网络层代码来自定义设备交互的方式。

1 个答案:

答案 0 :(得分:2)

  

类似于用于特定硬件/软件设置的网络驱动程序,负责所有这些

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

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

安全性:内核可防止未成熟的用户执行"糟糕的"事情,比如欺骗他们的IP地址或用ICMP消息充斥其他主机。

要查看的好资源是Linux kernel source code

  • net - 在这里您可以找到所有核心设备和协议实现(IP,TCP,UDP等)
    • dev.c - 设备管理
    • ipv4 - IPv4和UDP,TCP v4
    • ipv6 - IPv6和UDP,TCP v6
  • drivers/net - 网络设备驱动程序