我已经阅读了很多关于UDP数据包大小的文章,但是无法得出结论.
许多服务将最大的UDP数据包限制为512字节(如dns)
给定互联网上的最小MTU为576,IPv4标头的大小为20字节,UDP标头为8字节.这留下了548个可用于用户数据的字节
我是否能够使用大小为548的数据包而不会出现数据包碎片?或者是DNS的创建者知道什么,以及为什么他们将其限制为512字节.
我能安全地高于548字节吗?
我对C中的套接字库有几个问题.这是我在问题中引用的一段代码.
char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
Run Code Online (Sandbox Code Playgroud)
recv()收到的数据包大于我的缓冲区会怎么样? strcat用于连接recv()缓冲区的最新响应?我知道这里有很多问题,但我非常感谢任何回复.
通过UDP发送大量数据包会占用更多资源(cpu,zlib压缩等).我在这里读到,通过UDP发送一个大约65kBYTE的数据包可能会失败所以我认为发送大量较小的数据包会更频繁地成功,但随后会产生使用更多处理能力的计算开销(或者至少就是我的我假设).问题基本上是这样的; 发送最大成功数据包并将计算量降至最低的最佳方案是什么?是否有特定尺寸可以在大多数时间使用?我使用Erlang作为服务器,使用Enet作为客户端(用c ++编写).也使用Zlib压缩,我向每个客户端发送相同的数据包(广播是我猜的术语).