低级别的Socket编程

5

我无法理解或掌握在套接字编程中以较低的层次进行编程的含义。我习惯于使用TCP/UDP/文件系统套接字。它们都包装了自己的协议规范......据我所知,这将使其在堆栈的应用程序层中工作。

在我参与的项目中,我看到了一些被命名为“LinkLayer”、“TransportLayer”的文件,但除了标准的套接字调用(send/recv/select)之外,我没有看到更多的调用。

设置套接字选项是否意味着您正在以较低的级别进行编程?它只是受限于此吗?还是有其他API可以让您访问内核中的表示?

2个回答

9

通常,这是指使用SOCK_RAW套接字,这需要您自己组装数据包头,计算校验和等。您仍然使用send / recv /等,但现在您需要确保每个位都处于正确的位置。

您可以使用SOCK_RAW套接字来实现除TCP或UDP之外的协议,或者对互联网协议进行一些高级接口无法满足的操作(例如调整数据包的TTL以实现类似traceroute的东西)。


2
这通常意味着在较低的OSI层上工作,例如,不直接发送TCP流或UDP数据包,而是制作自己的IP甚至以太网数据包或其他低层协议,这些协议在正常情况下将由操作系统处理。
可以通过特定的套接字选项来完成此操作,使您能够在任何层(甚至数据链路层)接收或发送数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接