我想设计一个客户端-服务器应用程序的协议,并需要一些资源链接来帮助我。
重要的部分是我试图创建自己的“数据包”格式,以便我可以最小化发送的信息量。我正在寻找一些资源来解析他们的协议,但似乎有些完全缺乏数据包设计,例如SMTP(它只发送由CLRF终止的字符串)。使用类似SMTP的系统与使用自定义数据包的系统相比,有什么优缺点?SMTP是否可以仅使用几个字节通过位标志覆盖所有命令并节省带宽/空间?
只是尝试理解所有这些。
没错,但SMTP并没有特别优化空间,也不是基于分组的协议。它位于TCP之上,并使用TCP的流功能。您需要决定协议中什么是可取的:是性能敏感?延迟?带宽?
它是否需要作为超级用户运行?如果不需要,您可能希望使用UDP或TCP。
您是否需要传递保证?如果是,TCP可能是您最好的选择,除非您处理相当极端的性能或大小问题。
现在很少有协议设计单个数据包,虽然许多使用TCP通过网络发送非常特定的数据结构,或者较少情况下使用UDP。
如果要真正优化空间或带宽,请尽可能将数据压缩为单个位和字节,并定义和打包结构以通过TCP发送。现代网络适配器已经对TCP进行了如此优化,因此通常很难从其他策略中获得优势。
SMTP、HTTP和其他基于TCP的协议不关心数据包设计,因为它们是基于流的。因此,更有意义的是谈论协议设计。
至于为什么使用基于文本的协议而不是二进制协议...
通过数据包嗅探程序(如Wireshark)读取协议的可读性非常有用。
而且,能够简单地通过telnet进入您的端口并通过指定纯文本与服务器通信通常非常有用。
此外,像HTTP这样的协议实际上资源通常是通信的有效载荷,资源可以是二进制或任何其他指定格式。因此,仅使用纯文本的标头和状态并不是坏事。