NDP Transport Protocol


Re-architecting datacenter networks and stacks for low latency and high performance

0x00 引言

这篇Paper中推出的NDP传输协议是为数据中心网络环境设计一种新的传输协议。NDP的想要实现的几个目标:

  • 0-RTT连接建立,主要就是要避免类似TCP的三次握手的方式;
  • 快速启动,不用向TCP一样的带宽的探测的过程;
  • Per-packet ECMP,更加细粒度的负载均衡;
  • 可以容忍乱序的握手,因为要实现0-RTT的连接建立,就得容忍第一个包就乱序了;
  • 优化incast的情况。
  • 对于短流有低完成时间延迟,对于长流有预测的高吞吐;

0x01 基本设计

NDP为了实现上面的这些目标,它的设计涉及到了交换机的操作、路由以及一个全新的传输协议。NDP为了实现对于短流的低完成时间延迟,就要求一开始就全速发送数据包,而不能有类似带宽探测这样的行为。这里NDP假设在数据中心网络中,带宽一般是充足的。同样地,要想实现低延迟,交换机的排队也必须是很少的,这里NDP使用了Packet trimming的方式和接受端拉取的方法。

ndp-arch

在交换机上面,NDP使用的方法不是在发送拥塞的静默地就把包丢弃,而是丢弃payload,但是包header部分继续转发,对于这类包,接收方回复NACK,普通包回复ACK。加上NDP客户端拉取的工作方式,这个可以是的快速地重传操作而不用等到超市重传。为了把这些header很好地转发到接受端,交换机一般会将这些header包的优先级提高。另外,NDP在交换机的行为上面做了这样的一些优化:

  • NDP在交换机中维持了两个队列,一个是数据包的优先级较低的队列,一个是被裁减了的只有header的包的队列,优先级较高。Paper中认为这种方法能够在实际上获得很好的效果;
  • 交换机在转发的方式上在不同的队列上面选择了加权的RR的转发方式;
  • 当数据包到达且低优先级队列,但此时队列已满时, 交换机决定是修剪新到达的数据包, 还是修剪低优先级队列尾部的数据包的概率都为50%。这个可以处理Cut Payload存在的collapse问题,也可以处理strong phase的效应。

路由

NDP在路由的设计上主要的考虑就是如何利用数据中心网络中大量的可行的等价的线路。NDP使用了发送者决定路线的方式。NDP认为,在数据中心网络中,发送者是知道我了的拓扑的结构的,它可以可以直接作出决策。另外,由于数据中心网络的拓扑一般比较简单,这个增加的成本并不大。

0x02 传输协议

基本的工作流程

NDP使用接收方驱动的方式,可以实现更好地利用多可行路线、包裁减和降低交换机排队。基本的工作流程:

  • 发送方一开始就发送一个完整窗口的数据,不等待回复。每一个数据会有一个序列号;
  • 接收方对于接收到的每一个header包,回复一个NACK,通知发送方准备重传,但是不是立即就重传;
  • 对于每一个数据包,接收方回复一个ACK;
  • 对于接收到的header包和数据包,接收方都添加一个pull包到自己的pull队列,一个接收方志友一个这样的队列,所有的连接共享;pull包上包含了连接的ID;
  • 接收方发送pull包,这里要注意速率。另外还有考虑到优先级;
  • 当接收方接收到pull 数据包时,就回去尝试发送更多的数据包,要求重传的数据包优先发送;
  • 当发送方发送完数据时,会在数据包上面做一个标记。接收方在接受到之后做一些清理工作;

NDP要处理另外的几个问题:

  • Coping with Reordering,处理乱序。NDP中对一般的数据包的乱序的处理时trivial的。这里要注意的是PULL包的乱序,NDP选择的方式是根据接受到的PULL包尽可能多发送数据包,这个在一些情况下可能导致发送超过预期数量的一些数据包;

  • The First RTT,这里就是要处理第一个包就乱序的问题。这个第一就是要求在第一个包上面添加标记。另外就是这个给一些恶意的攻击提供了条件,例如更加利于DoS攻击,因为对于一个IP发送来的数据包,都要先保存下来。这个任务NDP没有处理,NDP认为这个应该交给hypervisor或者NIC完成,另外保证一次性语义采取的方法是间隔一段时间才能放弃下一次连接,因为在数据中心网络中,这个间隔有个1ms左右就可以了。

  • Robustness Optimizations,接收方使用统计ACK包和NACK包的方式来对线路的状况进行探测,

     An NDP sender that retransmits a lost packet always resends it on a different path. A path loss counter is also incremented each time a packet is lost. Any paths that are outliers with regards to packet loss are also temporarily removed from the path set.
    
  • Return-to-Sender,NDP即使使用了包裁减这样的做法,RTO在一些情况下也是必须的。在极度拥塞的情况下,NDP另外的一个处理的方式是将header包发送会发送方,所以叫做Return-to-Sender,

    Return-to-sender is an optimization; in our experience it only kicks in with very large incasts. In a Clos topology it essentially makes NDP lossless for metadata; an RTO only triggers when pack- ets are corrupted or there is a failure.
    
  • Congestion Control,利用NDP自身的设计解决这个问题。

NDP存在的局限

  • 在不对称的数据网络架构中表现不是很好,

    In asymmetric topologies such as BCube and Jellyfish, NDP will behave poorly because it will spray packets on different length paths that are costly to use when the network is heavily loaded. For such networks, sender-based per-path multipath congestion con- trol has been shown to work well
    
  • 没有Congestion Control的设计在一些情况也会造成一些问题;

  • 在和TCP共存的时候可能表现出很大的侵略性

0x03 评估

这里的详细信息可以参看[1].

ndp-perf

参考

  1. Re-architecting datacenter networks and stacks for low latency and high performance,SIGCOMM 2017.