有时候在做二进制协议的粘包处理过程中,总是会想到一个问题,就是,如果收到的数据是有混乱的,有正常的包,该怎么办,如何解决等等问题。下面的描述基本就是为了解决这个疑问来进行的答疑,也让未来再写粘包处理时,更加有的放矢!
在《tcp/IP协议详解》卷一中明确表示:TCP提供一种面向连接的、可靠的字节流服务。也就是说,我们默认tcp接收端收到的所有包应该都是正常的协议包,tcp保证只要你发的,我就能收到(可靠性)。但无法保证你发的是正常包,还是组包错误,导致包出现异常,即包的内容由发送方来保证协议的完整性。而tcp的接收端,可默认按协议包进行粘包处理。对于发过来的乱了的包, 在确保了粘包处理算法没问题的前提下,说明发送方发送数据有问题,就需要发送方去解决发送数据的问题,或者我们接收方对于有问题的包,进行抛弃即可。
所以,我们在做基于tcp的应用层协议时,不需要考虑接收到的数据重复、乱序等等问题,当然,如果是可靠性要求比较高的行业(比如银行),则需要对客户端的错误进行包容处理,就需要考虑这方面的要求。
另外,关于TCP的可靠性保证,可参考:https://blog.youkuaiyun.com/xuzhangze/article/details/80490362