Network programming 创建新的链路层协议

Network programming 创建新的链路层协议,network-programming,programming-languages,protocols,network-protocols,Network Programming,Programming Languages,Protocols,Network Protocols,我已经在这里和维基百科上搜索过了。我所看到的被提及最多的是,我应该看看旧的SMTP规范,因为该协议是最容易查看和理解的协议(HTTP显然非常复杂,我并不反对)。然而,对这些建议的评论说,查看SMTP是错误的做法,因为它的编写方式已经过时,效率低下 我还看到有人建议用C或Java的一些变体编写自定义协议 我想知道我可以在哪里找到一个为现代编写的自定义/简单协议的示例,以及哪种语言是编写协议的理想语言。我认为一门低级语言是最好的,这就是我对这种语言的了解的终点。我意识到这是一个古老的问题,但我想我对

我已经在这里和维基百科上搜索过了。我所看到的被提及最多的是,我应该看看旧的SMTP规范,因为该协议是最容易查看和理解的协议(HTTP显然非常复杂,我并不反对)。然而,对这些建议的评论说,查看SMTP是错误的做法,因为它的编写方式已经过时,效率低下

我还看到有人建议用C或Java的一些变体编写自定义协议


我想知道我可以在哪里找到一个为现代编写的自定义/简单协议的示例,以及哪种语言是编写协议的理想语言。我认为一门低级语言是最好的,这就是我对这种语言的了解的终点。

我意识到这是一个古老的问题,但我想我对此有一些见解。我最近为一个我正在从事的项目开发了一些嵌入式原型,需要一种方法让这些设备与我的PC进行高速通信。USB是一个相当令人头痛的问题,坦率地说,编写定制tcpip堆栈也是如此,尽管我至少以前做过。此外,嵌入式设备除了将ip地址硬编码到c/assembly中之外,无法从用户处获取ip地址。所以我想,如果我可以通过以太网连接,避免所有IP层的胡说八道,那该怎么办呢。我决定在电路板上添加磁性元件,并在整个通道中使用10Mbps以太网/MAC帧。在PC端,我通常读取原始以太网帧并在应用程序中处理它们。在我的嵌入式项目和我的个人电脑之间建立高速连接,这是一种魅力。好吧,除了有一个陷阱。当通过交叉电缆或虚拟交换机连接到我的电脑时,它可以工作,但如果您试图通过传统路由器将其连接到LAN的其余部分,路由器将丢弃数据包。为什么?我从来没有确定过,但我最好的猜测是,中用于表示上层使用的协议的EtherType字段与已知类型之一(即IP、ARP等)不匹配


底线是,虽然您可以创建自定义链路层协议,并使用libPCap库在应用程序端实现它,但不能保证在所有路由器上都能工作,因为如果某些路由器不识别您使用的协议,它们会丢弃您的包。它肯定不会在internet上工作,因为IP层决定internet上的路由。

您知道链路层协议是在物理层(导线中的电信号或光缆中的光子等)和网络层(如IP)之间铲位的协议吗?反过来,SMTP和HTTP是在网络层和/或传输层协议(如TCP)之上工作的应用层协议的示例。所以我怀疑你在这里有一个术语混淆。如果你想用流行的当代操作系统实现一个链路层协议,唯一明智的实现方法就是编写一个驱动程序,在大多数情况下,这意味着大量使用操作系统内核特定的API,用C编写代码。这样就消除了适用编程语言的问题。如果你想要一个应用层协议,那么它应该解决什么任务?“仅仅创建一个新协议”的想法没有什么意义,因为不可能讨论实现一个协议的可能方法及其优点。@kostix:关于你的第一个问题,是的,我理解。由于这是我正在学习的一个新事物,我奇怪地问了我的问题。我道歉。关于第二个问题,是否每个操作系统供应商都为所有协议编写包装器?如果是这样,那很有趣。关于你的第三个问题,我想用类似于
foobar://
的东西来处理我正在进行的项目。任何一个网络公司都会在我的项目上生成一个3D模型。哦,谢谢你分享你的经验!看起来我的想法在我自己的网络之外是行不通的,但至少我对原因有了更好的理解。