Netty TCP消息-MTU大小下的请求是否有可能碎片化?

Netty TCP消息-MTU大小下的请求是否有可能碎片化?,netty,Netty,我读过几篇文章,是什么使TCP数据包变得支离破碎。 在我看来,这取决于MTU的大小——超过限制的请求会变得支离破碎 这是我关于内蒂的问题 假设MTU大小为1500,请求为1000字节。 那么,服务器的messageReceived()方法一次接收到的总是正好1000字节,或者它是否有可能被碎片化? 我想确保服务器收到的消息没有分段 如果你认为我对TCP或Netty理解不够,请告诉我需要学习什么 我发现我的问题与此非常相似。 我想再次检查的是,即使请求大小小于MTU限制,是否会发生碎片。如果是

我读过几篇文章,是什么使TCP数据包变得支离破碎。 在我看来,这取决于MTU的大小——超过限制的请求会变得支离破碎

这是我关于内蒂的问题

假设MTU大小为1500,请求为1000字节。 那么,服务器的
messageReceived()
方法一次接收到的总是正好1000字节,或者它是否有可能被碎片化? 我想确保服务器收到的消息没有分段

如果你认为我对TCP或Netty理解不够,请告诉我需要学习什么


我发现我的问题与此非常相似。

我想再次检查的是,即使请求大小小于MTU限制,是否会发生碎片。如果是,那么我需要重放解码器


非常感谢您的建议。

您可能想看看org.jboss.netty.handler.codec.replay.ReplayingDecoder。以下是联机文档的链接:

谢谢jdb。我来看看。我相信在我继续学习的过程中,我会有更多的问题……对于TCP来说,最大段大小比MTU更重要。MTU始终大于TCP可以放入单个TCP段的最大数据量。看见除非你完全控制你的应用程序将运行的网络基础设施,否则我只会处理碎片化的可能性。至少这样可以保证它能工作。如果您知道所有请求都保证有一定的大小,请使用FixedLengthFrameDecoder-@johnstlr您指出的正是我想知道的。我知道处理碎片的可能性是安全的。非常感谢@约翰斯特尔补充问题。如果IP层标志下的“Don't Fragment”设置为1,那么就没有必要应用这个“安全网”了?我理解正确吗?我从未尝试过,我认为您也无法从Java内部设置它。我相信你是对的,你的信息不会被分割,但是如果网络不能传输它们,它们会被丢弃。这里还有另一个问题,那就是Netty用于从套接字读取数据的缓冲区的大小。如果太小,Netty将多次调用messageReceived返回数据。您可以在bootstrap上设置ReceiveBufferSizePredictorFactory以确保-请参阅此处的答案@johnstlr非常感谢!