TCP(Transmission Control Protocol,传输控制协议)是一种传输层协议。
TCP提供了以下主要功能:
- 可靠性:TCP使用确认、重传和校验等机制来确保数据的可靠传输。它能够检测丢失、重复、损坏或乱序的数据,并采取相应的措施来保证数据的完整和正确性。
- 有序性:TCP保证数据按照发送的顺序到达接收端,这对于许多应用程序来说非常重要。
- 流量控制:TCP使用滑动窗口机制来进行流量控制,确保发送方不会淹没接收方,从而实现了对网络资源的合理利用。
- 拥塞控制:TCP通过监测网络的拥塞状态并相应地调整发送速率,避免过载和网络拥塞的发生。
TCP 为什么会有粘包和拆包的问题。
这是因为 TCP 协议将数据分割成以报文段为单位进行传输,而不保证每个报文段和应用层的消息一一对应。
粘包问题:
- 发送端粘包:当发送端连续发送多个小的数据包时,TCP 协议可能会将它们合并成一个较大的数据包发送。这样接收端可能无法准确识别每个应用层消息的边界。
- 接收端粘包:当接收端连续接收到多个数据包,并且处理速度慢于发送速度时,TCP 协议可能将它们合并成一个较大的数据包交付给接收端。这样接收端需要处理缓冲区的逻辑,以正确解析应用层消息的边界。
拆包问题:
- 发送端拆包:当发送端连续发送多个较大的数据包时,TCP 协议可能会将它们拆分成多个较小的数据包进行传输。这样接收端可能需要进行缓冲区的处理,以组合这些数据包并重新构建完整的应用层消息。
- 接收端拆包:当接收端接收到一个较大的数据包,而应用层期望的消息边界不在该数据包内时,TCP 协议会将其拆分成多个较小的数据包交付给接收端。这样接收端需要掌握应用层消息的边界判定逻辑,以正确处理拆分后的数据包,并还原出完整的应用层消息。