如何在tcp之上构建协议?

时间:2013-08-15 09:27:31

标签: networking tcp network-programming protocols

我正在搜索很多,但我找不到任何资源通过构建自己的协议,使用TCP作为传输层。 有什么必要的步骤? 协议应该是某种设备的“控制协议”。所以我可以向设备发送命令并控制它们并获取信息。

那么如何实现自定义协议呢?是否可以发送defininig what命令并且how接收器对不同的命令做出反应?假设我正在使用xml定义一些自定义命令,使用tcp通过有线/空中发送它们,并在那里有一些逻辑,它们对发送的命令作出反应并回复。这是一种可以实现“协议”的方式吗?这甚至被称为“协议”吗?

亲切的问候。

1 个答案:

答案 0 :(得分:16)

只要您可以为通过TCP套接字发送的数据编写规范,就可以拥有自己的协议。

主要是关于定义命令和有效负载。您必须先将命令包序列化,然后才能通过TCP。如果以二进制格式打包数据包,则字节顺序是一个常见的陷阱。 XML和JSON是常见的基于文本的数据交换格式。就个人而言,我是亲JSON。

请参阅BSONMessagePackprotobuf进行二进制序列化。它们将类型数据打包成二进制文件,因此它们比基于文本的序列化具有更好的类型检查,并且尺寸更紧凑。它们还处理字节序转换,数据包版本控制并提供各种语言的驱动程序/绑定。服务器和客户端可以用不同的语言编写。

编辑:添加了RFC示例

看到Ross Patterson的评论,我还建议阅读RFC以获取协议定义参考。 RTSPHTTP是文字协议,RTP和媒体格式(MPEG4 AVH-264)是二进制协议。

修改

Demystifying Protocols and Serialization Performance with Todd Montgomery