跳转至

UDP multicast

是什么 / 解决什么问题

UDP multicast 常用于行情分发:一份数据由网络复制给多个订阅者,发送端不需要为每个接收者维护连接。

基本模型

publisher -> multicast group -> subscribers

接收端加入组播组:

struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("239.1.1.1");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

行情系统关注点

  1. UDP 不保证可靠、有序、唯一。
  2. feed 通常带 sequence number。
  3. 接收端要做 gap detection。
  4. 丢包后通过 snapshot 或 replay channel 恢复。
  5. socket buffer 太小会在突发行情时丢包。

观测与调试

netstat -su
ss -u -a -n
ip maddr show
tcpdump -ni <iface> multicast

面试高频问题

UDP 丢包怎么处理

不能只说“调大 buffer”。交易系统通常在协议层使用 sequence number 检测 gap,再从 snapshot/replay 服务恢复状态。调 buffer 和 CPU 亲和性是减少丢包,不是语义修复。