如何编写(实现)网络协议(规范)

时间:2011-09-17 19:12:20

标签: ftp network-protocols bittorrent

如何编写(实现)ftp,bittorrent,adc,gnutella等网络协议? 用过什么语言?在哪里下载资源?我是读取使用boost.asio,boost.spirit,beep,类型长度值,还有什么更好的选择?

1 个答案:

答案 0 :(得分:2)

您是在谈论实施现有协议还是创建新协议?我会假设前者。

您需要的第一件事是规范。标准互联网协议由RFC指定。例如,FTP由RFC 959指定。你提到的其他协议不是标准,但它们可能仍然有规范;例如,BitTorrent有一个,虽然它不是很好(有一个attempt to clarify it)。

您需要的第二件事是具有用于执行套接字IO的API的语言。每种严肃的语言都有一种。例如,在Java中,它位于java.net包中。您可以使用任何语言,只要它具有这样的API。

然后你只需要坐下来遵循规范,编写可以按照规范中定义的格式发送和接收消息的代码。

或者,您可以查找协议的现有实现,并使用它。没有集中的地方可以找到协议的实现;您的语言的标准库将包含一些(例如,Java具有FTP,HTTP,SMTP,IIOP,以及可能内置的其他一些),您可以将其他文件作为第三方软件包下载。

你提到了一些图书馆。 Boost.asio是C ++中socket IO的库。它是基本操作系统API之上的一层,旨在使其更容易。 Boost.spirit是一个解析器库;您可以使用它来解析协议,尽管这对于更复杂的协议来说只是一个很好的举动。 BEEP是一种协议,或者说是构建协议的框架;它只会帮助你在BEEP之上实现一个协议,而大多数协议都没有。 Tag-length-value是一种数据编码方式,有些协议使用,但不是全部。