【发布时间】:2016-09-07 05:31:56
【问题描述】:
我想在 TCP 之上编写(实现)一个应用层网络协议。你能告诉我如何开始做吗? 任何在线教程也会有所帮助 伙计们,我也需要 sm 实施教程。我对此很陌生,而且时间也更少:( RFC 更多的是关于规则
【问题讨论】:
标签: c protocols network-protocols
我想在 TCP 之上编写(实现)一个应用层网络协议。你能告诉我如何开始做吗? 任何在线教程也会有所帮助 伙计们,我也需要 sm 实施教程。我对此很陌生,而且时间也更少:( RFC 更多的是关于规则
【问题讨论】:
标签: c protocols network-protocols
首先阅读standard for SMTP protocol。这是(最初)一个非常简单的协议,没有附加任何字符串,也没有令人困惑或虚假的陈述。 HTTP 和 FTP 更复杂(对于初学者),因为它们功能更丰富、非线性(在许多方面)等等。
更新:我已将原始 RFC 821 的链接放在现在已过时。然而,它比最新的(和有效的) SMTP RFC 更小更容易阅读。
【讨论】:
最好的解决方案是监视当前的解决方案,例如 torrent、ftp、http。它应该给你一些知识。然后设计的协议将取决于您的想象力。
【讨论】:
设计自己的协议绝非易事。但是,在 TCP/IP 之上构建它会更容易。您指出 RFC 是关于协议的规则,您是对的。但是,这通常是协议的内容:一组关于如何完成某事的规则和协议。这里的美妙之处在于您可以指定自己的规则。您需要考虑的一些事情是要发送的数据类型、每个片段的长度和状态(如果有)。例如,HTTP 是一种无状态协议,其标头定义请求或结果,有效负载定义正在发送的数据,可以是表单帖子或 html 页面。
因此,您需要定义要发送或接收的数据、数据长度(以字节为单位),可以由数据类型或预期数据量定义。如果您的协议有一个状态 - 即必须先发送和接收某些内容,然后才能发送和接收其他内容 - 那么您需要定义该状态。除此之外,它还是简单的网络编程(在您的应用程序中发送和接收数据)。
例如,一个简单的协议可以是这样的:
Command 1 Byte
Length 4 Bytes
Data Length Bytes
前两个定义您的标头,其中包含有关数据的元数据,另一端需要能够读取所有内容。最后是实际数据。命令虽然不是必需的,但用于表明您可以让另一方根据接收到的字节对数据执行特定操作。数据的长度很重要,因为另一端必须知道它何时读取了所有数据才能对其进行处理。
这个答案确实有助于巩固我所说的。我希望这有帮助! https://*.com/a/11658296/2498017
【讨论】:
我建议不要在 C 中执行此操作。有更简单的方法可以解决此问题。尝试查看:www.twistedmatrix.com 并查看他们的 Python 网络框架。如果你会写 C,你当然可以毫不费力地写 Python。此外,twisted 处理了通常与使用 C 等低级语言进行网络编程相关的大部分麻烦。
【讨论】: