4

我正在为客户端-服务器应用程序设计一个协议,并且需要一些指向可能对我有帮助的资源的链接。

重要的是我正在尝试创建自己的“数据包”格式,这样我就可以最大限度地减少发送的信息量。我正在寻找一些资源来剖析他们的协议,但似乎有些完全缺乏数据包设计,例如 SMTP(它只发送由 CLRF 终止的字符串)。与使用定制数据包的系统相比,使用 SMTP 之类的系统有哪些优点/缺点?SMTP 不能只使用几个字节来通过位标志覆盖所有命令并节省带宽/空间吗?

只是想弄清楚这一切。

4

4 回答 4

1

没错,但 SMTP 并没有特别针对空间进行优化,也不是基于数据包的协议。它位于 TCP 之上,并使用 TCP 的流功能。您需要确定协议中需要什么:它对性能敏感吗?潜伏?带宽?

是否需要以超级用户身份运行?如果没有,您可能希望使用 UDP 或 TCP。

您需要交货保证吗?如果是这样,TCP 可能是您的最佳选择,除非您正在处理相当极端的性能或大小问题。

如今,很少有协议设计单独的数据包,尽管许多协议确实使用 TCP 或不太常见的 UDP 通过线路发送非常特定的数据结构。

如果您想真正优化空间或带宽,请考虑将您的数据尽可能地压缩为单独的位和字节,并定义和打包结构以通过 TCP 发送它。无论如何,现代网络适配器都针对 TCP 进行了优化,以至于其他策略通常几乎没有优势。

于 2010-04-04T14:50:26.193 回答
1

首先,您是要实现增强型传输协议(如 UDP 之上的 RTP)还是应用程序协议(如 HTTP/SMTP)?

在这两种情况下,您都应该考虑有关您的协议设计或应用程序需求的几件事:基于流或基于数据包、单向/双向、有状态和会话或有状态、可靠或尽力而为、时间要求、流量/拥塞控制,安全或简单。

对于应用层协议,您还应该考虑:文本或二进制数据、应用数据到网络数据单元/数据包的映射、安全需求和完整性等。

于 2010-04-04T15:13:54.643 回答
0

SMTP、HTTP 和其他基于 TCP 的协议与数据包设计无关,因为它们是基于流的。因此,谈论协议设计更有意义。

至于为什么使用基于文本的协议与二进制协议......

Wireshark等数据包嗅探程序对协议的可读性非常有用。

此外,能够简单地远程登录到您的端口并能够通过指定纯文本与服务器通信通常非常有用。

同样对于 HTTP 之类的协议,实际资源通常是通信的有效负载,资源可以是二进制或任何其他指定格式。所以只有纯文本的标题和状态并不是一件坏事。

于 2010-04-04T14:47:03.397 回答
0
  • TCP 是基于的协议,而不是基于数据包的协议。
  • 使用带行的文本使临时调试变得更加容易
  • 使用带行的文本可以使用 telnet 执行您的协议
于 2010-04-04T14:48:57.370 回答