介绍
接收进程记录它没有收到的最早的帧的序列号,并发送ACK时使用这个序列号。如果一个发送的帧没有到达接收方,发送方继续发送后面的帧,直到它填满发送窗口。接收方持续用接收的帧填充它的接收窗口,并且每次回复一个带有序列号的ACK帧。一旦发送窗口所有帧都发送了,发送方重新发送的帧号与ACK对应的帧,然后继续。发送和接收窗户的大小必须是相同的,而且最大取值最大序列号的一半(序列号是假设编号从0到 n -1),为了当所有数据包都丢失时避免出错。假设所有的ACK都丢失了,如果接收窗口大于最大序列号的一半,一些甚至可能是所有的超时重传的帧,都是不能被识别的重复发送。
在每个发送的帧得到确认后,发送方移动发送窗口。
接收窗口的尺寸不能超过序号范围的1/2,否则可能造成帧的重叠。另外,发送窗口的尺寸一般和接收窗口的尺寸相同,发送端为每一个发送缓存设置一个定时计数器,定时器一旦超时,相应输出缓存区中的帧就被重发。
选择重传ARQ重排序
自动重传请求ARQ(Automat ic Repeat Requst)是发送端对传输出错或丢失的数据帧进行自动重传, 直到数据成功到达的一种链路层差错控制方法,包括停止等待、退N 步重传、选择重传SR-ARQ 三种类型。其中选择重传SR-ARQ 只对出错的数据帧或定时器超时的数据帧进行重传, 对时延不敏感,信道利用率高, 因此被广泛应用于长时延无线数据传输中, 如卫星数据通信。
但当SR-ARQ 在接收端完成接收数据帧的重排序过程时会引起较大的重排序延迟和突发数据输出, 引起缓冲区溢出、链路丢包, 影响TCP 传输性能。
重排序方案带来的问题
SR-ARQ 重排序的过程是当发现某帧出错后,把其后续传来的正确的帧暂存在一个缓冲区里, 同时要求发送端重发出错的帧;收到重传来的正确的帧后, 把原已保留在缓冲区中的其余帧一并按正确的顺序递交给高层。
该过程带来的问题主要有以下几点:

(1)延迟:重排序必须要保留数据帧的完整顺序, 当错帧出现后, 其后跟随的所有正确接收的帧要保留到该错帧
重传以及被正确接收到为止,这将带来较大的延迟。图1 中a 、b 两个汇聚流一起经过S R-ARQ 传输, a流的帧a1 、帧a2 由于传输差错丢失, 必须重传;b 流的帧b1 、帧b2 要一直保留到丢失的帧a2 重传以及被正确接收到为止。这种排头效应(Head of theLine)阻止了b 流的传输, 造成b 流的延迟。
(2)数据突发:在重排序中, 当错帧被重传和正确接收时,所有等待它的帧一起释放, 同时向高层转发, 这种突发数据可能会降低QoS , 或者由于转发节点的缓冲区溢出而产生丢包。图1 中, 当重传的帧a1 被接收端正确接收时, 在接收端等待重排序的3 个帧, 连同a1 帧一起释放, 并同时向高层转发。
(3)由于重排序带来的延迟和数据突发, 不可避免会产生抖动现象而不利于实时的多媒体业务传输。
(4)缓冲器负担:当链路状态不好, 时延较大、有很多接收者且距离源端很远时, 发送端收不到ACK , 排序数据要一直占据着发送缓冲器, 发送端负担将会过重。
重排序解决方案
非重排序方案
SR-ARQ 抑制重排序功能, 在接收端不需重排序缓冲器, 将失序的数据包直接转发给上层TCP 端到端协议去处理。该方案能提高缓冲器资源使用效率, 不会产生S R-A RQ 的突发数据, 减小了SRARQ的数据抖动。但当TCP 接收到失序的数据包时, 会产生重复确认过程, 尤其在信道误码率较高时会加重TCP 的重复确认过程, 影响了TCP 的性能。
带有删除重复确认ACK 的非重排序方案
这是对上一方案的改进, 由SR-ARQ 把重复确认ACK 删除, 如图2 所示。

该方案克服了非重排序方案中TCP 的重复确认过程, 改善了TCP 的吞吐量性能;同时在SRARQ的接收端没有其接收缓存过程和突发数据产生, 不涉及重排序延迟问题。但它破坏了TCP 端到端的语义, 随着比特误码率的增加, 吞吐量变小, 发生频繁超时。图2 中, 数据段2 从发送端发出后, 由于链路状态不好, 传送时出错而被重传;有可能再出错, 再重传, 使发送端有相当一段时间处于收不到对方确认的状态, 导致其重传定时器超时。超时又使TCP 快速重传, 降低了TCP 的传输性能。