无论网络设计得如何完美,都可能发生数据丢失现象。因此,TCP 提供了管理数据段丢失的方法,其中一个方法就是重新发送未确认的数据。

 
使用 TCP 的目的主机服务通常只确认相邻序列的数据。如果一个或多个数据段丢失,只确认已完成数据流中的数据段。
 
例如,如果接收到序列号为 1500 到 3000 以及 3400 到 3500 的数据段,那么确认号应为 3001。这是因为未收到序列号为 3001 到 3399 之间的数据段。
 
如果源主机上的 TCP 未在规定时间内收到确认消息,它将根据收到的最后一个确认号重新发送数据。
 
RFC 中未对重新发送过程进行说明,这属于 TCP 的特殊实施过程。
 
TCP 的标准实施流程是:主机传输数据段,并将数据段的副本列入重新发送队列,然后启动计时器。当接收到数据确认信息时,主机将从队列中删除对应数据段;如果到计时器超时还没有收到确认信息,将重新传输数据段。
 
现在,主机还拥有一项备选功能: 选择性确认. 如果两台主机都支持选择性确认功能,目的主机便可以确认间断数据段中的数据,那么源主机就只需要重新传输丢失的数据。