http://chinaunix.net/uid-24683784-id-5384077.html

PS:下面通过wireshark抓包工具看看SACK的选项中的block。
Linux内核中TCP SACK处理流程分析-LMLPHP

   PACK#26

Linux内核中TCP SACK处理流程分析-LMLPHP
PACK#27

Linux内核中TCP SACK处理流程分析-LMLPHP
PACK#28


Linux内核中TCP SACK处理流程分析-LMLPHP
    PACK#29
Linux内核中TCP SACK处理流程分析-LMLPHP
                                                                            PACK#30
Linux内核中TCP SACK处理流程分析-LMLPHP
PACK#31
    通过上面的几张图可以看出,PACK#26、 PACK#27、 PACK#28、 PACK#29、表示为正常的数据段, PACK#31表示是一个DUP-ACK,在该选项信息中包含有可能丢失的段,PACK#30表明传输的数据端和客户端需要的数据段不一致,通过下面的图可以确定:left_edge 和right_edge分别表示的含义。

Linux内核中TCP SACK处理流程分析-LMLPHP

----------------------------------------------------------
Note:以下读者猜想记录(尚未找到根据)=-=
1、窗口控制
2、超时重传
3、快速重传
Linux内核中TCP SACK处理流程分析-LMLPHP

快速重传(《TCP IP详解卷1:协议 原书第2版》14.5.1中有一个例子)
Linux内核中TCP SACK处理流程分析-LMLPHP
图14-8 0.890s、 0.926s以及0.964s时刻到达的三次重复ACK触发了0.993s时刻的快速重传。0.853s时刻的ACK并不算作重复ACK,因为它包含了一个窗口更新

窗口大小就是指無需等待確認應答,而可以繼續發送數據的最大值
(窗口内的数据无需ack,在数据传输期间窗口大小动态变化)
Linux内核中TCP SACK处理流程分析-LMLPHP
11-06 04:53
查看更多