1

消息的碎片化是在 IP 上完成的,为什么我必须在应用层处理它。例如 mina 或 netty?

消息的碎片化将是正确的顺序,对吗?

所以任何解码器都不需要处理任何顺序问题,对吗?

4

2 回答 2

2

IP 数据包的重组完全在 IP 层完成(在 UDP 或 TCP 看到数据包之前),因此您不必在应用层处理“碎片整理”。

当然,这仅适用于 UDP,因为它是基于数据包的,而 TCP 是,因此从用户的角度来看,它没有严格的数据包概念。

TCP 可以自由地以它认为合适的任何分组传输传出字节,而接收方可以自由地将接收到的字节以它认为合适的任何分组传递给应用程序。这为 TCP 实现提供了很大的灵活性,因为它可以对传出send()的呼叫进行分组以进行更有效的传输,或者如果它们对于路径上的某个点来说太大,则将它们分解。

接收数据时,您必须将 TCP 视为只是一个字节流(如来自串行端口);您可以随时获得任意数量的字节。保证顺序,但不保证分组。

在实践中,分组通常数据的发送方式相匹配,这使得应用程序大部分时间都在工作,但并非一直在工作。

于 2012-10-21T23:02:06.530 回答
0

关于订单部分,您是对的。消息的第 2 部分将不早于第 1 部分可见,即使它在物理上确实更早到达。但是很有可能消息的第 2 部分比消息的第 1 部分更晚才可见。而且由于 TCP 不知道消息边界(它适用于字节),因此您只会收到半条消息。

于 2012-10-21T13:08:35.967 回答