如何编写(实现)应用层网络协议

时间:2010-12-29 18:10:00

标签: c protocols network-protocols

我想编写(实现)TCP之上的应用层网络协议。你能告诉我怎么开始做吗? 任何在线教程也会​​有所帮助 伙计们我也需要sm实现教程。我是新手,也有更少的时间:( RFC更多关于规则

4 个答案:

答案 0 :(得分:7)

首先阅读standard for SMTP protocol。这是(最初)一个非常简单的协议,没有附加任何字符串,也没有混淆或伪造的声明。 HTTP和FTP更复杂(适合初学者),因为它们功能更丰富,非线性(在许多方面)等。

更新:我已将链接发送到最初的RFC 821,现在已经过时了。然而,它比最新(和有效)的RFC RFC更小,更容易阅读。

答案 1 :(得分:1)

最好的解决方案是观看torrent,ftp,http等当前解决方案。它应该给你一些知识。然后,已签署的协议将取决于您的想象力。

答案 2 :(得分:0)

我建议不要在C中这样做。有更简单的方法可以解决这个问题。试着看看:www.twistedmatrix.com并查看他们的Python Web框架。如果你能写C,你当然可以做Python没有汗水。此外,twisted还可以处理通常与C等低级语言中的网络编程相关的大部分恶意。

答案 3 :(得分:0)

设计自己的协议并非易事。但是,在TCP / IP之上构建它会使其更容易。您指出RFC是关于协议的规则,您是对的。然而,这通常是协议的内容:一套关于如何完成某些事情的规则和协议。这里的美妙之处在于您可以指定自己的规则。您需要考虑的一些事项是要发送的数据类型,每个部分的长度和状态(如果有的话)。例如,HTTP是一种无状态协议,具有定义请求或结果的头,以及定义正在发送的数据的有效负载,可以是表单帖子或html页面。

因此,您需要定义要发送或接收的数据,以字节为单位的数据长度,可以通过数据类型或预期的数据量来定义。如果您的协议存在状态 - 即必须先在其他东西之前发送和接收某些内容 - 那么您需要定义该状态。除此之外,它是简单的网络编程(在您的应用程序中发送和接收数据)。

例如,一个简单的协议就可以:

Command 1 Byte
Length  4 Bytes
Data    Length Bytes

前两个定义了您的标头,其中包含有关另一端需要能够读取所有内容的数据的元数据。最后一个是实际数据。命令虽然不是必需的,但可以表明您可以让另一方根据收到的字节对数据执行特定操作。数据的长度很重要,因为另一端必须知道它何时可以读取所有数据,然后才能使用它。

这个答案确实有助于巩固我所说的话。我希望这有帮助! https://stackoverflow.com/a/11658296/2498017