UDP最大段大小

环境:我正在编写一个UDP客户端 – 服务器应用程序。 客户端和服务器之间的pathMTU是1500字节(只有它们之间的无线链路,所以这个值非常稳定)。 我的系统集默认不分片,在客户端和服务器上,SO_SENDBUF是16384,SO_RECVBUF = 87380。

问题:客户端使用sendto向服务器发送8192个字节。我使用Wireshark来查看这些8192字节将如何发送多个数据,并发现每个数据包只能保存1023字节的UDP数据。 但给定pathMTU = 1500,我不应该能够发送每个数据包中1500-20(IP标头)-8(UDP标头)= 1472字节的数据? 当我用TCP做同样的事情时,结果就是我所期望的。 每个TCP数据包最多可以容纳1448字节,即1500-20(IP头)-32(带有时间戳选项的TCP头)。我的问题是:为什么dosn't UDP在每个数据包中放置了1472个字节,而不是1023个字节? 这只是次要的实现细节吗? 还是我忽略了一些系统限制?

备注:即使在同一台机器上进行实验(在回送接口上使用127.0.0.1),也可以观察到相同的结果。

您只是扣除层L4(UDP)和L3(IP)的开销。 我猜测以前帧,MAC地址,types字段和校验和的以太网帧(L2)开销将占其余?

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol4/mhl/ether01.gif