2. 网络延迟的构成:传播延迟、传输延迟、处理延迟、排队延迟

做高频交易的人,天天跟延迟较劲。说白了,我们就是在跟光速赛跑,跟交换机里的每一个比特过不去。

很多人一上来就问我:「到底怎么测延迟?」我的回答通常是:你得先搞清楚延迟到底从哪来的。连敌人长什么样都不知道,你怎么打?

今天我就把这四种延迟掰开揉碎了讲清楚。它们分别是:传播延迟传输延迟处理延迟排队延迟

一句话总结:在高频交易里,传播延迟是物理定律,你改不了;传输延迟是带宽游戏,你能优化;处理延迟是硬件竞赛,拼的是芯片;排队延迟是架构问题,考验的是设计。

网络延迟四大构成 发送端 传播延迟 距离 ÷ 光速 传输延迟 数据量 ÷ 带宽 处理延迟 芯片处理时间 排队延迟 等待队列时间 接收端 总延迟 = 传播 + 传输 + 处理 + 排队 在高频交易中,这四种延迟共同决定了你的订单能否抢在别人前面

2.1 传播延迟:物理定律,你绕不过去

传播延迟,就是信号在介质里跑的时间。光在光纤里跑,电在铜缆里跑,都需要时间。

公式很简单:传播延迟 = 距离 ÷ 信号传播速度

光纤里的光速大约是真空光速的2/3,也就是大约20万公里/秒。你想想看,上海到深圳大约1200公里,单程传播延迟就是6毫秒。对于高频交易来说,6毫秒?那简直是天文数字。

我的经验:我在搭建跨交易所链路时,最头疼的就是这个。曾经为了缩短上海到香港的2毫秒传播延迟,我们硬是找了条更直的微波链路。虽然成本翻了三倍,但值了。在HFT里,1微秒的差距就能决定你是赚钱还是亏钱。

传播延迟的特点:

  • 物理不可压缩——除非你把设备搬得更近,或者换介质(比如用微波代替光纤)
  • 与带宽无关——不管你用1G还是100G,传播延迟都一样
  • 与数据量无关——发1个字节和发1MB,传播延迟是一样的

注意:很多人以为换了更贵的线缆就能降低延迟。其实不然。如果你只是把铜缆换成光纤,但走的路径一样长,传播延迟几乎没变化。真正有效的方法是缩短物理距离。

2.2 传输延迟:带宽的游戏

传输延迟,是把数据放到线路上的时间。说白了,就是「串行化延迟」。

公式:传输延迟 = 数据包大小 ÷ 链路带宽

举个例子:一个1500字节的以太网帧,在1Gbps链路上,传输延迟大约是12微秒。换成10Gbps,就变成1.2微秒。100Gbps呢?0.12微秒。

数据包大小 1Gbps 10Gbps 100Gbps
64字节 0.512 μs 0.0512 μs 0.00512 μs
1500字节 12 μs 1.2 μs 0.12 μs
9000字节(巨型帧) 72 μs 7.2 μs 0.72 μs

在高频交易里,我们通常发的是小包。一个订单消息可能就几十个字节。所以传输延迟本身并不大。但要注意,如果你在一条链路上发了太多数据,传输延迟会累积。

关键点:HFT场景下,传输延迟通常不是瓶颈。但如果你用了巨型帧,或者链路上有背景流量,那传输延迟就会变成大问题。我见过有人为了省事,把交易数据和监控数据混在同一链路上,结果传输延迟暴涨了10倍。

2.3 处理延迟:芯片的较量

处理延迟,是设备处理数据包所花的时间。包括:

  • 网卡接收数据
  • 交换机查表转发
  • 防火墙做安全检查
  • 服务器CPU处理协议栈

这部分延迟,是硬件厂商和软件工程师的「主战场」。

我举个例子:一个普通的千兆交换机,处理延迟可能在10-50微秒。但一台HFT专用的低延迟交换机,比如思科Nexus 3550-F,处理延迟可以做到300纳秒以下。差了整整两个数量级。

避坑指南:我曾经踩过一个坑。某厂商宣称他们的交换机延迟只有500纳秒,我信了。结果实际测试发现,那是「线头」延迟——只算了从入端口到出端口的时间,没算队列和查找的时间。真实延迟是2.3微秒。所以,我建议你拿到设备后,一定要自己用专业工具测一遍。

处理延迟的优化方向:

  • 硬件层面:用FPGA或ASIC代替CPU处理数据包
  • 软件层面:用DPDK、Solarflare等用户态协议栈绕过内核
  • 架构层面:减少中间设备,能直连就直连

2.4 排队延迟:最容易被忽视的杀手

排队延迟,是数据包在设备缓冲区里等待处理的时间。这是四种延迟里最「阴险」的一个。

为什么?因为其他三种延迟基本是固定的,你可以算出来。但排队延迟是动态的,取决于网络负载。

想象一下:你开车上班,正常情况30分钟。但遇到堵车,可能变成1小时。排队延迟就是这个「堵车」。

在高频交易里,排队延迟的典型场景:

  • 交换机端口拥塞,数据包在出端口排队
  • 多个交易策略同时发单,网卡缓冲区满了
  • 行情数据爆发,处理不过来

警告:排队延迟的可怕之处在于它的「不确定性」。在HFT里,确定性比绝对延迟更重要。你宁可要一个稳定的5微秒,也不要一个有时1微秒、有时100微秒的链路。因为后者会让你无法预测订单的执行时间。

如何应对排队延迟?

  • 流量整形:控制发送速率,避免突发
  • 优先级队列:把交易流量标记为高优先级
  • 专用链路:交易数据走独立链路,不跟其他流量混在一起
  • PFC(优先级流控):在数据中心里用无损网络技术

2.5 四种延迟在HFT中的综合影响

好了,四种延迟都讲完了。现在我们来算一笔账。

假设一个典型的HFT场景:

  • 上海到深圳,1200公里光纤,传播延迟约6ms
  • 发送一个100字节的订单,10Gbps链路,传输延迟约0.08μs
  • 经过2台低延迟交换机,每台处理延迟500ns,共1μs
  • 链路空闲,排队延迟忽略不计

总延迟 ≈ 6ms + 0.08μs + 1μs ≈ 6.001ms

你看,传播延迟占了99.9%以上。所以,在远距离传输中,传播延迟是绝对的主角。

但在同一个数据中心内部呢?

  • 距离100米,传播延迟约0.5μs
  • 传输延迟0.08μs
  • 处理延迟1μs
  • 排队延迟?如果设计不好,可能变成10μs甚至100μs

这时候,处理延迟和排队延迟就成了大头。

我的建议:做HFT网络设计时,先画一张延迟分布图。把每条链路的四种延迟都算清楚。你会发现,瓶颈往往不在你最初以为的地方。我曾经帮一个客户排查问题,他们一直以为是交换机太慢,结果发现是光纤路径绕了个大弯,传播延迟多了3毫秒。

2.6 实战中的延迟测量

光说不练假把式。你得会测延迟。

常用的工具:

  • 硬件打时间戳:用FPGA或专用网卡,在数据包进出时打上纳秒级时间戳
  • PTP(精确时间协议):同步多台设备的时钟,精度可达亚微秒
  • 专业测试仪:如Spirent、IXIA,可以精确测量每跳延迟

我个人的习惯是,每部署一条新链路,先跑24小时的延迟测试。记录最大值、最小值、平均值和抖动。如果抖动超过平均值的10%,我就会排查原因。

小技巧:测延迟时,别忘了测「往返延迟」和「单向延迟」的区别。有些设备处理入方向和出方向的延迟不一样。我曾经遇到过一台交换机,入方向延迟300ns,出方向延迟700ns,加起来1μs。如果你只测了单向,就会被误导。

好了,关于网络延迟的构成,我就讲到这里。记住这四种延迟,你就能看懂HFT网络里的大部分问题了。下一章,我们会聊聊如何用硬件手段把这些延迟压到极致。


公众号:蓝海资料掘金营,微信deep3321