低延迟两阶段协议

时间:2019-05-21 13:23:59

标签: sockets networking tcp udp protocols

我正在寻找有关如何为以下网络协议实现低延迟的建议:

  1. 爱丽丝向从一个很大的池中随机选择的许多对等方发出信息请求。
  2. 每个对等方以一个<20kb的小数据包作为响应。
  3. Alice汇总响应并选择一个对等方。
  4. Alice和选定的对等方然后继续执行协议的第二阶段,从而执行2个请求和响应的序列。
  5. 从1开始重复。

鉴于步骤1和2不需要可靠(只要有一定百分比的响应返回,我们就继续执行步骤3),并且1本质上是多播,协议的这一部分似乎适合UDP-设置与这些对等点建立TCP连接将增加一次往返。

但是第4步必须可靠-我们不能容忍后续请求/响应期间的数据包丢失。

我面临的难题是UDP适合1和2,而TCP协议适合4。连接到1中选择的每个对等节点的速度都很慢,特别是因为我们的目标是仅传输20kb,但是步骤4不能容忍UDP。在4中选择的对等方将需要额外的往返行程,与3次往返行程相比,总时间仍然有很大增加。

是否存在一些混合方案,您可以在传输少量数据的同时进行TCP握手? (握手可以合并为1和2,因此不会增加任何额外的往返时间。)

这种协议有名称吗?我应该阅读些什么,以更加熟悉这些问题?

其他信息:

  • 假定参与者随机分布在全球各地,并通过互联网连接。
  • 在步骤1中选择的池的数量大约为1000,而池中的样本大约为10到100。

1 个答案:

答案 0 :(得分:0)

这里没有足够的细节来进行有根据的批评。如果您正在向我寻求建议,我想进一步了解该提案,但是由于我是免费这样做的,所以我只会按照要求回答问题,并尝试使其实用而不是理想。

我认为UDP不适合您协议的早期部分。您不能只将单个数据包多播到Internet上的大量主机上(尽管您可以在典型的LAN上完成此操作)。在任何情况下,通常都无法在单个数据报中传输20KB的有效负载,而且一旦消息无法放入单个数据报中,UDP就会失去它的大部分吸引力,因为您开始重新发明TCP(严重)。 / p>

您可能做的最简单的事情是将系统建立在HTTP基础上,并使用将Google(大多数情况下)一直在进行HTTP开发的所有各种加速方式合并在一起的实现。这包括TCP Fast Open以及类似的东西。启动与所选服务器的连接;有些会比其他人反应更快:与最快的人一起使用,以发挥自己的优势。顺便说一句,不要低估相对于理论往返时间而言高效实施的重要性。

对于第二阶段,请像以前一样继续使用HTTP。为了提高效率,您可以在第一阶段结束时将所有连接保持打开状态,然后关闭除您选择的第二阶段合作伙伴以外的所有连接。但是,根据您的描述,尚不清楚第二阶段交换是否适合HTTP模型,因此我不得不动一下手。

也有可能您可以简单地使TCP连接或多或少地永久地向所有可用对等方开放,从而几乎一直避免建立连接的成本。一千个同时打开的连接很大,但在大多数情况下并不算太贵(尽管您可能需要调整OS设置以允许它)。如果这样做的话,您可以通过TCP谈论您喜欢的任何协议。如果这是真正的对等协议,则每对仅需要一个TCP连接。但是,实现这种事情很棘手:以我的经验,普通程序员会做得很糟糕。