假设我的程序通过网络(UDP)发送了1000字节。接收者是否确保能够一次性接收到这1000字节?或者他需要进行多次“读取”才能接收完整的消息?如果后者是真的,如何确保同一消息的数据包顺序不会被“混淆”(按顺序)?或者协议是否保证了顺序?
编辑:也就是说,我的消息是否可能被分成几个数据包?(如果尝试发送10000mb的消息,会发生什么?)
编辑:也就是说,我的消息是否可能被分成几个数据包?(如果尝试发送10000mb的消息,会发生什么?)
你要么全部接收,要么全部不接收。
但是不能保证你会按照传输的顺序精确地接收数据包;数据包丢失、重新排序和(较少发生的)重复都是有可能的。
有一个最大帧大小限制(为 65,507 字节),如果发送的数据包超过这个大小就会返回错误。
必须提供足够的缓冲区以便在一次调用中接收整个数据包。
UDP 数据包可以被分成多个 IP 片段,但操作系统将丢弃不完整的数据包。因此,这对应用程序来说是透明的。
长度 一个16位字段,指定整个数据报(标头和数据)的字节长度。最小长度为8个字节,因为这是标头的长度。该字段大小设置了UDP数据报的理论极限为65,535个字节(8字节标头+65527字节数据)。由底层IPv4协议强制实施的数据长度的实际限制为65,507字节。
但是实际限制要低得多,通常可以安全地假设为512字节。请参见互联网上最大的安全UDP数据包大小是多少。
使用UDP Lite,您可以请求接收部分损坏的数据包。这对于视频和VoIP服务非常有用。
使用UDP发送的数据被分组为数据包,因此如果您发送x个字节,则如果接收方接收到该数据包,则他将接收x个字节。
但是,您的数据包可能甚至不会到达,或者它们可能以错误的顺序到达。