4. 网络协议基础:TCP vs UDP、RDMA与InfiniBand简介、PTP时间同步、网卡调优

做高频交易,网络就是你的血管。数据流不过去,策略再牛也白搭。今天咱们聊聊网络协议那些事——从最基础的TCP/UDP,到高端货RDMA和InfiniBand,再到时间同步和网卡调优。这些知识点,我当年踩过的坑可不少。

4.1 TCP vs UDP:选谁?看场景

先说TCP。这玩意儿可靠,但慢。三次握手、拥塞控制、重传机制……每一个特性都在说“我保证数据到,但别催我”。

我在搭建第一个暗池原型时,天真地用了TCP做行情推送。结果呢?行情延迟直接飙到毫秒级。对于高频交易,毫秒就是天文数字。后来我换成了UDP,延迟降到微秒级。

UDP简单粗暴。发出去就不管了。丢包?自己处理。乱序?自己排序。说白了,UDP把控制权交给你,代价是你得自己擦屁股。

核心结论:

  • 订单指令(下单、撤单)用TCP——必须可靠,丢单就是丢钱
  • 行情数据(报价、深度)用UDP——可以丢包,但不能慢

你想想看,如果行情丢了一笔,最多错过一次交易机会。但如果订单丢了,那可能就是几十万的损失。所以,别一刀切,得看场景。

4.2 RDMA与InfiniBand:绕过内核的骚操作

传统网络通信,数据要从网卡到内核,再从内核到用户空间。这一来一回,几十微秒就没了。对于高频交易,这简直是灾难。

RDMA(Remote Direct Memory Access)就是来解决这个问题的。它允许数据直接从一台机器的内存搬到另一台机器的内存,完全绕过CPU和内核。延迟能降到1微秒以内。

InfiniBand是RDMA的一种实现。它不光是协议,连硬件都是专用的。InfiniBand网卡和交换机,延迟低、带宽高,但价格也感人。一套InfiniBand设备,够买好几台普通服务器了。

我个人习惯,在核心交易节点用InfiniBand。虽然贵,但值得。非核心节点,用RoCE(RDMA over Converged Ethernet)就够了。RoCE跑在普通以太网上,成本低,延迟也比传统TCP好很多。

避坑指南:我曾经在RoCE和InfiniBand之间犹豫不决,最后选了RoCE。结果发现交换机不支持PFC(优先级流控制),导致丢包严重。后来换了支持PFC的交换机,问题才解决。所以,选RoCE前,先确认你的网络设备支持PFC。

4.3 PTP时间同步:别让你的服务器“各说各话”

高频交易中,时间就是一切。如果两台服务器的时间差超过1微秒,那你的策略就可能做出错误决策。

NTP(网络时间协议)精度在毫秒级,对于高频交易远远不够。PTP(精确时间协议)能把精度做到亚微秒级,甚至纳秒级。

PTP的原理很简单:主时钟定期发时间同步报文,从时钟根据报文计算延迟,然后校准本地时间。但实际部署时,坑很多。

我的经验:

  • PTP最好用硬件时间戳——软件时间戳精度不够
  • 网络拓扑要对称——不对称会导致时间偏差
  • 交换机必须支持PTP透明时钟——否则精度大打折扣

我记得有一次,PTP同步后,两台服务器的时间差还是很大。排查了半天,发现是交换机不支持透明时钟。换了交换机后,问题解决。嗯,硬件支持很重要。

4.4 网卡调优:榨干最后一滴性能

网卡调优,说白了就是让数据更快地从网卡到应用。这里有两个关键点:中断合并和多队列。

4.4.1 中断合并

传统网卡,每来一个包就触发一次中断。CPU频繁响应中断,上下文切换开销巨大。中断合并就是让网卡攒一批包再触发中断,减少CPU负担。

但中断合并也有代价——延迟增加。你想想看,如果网卡等100个包才触发中断,那第一个包就得等很久。对于高频交易,这不可接受。

我个人习惯,在交易节点关闭中断合并。虽然CPU负载高一点,但延迟更低。在日志或监控节点,可以开启中断合并,减少CPU开销。

4.4.2 多队列

多队列(RSS,Receive Side Scaling)让网卡把数据包分发到多个CPU核心处理。每个核心处理一个队列,避免单核瓶颈。

配置多队列时,要注意哈希算法。默认的哈希可能把同一个流的数据包分到不同核心,导致乱序。我建议用对称哈希,保证同一个流的数据包始终到同一个核心。

网卡调优清单:

  • 关闭中断合并(交易节点)
  • 开启多队列,配置对称哈希
  • 调整环形缓冲区大小(ring buffer)
  • 启用硬件时间戳(PTP需要)
  • 关闭TCP卸载功能(如TSO、GSO)

这些调优,我每次搭建新系统都会做一遍。虽然繁琐,但效果立竿见影。延迟能降20%-30%。

4.5 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以看到,从底层硬件到上层协议,每个环节都在为低延迟服务。

暗池执行引擎网络协议知识体系 应用层 订单指令(TCP) | 行情数据(UDP) 传输层 TCP(可靠) | UDP(低延迟) 网络层 IP路由 | PTP时间同步(亚微秒级) 链路层 以太网 | InfiniBand | RoCE 物理层 网卡调优(中断合并/多队列) | 硬件时间戳

这张图从下往上,展示了网络协议栈的五个层次。每一层都有对应的优化点。物理层的网卡调优是基础,链路层的InfiniBand是进阶,传输层的TCP/UDP选择是关键,应用层的协议设计是最终体现。PTP时间同步贯穿其中,确保所有节点步调一致。

好了,网络协议这块就聊到这儿。记住一句话:没有银弹。每个优化点都有代价,你得根据业务场景做取舍。下一章,咱们聊聊内存管理——别让内存成为你的瓶颈。


公众号:蓝海数据掘金营,微信deep3321