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

时间:2018-07-29 05:20:58

标签: udp

我想使用UDP进行进程间通信,我知道UDP数据报的最大大小为〜64K。但是对于回送来说是否正确?

1 个答案:

答案 0 :(得分:0)

TL; DR :如果不关心IP碎片,则为64k。如果可以,则为MTU。

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

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

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

好消息是您不必担心碎片问题-内核将负责碎片和重组,因此您的应用程序将看到一个大小为64k的数据报。

由于您正在询问回送接口,因此数据包丢弃不是问题,因此仅受UDP的size字段约束。

如果要避免IP分段,则需要查询接口的MTU,并确保数据报更小(再次包括IP和UDP开销)。

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

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

在Linux上,您可以使用SIOCGIFMTU / SIOCSIFMTU ioctl(man 7 netdevice)以编程方式获取/设置接口MTU。