【发布时间】:2012-09-25 18:11:36
【问题描述】:
我正在尝试使用原始套接字构建以太网。我不能使用 TCP/IP、UDP 或任何其他协议。
这是因为它将与非常简单的硬件进行通信,这些硬件没有资源来处理所有不同的协议层。 我的网络将由一台主机组成,通过以太网交换机与多个硬件进行通信。在这一点上,我基本上只想向每个硬件发送简单的数据包,并建立一个我可以扩展的简单服务器。我的系统运行 Linux,服务器需要用 C 或 C++ 编写。
我一直在努力寻找有关如何使用原始套接字的信息,但每个人都说不要使用它们并且没有提供任何信息。我有很强的编程背景,但没有网络经验。 谁能提供有关如何开始或在哪里可以找到相关教程的任何信息?
【问题讨论】:
-
网络套接字实际上是 IP 协议的同义词。即使您放弃 IP 协议,您也只需要实现自己的类似协议。检查你的假设。
-
我不得不同意 Stargazer712,实现其他层所需的开销真的没有那么多。如果您使用 udp,大部分字段都可以是常量。
-
More research 建议在进行资源声明之前使用。
-
所以,既然每个人总是建议避免使用原始套接字,也许有人可以为我填写一些细节。要使用 IP 或 tcp/udp 等协议,客户端是否需要任何基础设施?需要明确的是,我的客户是纯硬件。主机可以完全访问任何套接字协议,但通过以太网交换机与之通信的客户端没有任何软件功能。有人能解释一下为什么 IP 或 tcp/udp 更适合这个吗?
-
@user3217310 所以我需要发送原始 packets,而不是使用原始套接字。这个资源是最有帮助的:sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux
标签: c++ c linux sockets raw-sockets