关于UDP发包长度及分包问题限制问题(笔记)

关于UDP发包长度及分包问题限制问题(笔记)

  • UDP报文长度限制,在IPv4下是65507字节(65535-8字节UDP header-20字节 IPheader) 长度限制内的包都可以发
  • fragmentation发生在IP层,一个长UDP报文,会被分为若干个fragment,封成IP包发送接收端收到所有的fragment之后,会在IP层组装成一个完整的UDP datagram交给你的UDP recv函数
  • 只要有一个fragment丢了,整个UDP报文就丢了
  • 所以作为没有ACK的UDP协议,一般我们不希望出现分包发送的情形,以避免累积丢包率,导致实际报文的丢包率很高
  • 根据IEEE的要求,IPv4的网络,至少要保证MTU不低于576,于是扣除一些IP、UDP header的长度,548长度的UDP包可以认为是不会发生fragmentation的
  • 但是人们喜欢冗余,喜欢留余地,所以很多人实践中,把这个限制写成了512

参考文档

https://en.wikipedia.org/wiki/User_Datagram_Protocol

http://stackoverflow.com/a/20317315/1231127

http://stackoverflow.com/a/900725/1231127

http://stackoverflow.com/questions/1098897/what-is-the-largest-safe-udp-packet-size-on-the-internet

你可能感兴趣的:(网络)