消息的碎片是在IP上完成的,为什么我必须在应用层处理它。比如mina或netty?
消息的碎片将是正确的顺序,是吗?
所以任何解码器都不需要处理任何订单问题,是吗?
答案 0 :(得分:2)
IP数据包的重组完全在IP层完成(在UDP或TCP看到数据包之前),因此您不必在应用层处理“碎片整理”。
当然,这仅适用于UDP,因为它是基于数据包而TCP是流,因此从数据包的角度来看没有严格的数据包概念。用户。
TCP可以自由地在其认为合适的任何分组中传输传出字节,并且接收方可以自由地将接收到的字节传递给它认为合适的任何分组中的应用程序。这为TCP实现提供了很大的灵活性,因为它可以对传出的send()
调用进行分组以实现更高效的传输,或者如果它们对于路径上的某些点太大而将其分解。
在接收数据时,必须将TCP视为一个字节流(如来自串口);你可以随时获得任意数量的字节。订单有保证,但不是分组。
在实践中,分组通常 匹配数据的发送方式,这使得应用程序在大部分时间内都能正常工作,但并非始终如此。
答案 1 :(得分:0)
你对订单部分是正确的。消息的第2部分将在第1部分之前显示,即使它实际上早于到达。但是,消息的第2部分很可能在之后可见而不是消息的第1部分。由于TCP不了解消息边界(它适用于字节),因此您只需获得半个消息。