2010-04-04 41 views
3

我期待为客户端 - 服务器应用程序设计一个协议,并且需要一些指向可能帮助我的某些资源的链接。协议/数据包设计问题

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

只是试图让我的头绕过这一切。

回答

1

真正行使自己的协议,但是SMTP并没有特别的优化空间,也不是它是基于分组的协议。它位于TCP之上,并使用TCP的流功能。您需要决定协议中的优点:性能是否敏感?潜伏?带宽?

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

您是否需要交付保证?如果是这样,TCP可能是您的最佳选择,除非您处理相当严重的性能或尺寸问题。

很少有协议,这些天设计单独的数据包,虽然许多人使用TCP发送非常具体的数据结构,跨网,或者,不太常用,UDP。

如果你想真正优化空间或带宽,考虑冷凝你的数据尽可能为单个比特和字节,以及定义和包装结构,以通过TCP发送。现代网络适配器无论如何都对TCP进行了优化,其他策略往往没有什么优势。

+0

我将要发送大量的数据,我想我试图在它成为问题之前进行微观优化。我想我将不得不在TCP之上分层数据结构。但是,让我们说我确实想要设计自己的基于数据包的协议,我会从哪里开始?我将如何开始在C++中实现它? – cam 2010-04-04 15:01:03

+0

你会从布局结构开始。然而,这是一件非常复杂的事情,你需要非常熟悉IP的内部,因为如果你打算封装它,你需要处理很多失败案例:数据包可能会丢失,损坏,碎片化或无序发送。你只是设计一个算法来处理所有这些,并且你已经设置好了;) – WhirlWind 2010-04-04 15:06:02

+0

UDP为你处理数据完整性问题,但你仍然需要处理其他事情。要实现这个东西,请看一下套接字层。 W. Richard Stevens有几本书可能有帮助 – WhirlWind 2010-04-04 15:07:54

0

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

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

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

此外,它往往是能够简单地远程登录到你的端口,并可以通过指定的纯文本与服务器进行通信非常有用的。

而且与像HTTP协议的实际资源通常是通信的有效载荷,所述资源可以是二元或任何其它指定的格式。所以只需要纯文本的标题和状态并不是一件坏事。

0
  • TCP是一个基于协议,而不是基于数据包。
  • 使用与行文本使特设调试方便很多
  • 使用与行的文本能够通过telnet
1

首先,你要实现的增强的传输协议(RTP等在UDP的顶部)或应用协议(如HTTP/SMTP)?

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

迈向一个应用层协议,你也应该想想: 文本或二进制数据,应用数据映射到网络数据单元/包,安全需求和完整性等