在Linux上使用C/C++编写简单的原始套接字服务器

5
我正在尝试使用原始套接字建立以太网网络。我不能使用TCP/IP,UDP或任何其他协议。
这是因为它将与非常简单的硬件通信,这些硬件无法处理所有不同的协议层。我的网络将由1台主机计算机通过以太网交换机与多个硬件设备通信。目前,我基本上只想向每个硬件设备发送简单的数据包,并建立一个可以扩展的简单服务器。我的系统运行在Linux上,服务器需要用C或C++编写。
我一直在尝试找到如何使用原始套接字的信息,但每个人都说不要使用它们,并且没有提供任何信息。我有相当强的编程背景,但没有网络经验。是否有人可以提供有关如何入门或哪里可以找到相关教程的信息?

1
网络套接字几乎可以视为IP协议的代名词。即使您放弃IP协议,也只能实现类似的协议。检查您的假设。 - riwalk
2
我必须同意Stargazer712的观点,实现其他层所需的开销并不多。如果您使用UDP,大多数字段可以是常量。 - CrazyCasta
2
在进行资源声明之前,建议进行更多的研究。更多研究是推荐的。 - Steve-o
所以,既然每个人都建议避免使用原始套接字,也许有人可以为我填补一些细节。要使用像IP或tcp/udp这样的协议,客户端端是否需要任何基础设施?明确一点,我的客户端是纯硬件。主机计算机可以完全访问任何套接字协议,但通过以太网交换机进行通信的客户端没有任何软件功能。有人能解释一下为什么IP或tcp/udp更适合这种情况吗? - NerdPirate
嗨,你最终成功创建了没有TCP/UDP的原始套接字吗? - user3217310
1
@user3217310,结果证明我需要发送原始的“数据包”,而不是使用原始套接字。这个资源是最有帮助的:在Linux上使用C从特定接口发送原始以太网数据包 - NerdPirate
1个回答

7

2
他想要原始套接字,而不是TCP/UDP。 - CrazyCasta
@CrazyCasta,他可能已经知道了,只是还没有意识到。 - riwalk
1
@Stargazer712 虽然我同意使用原始套接字是愚蠢的,尤其是在没有网络背景的情况下,但他非常明确地表达了自己的意愿。最好在评论中建议他放弃使用原始套接字的想法。 - CrazyCasta
感谢提供原始套接字链接。谷歌搜索结果并不特别有用,因为我已经阅读了谷歌上找到的网页几周了,其中95%都是无关或没有提供有用信息。但前两个链接提供了一些有用的见解。 - NerdPirate

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