处理丢失的数据段

无论网络设计得如何完美,数据丢失都会时常发生;因此,TCP 提供了管理数据段丢失的方法。 其中一个方法就是重新传输未确认的数据。

使用 TCP 的目的主机服务通常只确认相邻序列的数据。 如果一个或多个数据段丢失,只确认第一个连续字节序列的数据。 例如,如果收到序列号为 1500 到 3000 和 3400 到 3500 的数据段,则 ACK 号为 3001。 这是因为没有收到 SEQ 号为 3001 到 3399 的数据段。

如果源主机上的 TCP 未在规定时间后收到确认,则返回收到的最后一个 ACK 号,并从该点向后重新传输数据。 请求注解 (RFC) 中未对重新传输过程进行说明,这属于 TCP 的特殊实施过程。

TCP 的标准实施流程是:主机传输数据段,并将数据段的副本列入重新发送队列,然后启动计时器。 当接收到数据确认信息时,主机将从队列中删除对应数据段; 如果到计时器超时还没有收到确认信息,将重新传输数据段。

单击图中的“播放”按钮,观看演示重新传输丢失数据段的动画。

现在,主机还拥有一项备选功能:选择性确认 (SACK)。 如果两台主机都支持 SACK 功能,目的主机便可以确认间断数据段中的数据,那么源主机就只需要重新传输丢失的数据。