代码之家  ›  专栏  ›  技术社区  ›  chmike

通过TCP连接打开优化协议打开操作

  •  1
  • chmike  · 技术社区  · 15 年前

    我正在设计一个名为DITP的新协议。它是一个面向连接的协议,将使用TCP作为传输层。在通用的Internet协议中,当建立TCP连接时,服务器首先向客户机响应的内容发送一条问候语,最后发送其第一个请求。

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

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

    Common protocol and DITP protocol comparison http://www.disnetwork.info/uploads/3/8/0/1/38014/705893.png?490x241

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

    我向StackOverflow的网络编程专家提出了两个问题:

    1. 这个假设正确吗?

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

    该方法可以为通信延迟大、频繁建立连接的远程连接提供显著的性能优化。HTTP应该是一个很好的候选者。

    编辑:哎呀,大错特错。HTTP使用客户机直接发送请求的优化方法。没有与SMTP相同的问候语事务。请参阅维基百科。 Hypertext Transfer Protocol 页。

    5 回复  |  直到 15 年前
        1
  •  1
  •   SpliFF    15 年前

    这主要是因为:

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

    B.)你甚至不知道你在和一个支持该协议的服务器交谈。

    简而言之,在向它发送数据之前,知道你在说什么通常是有意义的。

        2
  •  1
  •   unwind    15 年前

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

    我至少希望这一原则是大多数协议设计的原因,以便它们在发送可能根本不被理解的数据之前,花一次往返的时间来了解另一端的更多信息。

        3
  •  0
  •   jgre    15 年前

    如果延误是你主要关心的问题,你可能想看看 LPT ,一种专门为具有非常长往返时间的连接而设计的协议。

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

        4
  •  0
  •   Indy9000    15 年前

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

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

        5
  •  0
  •   Paweł Polewicz    15 年前
    1. 理论上 ,这是正确的。
    2. 普通协议不使用这个,因为它效率很低。客户机将不得不分割数据流,因此它们必须是可区分的。服务器必须注意这一点,例如,将每个数据块打包到一个容器中(XML、JSON、Bitorrent-Like,您命名它)。容器只是一个不必要的数据开销,减慢了传输速度。

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

    不止这些。TCP套接字需要时间来设置(syn,一些时间,syn+ack,一些时间,ack…)。有人认为在每次请求后重置连接是浪费,所以一些现代HTTP服务器和客户端使用 Connection: keep-alive 以指示他们希望重用连接。

    很抱歉,我认为你的想法很好,但是你可以在RFC里找到它们。尽管如此,继续思考,我相信有一天你会发明出一些优秀的东西。参见F.E. here 对于优化的Bitorrent客户端。