【问题标题】:Optimizing protocol opening operation over tcp connection opening通过 tcp 连接打开优化协议打开操作
【发布时间】:2019-07-20 15:09:43
【问题描述】:

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

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

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


(来源:disnetwork.info

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

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

  1. 这个假设正确吗?

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

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

编辑:哎呀,大错特错。 HTTP 使用客户端直接发送请求的优化方法。没有与 SMTP 一样的问候事务。参见 Wikipedia Hypertext Transfer Protocol 页面。

【问题讨论】:

    标签: tcp protocols network-protocols


    【解决方案1】:

    这主要是因为:

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

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

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

    【讨论】:

    • 谢谢。这解释了我的区别。我的简短博客笔记中没有描述的是客户端之前从服务定位器获得了所有必需的信息。该服务提供服务的地址(ip 和端口)以及支持的协议版本和其他有用的信息,例如证书。所以打开交易只是为了检查目的。
    • 再想一想,如果服务定位器持有指向无辜受害者的虚假信息,它会在发现欺骗之前“喷出”数据。它可能会破坏不期望此类数据的受害者服务。
    • 我决定向 SpliFF 给出答案,因为他是最明确的。放松也应该得到答案,其他答案也很突出。但我只能给出一个答案。感谢您的帮助。
    【解决方案2】:

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

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

    【讨论】:

    • 你是对的。感谢您引用这个好的维基百科页面。正如我在对 SpliFF 的评论中所解释的那样,与通用协议不同的原因可能是客户端将“知道”它期望在连接的另一端找到什么。
    【解决方案3】:

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

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

    【讨论】:

    • DITP¨ 协议不是传输协议。 T 代表传输协议,如 FTP 或 SMTP。它使用底层面向连接的传输层,可以是 TCP、LPT 或任何其他最适合使用上下文的协议。只有在同一连接中多路复用事务时,拥塞方面确实很重要。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:
      1. 理论上,这是正确的。
      2. 普通协议不使用它,因为它效率低下。客户端必须拆分数据流,因此它们必须是可区分的。服务器必须注意这一点,例如通过将每个数据块打包在一个容器中(XML、JSON、类似 Bitorrent,你可以命名它)。而且容器只是不必要的数据开销,会减慢传输速度。

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

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

      很抱歉,我认为您的想法很棒,但是您可以在 RFC 中找到它们。不过,请继续思考,我相信有一天你会发明一些很棒的东西。见 f.e. here 用于优化的 bitorrent 客户端。

      【讨论】:

      • 对不起,我不明白你的第二点。该协议用于分布式信息系统。因此,客户端将连接到世界各地的许多不同服务器,例如万维网。多个请求可以通过同一个连接发送。我的目标不是发明一些出色的东西。它是提供一种具有新属性的新工具,以支持新类型的应用程序以及优化和扩展当前的应用程序。
      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      相关资源
      最近更新 更多