通过环回接口的UDP最大数据包大小

  • 本文关键字:数据包 UDP 接口 udp
  • 更新时间 :
  • 英文 :


我想使用UDP进行处理器间通信,我知道UDP数据报的最大大小约为64K。但环回是否真的是这样?

TL;DR:64k,如果您不关心IP碎片。MTU,如果你这样做。

即使UDP最大数据包大小为64k,实际传输大小仍由接口的MTU控制。

任何大于MTU的数据包(包括IP和UDP开销(都将被分段为多个第二层数据包。

因此,虽然你总是可以发送64k UDP数据包,但你最终可能会收到多个IP数据包,这会增加延迟并增加数据包丢失的机会(如果丢失了一个片段-所有数据报都丢失了(。

好消息是,您自己不必担心碎片化——内核将负责碎片化和重组,这样您的应用程序将看到64k大小的单个数据报。

由于您询问的是环回接口,数据包丢弃不是问题,因此您只受UDP的大小字段的约束。

如果你想避免IP碎片,你需要查询接口的MTU,并确保你的数据报更小(同样包括IP和UDP开销(。

在我的Mac上,环回接口默认MTU为16384:

$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
...

在Linux上,您可以使用SIOCGIFMTU/SIOCSIFMTUioctl(man7netdevice(以编程方式获取/设置接口MTU。

最新更新