第二章:网络基础回顾
做低延迟交易系统,网络基础是绕不开的坎。我见过不少团队,一上来就追最新的硬件、最牛的FPGA,结果连最基本的网络原理都没吃透。嗯,今天我们就来把这块地基夯实。
核心观点:低延迟交易的本质,就是跟物理定律赛跑。你越懂网络底层,就越知道在哪里能抠出那几微秒。
2.1 OSI七层模型:别把它当八股文
很多人觉得OSI模型就是面试用的。其实不然。我在做行情网关时,遇到过数据包莫名其妙丢了一半的情况。排查到最后,发现是会话层的一个状态机出了问题。你看,理论真的能救命。
OSI七层,从上到下分别是:
- 应用层 – 你写的交易程序就在这层
- 表示层 – 数据加密、压缩,比如FIX协议的编解码
- 会话层 – 建立、管理、终止会话。我踩过坑的地方
- 传输层 – TCP/UDP,交易系统最纠结的一层
- 网络层 – IP路由,决定你的数据走哪条路
- 数据链路层 – 以太网帧,MAC地址
- 物理层 – 网线、光纤、信号
实战建议:做低延迟系统,重点关注传输层往下。应用层以上的优化,收益远不如底层来得直接。
2.2 TCP/IP协议栈:现实世界的选择
OSI是理论,TCP/IP才是实战。为什么?因为互联网就是跑在TCP/IP上的。你想想看,你的交易数据从上海到纽约,中间经过几十台路由器,每台都在用IP协议做转发。
TCP/IP四层模型:
- 应用层 – HTTP、FIX、OUCH等交易协议
- 传输层 – TCP(可靠但慢)、UDP(快但不可靠)
- 网络层 – IP协议,负责寻址和路由
- 网络接口层 – 以太网、Wi-Fi等物理实现
这里有个关键点:TCP的拥塞控制。我曾经在回测系统里发现,明明网络带宽够用,但交易延迟突然飙升。查了半天,原来是TCP的慢启动算法在作祟。说白了,TCP为了保证可靠性,会主动降低发送速度。这在交易场景下是致命的。
避坑指南:我曾经因为没关Nagle算法,导致小订单延迟增加了200微秒。如果你做高频交易,记得设置TCP_NODELAY。
2.3 以太网帧结构:每一比特都值钱
以太网帧,就是数据在网线上真正的样子。我习惯把它拆成五部分来看:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 前导码 | 7 | 同步时钟用,接收端靠它对齐 |
| 帧起始定界符 | 1 | 表示帧正式开始 |
| 目标MAC + 源MAC | 12 | 谁发给谁 |
| 类型/长度 | 2 | 标识上层协议,比如0x0800是IP |
| 数据 + 填充 | 46-1500 | 真正的交易数据在这里 |
| 帧校验序列 | 4 | CRC校验,检测传输错误 |
为什么我要强调这个?因为最小帧长64字节这个限制,直接影响你的交易效率。如果你的订单数据只有20字节,以太网会自动填充到46字节。这多出来的26字节,就是浪费的带宽和延迟。
优化思路:有些交易所支持Jumbo Frame(巨型帧),MTU可以到9000字节。但要注意,不是所有网络设备都支持。我建议先做兼容性测试。
2.4 IP路由原理:数据包的奇幻漂流
IP路由,说白了就是数据包怎么从A点到B点。每个路由器都维护着一张路由表,里面写着:要去某个网段,下一跳该走哪个接口。
路由决策的核心步骤:
- 收到一个IP包,提取目标IP地址
- 查路由表,找最长前缀匹配
- 找到匹配项,从对应接口转发出去
- 没找到?丢弃,并返回ICMP不可达
这里有个容易被忽略的点:路由缓存。我记得有一次做延迟测试,发现同样的路径,第一次走要100微秒,第二次只要50微秒。为什么?因为第一次路由器在做路由查询,第二次直接命中缓存了。
实战技巧:在交易网络中,尽量用静态路由代替动态路由协议(如OSPF、BGP)。动态路由的收敛时间,足够让你的订单错过行情了。
2.5 本章知识体系总览
下面这张图,是我自己梳理的网络基础核心逻辑。你看一遍,应该能对整章有个全局把握。
这张图把四个核心知识点串在了一起。你从上往下看,OSI是理论框架,TCP/IP是实际实现,以太网帧是数据在网线上的真实形态,IP路由决定了数据怎么走。四者缺一不可。
总结一句话:网络基础不是背概念,而是理解每一层在做什么、为什么这么做、以及你能在哪里做优化。做低延迟交易,尤其如此。
公众号:蓝海资料掘金营,微信deep3321