-
若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据;
通过选择确认
,
可以只传送缺少的数据而不重传已经正确到达接受方的数据。 -
若需要使用
选择确认SACK
,在建立TCP连接时
由双方进行协商。
在首部的可变选项
中加上“允许SACK”的选项。
以后在TCP报文段的首部中都会有这个SACK选项,以便报告收到的不连续的字节块的边界
。
由于首部选项的长度最多只有40字节,而指明一个边界
需要4字节(因为序号有32位,需要4字节),因此在选项中最多只能指明4个字节块的边界信息(8个边界);还要预留两个字节(一个用来指明SACK选项,一个用来指明这个选项要占用多少字节) -
若接收方收到了与前面的字节流
不连续的两个字节块
,而且这两个字节块都在接收窗口之内:
那么接收方就先收下这些数据;
并把相关边界信息
准确的告诉发送方,通知发送方不要再重复发送这些已收到的数据。 -
如下图,一个字节块需要两个边界。(L1,R1 ),(L2,R2)
-
选择确认SACK功能一般很少用。
大部分还是重传所有未被确认的数据块。