我有一个关于 TCP 段重组的问题。我了解到数据包可以分为多个段(这与 MSS 有关)。
即)消息流(假设):
- 客户端发送一个从应用层传递过来的数据包
- 在客户端的 TCP 层,数据包分为 3 个段。
- 段传递到客户端的 IP 层。
- 服务器的 IP 层接收分段。
- 在服务器端的 TCP 层,它接收 3 个数据包并将其重组为一个数据包。
- 服务器的应用层接收到一个数据包。
我的理解是 TCP 层是重新组装分割段的地方。如果我错了,请纠正我。
这是我真正想澄清的事情。
使用Netty时,Server端的“messageReceived()”方法只被调用一次还是3次?如果 TCP 层是重新组装分割段的地方,“messageReceived()”方法只被调用一次,对吗?
那么,真的有必要使用“ReplayingDecoder”之类的东西来保证服务器正在接收的字节数吗?
非常感谢您的帮助。
附加问题:
如果服务器因为其中一个丢失或其他原因无法重新组装这些段,那么 TCP 层将不完整的数据包传递给应用层?