我无法理解或掌握在套接字编程中以较低的层次进行编程的含义。我习惯于使用TCP/UDP/文件系统套接字。它们都包装了自己的协议规范......据我所知,这将使其在堆栈的应用程序层中工作。
在我参与的项目中,我看到了一些被命名为“LinkLayer”、“TransportLayer”的文件,但除了标准的套接字调用(send/recv/select)之外,我没有看到更多的调用。
设置套接字选项是否意味着您正在以较低的级别进行编程?它只是受限于此吗?还是有其他API可以让您访问内核中的表示?
通常,这是指使用SOCK_RAW套接字,这需要您自己组装数据包头,计算校验和等。您仍然使用send / recv /等,但现在您需要确保每个位都处于正确的位置。
您可以使用SOCK_RAW套接字来实现除TCP或UDP之外的协议,或者对互联网协议进行一些高级接口无法满足的操作(例如调整数据包的TTL以实现类似traceroute的东西)。