3. 网络延迟基础:你与对手的起跑线

做延迟套利,说白了就是在跟时间赛跑。你比别人快1微秒,你就赚钱;慢1微秒,你就亏钱。所以,理解网络延迟是怎么构成的,是这门课的第一道门槛。

我个人习惯把网络延迟拆成四个部分来看。这样出了问题,你才知道该往哪个方向去优化。

3.1 网络延迟的构成:四个核心环节

一个数据包从你的交易服务器,跑到交易所的撮合引擎,再回来。这中间经历了什么?

  • 传播延迟:信号在物理介质上跑的时间。光速是上限,谁也突破不了。说白了,就是距离除以光速。
  • 传输延迟:把数据比特推上线的时间。取决于你的网卡带宽和数据包大小。100G网卡肯定比1G网卡快。
  • 处理延迟:路由器、交换机、服务器处理数据包的时间。包括查路由表、校验和、中断处理等。这是我们可以优化的重点。
  • 排队延迟:数据包在设备缓冲区里排队等待处理的时间。这是最不可控的,也是延迟抖动的最大来源。

核心观点:传播延迟是物理定律,你改不了。但处理延迟和排队延迟,是你可以通过软硬件优化来压榨的。我见过太多团队,花大价钱租了光纤,结果自己的服务器处理延迟比网络延迟还高,这就很尴尬了。

举个例子。假设你从上海到芝加哥,光纤距离约12000公里。光在光纤中的传播速度大约是真空光速的2/3,也就是每秒20万公里。那么单程传播延迟就是 12000 / 200000 = 60毫秒。这是理论下限,谁也突破不了。

但实际延迟呢?我测过,通常在120-130毫秒左右。多出来的60-70毫秒,就是传输、处理和排队延迟。嗯,这里要注意,这多出来的部分,就是你的优化空间。

3.2 光纤 vs 微波:速度与代价的博弈

做延迟套利,你绕不开一个选择:用光纤还是用微波?

特性 光纤 微波
传播介质 玻璃纤维(光信号) 空气(电磁波)
传播速度 约20万公里/秒(光速的2/3) 约30万公里/秒(接近真空光速)
典型延迟(芝加哥-纽约) 约7.4毫秒 约4.2毫秒
带宽 极高(Tbps级别) 较低(Gbps级别)
稳定性 高,不受天气影响 低,受雨雪、雾霾影响
成本 相对较低 极高(需要建塔、买频谱)
适用场景 大流量、高稳定性要求 极致低延迟、小数据量

为什么微波比光纤快?你想想看,光在光纤里走的是玻璃,折射率大于1,所以速度只有真空光速的2/3。而微波在空气中传播,速度几乎等于真空光速。所以,同样的距离,微波天然就比光纤快33%。

我在项目中遇到过一件事。有个团队做跨交易所套利,芝加哥到纽约。他们用了光纤,延迟7.5毫秒。竞争对手用了微波,延迟4.2毫秒。差了3.3毫秒。在套利窗口只有5毫秒的市场里,这3.3毫秒就是生与死的区别。后来他们不得不也上了微波,成本翻了三倍。

我的建议:如果你做的是高频套利,且交易量不大(比如每次只发几个订单),微波是首选。但如果你需要传输大量行情数据,光纤更靠谱。我个人的做法是:微波做交易信号,光纤做行情数据备份。两条腿走路,稳。

3.3 网络拓扑对延迟的影响

网络拓扑,说白了就是你的数据包要走哪条路。不同的拓扑结构,延迟差异巨大。

常见的拓扑有:

  • 星型拓扑:所有节点连到一个中心交换机。简单,但中心节点是瓶颈。
  • 树型拓扑:分层结构,像一棵树。扩展性好,但层级越多延迟越高。
  • 网状拓扑:节点之间全互联。延迟最低,但成本最高。
  • 直连拓扑:两台机器直接连一根线。延迟最小,但只适用于点对点。

在量化交易中,我们追求的是直连或全互联。为什么?因为每多一个跳点(hop),就多一次处理和排队延迟。我曾经优化过一个客户的网络,他们用了三层交换机架构,数据包要经过3跳才能到交易所。我建议他们改成直连光纤,延迟从12微秒降到了3微秒。效果立竿见影。

避坑指南:我曾经见过一个团队,为了省钱,把交易服务器和交易所的接入点放在同一个数据中心的不同机柜,结果中间隔了3台交换机。他们以为距离近就快,但忽略了跳数。后来我帮他们改成同一台交换机下的直连,延迟降了60%。记住:距离不是唯一因素,跳数同样重要。

下面这张图,是我自己总结的网络延迟核心逻辑。你可以看到,从你的交易策略到交易所,每一步都有延迟贡献。

网络延迟构成与优化路径 交易策略 处理延迟 (CPU/网卡/协议栈) 排队延迟 (交换机/路由器缓冲区) 传输延迟 (带宽/数据包大小) 传播延迟 (距离/介质/光速) 交易所 优化方向:DPDK/内核旁路 优化方向:减少跳数/专用链路 优化方向:增大带宽/压缩数据 优化方向:微波/缩短距离 总延迟 = 处理延迟 + 排队延迟 + 传输延迟 + 传播延迟 其中传播延迟是物理极限,其他三项可通过技术手段优化

3.4 延迟测量工具:ping、traceroute、mtr

光说不练假把式。你得会测延迟,才能知道问题出在哪。我常用的工具有三个:

3.4.1 ping:最基础的延迟探测

ping 发送ICMP回显请求,测量往返时间(RTT)。简单粗暴,但够用。

ping -c 10 192.168.1.1
# 输出示例:
# 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.123 ms
# 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.118 ms
# ...
# --- 192.168.1.1 ping statistics ---
# 10 packets transmitted, 10 received, 0% packet loss
# rtt min/avg/max/mdev = 0.112/0.121/0.135/0.008 ms

看什么?看平均值和抖动(mdev)。抖动大,说明网络不稳定,排队延迟在变化。这对套利来说是致命的。

我的习惯:我会连续ping 1000次,然后看延迟分布。如果99%的包都在0.1ms以内,但偶尔有1ms的尖峰,那说明网络设备缓冲区偶尔会满。这种尖峰,就是你的套利窗口被抢走的原因。

3.4.2 traceroute:看你的数据包走了哪些路

traceroute 可以显示从你的机器到目标,每一跳的延迟和IP地址。它能帮你发现,到底是哪一跳在拖后腿。

traceroute -n 8.8.8.8
# 输出示例:
# 1  192.168.1.1  0.123 ms  0.118 ms  0.115 ms
# 2  10.0.0.1     1.234 ms  1.198 ms  1.211 ms
# 3  172.16.0.1   2.456 ms  2.389 ms  2.401 ms
# 4  8.8.8.8      3.123 ms  3.098 ms  3.112 ms

你看,每一跳都列出来了。如果某一跳的延迟突然飙升,比如从2ms跳到20ms,那问题就出在那。我曾经用traceroute发现,客户的交易链路中间绕了一个不该有的节点,多走了2000公里。去掉那个节点后,延迟降了15毫秒。

注意:有些路由器会限制ICMP,导致traceroute结果不准确。我建议你用UDP模式的traceroute,或者用tcptraceroute,结果更可靠。

3.4.3 mtr:把ping和traceroute合二为一

mtr 是我最推荐的工具。它持续探测每一跳,并统计丢包率和延迟分布。一个命令,就能看到全貌。

mtr -n -c 100 8.8.8.8
# 输出示例(简化):
#                               Loss%   Snt   Last   Avg   Best  Wrst StDev
# 1. 192.168.1.1                0.0%   100   0.12   0.13   0.11  0.18  0.01
# 2. 10.0.0.1                   0.0%   100   1.21   1.25   1.18  1.45  0.05
# 3. 172.16.0.1                 0.0%   100   2.45   2.51   2.38  2.89  0.08
# 4. 8.8.8.8                    0.0%   100   3.11   3.15   3.02  3.45  0.07

看Loss%列,如果有丢包,那说明那一跳的队列满了,数据包被丢弃了。这在交易中是大忌,丢一个包可能就意味着错过一次套利机会。

我个人习惯,每周跑一次mtr,监控所有交易链路的延迟变化。一旦发现某条链路的抖动变大,立刻排查。别等到亏钱了才想起来看网络。


好了,这一章的内容就这些。记住:网络延迟是量化交易的基础设施,你花再多时间去优化都不为过。下一章,我们会深入时钟同步,看看怎么让所有机器的时钟对齐到纳秒级。

专注资料整理