在《【技术】TCP 的那些事 | SACK 》讲解了SACK,在SACK中描述的数据段是接收端收到的数据,发送端根据接收端返回的SACK信息就可以知道哪些数据丢了,进而进行重传。RFC2883对SACK进行了扩展,称为D-SACK:使得扩展后的SACK具有通知发送端哪些数据被重复接收了。
引入D-SACK的目的是使TCP进行更好的流控,具体来说有以下几个好处:
1. 让发送方知道,是发送的包丢了,还是返回的ACK包丢了;
2. 网络上是否出现了包失序;
3. 数据包是否被网络上的路由器复制并转发了
4. 是不是自己的timeout太小了,导致重传
通过D-SACK这种方法,发送方可以更仔细判断出当前网络的传输情况,可以发现数据段被网络复制、错误重传、ACK丢失引起的重传、重传超时等异常的网络状。
D-SACK使用了SACK的第一个段来做标志,如何判断D-SACK:
1. 如果SACK的第一个段的范围被ACK所覆盖,那么就是D-SACK
2. 如果SACK的第一个段的范围被SACK的第二个段覆盖,那么就是D-SACK
D-SACK的规则如下&#x