低级别的套接字编程

时间:2010-08-19 12:53:12

标签: c sockets unix

我无法理解或掌握;在套接字编程中在较低层编程意味着什么。我习惯使用tcp / udp /文件系统套接字。这些都包含在他们自己的协议规范中......据我所知,这将使它在堆栈中的应用层工作。

在我正在进行的项目中,我看到一些文件被“命名”为LinkLayer,TransportLayer ......但我没有看到除标准套接字调用之外的任何其他调用.... send / recv / seletct。 ..

您设置套接字选项的事实是否意味着您在较低级别进行编程?它仅限于此吗?或者是否有其他API授予您访问内核中的表示形式的权限?

2 个答案:

答案 0 :(得分:9)

通常这是指使用SOCK_RAW套接字,它需要您组装自己的数据包标头,计算校验和等。您仍然使用send / recv / etc.但现在你有责任确保每一位都在正确的位置。

您可以使用SOCK_RAW套接字来实现TCP或UDP以外的协议,或者使用更高级别接口无法容纳的Internet协议(例如调整数据包的TTL以实现traceroute之类的操作)。< / p>

答案 1 :(得分:2)

这通常意味着在较低的OSI层上工作,例如,不直接发送TCP流或UDP数据包,而是制作自己的IP甚至以太网数据包或其他低层协议 - 在正常情况下 - 由操作系统处理。

这可以通过特定的套接字选项完成,使您可以在任何层上接收或发送数据,甚至是第2层(数据链接)。