个人理解,理性参考:
以前思考过tcp粘包和半包的问题,当时总觉得tcp不会有类似的包的问题,后来才理解,需要在应用层做一些协议的处理来规避一些问题。
==》因为底层协议,MTU限制等关系,tcp会做拼包(多个包组一个包),拆包(一个包拆多个包的处理),
==》而我们都知道,tcp是可靠的流式传输,他可以有序的,可靠得接收到发送的数据。
==》而tcp又有fd(五元组)之说,每个连接对应一个特定得fd,每个fd又对应一个特定得发送缓冲区和接收缓冲区。
==》一个连接有序,可靠接收到得数据,只是按照原来发送顺序,依次放在了这个缓冲区中而已。
==》那么,如何保证数据得完整性,是不是可以理解为我们对这个缓冲区中相关接收到数据得处理逻辑?
==》进而,是不是应该在应用层定义一些适当得协议,以及合理得取数据逻辑,来处理粘包,半包问题,以保证数据得完整性?
TCP协议已经在底层保证了数据的可靠性,有失败重发的机制
TCP的数据包是有序的,可以在接收端保证数据的顺序
那么实际上,只要中途不断开连接,TCP自然能够保证数据完整的到达。
问题就是你怎么判断数据到底有多大,收到那个包之后是一个完整的包,那需要顶层的协议来控制
比如包头部一开始就声明整个包的大小(字节数),或者每个包以特定的字节开头和结尾。