UDP本身就是不可靠连接,因此丢IP包在所难免.而只要一个IP包丢失,整个UDP报文就是无效的,也就不会被上交到应用程序.因此我想你的问题似乎是走偏了.
不考虑网络数据丢失本身.UDP报文包头中的数据长度是16位的,因此包括包头最大只能是65536字节,也就是64K.而大于1.5k(约,802.3),那么这个UDP报文肯定被分成多个IP包,如果被允许的话.而定义一个IP包在整个报文中的位置好像使用了一个8比特的字节数据,如果我没记错的话,这就意味着最多只能拆分成256(?)个左右的IP包,按照802.3的1.5k一个IP包来计算,大于64K,因此一个UDP报文从协议角度上讲,最多可以传输约64K的数据.
但是这似乎没有什么意义.因为首先UDP是不可靠传输,可能会丢失一些IP包,从而导致整个UDP包传输失败,在网络较差的时候,如此大的报文很可能导致网络问题(假设每隔42个IP包丢失一个,而你使用了64K的报文,被拆分成42个左右的IP包传输,这就意味着没有任何成功传输的数据.).其次,一个应用程序可以发送的数据是无限制的,对于应用程序而言,对于大数据的应用程序,通常会在数据内部实现通信传输,完整UDP报文的概念对于程序上层逻辑并不是不可或缺的,报文的概念仅仅存在于直接进行网络通信的地方,而通过简单的封装,程序上层逻辑完全可以不接触这些(上层应用程序可以看作提交的是逻辑报文而不是网络UDP报文).
综合上述,我想[ 而是:不管会不会拆包 ]这个恰恰是你思维走偏的地方,你的问题本身就不完善.而且这个问题本身可能就欠缺实际意义.因为在不同的网络情况下,答案很可能是不同的.比如在某一级路由器上有可能不允许UDP报文分拆.如果你真的需要答案,那么动态监测应该是比较合适的.因为最大不超过64K,最小也要是512字节.通过二分法,若干个报文,百余K的流量,即可检测出大致结果.在出现通信问题的时候,即时检测.SO IT IS ENDING!