当底层通信系统只能提供不可靠的分组交付功能时,运输层的协议软件如何提供可靠的传输呢?TCP协议采用了带重传的肯定确认技术作为提供可靠性的基础。
接收方在正确接收到报文后,向源站回送确认ACK(acknowledge)报文。发送方缓存已发送分组信息,并为发送的分组启动一个定时器。如果定时器超时,还没有收到该分组的确认信息,就重发此分组。
带重传的肯定确认机制带来的一个问题是接收方可能收到重复的分组。例如,发送方的某个分组由于网络的时延很长,让发送方误认为分组丢失而定时器超时后重传。这时,接收方就会收到两份相同的数据。TCP引入一个序号来识别相同的分组,而且确认信息也引入序号,使确认信息针对特定的分组,避免对确认信息的误解。
以下动画可以演示分组发送和确认以及分组丢失与超时重传的过程。
对flash图演示的交互过程进行阐述:TCP的确认是对接收到的数据的最高序号(即收到的数据流中的最后一个序号)表示确认。但接受端返回的确认号是已经收到的数据的最高序号加1.也就是说,确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。