1

我正在设计一个名为 DITP 的新协议。它是一种面向连接的协议,将使用 TCP 作为传输层。使用常见的 Internet 协议,当 TCP 连接建立时,服务器首先发送问候消息给客户端响应,最终发送它的第一个请求。

我发现我可以通过反转初始协议事务来节省一次往返时间。客户端首先发送问候语,然后是第一个请求。

下图显示了两种协议事务时间之间的比较,以及它如何节省一个往返时间。

常用协议和DITP协议比较
(来源:disnetwork.info

您可能需要阅读以下博客注释以获得更详细的说明。 http://www.disnetwork.info/1/post/2008/08/optimizing-ditp-connection-open.html

我有两个问题要问 StackOverflow 的网络编程专家:

  1. 这个假设正确吗?

  2. 为什么通用协议不使用这个?

这种方法可以为通信延迟高且需要频繁建立连接的长距离连接提供显着的性能优化。HTTP 本来是一个不错的选择。

编辑:哎呀大错误。HTTP 使用客户端直接发送请求的优化方法。没有与 SMTP 一样的问候事务。请参阅 Wikipedia超文本传输​​协议页面。

4

5 回答 5

1

这主要是因为:

a.) 客户端可能需要知道服务器使用的协议版本

b.) 您甚至都不知道您真的在与支持该协议的服务器通话。

简而言之,在向其发送数据之前了解您正在与之交谈的内容通常是有意义的。

于 2009-05-25T09:39:26.760 回答
1

我想知道这种设计是否可以说不违反Postel 定律,因为它假设了关于接收者的事情,因此在知道之前就假设了什么是合法的。

我至少希望这个原则成为大多数协议设计的原因,以便它们在发送可能根本无法理解的数据之前花费往返来了解更多关于另一端的信息。

于 2009-05-25T09:45:20.477 回答
0

如果延迟是您主要关心的问题,您可能需要查看LPT,这是一种专为往返时间极长的连接而设计的协议。

在设计新的传输协议时,您应该注意拥塞控制以及防火墙在遇到未知协议的数据包时会做什么。

于 2009-05-25T10:03:18.490 回答
0

HTTP、SMTP 等协议的设计目标不是速度,而是不稳定的物理网络条件下的可靠性和微薄的带宽利用率。现在,随着硬件的改进,这些条件在很大程度上发生了变化。

您的设计应该根据您将遇到的网络条件、所需的可靠性、延迟和预期应用程序的带宽利用率来考虑。

于 2009-05-25T10:20:23.290 回答
0
  1. 理论上,这是正确的。
  2. 普通协议不使用它,因为它效率低下。客户端必须拆分数据流,因此它们必须是可区分的。服务器必须注意这一点,例如将每个数据块打包在一个容器中(XML、JSON、类似 Bitorrent,你可以命名它)。而容器只是不必要的数据开销,减慢了传输速度。

为什么不只打开几个 TCP 套接字并通过这些多个连接发送单独的请求呢?这里没有开销!哦,这已经被一些现代网络浏览器完成了。使用wiresharkortcpdump检查数据包并亲自查看。

不止于此。TCP 套接字需要时间来建立(SYN,一些时间,SYN+ACK,一些时间,ACK...)。有人认为在每次请求后重置连接是一种浪费,因此一些现代 HTTP 服务器和客户端使用Connection: keep-alive来表示他们希望重用连接。

很抱歉,但我认为您的想法很棒,但是您可以在 RFC 中找到它们。不过,请继续思考,我相信有一天你会发明一些很棒的东西。请参阅此处的fe以获得优化的 bitorrent 客户端。

于 2009-05-25T18:42:38.820 回答