TCP通过序列号、确认应答、超时重传、数据校验、流量控制、拥塞控制等机制,确保了数据传输的可靠性和效率。
序列号:每个TCP段都有一个序列号,代表了数据流中的字节位置。
通过序列号,接收方可以检测数据包是否丢失或重复,并请求重传丢失的数据包。
接收方在发送确认(ACK)时,会使用序列号来指示期望接收的下一个TCP段的序列号
假设发送的第一个数据包包含了100字节的数据,那么这个数据包的序列号将会是0,并且确认号(ACK number)将会是100,表示接收方期望接收的下一个字节是第101个字节。
接收方根据序列号对收到的数据包进行排序和重组,以恢复原始的数据流。
确保数据包的顺序正确。
超时重传:发送方设置一个定时器,超时时间通常基于网络的往返时间(RTT,Round-Trip Time)估计值。这个估计值会根据每个ACK确认包的到达时间进行调整。一旦超时发生,发送方会重新发送未被确认的数据包。这通常包括丢失的数据包,以及在该数据包之前发送的任何未确认的数据包
数据校验:TCP使用校验和来检测数据在传输过程中是否出现错误,校验和通常使用一种称为CRC(循环冗余校验)的算法来生成。计算出的校验和会附加到TCP数据包的头部,通常在TCP头部的末尾。接收方收到TCP数据包后,会提取数据部分,并使用相同的算法重新计算校验和
如果检测到错误,接收方会丢弃该数据包,并等待重传。
流量控制:TCP通过滑动窗口机制进行流量控制,确保接收方能够处理发送方的数据量。
- 发送方维护一个窗口,表示可以发送但尚未被确认的数据量。
- 接收方同样维护一个窗口,表示可以接收的数据量。接收方给发送方的TCP段中包含接收窗口的大小信息。
- 发送方的窗口的大小可以根据网络条件和接收方的处理能力动态调整,从而影响一次可以发送的数据量。
拥塞控制:TCP通过算法如慢启动、拥塞避免、快重传和快恢复等,来控制数据的发送速率,防止网络拥塞。