问题 如何在tcp之上构建协议?


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

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

亲切的问候。


7660
2017-08-15 09:27


起源

是的,这是一个“协议”。有关示例,请查看一些经典TCP / IP协议的原始文档。 RFC 821 对于SMTP就是一个很好的例子。 - Ross Patterson


答案:


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

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

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

编辑:添加RFC示例

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

编辑:

用Todd Montgomery揭开协议和序列化性能的神秘面纱


15
2017-08-15 09:42